LVS+keepalived部署
1 Keepalived是什么?
Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点。
后来Keepalived又加入了VRRP的功能,VRRP(VritrualRouterRedundancyProtocol,虚拟路由冗余协议)出现的目的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,因此Keepalvied一方面具有服务器状态检测和故障隔离功能,另外一方面也有HAcluster功能。
健康检查和失败切换是keepalived的两大核心功能。所谓的健康检查,就是采用tcp三次握手,icmp请求,http请求,udp echo请求等方式对负载均衡器后面的实际的服务器(通常是承载真实业务的服务器)进行保活;而失败切换主要是应用于配置了主备模式的负载均衡器,利用VRRP维持主备负载均衡器的心跳,当主负载均衡器出现问题时,由备负载均衡器承载对应的业务,从而在最大限度上减少流量损失,并提供服务的稳定性。
在上篇文章的基础上:
server2主机停止apache服务:systemctl stop httpd
真机测试:
lvs架构中,不管是NAT模式还是DR模式,当后端的rs宕机后,调度器依然会把请求转发到宕掉的rs上,这样肯定是不是想要的结果。其实,keepalived加入lvs就可以解决该问题,它不仅有高可用的功能,还有负载均衡的功能。
某台RSdown了 — 健康检测
– LVS本身down了—LVS冗余
• Keepalived – LVS管理软件
– 健康检测:支持4/7监测;
– 主备冗余:采用VRRP协议的HeartBeat;
2 Keepalived的部署
2.1 实验的环境
完整的keepalived+LVS架构需要有2台调度器分别安装keepalived来实现高可用,提供调度服务的只需要1台,另外一台作为备用。
调度器:server1(主)、server4(备)
RS:server2、server3
2.2 配置Keepalievd master服务器
(1)在server1安装 keepalived.软件:yum install -y keepalived.x86_64
(2)编辑keepalived配置文件: /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs { ##全局定义块
notification_email { ##邮件通知
root@localhost
}
notification_email_from keepalived@localhost ##设置邮件的发送地址
smtp_server 127.0.0.1 ##设置 smtp server 地址
smtp_connect_timeout 30 ##设置连接 smtp 服务器超时时间
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
# vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER ##keepalived主机,此状态是由 priority 的值来决定的
interface eth0 ##HA 监测网络接口
virtual_router_id 63 ##主、备机的 virtual_router_id 必须相同,取值 0-255
priority 100 ##主机的优先级,主机优先级一定要大于备机
advert_int 1 ##主备之间的通告间隔秒数
authentication {
auth_type PASS #设置验证类型,主要有 PASS 和 AH 两种
auth_pass 1111 #设置验证类型,主要有 PASS 和 AH 两种
}
virtual_ipaddress { ##指定漂移地址(VIP),即切换到MASTER时,这些IP会被添加,切换到BACKUP时,这些IP会被删除
172.25.12.100
}
}
## 虚拟服务配置
virtual_server 172.25.12.100 80 { #定义虚拟服务器
delay_loop 6 #定义虚拟服务器
lb_algo rr #lvs调度算法,这里使用轮叫
lb_kind DR #LVS 是用 DR 模式
# persistence_timeout 50
protocol TCP #指定转发协议类型
#配置服务节点 172.25.12.2
real_server 172.25.12.2 80 {
weight 1 ##默认为1,0为失效
TCP_CHECK { ##TCP方式的健康检查,realserve 的状态检测设置部分,单位是秒
connect_timeout 3 #3秒无响应超时
nb_get_retry 3 #重试次数
delay_before_retry 3 #重试间隔
}
}
#配置服务节点 172.25.12.3
real_server 172.25.12.3 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
(3)重启服务:systemctl restart keepalived.service
- 读取日志文件:
cat /var/log/messages
,可以看到server1为主 keepalived
(6)测试:某台RSdown了,健康监测
- server2主机停止apache服务:
systemctl stop httpd
,关于server2的ipvsadm策略自动清除
- 当server2服务器down时发送邮件server1
- 此时访问VIP时只有server3提供服务
- 重启server2:
systemctl restart httpd
,server1会收到服务启动的邮件,同时server2的ipvsadm策略自动添加
- 当没有服务宕机时,在真机器中测试的结果,发现测试页轮循输出
2.3 配置Keepalived BACKUP服务器
(1)在server4安装keepalived软件:yum install -y keepalived.x86_64
(2)编辑server4中的 keepalived配置文件: /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
# vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP ##keepalived备机
interface eth0
virtual_router_id 63
priority 50 ##备机的优先级必须低于master机的优先级,当主机出问题时自动切换到备份机;一旦keepalived主机恢复服务将从备机切换到主机
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.12.100
}
}
virtual_server 172.25.12.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
# persistence_timeout 50
protocol TCP
real_server 172.25.12.2 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.25.12.3 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
(3)启动keepalived服务:systemctl start keepalived.service
- 读取日志文件:
cat /var/log/messages
,server4作为辅助keepalived
2.4 Keepalived双机热备效果测试
双机热备的故障切换是由虚拟IP地址的漂移来实现,适用于各种应用服务器
- 停止server1的Keepalived服务:
systemctl stop keepalived.service
- 此时VIP 自动添加到server4,lvs的服务由server4提供
- 重启server1的Keepalived服务:
systemctl restarted keepalived.service
,此时lvs的服务将漂移到server1