Haproxy+keepalived实现双主负载均衡高可用集群

Haproxy+keepalived实现双主负载均衡高可用集群,第1张

Haproxy+keepalived实现双主负载均衡高可用集群 项目说明

1.使用Haproxy来负载平衡用户对后端web服务器的请求,并检查健康状态。

2.使用具有高可用性的keepalivedHaproxy来避免LVS单点故障

3.分别在集群中的HK-01和HK-02运行一个VIP地址,实现Haproxy的双主。

4.用户可以通过DNS轮转训练实现访问集群的负载均衡(无演示)

实验拓扑

环境介绍:


IP地址

功能描述

HK-01

172.16.4.100

用户将请求安排到后端web服务器,并使用HK-02进行备份。

HK-02

172.16.4.101

用户将请求安排到后端web服务器,并使用HK-01进行备份。

WEB-01

172.16.4.102

提供网络服务

WEB-02

172.16.4.103

提供网络服务

DNS

172.16.4.10

实现DNS轮转训练,解析用户请求的域名地址。

VIP1

172.16.4.1

用户访问集群的入口地址可能在HK-01或HK-02中。

VIP2

172.16.4.2

用户访问集群的入口地址可能在HK-01或HK-02中。

配置示例 后端WEB服务器配置 WEB服务器的配置极其简单。您只需要提供一个测试页面来启动web服务。配置如下:

Web-01配置

[root@WEB-01 ~]# echo "web-01" >/var/www/html/index.html [root@WEB-01 ~]# service httpd start Web-02配置 [root@WEB-02 ~]# echo "web-02" >/var/www/html/index.html [root@WEB-02 ~]# service httpd start

Haproxy访问后端web服务器,并验证web服务是否成功提供。

[root@HK-01 ~]# curl 172.16.4.102 web-01 [root@HK-01 ~]# curl 172.16.4.103 web-02

出现的页面表明web服务正常。

Haproxy+keepalived配置

Haproxy和keepalived安装在两个HK节点中。

[root@HK-01 ~]# yum -y install haproxy [root@HK-02 ~]# yum -y install haproxy [root@HK-01 ~]# yum -y install keepalived [root@HK-02 ~]# yum -y install keepalived

修改内核参数设置,设置haproxy启动有无vip地址。

[root@HK-01 ~]# echo"net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf [root@HK-01 ~]# sysctl –p [root@HK-02 ~]# echo "net.ipv4.ip_nonlocal_bind= 1" >> /etc/sysctl.conf [root@HK-02 ~]# sysctl -p

该选项是集群中的关键选项,否则当VIP地址不在Haproxy服务器中时,服务器无法正常启动


设置haproxy

Haproxy需要配置两个实例监听两个VIP地址,两个实例都要将用户的请求负载均衡转发到后端web服务器,这样用户无论访问哪个节点都可以实现负载均衡。

两个haproxy节点的配置文件完全相同,所以只发布一个。

[root@HK-01 ~]# vim /etc/haproxy/haproxy.cfg global     log         127.0.0.1 local2        chroot      /var/lib/haproxy      pidfile     /var/run/haproxy.pid      maxconn     4000     user        haproxy      group       haproxy     daemon       statssocket /var/lib/haproxy/stats   defaults     mode                 http     log                  global      option                httplog      option                dontlognull     optionhttp-server-close     optionforwardfor       except 127.0.0.0/8      option                redispatch      retries                3     timeouthttp-request           10s     timeoutqueue           1m     timeoutconnect           10s     timeoutclient           1m     timeoutserver           1m     timeouthttp-keep-alive 10s     timeoutcheck           10s      maxconn              3000        stats enable         #启用Haproxy的状态页面      statsuri /admin?stats    #设置Haproxy状态页面的访问URL      statsauth proxy:proxy    #设置访问Haproxy状态页面的用户名和密码     listen www1                   #定义一个实例        bind172.16.4.1:80   #监听地址为VIP地址        mode tcp       #设置转发模式为TCP        option forwardfor   #允许在发往服务器的请求首部中插入“X-Forwarded-For”首部        server www01  172.16.4.102:80  check  #定义后端服务器的,并启用健康检查        server www02  172.16.4.103:80  check listen www2                     #定义第二个实例        bind172.16.4.2:80   #除了绑定的VIP地址和第一个实例不同之外,其他均相同        mode tcp        option forwardfor        server www01  172.16.4.102:80  check        server www01  172.16.4.103:80  check Haproxy的配置就是安装,修改配置文件,设置完成之后只要启动Haproxy就可以正常提供服务了 keepalived设置

HK-01配置

