项目环境:
系统:centos6.6-x86内核:2.6
HAproxy版本:haproxy-1.5.2-2.el6.x86_64
keepalive版本:keepalive-1.2.13-4.el6.x86_64
拓扑结构:
前端HAproxy用于调度客户请求,keepalived用于避免单节点故障。有两个站点的业务需求,www.test.com和www.dragon.com。在后端部署了四台服务器,将两个站点的静态和动态分开,并将www.dragon.com的DNS解析为虚拟IP:22.22.22.251。www.test.com的DNS解析为虚拟IP22.22.22.252,使用keepalived互为备份。作为HA的主机,我用两个网卡,一个用来接收请求,一个用来连接内网。
配置Haproxy:
global log 127.0.0.1 local0 notice //local0是日志设备,info是日志记录级别(err,warning,info,debug),可以在系统日志里查看 maxconn 5535 //HAproxy接受的最大连接数,还要注意linux文件接受的最大连接数,用命令"ulimit -n"看以查看,在/etc/security/limit.conf可以永久修改。 chroot /usr/local/haproxy // user nobody //进程用户 group nobody //进程组 nbproc 1 //进程可以创建的进程数,建议小于服务器的cpu数 daemon //后台运行 defaults option httplog //记录http日志 mode http //http模式,不与RFC格式兼容的请求都会被拒绝,还有TCP模式作为4层转发,多用于SSL,SSH,SMTP option dontlognull retries 3 //连接失败后重试此树 maxconn 5535 timeout connect 5s //连接后端服务器的最长等待时间 timeout server 30s //服务端回应客户端数据发送的最长等待时间 timeout client 30s //连接客户端发送数据的最长等待时间 timeout check 5s //每5s检验一次后端服务器 stats refresh 30s //后端服务器健康状态刷新时间 stats uri /stats //通过浏览器可以查看业务状态,例如:www.w4ya.com/stats stats realm welcome //提示信息 stats auth admin:dragon123 //查看HA监控后端状态时的帐号密码验证 stats hide-version //不显示haproxy的版本信息 frontend www bind :80 acl host_web hdr(host) -i www.draon.com //定义ACL匹配域名www.dragon.com acl url_static path_end .html .css .jpg //定义ACL匹配静态文件 acl host_test hdr_dom(host) -i www.test.com //定义ACL匹配域名www.test.com acl url_dynamic path_end .php .jsp //定义ACL匹配动态 use_backend web-dynamic-server if host_web url_dynamic //如果域名为www.dragon.com和页面是动态的,则把请求调度给web-dynamic-server use_backend web-static-server if host_web url_static || host_web //如果域名为www.test.com和页面是静态的,或则域名为www.dragon.com,则把请求调度给web-static-server use_backend test-dynamic-server if host_test url_dynamic use_backend test-static-server if host_test url_static || host_test backend web-static-server //定义www.dragon.com动态页面的管理集群 mode http balance roundrobin //负载均衡算法为轮询 option redispatch // 保持cookie环境,使客户机的session持久连接。 option abortonclose //在服务器高负载时,自动放弃队列中处理时间较长的连接 option httpchk GET /index.html /通过请求后端http服务的页面,判断状态 server web01 192.168.1.118:80 check inter 2000 rise 2 fall 3 weight 10 //后端响应的服务器,根据需求可能会有多个。 ckeck:表示启用对后端服务器的健康检查 rise:由故障切换会正常需要进行的检查次数 fall:由正常到故障认定检查的次数 weight:权重 backend web-dynamic-server mode http option redispatch option abortonclose option httpchk GET /index.php balance roundrobin server web02 192.168.1.111:80 check inter 2000 rise 2 fall 3 weight 10 backend test-static-server mode http option redispatch option abortonclose option httpchk GET /index.html balance roundrobin server test01 192.168.1.117:80 check inter 2000 rise 2 fall 3 weight 10 backend test-dynamic-server mode http option redispatch option abortonclose option httpchk GET /index.php balance roundrobin server test02 192.168.1.114:80 check inter 2000 rise 2 fall 3 weight 10 HA1和HA2的配置文件都是一样的。请求www.dragon.com和静态页面:
请求www.dragon.com和动态页面:
请求www.test.com和静态页面:
请求www.test.com和动态页面:
要查看HA检测到的后端服务群集的运行状况,请执行以下 *** 作:
配置保持活动状态:
global_defs { //全局配置 notification_email { //报警邮箱 acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 220.181.12.11 smtp server地址 smtp_connect_timeout 30 smtp连接超时 router_id haproxy_DEVEL 邮箱主题信息 } vrrp_script check_haproxy { script "killall -0 haproxy" //对HAproxy的健康检查 interval 2 } vrrp_instance VI_1 { //实例标识 state MASTER //设置为MASTER #另一keepalived配置这里为SLAVE或者BACKUP interface eth2 //指定HA监听的网卡 virtual_router_id 51 //虚拟路由ID priority 100 //MASTER选举的优先级 #另一keepalived配置改为80 advert_int 1 //MASTER和BACKUP的同步检查时间间隔 authentication { //MASTER和BACKUP密码验证 auth_type PASS auth_pass 1234 } track_script { //调用HA检查 check_haproxy } virtual_ipaddress { //虚拟IP,可以有多个 22.22.22.251/24 dev eth2 } nopreempt //故障恢复以后,不抢夺VIP重回MASTER. nopreempt_delay 300 //抢占延时 } vrrp_instance VI_2 { state MASTER #另一keepalived配置为MASTER interface eth2 virtual_router_id 52 priority 80 #另一keepalived配置为100 advert_int 1 authentication { auth_type PASS auth_pass 1234 } track_script { check_haproxy } virtual_ipaddress { 22.22.22.252/24 dev eth2 } } 需要注意两个keepalived配置文件不同的地方已经用#注释检查keepalived的运行效果:
root@centos-server~]#cat/var/log/messages
这里,实例VI_1进入备份状态,VI_2发现自己的优先级高于对方,切换到主用状态,将VIP:22.22.22.252添加到eth2网卡
查看虚拟IP:
这里实例VI_1进入主,VI_2也进入主,但是后来发现网络中有一个优先级更高的keepalived主机,它自动切换回备份状态。
查看虚拟IP:
仿真Haproxy失败:
在其中一台机停掉Haproxy [root@centos-server ~]# service haproxy stop 停止 haproxy: [确定]另一个主机获得失败的Haproxy的VIP接管:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)