LVS-集群 (二)
Keepalived概述
- 调度器出现单点故障,如何解决?
- Keepalived实现了高可用集群
- Keepalived最初是为LVS设计的
- 专门监控各服务器节点的状态
- Keepalived后来加入了VRRP功能,防止单点故障
Keepalived运行原理
Keepalived检测每个服务器节点状态,服务器节点异常或工作出现故障,Keepalived会将故障节点从集群系统中剔除,故障节点恢复后,Keepalived再将其加入到集群系统中,所有工作都自动完成,无需人工干预,它的工作原理就是VRRP(虚拟冗余路由协议)。
Keepalived配置文件解析
- /etc/keepalived/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 #:设置路由ID号
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
- /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state MASTER #:主服务器为MASTER,辅助为BACKUP
interface eth0 #:定义网络接口
virtual_router_id 51 #:主辅VRID号必须一致
priority 100 #:服务器优先级
advert_int 1 #:发送心跳消息的间隔
authentication {
auth_type PASS
auth_pass 1111 #:主辅服务器密码必须一致
}
virtual_ipaddress {
192.168.200.16
192.168.200.17 #:VIP地址
192.168.200.18
}
}
高可用Web拓扑
- 使用Keepalived为主从设备提供VIP地址漂移
- 环境说明:
- client1:eth0->192.168.4.10
- web1:eth0->192.168.4.100/24
- web2:eth0->192.168.4.200/24
# 在两台web服务器上安装keepalived
[root@web1 ~]# yum install -y keepalived httpd
[root@web2 ~]# yum install -y keepalived httpd
# 修改配置文件
[root@web1 ~]# vim /etc/keepalived/keepalived.conf
12 router_id web1 # 设置本机在集群中的唯一识别符
13 vrrp_iptables # 自动配置iptables放行规则
... ...
20 vrrp_instance VI_1 {
21 state MASTER # 状态,主为MASTER,备为BACKUP
22 interface eth0 # 网卡
23 virtual_router_id 51 # 虚拟路由器地址
24 priority 100 # 优先级
25 advert_int 1 # 发送心跳消息的间隔
26 authentication {
27 auth_type PASS # 认证类型为共享密码
28 auth_pass 1111 # 集群中的机器密码相同,才能成为集群
29 }
30 virtual_ipaddress {
31 192.168.4.80/24 # VIP地址
32 }
33 }
# 删除下面所有行
# 打开一个新的终端监控日志,新日志将出持续显示在屏幕上。退出按ctrl+c
[root@web1 ~]# tail -f /var/log/messages | grep -i keepalived
# 在前一个终端启动服务
[root@web1 ~]# systemctl start keepalived
# 等几秒服务完全启动后,可以查看到vip
[root@web1 ~]# ip a s eth0 # eth0将会增加额外的4.80地址
# 配置web2
[root@web1 ~]# scp /etc/keepalived/keepalived.conf 192.168.4.200:/etc/keepalived/
[root@web2 ~]# vim /etc/keepalived/keepalived.conf
12 router_id web2 # 改id
13 vrrp_iptables
... ...
20 vrrp_instance VI_1 {
21 state BACKUP # 改状态
22 interface eth0
23 virtual_router_id 51
24 priority 80 # 改优先级
25 advert_int 1
26 authentication {
27 auth_type PASS
28 auth_pass 1111
29 }
30 virtual_ipaddress {
31 192.168.4.80/24
32 }
33 }
# 启动服务
[root@web2 ~]# systemctl start keepalived
# 查看地址,eth0不会出现vip
[root@web2 ~]# ip a s eth0
# 测试,现在访问4.80,看到是web1上的内容
[root@client1 ~]# curl http://192.168.4.80/
192.168.2.100
#:要是显示Connection refused,肯定是没有开启httpd
[root@web1 ~]# systemctl start httpd
# 在web2上监控日志
[root@web2 ~]# tail -f /var/log/messages | grep -i keepalived
# 关闭web1上的keepalived,观察web2的日志输出
[root@web1 ~]# systemctl stop keepalived.service
# 测试,现在访问4.80,看到是web2上的内容
[root@client1 ~]# curl http://192.168.4.80/
apache web server2
# 在web2上查看vip,可以查看到vip 192.168.4.80
[root@web2 ~]# ip a s eth0
高可用调度器
Keepalived+LVS拓扑
- 使用Keepalived高可用解决调度器单点失败问题
- 主、备调度器上配置LVS
- 主调度器异常时,Keepalived将会启用备用调度器
配置高可用、负载均衡的web集群
-
环境说明:LVS-DR模式
-
client1:eth0->192.168.4.10
-
lvs1:eth0->192.168.4.5
-
lvs2:eth0->192.168.4.6
-
web1:eth0->192.168.4.100
-
web2:eth0->192.168.4.200
-
-
环境准备
# 关闭2台web服务器上的keepalived
[root@web1 ~]# systemctl stop keepalived.service
[root@web2 ~]# systemctl stop keepalived.service
[root@web1 ~]# yum remove -y keepalived
[root@web2 ~]# yum remove -y keepalived
# 创建新虚拟机lvs2
# 将以下内容粘贴到虚拟机
hostnamectl set-hostname lvs2
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.6/24
nmcli connection down eth0
nmcli connection up eth0
echo a | passwd --stdin root
# 连接测试
[root@GeiBai ~]# ssh 192.168.4.6
配置高可用、负载均衡
- 在2台web服务器的lo上配置vip
- 在2台web服务器上配置内核参数
- 删除lvs1上的
eth0:0
。因为vip将由keepalived接管
[root@lvs1 ~]# ifdown eth0:0
[root@lvs1 ~]# rm -f /etc/sysconfig/network-scripts/ifcfg-eth0:0
- 删除lvs1上的lvs规则。因为lvs规则将由keepalived创建
[root@lvs1 ~]# ipvsadm -Ln # 查看规则
[root@lvs1 ~]# ipvsadm -D -t 192.168.4.15:80
- 在lvs上配置keepalived
[root@lvs1 ~]# yum install -y ipvsadm keepalived
[root@lvs2 ~]# yum install -y ipvsadm keepalived
[root@lvs1 ~]# vim /etc/keepalived/keepalived.conf
12 router_id lvs1 # 为本机取一个唯一的id
13 vrrp_iptables # 自动开启iptables放行规则
... ...
20 vrrp_instance VI_1 {
21 state MASTER
22 interface eth0
23 virtual_router_id 51
24 priority 100
25 advert_int 1
26 authentication {
27 auth_type PASS
28 auth_pass 1111
29 }
30 virtual_ipaddress {
31 192.168.4.15 # vip地址,与web服务器的vip一致
32 }
33 }
# 以下为keepalived配置lvs的规则
35 virtual_server 192.168.4.15 80 { # 声明虚拟服务器地址
36 delay_loop 6 # 健康检查延迟6秒开始
37 lb_algo wrr # 调度算法为wrr
38 lb_kind DR # 工作模式为DR
39 persistence_timeout 50 # 50秒内相同客户端调度到相同服务器
40 protocol TCP # 协议是TCP
41
42 real_server 192.168.4.100 80 { # 声明真实服务器
43 weight 1 # 权重
44 TCP_CHECK { # 通过TCP协议对真实服务器做健康检查
45 connect_timeout 3 # 连接超时时间为3秒
46 nb_get_retry 3 # 3次访问失败则认为真实服务器故障
47 delay_before_retry 3 # 两次检查时间的间隔3秒
48 }
49 }
50 real_server 192.168.4.200 80 {
51 weight 2
52 TCP_CHECK {
53 connect_timeout 3
54 nb_get_retry 3
55 delay_before_retry 3
56 }
57 }
58 }
# 以下部分删除
# 启动keepalived服务
[root@lvs1 ~]# systemctl start keepalived
# 验证
[root@lvs1 ~]# ip a s eth0 # 可以查看到vip
[root@lvs1 ~]# ipvsadm -Ln # 出现规则
# 客户端连接测试
[root@client1 ~]# for i in {1..6}; do curl http://192.168.4.15/; done
apache web server2
apache web server2
apache web server2
apache web server2
apache web server2
apache web server2
# 为了效率相同的客户端在50秒内分发给同一台服务器。为了使用同一个客户端可以看到轮询效果,可以注释配置文件中相应的行后,重启keepavlied。
# 配置LVS2
[root@lvs1 ~]# scp /etc/keepalived/keepalived.conf 192.168.4.6:/etc/keepalived/
[root@lvs2 ~]# vim /etc/keepalived/keepalived.conf
12 router_id lvs2
21 state BACKUP
24 priority 80
[root@lvs2 ~]# systemctl start keepalived
[root@lvs2 ~]# ipvsadm -Ln # 出现规则
- 验证
# 1. 验证真实服务器健康检查
[root@web1 ~]# systemctl stop httpd
[root@lvs1 ~]# ipvsadm -Ln # web1在规则中消失
[root@lvs2 ~]# ipvsadm -Ln
[root@web1 ~]# systemctl start httpd
[root@lvs1 ~]# ipvsadm -Ln # web1重新出现在规则中
[root@lvs2 ~]# ipvsadm -Ln
# 2. 验证lvs的高可用性
[root@lvs1 ~]# shutdown -h now # 关机
[root@lvs2 ~]# ip a s eth0 # 可以查看到vip
# 客户端访问vip依然可用
[root@client1 ~]# for i in {1..6}; do curl http://192.168.4.15/; done
192.168.2.100
apache web server2
apache web server2
192.168.2.100
apache web server2
apache web server2