目录
总体思路图:

keepalived:是为lvs应运而生的高可用服务。lvs的调度器无法做高可用,于是keepalived这个软件。实现的是调度器的高可用
keepalived只能配lvs用么?
不是。keepalived不是专门为lvs集群服务的,也可以做其他代理服务器的高可用
lvs的高可用集群:主调度器和备调度器(可以有多个),正产中一般一主两备一主一备
工作方式:
主调度器能够正常运行时,有调度器进行后端RS的分配处理。其余的备用调度器都处在冗余状态,不参与集群的运转。
主调度器出现故障无法运行时,备调度器才会承担主调度器的工作。
一旦主调度器恢复工作,继续由主调度器进行处理,备调度器又成为冗余状态
keepalived是基于VRRP协议实现lvs服务的高可用。解决了调度器单节点的故障问题。
VRRP协议:提高网络路由器的可靠性开发的协议
VRRP的工作流程:


主调度器:20.0.0.21
备调度器:20.0.0.22
RS1:20.0.0.23
RS2:20.0.0.24
vip:20.0.0.100
客户机:20.0.0.30
主调度器:
准备工作:安装软件,关闭防火墙,安装nginx
配置文件备份:

keepalived的体系模块:
全局模块:core模块,负责整个Keepalived启动加载和维护
VRRP模块:实现VRRP协议,主备切换。
check模块:负责健康检查,检查后端真实服务器的健康检查。配置在真实服务器的模块当中


指定的是DR模式

先将weight下面所有的内容先删除
real_server 对应RS


ipvsadm-save > /etc/sysconfig/ipvsadm


vim /etc/sysctl.conf

备用调度器:
远程复制过来上面配置的keepalived:
scp root@20.0.0.21:/etc/keepalived/keepalived.conf /etc/keepalived/
略微修改:



后端RS:
两边设置nginx静态页面


绑定到回环接口

内核优化,让vip地址禁止访问ARP请求
vim /etc/sysctl.conf


另一台RS一样操作:
客户机访问vip成功代表集群搭建成功
ip addr查看vip
接下来验证高可用:
模拟故障,关闭主调度器keepalived
验证备
再重启主,恢复主
脑裂:主备调度器之间同时拥有vip地址
keepalived脑裂:主和备同时拥有vip地址,在高可用系统中,联系两个节点的心跳线,本来是一体的,动作协调的高可用系统,心跳线断开之后,分裂成两个独立的个体。主备之间失去了联系,都以为是对方出现了故障。两个调度器,就像脑裂人一样开始抢占主的位置,抢占vip。主也有vip,备也有vip地址,导致整个集群失败。
解决方案:
配置文件错误
tcpdump抓包分析
重启keepalived服务,先启主再启备
高可用服务器之间心跳线检测失败。主备之间无法进行通信
连接主备之间心跳线老化
网卡或者相关驱动失效
4、其他:
IP地址配置冲突
防火墙没有配置心跳线消息的传输通道,导致检测失败
后端服务器的配置有问题,心跳方式不同、心跳广播冲突
软件bug
如何解决keepalived脑裂问题?
环境:
dev开发环境,开发人员专用
sit:测试环境,测试人员(开发,运维)
pre:预生产环境,运维和开发(和最终的生产环境要保持一致)
prd:生产环境(面向用户的最终环境)
nginx+keepalived实现nginx高可用
借助shell脚本检测本地nginx的状态

nginx:
nginx1:20.0.0.21主
nginx2:20.0.0.22备
nginx3:20.0.0.23客户端
防火墙关,打开nginx
安装keepalived,被封keepalived配置文件


备机scp远程复制keepalived改一下
id要改主备不能一致,BACKUP改,优先级改
两边shell脚本:
/opt/check_nginx.sh

做静态页面配置

重启keepalived
要先重启nginx再启keepalived
curl 20.0.0.100访问
模拟故障把主的nginx服务停了
ip addr看vip地址
访问curl 20.0.0.100
主恢复,nginx和keepalived都起来,若vip没过来 重启两次即可
总结:
keepalived:主要是为了实现调度器的主备高可用
工作方式:基于VRRP协议
软件层面:检查配置文件,重启
keepalived不是只能和lvs搭配,也可以和其他服务配合(nginx、http),实现高可用