LVS+Keepalived 实现高可用负载均衡
一、演示环境
IP | 操作系统 | 主机名 | 部署服务 |
192.168.11.81 | Centos 7.6 |
LB01 |
keepalived、ipvsadm |
192.168.11.82 | Centos 7.6 |
LB02 |
keepalived、ipvsadm |
192.168.11.83 |
Centos 7.6 | web01 | httpd |
192.168.11.84 |
Centos 7.6 | web02 | httpd |
VIP:192.168.11.85
(1)各节点通过chrony服务同步时间
(2)各节点关闭firewalld和SELinux
(3)两台DR主机实现互通
# vim /etc/hosts 192.168.11.81 LB01 192.168.11.82 LB02
(4)确保配置keepalived服务的node1和node2用于集群服务的接口支持MULTICAST(多播或组播)通信:
备注:网卡没有开启多播功能,可通过命令# ip link set multicast on dev ens33 开启
二、两台WEB服务器部署httpd
(1) web01安装部署httpd:
# yum -y install httpd # vim /var/www/html/index.html --> <h1>web1</h1> # systemctl start httpd.service # ss -tunlp | grep -w :80 # systemctl enable httpd.service
(2) web02安装部署httpd:
# yum -y install httpd # vim /var/www/html/index.html --> <h1>web2</h1> # systemctl start httpd.service # ss -tunlp | grep -w :80 # systemctl enable httpd.service
(3)用LB01访问(web01和web02)
[root@LB01 ~]# curl http://192.168.11.83
[root@LB01 ~]# curl http://192.168.11.84
(4)Real server节点2台配置脚本:(web01和web02)
# vim /usr/local/sbin/lvs_rs.sh
#! /bin/bash
vip=192.168.11.85
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
2节点rs 上分别执行脚本: bash /usr/local/sbin/lvs_rs.sh
以上是利用脚本配置,现在我们手动配置(web01和web02)
# vim /etc/sysctl.conf (关闭真实服务器)
net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2
[root@web01 ~]# sysctl -p #立即生效
[root@web01 ~]# cp /etc/sysconfig/network-scripts/ifcfg-lo{,:1}
[root@web01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:1
DEVICE=lo:1
IPADDR=192.168.11.85 #VIP地址
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback
三、Director 上配置脚本(LB01和LB02)
[root@LB01 ~]# yum -y install ipvsadm #安装ipvsadm
# vim /usr/local/sbin/lvs_dr.sh
#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward #开启转发功能
ipv=/usr/sbin/ipvsadm
vip=192.168.11.85
rs1=192.168.11.83
rs2=192.168.11.84
ifconfig ens33:0 down
ifconfig ens33:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev ens33:0
$ipv -C
$ipv -A -t $vip:80 -s wrr
$ipv -a -t $vip:80 -r $rs1:80 -g -w 1
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1
执行脚本:
# bash /usr/local/sbin/lvs_dr.sh
以上为脚本配置文件,现在我们手动进行配置更改(LB01和LB02)
[root@LB01 ~]# cp /etc/sysconfig/network-scripts/ifcfg-ens33{,:1} [root@LB01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33:1 //修改以下参数 NAME="ens33:1" DEVICE="ens33:1" IPADDR="192.168.11.85" GATEWAY="192.168.11.1" //指向路由IP //如果存在HWADDR,那么ens33和ens33:1两者不必须一致。
[root@LB01 ~]# systemctl restart network
[root@LB01 ~]# ipvsadm -A -t 192.168.11.85:80 -s wrr
[root@LB01 ~]# ipvsadm -a -t 192.168.11.85:80 -r 192.168.11.83:80 -g -w 1
[root@LB01 ~]# ipvsadm -a -t 192.168.11.85:80 -r 192.168.11.84:80 -g -w 1
[root@LB01 ~]# ipvsadm -Ln
[root@LB01 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
到此为止利用ipvsadm配置LVS(负载均衡)已经完成,测试正常。
下面是 LVS+Keepalived 实现高可用负载均衡
注意:此处只安装ipvsadm,不生成规则,也不需要启动,只需要启动Keepalived。
四、keepalived节点配置(2节点):
安装keepalived
[root@LB01 ~]# yum -y install keepalived
主节点( MASTER )配置文件
[root@LB01 ~]# vim /etc/keepalived/keepalived.conf vrrp_instance VI_1 { state MASTER #主服务器 interface ens33 #绑定的网卡名 virtual_router_id 51 priority 100 #启动优先级设置 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.11.85 #虚拟IP设置 } } virtual_server 192.168.11.85 80 { delay_loop 6 #每隔6秒查询realserver状态 lb_algo wrr #轮询调度算法 lb_kind DR #DR模式 persistence_timeout 0 #同一个IP的连接60秒内被分配到同一台realserver服务器 protocol TCP #用TCP协检查realserver状态 real_server 192.168.11.83 80 { weight 1 #权重 TCP_CHECK { connect_timeout 10 #10秒无响应超时 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.11.84 80 { weight 1 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }
从节点( BACKUP )配置文件
拷贝主节点的配置文件keepalived.conf,然后修改如下内容:
state MASTER -> state BACKUP priority 100 -> priority 90
五、keepalived的2个节点执行如下命令,开启转发功能:
# echo 1 > /proc/sys/net/ipv4/ip_forward
六、在两台realserver服务器上,运行脚本
bash /usr/local/sbin/lvs_rs.sh
七、启动keepalive
先主后从分别启动keepalive
systemctl start keepalived
八、查看ipvsadm情况
[root@LB01 ~]# watch -n1 ipvsadm -Ln
九、查看Keepalived的情况
[root@LB01 ~]# ip a l
未关闭LB01上的keepalived时,VIP地址会保留在LB01上面。 [root@LB02 ~]# ip addr
关闭LB01的keepalived后,VIP地址会切到LB02上面。
十、进行测试
高可用与负载均衡正常。