集合Haproxy,Keepalived双主双机高可用模型,不论是Haproxy还是Keepalived甚至是上游服务器均提高生产力并增强可用性,也就是如下架构中Haproxy,Keepalived,Httpd服务器任意宕机一台服务还是可以正常运行的
规划:
172.16.43.1 , 172.16.43.2 两台keepalived节点 (为haproxy做高可用) 172.16.43.1(172.16.43.2) 两台haproxy (为上游服务器做反带) 172.16.43.3 , 172.16.43.4 两台web后端服务器
i) 两台keepalived节点
# 安装keepalived, 两台均要做 (172.16.43.1,2) yum -y install keepalived # # keepalived配置 (172.16.43.1) # vim /etc/keepalived/keepalived.conf # global_defs { notification_email { root@localhost # 本地邮件地址 } notification_email_from keepadmin@localhost smtp_connect_timeout 3 smtp_server 127.0.0.1 router_id LVS_DEVEL_KING } # vrrp_script chk_haproxy { script "/etc/keepalived/chk_haproxy.sh" # 检查脚本 interval 2 weight 2 } # vrrp_instance VI_1 { interface eth0 state MASTER # 172.16.43.1 这是主,那么 172.16.43.2 就是备 priority 100 # 主 比 备 优先级高 virtual_router_id 173 # vrid是行为vmac的根本 garp_master_delay 1 # authentication { auth_type PASS auth_pass 1111 } track_interface { eth0 } virtual_ipaddress { 172.16.43.88/16 dev eth0 } track_script { chk_haproxy # 脚本跟踪监测 } } # vrrp_instance VI_2 { interface eth0 state BACKUP # master for slave routers priority 99 # 99 for master virtual_router_id 174 garp_master_delay 1 # authentication { auth_type PASS auth_pass 11111 } track_interface { eth0 } virtual_ipaddress { 172.16.43.188/16 dev eth0 } }
# 172.16.43.2 keepalived配置 # vim /etc/keepalived/keepalived.conf # global_defs { notification_email { root@localhost } notification_email_from keepadmin@localhost smtp_connect_timeout 3 smtp_server 127.0.0.1 router_id LVS_DEVEL_KING } # vrrp_script chk_haproxy { script "/etc/keepalived/chk_haproxy.sh" interval 2 weight 2 } # vrrp_instance VI_1 { interface eth0 state BACKUP # BACKUP for slave routers priority 99 # 99 for BACKUP virtual_router_id 173 garp_master_delay 1 # authentication { auth_type PASS auth_pass 1111 } track_interface { eth0 } virtual_ipaddress { 172.16.43.88/16 dev eth0 } track_script { chk_haproxy } } # vrrp_instance VI_2 { interface eth0 state MASTER # master for slave routers priority 10000 # 99 for master virtual_router_id 174 garp_master_delay 1 # authentication { auth_type PASS auth_pass 11111 } track_interface { eth0 } virtual_ipaddress { 172.16.43.188/16 dev eth0 } }
# 刚才两个节点 均要有 的监测脚本文件 , 防止 haproxy 停止而 keepalived 不切换的情况 # vim /etc/keepalived/chk_haproxy.sh # # #!/bin/bash # if ! `pidof haproxy &> /dev/null`; then /etc/rc.d/init.d/haproxy start fi sleep 2 if ! `pidof haproxy &> /dev/null`; then /etc/rc.d/init.d/keepalived stop fi
### 启动服务 #### service keepalived start
keepalived双主模型启动
ii) 两台haproxy
# 安装haproxy,两台均要 (172.16.43.1 , 2) yum -y install haproxy # # 为haproxy分别提供配置文件 , 两台均一样 , 不需要更改 global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon # defaults mode http # http tcp health 模型, 这里监控 web 站点所以使用 http log global option httplog option dontlognull option redispatch # 调度到健康的服务器 option http-server-close # 不接受长连接 option forwardfor except 127.0.0.0/8 # 在响应头中加入forwardfor标记 retries 3 timeout http-request 10s # 超时时间设置 timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s maxconn 30000 # listen stats mode http bind 0.0.0.0:8080 # status 页面在8080提供服务 stats enable # status 允许操作 stats hide-version # status 隐藏haproxy版本信息 stats uri /haproxyadmin?stats # status 访问路径 stats realm Haproxy\ Statistics # status 登陆验证信息 stats auth admin:admin # status 页面登陆用户名或密码 stats admin if TRUE # frontend http-in bind *:80 mode http log global option httpclose option logasap option dontlognull capture request header Host len 20 capture request header Referer len 60 acl url_static path_beg -i /static /images /javascript /stylesheets acl url_static path_end -i .html .jpg .jpeg .gif .png .css .js # use_backend static_servers if url_static default_backend dynamic_servers # backend static_servers balance roundrobin server imgsrv1 172.16.43.3:80 check maxconn 6000 # backend dynamic_servers balance source server websrv1 172.16.43.3:80 check maxconn 1000 server websrv2 172.16.43.4:80 check maxconn 1000
### 启动服务 #### service haproxy start
输出状态页面
iii) 两台web后端服务器
# 安装 httpd , php yum -y install httpd php
### 启动服务 #### service httpd start
iv) 测试
动静分离
高可用性
关闭了上游一台web服务器,可以见到服务请求没有任何问题, 172.16.43.88 , 188 没有问题