目录
一、Keepalived概述
二、一个台格的集群应该具备的特性
三、Keepalived实现原理剖析
四、LVS+Keepalived高可用部署
1、配置负载调度器
2、配置节点服务器
3、浏览器测试
五、keepalived的抢占与非抢占模式
六、keepalived的脑裂故障
七、Nginx+Keepalived高可用部署
1、配置nginx负载调度器
2、准备Keepalived
企业应用中,单台服务器承担应用存在单点故障的危险,单点故障一旦发生,企业服务将发生中断,造成极大的危害。
Keepalived工具是专为LVS和HA设计的一款健康检查工具(通用性很广,可以不止对lvs进行高可用,还能支持nginx、HAProXY等应用程序)。
Keepalived支持:
Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能,VRRP(虚拟路由元余协议) 是针对路由器的一种备份解决方案。
环境:
负载调度器1:192.168.130.20
负载调度器2:192.168.130.30
节点服务器1:192.168.130.40
节点服务器2:192.168.130.50
①关闭防火墙和安全机制
②使用本地yum安装keepalived程序
yum -y install keepalived
③备份配置文件,并修改原配置文件
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak #备份配置文件
vim keepalived.conf
主服务器:
备服务器:
systemctl restart keepalived
④配置ipvsadm
yum -y install ipvsadm
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl enable --now ipvsadm
systemctl start keepalived
ipvsadm -ln #此时便会自动生成策略
①关闭防火墙和安全机制
②安装nginx
③前往nginx网页文件路径下,准备两个节点服务器的网页文件vim
systemctl start nginx
④准备内核参数
vim /etc/sysctl.conf
sysctl -p
⑤设置lo网卡
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-lo:0
vim ifcfg-lo:0
⑥添加路由(将访问VIP的数据报文限制在本地,避免通信紊乱)
抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP。
非抢占式俩节点state必须为bakcup,且必须配置nopreempt。
注意:这样配置后,我们要注意启动服务的顺序,优先启动的获取master权限,与优先级没有关系了。
①systemctl stop keepalived.service
② vim /etc/keepalived/keepalived.conf
③启动keepalived时要注意,两台负载调度器先启动keepalived的就是主,后启动keepalived就成为备。
现象:主服务器和备服务器同时拥有VIP地址,主和备都认为自己是MASTER,都会通过ip 命令生成VIP地址。
原因:因为主服务器和备服务器之间的通信链路中断,导致备服务器无法收到主服务器发送的VRRP通告消息,备服务器误认为主服务器故障了并通过命令生成VIP
解决:关闭主服务器或备服务器其中一个的keepalived服务
预防:(1)主服务器和备服务器之间添加双链路通信
(2)在主服务器上添加脚本进行判断与备服务器通信链路是否中断,如果确实是链路中断则自行关闭keepalived服务
(3)利用第三方应用或监控系统检测是否发生脑裂故障,如果发生脑裂故障则通过第三方应用或监控系统来关闭主服务器或备服务器上的keepalived服务
脚本:
chmod +x keepalived.sh
①关闭防火墙和安全机制
②安装nginx和keepalived
③准备nginx配置文件做反向代理(四层)
vim /etc/nginx/nginx.conf
systemctl enable --now nginx
①准备脚本
cd /etc/keepalived/
vim check_nginx.sh
chmod +x check_nginx.sh
②准备Keepalived配置文件
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
scp keepalived.conf 192.168.130.30:`pwd`
scp check_nginx.sh 192.168.130.30:`pwd`
systemctl enable --now keepalived
3、浏览器检测