在这种模式下,虚拟IP在某一时刻只能属于某一个节点,另一个节点作为备用节点存在。当主节点不可用是,备用节点接管虚拟IP,提供正常服务。
1.实例环境
VIP(虚拟IP) | 192.168.73.111 |
Master(主负载均衡器) | 192.168.73.159 |
Backup(从负载均衡器) | 192.168.73.133 |
Server1(服务器1) | 192.168.73.156 |
Server2(服务器2) | 192.168.73.154 |
注:所有设备均关闭防火墙和SELinux,否则实验可能不会成功。
[root@master ~]# systemctl stop firewalld
[root@master ~]# setenforce 0
2.首先安装keepalived和ipvsadm软件包
在主和从负载均衡器上均安装
[root@master ~]# yum -y install ipvsadm keepalived
[root@backup ~]# yum -y install ipvsadm keepalived
3.Keepalived配置
3.1 Master配置(主负载均衡器)
[root@CentOS7 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs { #全局定义部分
notification_email { #设置报警邮件地址,可以有多个
root@loaclhost.localdomain
}
notification_email_from root@localhost.localdomain
smtp_server 192.168.200.1 #设置SMTP服务器地址
smtp_connect_timeout 30 #设置连接SMTP服务器的超时时间
router_id master #标识运行keepalived服务器的一个标识
# vrrp_skip_check_adv_addr
# vrrp_strict
# vrrp_garp_interval 0
# vrrp_gna_interval 0
}
vrrp_instance VI_1 { #VRRP实例定义部分
state MASTER #指定该节点为主节点(需大写),备用节点为BACKUP
interface ens33 #绑定虚拟IP的网络接口
virtual_router_id 51 #VRRP组名,两个节点需设置一样,以指明各个节点属于同一VRRP组
priority 100 #主节点的优先级(1-254),默认100,注意从节点优先级需低于主节点
advert_int 1 #设定两个节点之间同步检查的时间间隔,两个节点需一致
authentication { #设置验证信息,两个节点需一致
auth_type PASS #设置验证类型,主要有PASS和AH两种
auth_pass 1111 #设置验证密码,在一个vrrp_instance下,两个节点必须使用相同的密
码才能正常通信
}
virtual_ipaddress { #指定虚拟IP,两个节点需设置一样,可以有多个,每行一个
192.168.73.111
}
}
virtual_server 192.168.73.111 80 { #虚拟IP服务
delay_loop 6 #设定检查实际服务器的间隔
lb_algo rr #指定LVS调度算法
lb_kind DR #指定LVS模式,主要有NAT、TUN、DR三种
# persistence_timeout 50 #会话保持时间
protocol TCP #转发协议为TCP
real_server 192.168.73.154 80 { #后端真实服务器配置
weight 1 #设置服务器节点的权重值
TCP_CHECK { #真实服务器的状态检测设置部分,单位秒
connect_timeout 3 #连接超时时间
nb_get_retry 3 #重试次数
delay_before_retry 3 #重试间隔
connect_port 80 #连接端口
}
}
real_server 192.168.73.156 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
启动keepalived服务
[root@master ~]# systemctl start keepalived
3.2 Backup配置(从负载均衡器)
[root@backup ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@loaclhost.localdomain
}
notification_email_from root@localhost.localdomain
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id backup
# vrrp_skip_check_adv_addr
# vrrp_strict
# vrrp_garp_interval 0
# vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.73.111
}
}
virtual_server 192.168.73.111 80 {
delay_loop 6
lb_algo rr
lb_kind DR
# persistence_timeout 50
protocol TCP
real_server 192.168.73.154 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.73.156 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
启动keepalived服务
[root@backup ~]# systemctl start keepalived
4.配置真实服务器节点
[root@Server1 ~]# vim /etcinit.d/lvsrsdr
#!/bin/bash
#description:Start Real Server
VIP=192.168.73.111
source /etc/init.d/functions
case "$1" in
start)
echo "start LVS of Realserver DR"
/sbin/ifconfig lo:1 $VIP broadcast $VIP netmask 255.255.255.255 up
#!/bin/bash
#description:start Realserver
VIP=192.168.73.111
source /etc/init.d/functions
case $1 in
start)
echo "start LVS of Realserver DR"
/sbin/ifconfig lo:1 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:1
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
;;
stop)
/sbin/ifconfig lo:1 down
echo "Close LVS of Realserver DR"
echo '0' > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo '0' > /proc/sys/net/ipv4/conf/lo/arp_announce
echo '0' > /proc/sys/net/ipv4/conf/all/arp_ignore
echo '0' > /proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
在Server1和server2节点上执行如下操作
[root@Server1 init.d]# chmod +x lvsrzdr
[root@Server1 init.d]# ./lvsrzdr start
start LVS of Realserver DR
[root@Server1 ~]# echo 192.168.73.156 > /var/www/html/index.html
[root@Server1 ~]# systemctl start httpd
[root@Server2 init.d]# chmod +x lvsrzdr
[root@Server2 init.d]# ./lvsrzdr start
start LVS of Realserver DR
[root@Server2 ~]# echo 192.168.73.154 > /var/www/html/index.html
[root@Server2 ~]# systemctl start httpd
5.测试Keepalived+LVS/DR负载均衡集群
5.1 负载均衡测试
5.2 高可用性功能测试
高可用性是通过LVS的两个负载均衡器完成的。为了模拟故障,先将主负载均衡器上面的Keepalived服务停止,然后观察备用负载均衡器上Keepalived的运行日志,信息如下。从日志中可以看出,主机出现故障后,备用机立刻检测到,此时备用机变为 MASTER角色,并且接管主机的虚拟IP资源,最后将虚拟IP绑定在ens33设备上。
5.3 故障切换测试
故障切换是测试在某个节点出现故障后,Keepalived 监控模块是否能及时发现,然后屏蔽故障节点,同时将服务转移到正常节点上执行。这里将Real Server 1节点的服务停掉,假定这个节点出现故障,然后查看主、备机日志信息,相关日志如下。
通过日志可以看出,Keepalived 监控模块检测到 192.168.73.156这台主机出现故障后,将此节点从集群系统中剔除。
此时访问http://192.168.73.111这个地址,应该只能看到“192.168.73.156”了,这是因为Server1出现故障,而Keepalived监控模块将Server1从集群系统中剔除了。
下面重新启动real server 1节点的服务,可以看到Keepalived的日志信息如下。
从日志可知,Keepalived 监控模块检测到 192.168.73.156 这台主机恢复正常后,又将此节点加入到集群系统中。