lvs+keepalived:高可用集群
keepalived为lvs应运而生的高可用服务。lvs的调度器无法做高可用,于是keepalived这个软件。实现的是调度器的高可用。但是:keepalived不是专门为lvs集群服务的,也可以做其他代理服务器的高可用。
lvs的高可用集群:主调度器和备调度器(可以有多个)一主两备 一主一备
主调度器能够正常运行时,由主调度器进行后端真实服务器的分配处理,其余的备用调度器处在冗余状态。
不参与集群的运转,主调度器出现了故障无法运行,备调度器才会承担主调度器的工作。一旦主调度器恢复工作,继续由主调度器进行处理,备调度器又成了冗余。
VRRP:keepalived是基于vrrp协议实现lvs服务的高可用。解决了调度器单节点的故障问题
VRRP协议:提高网络路由器的可靠性开发的一种协议
选举出主和备,预先设定好了主和备的优先级。主打优先级较高,备的优先级低。一旦开启服务器,优先级高的,会自定抢占主的位置,
VRRP组播通信:224.0.0.18 VRRP协议当中的主备服务器通过组播地址进行通信,交换主备服务器之间的运行状态。主服务器会周期性的发送VRRP报文消息,以告知其他备服务器,主服务器现在的状态。
主备切换:主服务器发生故障或者不可达,VRRP协议会把请求转移到备服务器,通过组播地址,VRRP可以迅速的通知其他服务器发生了主备切换,确保新的主服务器可以正常的处理客户端的请求。
故障恢复:一旦主服务器恢复通信,由组播地址进行通信,发现在恢复的主服务器优先级更高,会抢占原主服务器的位置,成为主服务器,调度和接受请求。
lvs-DR模式结合keepalived
keepalived的体系模块:
全局模块:core模块,负责整个keepalived启动加载和维护
VRRP模块:实现vrrp协议,包括主备切换
check模块:负责健康检查,检查后端真实服务器的健康检查。配置真实服务器的模块当中
Test1:主调度器 192.168.120.10
Test2:备调度器 192.168.120.70
后端真实服务器1:192.168.120.30
后端真实服务器2:192.168.120.40
VIP地址:192.168.120.100 客户端:192.168.120.60
关闭防火墙
配置主调度器test1:
安装服务
yum -y install ipvsadm keepalived
修改配置文件
vim /etc/keepalived/keepalived.conf
smtp_server 127.0.0.1
主备服务的id,主和备的id不能一致
router_id LVS_01
取消严格遵守vrrp协议功能,不取消vip无法连接
#vrrp_strict
标识身份,主备:MASTER/BACKUP
state MASTER
指定VIP地址的物理接口
interface ens33
虚拟路由器的id号
virtual_router_id 10
发送报文的间隔时间
advert_int 1
指定集群的vip地址
virtual_ipaddress {
192.168.120.10 }
健康检查的间隔时间
delay_loop 6
负载均衡的调度算法
lb_algo rr
指定lvs集群的工作方式,要大写
lb_kind DR
连接保持50秒
persistence_timeout 50
后端真实服务器的轮询权重
real_server 192.168.120.30 80 {
weight 1
检测目标的端口号
connect_port 80
连接超时时间
connect_timeout 3
重试的次数
nb_get_retry 3
重试的间隔描述
delay_before_retry 4
刷新
systemctl restart keepalived.service
查看策略
ipvsadm -ln
配置备服务器
远程复制
scp root@192.168.120.10:/etc/keepalived/keepalived.conf /etc/keepalived/
修改配置文件
vim /etc/keepalived/keepalived.conf
刷新
systemctl restart keepalived.service
配置后端真实服务器1
Yum安装nginx
vim /usr/local/nginx/html/index.html
This is test1
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.120.100
NETMASK=255.255.255.255
刷新
ifup ifcfg-lo:0
标识
route add -host 192.168.120.100 dev lo:0
vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
立即生效
sysctl -p
配置后端真实服务器2
跟上面操作一致
客户端查看
停止主调度器服务
备调度器
恢复主调度器
备调度器
nginx1:192.168.120.30 主
nginx2:192.168.120.40 备
nginx3:192.168.120.60 客户端
主备调度器
关闭防火墙
安装服务
yum -y install keepalived
主调度器:
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
vim /opt/check_nginx.sh
chmod 777 check_nginx.sh
systemctl restart keepalived.service
vim /usr/local/nginx/html/index.html
备调度器
scp root@192.168.120.30:/etc/keepalived/keepalived.conf /etc/keepalived/
vim /etc/keepalived/keepalived.conf
vim /opt/check_nginx.sh
chmod 777 check_nginx.sh
systemctl restart keepalived.service
vim /usr/local/nginx/html/index.html
主调度器关闭nginx
脑裂:主和备同时拥有VIP地址。在高可用系统当中,联系两个节点的心跳线,本来是一体的,动作协调的高可用系统。心跳线断开后,分裂成了两个独立的个体。主备之间失去了联系,都以为是对方出现了故障。两个调度器就像脑裂人一样
开始抢占主的位置,抢占VIP。主也有VIP,备也有VIP,导致整个集群失败。
软件层面:
- 配置文件
- tcpdump抓包分析
tcpdump -i ens33 vrrp -n
动态获取vrrp协议的所有网络数据包
重启
网络层面:
高可用服务器之间心跳线检测失败。主备之间无法进行通信。
硬件层面:
连接主备之间的心跳线老化
网卡或网卡的驱动失效,IP地址配置冲突
防火墙没有配置心跳线消息的传输通道。导致检测失败
后端服务器的配置问题,心跳方式不同,心跳广播冲突,软件BUGG。
如何解决keepalived脑裂的问题:
- 硬件:准备两条心跳线,这样断了一跳,依然能够传送心跳。
- 设置防火请一定要让心跳的消息通过
- 监控软件,实时检测(zabbix)
dev:开发环境 开发人员专用
sit:测试环境 测试人员使用(开发,运维)
pre:预生产环境 运维和开发(和最终的生产环境保持一致)
prd:生产环境(面向用户的环境)