[root@HK-01 ~]# vim /etc/keepalived/keepalived.conf global_defs {    router_idLVS_DEVEL }   vrrp_script chk_mt_down {   script"[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"  #定义一个脚本,判断down文件是否存在,存在就退出执行,不存在继续执行   interval 1           #1秒检测一次   weight -5           #优先级减五 }   vrrp_instance VI_1 {            #定义VRRP热备实例    state MASTER             #MASTER表示主节点    interfaceeth0              #承载VIP地址的物理接口    virtual_router_id 51        #虚拟路由器的ID号    priority100            #优先级,数值越高优先级越大    advert_int 1           #通知间隔秒数(心跳频率)    authentication {         #认证信息配置        auth_type PASS    #设置认证类型为密码         auth_pass asdfgh  #设置认证的密码     }    virtual_ipaddress {         #指定漂移地址        172.16.4.1/32 brd 172.16.4.1 dev eth0 label eth0:0     }   track_script {    chk_mt_down   #调用上面定义的脚本,如果这里没有调用,那么上面定义的脚本是无法生效的    } }   vrrp_instance VI_2 {         #定义实例为HK-02的备份节点    stateBACKUP           #BACKUP表示备份节点    interfaceeth0     virtual_router_id 52      priority99           #优先级,低于主服务器    advert_int 1    authentication {        auth_type PASS        auth_pass qwerty     }    virtual_ipaddress {        172.16.4.2     }   track_script {    chk_mt_down    } }

HK-02的配置与HK-01基本相同,只是主备设置不同。

[root@HK-02 ~]# vim /etc/keepalived/keepalived.conf global_defs {    router_idLVS_DEVEL }   vrrp_script chk_mt_down {   script"[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"   interval 1   weight -5 }   vrrp_instance VI_1 {    state BACKUP    interfaceeth 0    virtual_router_id 51    priority 99     advert_int 1    authentication {        auth_type PASS        auth_pass asdfgh     }    virtual_ipaddress {        172.16.4.1/32 brd 172.16.4.1 dev eth0 label eth0:0     }   track_script {      chk_mt_down    } } vrrp_instance VI_2 {    stateMASTER    interfaceeth0    virtual_router_id 52    priority100    advert_int 1    authentication {        auth_type PASS        auth_pass qwerty     }    virtual_ipaddress {        172.16.4.2     }     track_script {      chk_mt_down    } }


设置完成后,两个节点分别启动haproxy和keepalived服务,集群配置完成。

[root@HK-01 ~]# service haproxy start [root@HK-01 ~]# service keepalived start [root@HK-02 ~]# service haproxy start [root@HK-02 ~]# service keepalived start

验证

访问状态页面、www1和www2示例都显示正常。

VIP地址也开始分别到两个节点,实现双主。

[root@HK-01 ~]# ip addr show dev eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP>mtu 1500 qdisc pfifo_fast state UP qlen 1000    link/ether 00:0c:29:22:c5:c2 brd ff:ff:ff:ff:ff:ff     inet172.16.4.100/16 brd 172.16.255.255 scope global eth0     inet172.16.4.1/32 brd 172.16.4.1 scope global eth0:0   #VIP地址正常启动     inet6fe80::20c:29ff:fe22:c5c2/64 scope link       valid_lft forever preferred_lft forever [root@HK-02 ~]# ip addr show dev eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP>mtu 1500 qdisc pfifo_fast state UP qlen 1000    link/ether 00:0c:29:f1:dd:b2 brd ff:ff:ff:ff:ff:ff     inet172.16.4.101/16 brd 172.16.255.255 scope global eth0     inet172.16.4.2/32 scope global eth0                      #VIP地址正常启动     inet6fe80::20c:29ff:fef1:ddb2/64 scope link       valid_lft forever preferred_lft forever 负载均衡测试

分别访问两个vip地址达到负载均衡的效果。

[root@localhost ~]# curl 172.16.4.1 web-02 [root@localhost ~]# curl 172.16.4.1 web-01 [root@localhost ~]# curl 172.16.4.2 web-01 [root@localhost ~]# curl 172.16.4.2 web-02 高可用验证

手动关闭HK-02,验证vip地址是否会自动漂移到HK-01服务器。

[root@HK-02 ~]# touch /etc/keepalived/down

两个vip地址都正常漂移到HK-02。

[root@HK-01 ~]# ip addr show dev eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP>mtu 1500 qdisc pfifo_fast state UP qlen 1000    link/ether 00:0c:29:22:c5:c2 brd ff:ff:ff:ff:ff:ff     inet172.16.4.100/16 brd 172.16.255.255 scope global eth0     inet172.16.4.1/32 brd 172.16.4.1 scope global eth0:0        inet172.16.4.2/32 scope global eth0         #HK-02的VIP地址已经漂移过来了     inet6fe80::20c:29ff:fe22:c5c2/64 scope link       valid_lft forever preferred_lft forever 健康状态检测验证

手动关闭web-02,查看web-02是否会自动脱机。

[root@WEB-02 ~]# service httpd stop

查看网页状态页面,WEB-02已经自动离线。

验证计划请求不会被转发到web-02。

[root@localhost ~]# curl 172.16.4.1 web-01 [root@localhost ~]# curl 172.16.4.1 web-01 [root@localhost ~]# curl 172.16.4.2 web-01 [root@localhost ~]# curl 172.16.4.2 web-01

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/783125.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存