LVS-keepalived实现高可用
概念:
本章核心:
Keepalived为LVS应运而生的高可用服务。LVS的调度无法做高可用,预算keepalived这个软件,实现了调度器的高可用。
但是:Keeplived不是专门为LVS集群服务的,也可以做其他服务器的高可用
LVS的高可用集群:主调度器和备调度器(可以有多个)一般都是一主两备,一主一备
主调度器能够正常运行时,由主调度器进行后端真实服务器的分配处理,其余的备用调度器处在冗余状态,不参与集群的运转,主调度器挂了无法运行,此时备用调度器才会承担主调度器的工作,一旦主调度器恢复工作,继续由主调度器进行处理,备调度器用成了冗余。
VRRP:keepalived时基于vrrp协议实现LVS服务的高可用,解决了调度器单节点的故障问题
复习一下VRRP:
复习一下vrrp协议:提高网络路由器的可靠性开发的一种协议。
选举出主和备:预先设定好主和备的优先级,住的优先级较高,备的优先级低,一旦开启服务器,优先级高的,会自定抢占主的位置
VRRP组播通信:224.0.0.18 VRRP协议当中的主备服务器通过组播地址进行通信,交换主备服务器的之间的运行状态,主服务器会周期性的发送VRRP的报文消息,已告知其他备服务器,主服务器形现在的状态
主备切换:主服务器发生故障或者不可达,VRRP协议会把请求转义到备服务器,通过组播地址,VRRP可以迅速通知其他服务器发生了主备切换,确保新的主服务器可以正常的处理客户端的请求
故障恢复:一旦服务器恢复通信,由组播地址进行通信,发现在恢复的主服务器优先级更高,会抢占原主服务器的位置,成为主服务器,调度和接受请求。
LVS—DR模式结合keepalived
主的故障恢复之后,VIP地址转移
实验配置:
Test1:主调度器
Test2:备调度器
后端真实服务器1
后端真实服务器2
VIP地址
客户端
需要的工具
Keepalived的体系和模块
全局模块:core模块,负责整个keepalived启动加载和维护
VRRP模块:实现VRRP协议,包括主备切换
Check模块:负责健康检查,检查节点服务器,检查后端真实服务器的健康检查。配置在真实服务器的模块当中
关闭主调度服务器的转发功能
配置备服务器
备调度器远程复制
配置后端真实服务器
配置虚拟网卡
开一台客户机验证
验证keepalived机制是否工作正常
主调度器
备调度器
主调度器恢复工作之后
脑裂概念:
主和备同时拥有VIP地址,在高可用系统当中,联系两个系统的心跳线,本来是一体的,他是一个动作协调的高可用系统。
心跳线断开之后,分裂成两个独立的个体,主和备之间失去了联系,两个调度器,就像脑裂人一样开始抢占主的位置,抢占VIP,主也有VIP,备也有VIP,导致整个集群失败。
怎么解决脑裂问题:
软件层面:
- 配置文件问题
- Tcpdump抓包分析
- 先重启主,再重启备
网络层面:
- 高可用服务器之间他们的心跳线检测失败,主备之间无法进行通信
硬件层面:
- 连接主备之间的心跳线老化
- 网卡或者网卡驱动失败,IP地址配置冲突
- 防火墙导致的,防火墙没有配置心跳消息的传输通道,导致检测失败
- 后端服务器的配置问题,心跳方式不同,心跳广播冲突,软件bug
如何解决keepalived脑裂的问题:
- 硬件:准备两条心跳线,这样断了一条也无所谓,依然能够传送心跳消息
- 设置防火墙一定要让心跳的消息通过
- 依靠监控软件实时检测
生产当中常见的环境:
Dev 开发环境 开发人员专用
Sit 测试环境,测试人员使用(开发运维)
pre 预生产环境,运维和开发(和最终的生产环境保持一致)
Prd 生产环境(面向用户的环境)
Keepalived用于Nginx高可用:
核心图:
实验配置:
Nginx1:192.168.233.61主
Nginx2:192.168.233.62 备
Nginx3:配置VIP
实验前提:
关闭防火墙和安全机制
三台Nginx安装keepalived
Nginx1:
配置文件后面的全部删除
随后添加内容
配置文件最后
Nginx2配置:
另一台nginx直接复制配置文件
改一下优先级,和主备
写一个脚本文件:
把脚本复制到51主当中
赋权777
配置全部完成,停掉主服务
查看VIP地址是否转移
实现高可用
重启nginx服务,再重启keepalived,记得先后顺序,检测是否出现脑裂问题