Linux运维:构建双主高可用的HAProxy负载均衡系统
Posted 计算机与网络安全
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux运维:构建双主高可用的HAProxy负载均衡系统相关的知识,希望对你有一定的参考价值。
一次性付费进群,长期免费索取教程,没有付费教程。
ID:Computer-network
在HAProxy高可用集群架构中,虽然通过Keepalived实现了HAProxy的高可用,但是严重浪费了资源,因为在一主一备的Keepalived环境中,只有主节点处于工作状态,而备用节点则一直处于空闲等待状态,仅当主节点出现问题时备用节点才能开始工作。对于并发量比较大的应用系统来说,主节点可能会非常繁忙,而备用节点则十分空闲,这种资源分布不均的问题,也是在做应用架构设计时必须要考虑的问题。对于一主一备资源不均衡的问题,可以通过双主互备的方式进行负载分流,本文介绍双主互备的高可用集群系统是如何实现的。
1、系统架构图与实现原理
为了能充分利用资源并将负载进行分流,可以在一主一备的基础上构建双主互备的高可用HAProxy集群系统。双主互备的集群架构如图1所示。
图1 HAProxy双主互备集群架构
在这个架构中,要实现的功能是:通过haproxy1将www.tb.com的访问请求发送到webapp1和webapp2两台上,实现www.tb.com的;通过haproxy2将img.tb.com的访问请求发送到webimg1和webimg2两台上,实现img.tb.com的;同时,如果haproxy1或haproxy2任何一台出现故障,都会将用户访问请求发送到另一台健康的节点,进而继续保持两个网站的。
为了保证haproxy1和haproxy2资源得到充分利用,这里对访问进行了分流操作,需要将www.tb.com的域名解析到192.168.66.10这个IP上,将img.tb.com域名解析到192.168.66.20这个IP上。
2、安装并配置HAProxy集群系统
在名为haproxy1和haproxy2的节点依次安装HAProxy并配置日志支持。HAProxy的安装路径指定为/usr/local/haproxy,两个节点的haproxy.cfg文件内容完全相同,这里给出配置好的haproxy.cfg文件,内容如下:
global
log 127.0.0.1 local0 info
maxconn 4096
user nobody
group nobody
daemon
nbproc 1
pidfile /usr/local/haproxy/logs/haproxy.pid
defaults
mode http
retries 3
timeout connect 5s
timeout client 30s
timeout server 30s
timeout check 2s
listen admin_stats
bind 0.0.0.0:19088
mode http
log 127.0.0.1 local0 err
stats refresh 30s
stats uri /haproxy-status
stats realm welcome login\ Haproxy
stats auth admin:xxxxxx
stats hide-version
stats admin if TRUE
frontend www
bind *:80
mode http
option httplog
option forwardfor
log global
acl host_www hdr_dom(host) -i www.zb.com
acl host_img hdr_dom(host) -i img.zb.com
use_backend server_www if host_www
use_backend server_img if host_img
backend server_www
mode http
option redispatch
option abortonclose
balance roundrobin
option httpchk GET /index.html
server webapp1 192.168.66.31:80 weight 6 check inter 2000 rise 2 fall 3
server webapp2 192.168.66.32:80 weight 6 check inter 2000 rise 2 fall 3
backend server_img
mode http
option redispatch
option abortonclose
balance roundrobin
option httpchk HEAD /index.html
server webimg1 192.168.66.33:80 weight 6 check inter 2000 rise 2 fall 3
server webimg2 192.168.66.34:80 weight 6 check inter 2000 rise 2 fall 3
在这个HAProxy配置中,通过ACL规则将www.tb.com站点转到webapp1、webapp2两个后端节点,将img.tb.com站点转到webimg1和webimg2两个后端服务节点,分别实现。
最后将haproxy.conf文件分别复制到haproxy1和haproxy2两台上,然后在两个器上依次启动HAProxy服务。
3、安装并配置双主的Keepalived高可用系统
依次在主、备两个节点上安装Keepalived。在haproxy1和haproxy2上,keepalived.conf的内容基本相同,不同的部分已经在后面添加了注释,下面直接给出配置好的keepalived.conf文件内容:
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script check_haproxy {
script "killall -0 haproxy"
interval 2
}
vrrp_instance HAProxy_HA {
state MASTER #在haproxy2主机上,此处为BACKUP
interface eth0
virtual_router_id 80 #在一个实例下,virtual_router_id是唯一的,因此在haproxy2上,virtual_router_id也为80
priority 100 #在haproxy2主机上,priority值为80
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
notify_master "/etc/keepalived/mail_notify.sh master"
notify_backup "/etc/keepalived/mail_notify.sh backup"
notify_fault "/etc/keepalived/mail_notify.sh fault"
track_script {
check_haproxy
}
virtual_ipaddress {
192.168.66.10/24 dev eth0
}
}
vrrp_instance HAProxy_HA2 {
state BACKUP #在haproxy2主机上,此处为MASTER
interface eth0
virtual_router_id 81 #在haproxy2主机上,此外virtual_router_id也必须为81
priority 80 #在haproxy2主机上,priority值为100
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
notify_master "/etc/keepalived/mail_notify.sh master"
notify_backup "/etc/keepalived/mail_notify.sh backup"
notify_fault "/etc/keepalived/mail_notify.sh fault"
track_script {
check_haproxy
}
virtual_ipaddress {
192.168.66.20/24 dev eth0
}
}
4、测试双主高可用的HAProxy负载均衡集群系统
这里仅测试双主互备的HAProxy系统的启动和高可用切换过程。
在haproxy1和haproxy2节点依次启动HAProxy服务和Keepalived服务后,首先观察haproxy1节点Keepalived的启动日志,信息如下:
Jul 25 10:06:34 haproxy1 Keepalived_vrrp[33167]: VRRP_Instance(HAProxy_HA) Transition to MASTER STATE
Jul 25 10:06:36 haproxy1 Keepalived_vrrp[33167]: VRRP_Instance(HAProxy_HA) Entering MASTER STATE
Jul 25 10:06:36 haproxy1 Keepalived_vrrp[33167]: VRRP_Instance(HAProxy_HA) setting protocol VIPs.
Jul 25 10:06:36 haproxy1 Keepalived_vrrp[33167]: VRRP_Instance(HAProxy_HA) Sending gratuitous ARPs on eth0 for 192.168.66.10
Jul 25 10:06:36 data-1-1 Keepalived_healthcheckers[33166]: Netlink reflector reports IP 192.68.66.10 added
Jul 25 10:06:53 haproxy1 Keepalived_vrrp[33167]: VRRP_Instance(HAProxy_HA2) Received higher prio advert
Jul 25 10:06:53 haproxy1 Keepalived_vrrp[33167]: VRRP_Instance(HAProxy_HA2) Entering BACKUP STATE
下面测试一下双主互备的故障切换功能,这里为了模拟故障,将haproxy1节点上HAProxy服务关闭,然后在haproxy1节点观察Keepalived的启动日志,信息如下:
Jul 25 14:42:09 haproxy1 Keepalived_vrrp[33167]: VRRP_Script(check_haproxy) failed
Jul 25 14:42:10 haproxy1 Keepalived_vrrp[33167]: VRRP_Instance(HAProxy_HA) Entering FAULT STATE
Jul 25 14:42:10 haproxy1 Keepalived_vrrp[33167]: VRRP_Instance(HAProxy_HA) removing protocol VIPs.
Jul 25 14:42:10 haproxy1 Keepalived_vrrp[33167]: VRRP_Instance(HAProxy_HA) Now in FAULT state
Jul 25 14:42:10 haproxy1 Keepalived_healthcheckers[33166]: Netlink reflector reports IP 192.168.66.10 removed
从切换过程看,Keepalived运行完全正常。
ID:Computer-network
【推荐书籍】
以上是关于Linux运维:构建双主高可用的HAProxy负载均衡系统的主要内容,如果未能解决你的问题,请参考以下文章
Haproxy+Keepalived实现网站双主高可用-理论篇
[转] HaproxyKeepalived双主高可用负载均衡