LVS遗留问题:
- LVS无法做到后端真实服务器的健康检查,就会导致其中一台挂了,ipvs规则不会自动删除,导致用户请求还是会转到已经失效的服务器上面
解决方案:
- 编写shell脚本检测服务状态,进行添加和删除ipvs规则
- keepalived高可用自带LVS模块,可以做到基于TCP、UDP协议实现ipvs规则自动添加和删除
keepalived
- vrrp协议以守护进程方式的实现
- 能够根据配置文件自动生成ipvs规则
- 对各RS做健康状态检测
vrrp虚拟路由冗余协议
通过把几台服务器联合组成一台虚拟的路由设备,将虚拟路由设备的IP地址作为用户的默认网关实现与外部网络通信。当网关设备发生故障时,VRRP机制能够选举新的网关设备承担数据流量,从而保障网络的可靠通信。
- VRID:虚拟路由器的标识,由多台服务器组成的虚拟路由器,配置需要相同
- 虚拟MAC地址:虚拟路由器回应ARP请求时,使用虚拟MAC地址,而不是接口的真实MAC地址
- 虚拟IP地址:进行多台服务器漂移的地址,负责对外
- Master路由器(Virtual Router Master):承担转发报文任务的VRRP设备
- Backup路由器(Virtual Router Backup):一组没有承担转发任务的VRRP设备,当Master设备出现故障时,它们将通过竞选成为新的Master设备
- 优先级:竞选的条件(高的优先)
- 通过真实网卡地址发送组播地址(224.0.0.18)进行主备心跳检测
核心组件:
- vrrp stack
- checkers(子进程实现健康检查)
- ipvs wrapper --> ipvs(子进程实现ipvs规则)
最基本的配置文件组成
- Global 全局配置
- VRRPD协议实例配置
- LVS虚拟服务器规则配置
实验基于LVS-NAT模式
拓扑
1、需要配置2个VRRPD实例,一个是外网VIP地址,一个是内网的VIP地址
2、主备切换是建立在2个实例需要属于一个同步的组(其中一个故障,服务就无法访问,就要触发主备切换)
3、如果还有多余网卡会影响到服务正常,需要添加端口检测来触发主备切换
1、安装配置LVS-NAT模式
可以根据前面文章搭建,注意网关这次要改成内网的VIP地址
2、安装配置keepalived
yum install -y keepalived
vi /etc/keepalived/keepalived.conf
global_defs {
router_id LVS1
}
vrrp_sync_group VG1 {
group {
VI_1 #vrrp实例名(外网)
VI_2 #vrrp实例名(内网)
}
}
vrrp_instance VI_1 {
state MASTER #主设备,备设备改成BACKUP
interface ens37 #监听端口,也就是会定期发生arp组播进行检测
virtual_router_id 51 #虚拟路由器的标识,用来区分多个instance的VRRP组播,主备要相同(同网段多实例不能相同)
priority 100 #优先级用于选举MASTER(1-255)越大优先越高,备设备小于100
advert_int 1 #选举检测时间,健康检测
authentication { #认证
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #VIP地址,可以写多个(格式可以查看参考)
192.168.32.240 #外网
}
}
vrrp_instance VI_2 { #添加内网的VIP
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.26.240 #内网
}
}
virtual_server 192.168.32.240 80 { #设置LVS的虚拟服务,这边设置就是ipvsadm -A -t 192.168.32.128:80 -s rr)
delay_loop 6
lb_algo rr
lb_kind NAT
protocol TCP
real_server 192.168.26.141 80 { #设置真实服务,就是设置ipvsadm -a -t 192.168.32.128:80 -r 192.168.26.141:80 -m)
weight 1
TCP_CHECK { #TCP检测机制
connect_port 80
connect_timeout 3
retry 2
delay_before_retry 4
}
}
real_server 192.168.26.142 8080 {
weight 1
TCP_CHECK {
connect_port 8080
connect_timeout 3
retry 2
delay_before_retry 4
}
}
}
router_id:命名主机名,类似hostname
vrrp_sync_group:实现2个vrrp实例中只要一个发生切换,就会同步切换,不然会导致服务无法访问(外网和内网是依赖关系)
实验基于LVS-DR模式
对比NAT模式要简单很多,只需要一个vrrp实例即可,也涉及不到vrrp组
1、安装配置LVS-NAT模式
可以根据前面文章搭建,浮动IP就不要自己配置了
2、安装配置keepalived
yum install -y keepalived
vi /etc/keepalived/keepalived.conf
global_defs {
router_id LVS1
}
vrrp_instance VI_1 {
state MASTER #主设备,备设备改成BACKUP
interface ens33 #监听端口,也就是会定期发生arp组播进行检测
virtual_router_id 51 #虚拟路由器的标识,用来区分多个instance的VRRP组播,主备要相同(同网段多实例不能相同)
priority 100 #优先级用于选举MASTER(1-255)越大优先越高,备设备小于100
advert_int 1 #选举检测时间,健康检测
authentication { #认证
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #VIP地址,可以写多个(格式可以查看参考)
192.168.26.240 #内网
}
}
virtual_server 192.168.26.240 80 { #设置LVS的虚拟服务,这边设置就是ipvsadm -A -t 192.168.32.128:80 -s rr)
delay_loop 6
lb_algo rr
lb_kind DR
protocol TCP
real_server 192.168.26.141 80 { #设置真实服务,就是设置ipvsadm -a -t 192.168.32.128:80 -r 192.168.26.141:80 -g)
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
retry 2
delay_before_retry 4
}
}
real_server 192.168.26.142 80 {
weight 1
TCP_CHECK { #TCP检测机制
connect_port 80
connect_timeout 3
retry 2
delay_before_retry 4
}
}
}
日志文件
- /var/log/messages
参考:https://keepalived.org/manpage.html
参考:https://keepalived.readthedocs.io/en/stable/configuration_synopsis.html#