keepalived为LVS应运而生的高可用服务。LVS的调度器无法做高可用,于是就引进了keepalived
实现了调度器的高可用
但是:keepalived不是专门为LVS集群服务的,也可以做其他代理服务器的高可用
lvs的高可用集群:主调度器和备调度器(可以有多台备)
主调度器能够正常运行时,由主调度器进行后端真实服务器的分配处理,其余的备用调度器都处于冗余状态
不参与集群的运转,只有主调度器挂了,备调度器才会顶上承担主调度器的工作
一旦主调度器恢复工作,继续由主调度器进行处理,这时候备调度器又变成了冗余。
基于VRRP协议来实现的,keepalived是基于vrrp协议来实现lvs服务的高可用。解决了调度器单节点的故障问题
vrrp协议:提高网络路由器的可靠性开发的一种协议
选举主和备。预先设好了主和备的优先级,主的优先级较高,备的优先级低。一旦开启服务器,优先级高的,会自动抢占主的位置。
vrrp的组播通信:224.0.0.18 VRRP协议当中的主备服务器就是通过组播地址来进行通信,交换主备服务器之间的运行状态,主服务器会周期性的发送VRRP的报文消息。以告知其他备服务器主服务器现在的状态
主备切换:主服务器发生了故障,或者不可达,VRRP协议会把请求转移到到备服务器,通过组播地址,VRRP可以迅速的通知其他服务器发生了主备切换,确保新的主服务器可以正常的处理客户端的请求
故障恢复:一旦主服务器恢复通信,由组播地址进行通信,发现恢复的主服务器优先级更高,会抢占原主服务器的位置,成为主服务器,调度和接受请求
LVS的DR模式结合keepalived
test1:主调度器 192.168.211.10
test2:备调度器 192.168.211.20
后端真实服务器:192.168.211.30
后端真实服务器192.168.211.40
vip地址:192.168.211.100
客户端:192.168.211.50
keepalived的体系模块
全局模块:core模块,负载整个keepalived启动加载和维护
vrrp模块:实现vrrp协议,主备切换
check:负责健康检查,检查后端真实服务器的健康,配置真实服务器的模块当中
smtp_server 127.0.0.1 设置邮箱地址为本地
vrrp_strict 这个要注释掉 ,不取消的话vip无法连接
state MASTER 标识身份,主叫MASTER 备叫BACKUP
interface ens33 指定vip地址的物理接口
priority 100 优先级
advert_int 1 发送报文的周期秒数 (在工作中没有必要太短 10S即可)
auth_type PASS
auth_pass 1111
认证类型 与密码
delay_loop 6
#健康健康的间隔时间 检查的后端真实服务器
lb_algo rr
负载均衡的调度算法
lb_kind NAT
这里默认是DR 在实验中,我们切换为DR 大写
persistence_timeout 50
连接保持 默认50 实验中改为0
protocol TCP
real_server 192.168.211.30 80 {
weight 1
TCP_CHECK {
connect_port 80 #检测目标的端口号
connect_timeout 3 #检测连接超时时间 3秒
nb* _ get _ retry 3 #重试的次数 *
}
脑裂:主和备都有vip地址。在高可用系统当中。联系两个节点的心跳线 本来是一体的,动作协调的高可用系统。心跳线断开后,分裂成了两个独立的个体,主备之间失去了联系,都以为是对方出现了故障,两个调度器,就像脑裂人一样,开始抢占主的位置,抢占vip。主也有vip,备也有vip,导致整个集群失败
软件层面:
1、配置文件
2、通过TCPdump抓包分析
重启即可解决脑裂问题
网络层面:
高可用服务器之间,心跳线检测失败。主和备之间无法进行通信
硬件层面:
连接主备之间的心跳线老化
网卡或者网卡的驱动失效,IP地址配置冲突
防火墙没有配置心跳线消息的传输通道,导致检测失败
也有可能是后端服务器的配置问题,心跳方式不同,心跳广播冲突 。软件Bug
如何解决keepalived脑裂的问题:
1、硬件:准备两条心跳线,这样断了一条,依然能够传送心跳消息
2、设置防火墙,一定要让心跳的消息通过
3、依靠监控软件实时检测(zabbix)
dev 开发环境 开发人员专用
sit 测试环境 测试人员使用(开发,运维也可以用)
pre 预生产环境 运维和开发 (和最终的生产环境要保持一致 )
PRD 生产环境 (面向用户的最终环境)