目录
一、在线安装
二、离线安装
(1)、 下载
(2)、安装依赖包
(3)、解压文件
(4)、编译
(4.1)、进入 keepalived-2.2.8 目录中
(4.2)、安装Keepalived
(5)、配置文件修改
(6)、启动
(7)、检查启动状态
(8)、 设置开机自启
(9)、配置从节点
(10)、启动从节点keepalived
(11)、检查从节点状态
(12)、主从节点差异
三、验证VIP漂移
(1)、主节点停止keepalived
(2)、查看从节点状态
(3)、启动主节点
(4)、查看主从状态
四、配置非抢占式
(1)、概念
(2)、非抢占配置
(3)、vip漂移演示
五、问题
(1)、脑裂问题
(1.1)、现象:
(1.2)、脑裂故障原因
(1.3)、故障排查
(1.4)、处理办法之关闭防火墙
(1.5)、处理办法之添加vrrp协议
(2)、WARNING - this build will not support IPVS with IPv6
(2.1)、处理方式:
一、在线安装
执行命令
yum install keepalived
执行完成后,修改配置文件并启动,配置文件启动方法参考离线安装方式
二、离线安装
(1)、 下载
下载源码包,根据自己需要选择版本,本次安装使用的是2.2.8版本
(2)、安装依赖包
keepalived依赖包有openssl-devel 、net-snmpdevel、libnl、libnl-devel,需要先安装,安装方法可以参考本人nginx安装文章,整体安装的包在nginx基础上多两个,可能会有些雍余,但是不影响。
具体明细如下图:
执行命令
rpm -Uvh *.rpm --nodeps --force
(3)、解压文件
(4)、编译
(4.1)、进入 keepalived-2.2.8 目录中
(4.2)、安装Keepalived
依次执行命令:
./configure --prefix=/usr/local/keepalived
make
make install
prefix后边的路径为keepalived安装的路径
进入到/usr/local下可以看到keepalived安装目录
(5)、配置文件修改
进入目录/usr/local/keepalived/etc/keepalived
复制keepalived.conf.sample 并且命名为keepalived.conf
修改配置文件 keepalived.conf
! Configuration File for keepalived
global_defs { #全局配置
router_id lb132 #标识身份->名称
}vrrp_instance VI_1 { #vrrp 实例定义部分 VI_1
state MASTER #标识角色状态:主节点
interface ens33 #网卡绑定接口:绑在ens33 上
virtual_router_id 51 #虚拟路由id
priority 100 #优先级 主节点值要大于备用节点
advert_int 1 #监测间隔时间:1秒
authentication { #认证
auth_type PASS #认证方式 主从节点要一致
auth_pass 1111 #认证密码 主从节点要一致
}
virtual_ipaddress {
192.168.75.131 #虚拟的VIP地址
}
}
(6)、启动
systemctl start keepalived
(7)、检查启动状态
systemctl status keepalived
或者 ip a
(8)、 设置开机自启
systemctl enable keepalived
(9)、配置从节点
在从节点服务器中按以上步骤安装keepalived,对应的配置文件与主节点有些差别,具体如下
! Configuration File for keepalived
global_defs {
router_id lb129
}vrrp_instance VI_1 {
state BACKUP #标识角色状态:备节点
interface ens33
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.75.131
}
}
(10)、启动从节点keepalived
systemctl start keepalived
(11)、检查从节点状态
systemctl status keepalived
或者 ip a
从节点此时不应该有虚拟vip
(12)、主从节点差异
keepalived配置区别 | Master节点配置 | Backup节点配置 |
---|---|---|
router_id(唯一标识) | router_id lb132 | router_id lb129 |
state(角色状态) | state MASTER | state BACKUP |
priority(优先级) | priority 100 | priority 50 |
三、验证VIP漂移
(1)、主节点停止keepalived
systemctl stop keepalived
#查看状态
ip a
(2)、查看从节点状态
ip a
(3)、启动主节点
systemctl start keepalived
(4)、查看主从状态
四、配置非抢占式
(1)、概念
上边的配置方式都是抢占方式,即如果Master故障,Backup自动接管,Master恢复后会夺权,
所以抢占方式与非抢占方式的区别为:
- 抢占式:如果Master恢复后将VIP抢回来,就叫抢占式
- 非抢占式:节点都是BACKUP,只要节点成为为VIP,其他节点就是启动恢复,哪怕式权重高也不会把VIP抢回来,就叫非抢占式。
(2)、非抢占配置
配置步骤:
1.两个节点上的state都必须配置为BACKUP
2.两个节点都必须加上配置nopreempt
3.其中一个节点的优先级必须高于另一个节点的优先级
两个节点配置如下:
## lb132
! Configuration File for keepalived
global_defs {
router_id lb132
}
vrrp_instance VI_1 {
state BACKUP
nopreempt
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.75.131
}
}
## lb129
! Configuration File for keepalivedglobal_defs {
router_id bl129
}
vrrp_instance VI_1 {
state BACKUP
nopreempt
interface ens33
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.75.131
}
}
(3)、vip漂移演示
分别启动129和132服务中的keepalived服务,虽然132的权重比较高,但是因为是非抢占式并且129先启动的,所以vip不会漂移到132中。这也说明非抢占模式只要
五、问题
(1)、脑裂问题
(1.1)、现象:
如果两台服务器都认为自己是Master,就会出现VIP在两台服务器上,造成冲突
(1.2)、脑裂故障原因
- 服务器网线松动等网络故障
- 服务器硬件故障发生损坏现象而崩溃
- 主备都开启firewalld防火墙
- 配置文件错误
(1.3)、故障排查
先排查对应的配置文件是否有错误,确保配置文件没有问题
如果配置文件没有错误,则重启keepalived服务
systemctl restart keepalived
观察日志
tail -f /var/log/messages
主节点重启后,它会直接去抢MASTER,日志如下:
从节点重启后,先是进入BackUp状态,然后马上又会争抢进入Master状态,日志如下:
日志显示,从节点先进入 BACKUP,但是紧接着从节点Receive advertisement timeout,接收广播超时后,进入主节点状态。
此时检查了服务器防火墙状态发现,防火墙状态是开启状态。
(1.4)、处理办法之关闭防火墙
关闭从节点防护墙,查看日志发现,从节点正常
这种关闭防火墙的方式可以解决此问题,但在线上是不可行的。
(1.5)、处理办法之添加vrrp协议
通过命令查看防火墙当前配置
firewall-cmd --list-all
通过命令添加协议
firewall-cmd --zone=public --add-protocol=vrrp --permanent
#重启防火墙
firewall-cmd --reload
查看从节点状态
从节点状态正常
(2)、WARNING - this build will not support IPVS with IPv6
(2.1)、处理方式:
执行./configure --prefix=/usr/local/keepalived 时候报该警告,是因为对应的依赖libnl、libnl-devel没有安装,直接安装如下的对应的依赖包即可