haproxy高可用之非抢占keepalived
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了haproxy高可用之非抢占keepalived相关的知识,希望对你有一定的参考价值。
HAProxy简介
HAProxy是免费、极速且可靠的用于为TCP和基于HTTP应用程序提供高可用、负载均衡和代理服务的解决方案,尤其适用于高负载且需要持久连接或7层处理机制的web站点。HAProxy还可以将后端的服务器与网络隔离,起到保护后端服务器的作用。HAProxy的负载均衡能力虽不如LVS,但也是相当不错,而且由于其工作在7层,可以对http请求报文做深入分析,按照自己的需要将报文转发至后端不同的服务器(例如动静分离),这一点工作在4层的LVS无法完成。
1、安装
# Haproxy版本为1.7.5 wget http://www.haproxy.org/download/1.7/src/haproxy-1.7.5.tar.gz tar -zxvf haproxy-1.7.5.tar.gz mv haproxy-1.7.5 haproxy
# 编译安装
# ”TARGET”指定编译对应的os对应的内核版本,通过”uname -r”查询内核版本呢,README文件可查询对应关系
uname -r 2.6.32-504.el6.x86_64 cd haproxy make TARGET=linux2632 PREFIX=/usr/local/haproxy make install PREFIX=/usr/local/haproxy ls /usr/local/haproxy/ doc sbin share
2、编辑配置文件haproxy.cfg
# 存放haproxy配置文件 mkdir -p /usr/local/haproxy/conf cat >> /usr/local/haproxy/conf/haproxy.cfg <<EOF #--------------------------------------------------------------------- # Global settings 全局设置 #--------------------------------------------------------------------- global # 定义全局日志,配置在本地,通过local0输出,默认是info级别,可配置两条 log 127.0.0.1 local0 info # 运行路径 chroot /usr/local/haproxy # PID文件存放路径 pidfile /usr/local/haproxy/log/haproxy.pid # 设置每haproxy进程的最大并发连接数,其等同于命令行选项“-n” # “ulimit -n”自动计算的结果参照此参数设定. maxconn 51200 # 后台运行haproxy daemon # 定义统计信息保存位置 stats socket /usr/local/haproxy/stats #--------------------------------------------------------------------- # Defaults settings 默认设置 #--------------------------------------------------------------------- defaults # 默认的模式【tcp:4层;http:7层;health:只返回OK】 mode http # 继承全局的日志定义输出 log global # 日志类别 option httplog # 如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip option forwardfor # 开启http协议中服务器端关闭功能,每个请求完毕后主动关闭http通道,使得支持长连接,使得会话可以被重用,使得每一个日志记录都会被记录. option httpclose # 如果产生了一个空连接,那这个空连接的日志将不会记录. option dontlognull # 当与后端服务器的会话失败(服务器故障或其他原因)时,把会话重新分发到其他健康的服务器上;当故障服务器恢复时,会话又被定向到已恢复的服务器上; option redispatch # 还可以用”retries”关键字来设定在判定会话失败时的尝试连接的次数 retries 3 # 当haproxy负载很高时,自动结束掉当前队列处理比较久的链接. option abortonclose # 默认http请求超时时间 timeout http-request 10s # 默认队列超时时间,后端服务器在高负载时,会将haproxy发来的请求放进一个队列中. timeout queue 1m # haproxy与后端服务器连接超时时间. timeout connect 10s # 客户端与haproxy连接后,数据传输完毕,不再有数据传输,即非活动连接的超时时间. timeout client 10m # haproxy与后端服务器非活动连接的超时时间. timeout server 10m # 默认新的http请求连接建立的超时时间,时间较短时可以尽快释放出资源,节约资源. timeout http-keep-alive 10s # 心跳检测超时时间 timeout check 10s #最大并发连接数 maxconn 3000 #--------------------------------------------------------------------- # listen haproxy UI 监控页面配置 #--------------------------------------------------------------------- listen admin_status # 配置监控运行模式 mode http # 配置统计页面访问端口 bind 0.0.0.0:1080 # 统计页面默认最大连接数 maxconn 10 # http日志格式 option httplog # 开启统计 stats enable # 监控页面自动刷新时间 stats refresh 30s # 统计页面访问url,即访问http://ip:1080/stats stats uri /stats #监控页面的用户和密码:admin,可设置多个用户名 stats auth admin:admin # 手工启动/禁用后端服务器,可通过web管理节点 stats admin if TRUE # 设置haproxy错误页面 errorfile 400 /usr/local/haproxy/errorfiles/400.http errorfile 403 /usr/local/haproxy/errorfiles/403.http errorfile 408 /usr/local/haproxy/errorfiles/408.http errorfile 500 /usr/local/haproxy/errorfiles/500.http errorfile 502 /usr/local/haproxy/errorfiles/502.http errorfile 503 /usr/local/haproxy/errorfiles/503.http errorfile 504 /usr/local/haproxy/errorfiles/504.http #--------------------------------------------------------------------- # main frontend which proxys to the backends frontend配置 #--------------------------------------------------------------------- frontend kube-apiserver # 定义前端监听端口,建议采用bind *:80的形式,否则做集群高可用的时候有问题,vip切换到其余机器就不能访问. bind *:80 mode http #如果以上规则都不匹配时,将请求转交到app组处理. default_backend app #--------------------------------------------------------------------- # round robin balancing between the various backends backend配置 #--------------------------------------------------------------------- backend app # 根据http头进行转发,无该头部则转为使用roundrobin. balance roundrobin option forwardfor except 127.0.0.0/8 # 后端服务器定义, maxconn 1024表示该服务器的最大连接数, cookie 1表示serverid为1,weight代表权重(默认1,最大为265,0则表示不参与负载均衡), #check inter 1500是检测心跳频率, rise 2是2次正确认为服务器可用, fall 3是3次失败认为服务器不可用. server app1 192.168.15.160:8080 maxconn 1024 cookie 1 weight 3 check inter 1500 rise 2 fall 5 server app2 192.168.14.107:8080 maxconn 1024 cookie 1 weight 3 check inter 1500 rise 2 fall 5 server app3 192.168.15.170:8080 maxconn 1024 cookie 1 weight 3 check inter 1500 rise 2 fall 5
3、拷贝所需文件
# errorfile错误文件 cp -R haproxy/examples/errorfiles/ /usr/local/haproxy/ # haproxy日志文件 mkdir -p /usr/local/haproxy/log touch /usr/local/haproxy/log/haproxy.log ln -s /usr/local/haproxy/log/haproxy.log /var/log/ # etc中的haproxy文件 mkdir -p /etc/haproxy ln -s /usr/local/haproxy/conf/haproxy.cfg /etc/haproxy/ # 配置开机自动启动 cp haproxy/examples/haproxy.init /etc/rc.d/init.d/haproxy chmod +x /etc/rc.d/init.d/haproxy chkconfig --add haproxy chkconfig haproxy on # 设置全局启动文件 ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/
4、配置rsyslog
haproxy默认没有日志,依靠rsyslog收集日志
# 注意loacl0需要与haproxy.cfg文件中对应 echo -e ‘$ModLoad imudp \n $UDPServerRun 514 \n local0.* /var/log/haproxy.log‘ >> /etc/rsyslog.conf # 重启rsyslog服务 service rsyslog restart
本文出自 “linux_cheng” 博客,请务必保留此出处http://6764097.blog.51cto.com/6754097/1954169
以上是关于haproxy高可用之非抢占keepalived的主要内容,如果未能解决你的问题,请参考以下文章
keepalived + haproxy + mysql 构建高可用数据库