一、安装并启动keepalive
1.官网下载tar包,上传到服务器并解压
wget https://www.keepalived.org/software/keepalived-2.2.2.tar.gz
tar -zxvf keepalived-xxx.tar.gz
2.进入keepalive目录,配置安装
./configure --prefix=/usr/local/keepalived --sysconf=/etc
make && make install
即安装成功
3.配置文件路径/etc/keepalive/keepalive.conf
二、配置keepalive
(MASTER 192.168.1.151)
global_defs{
#路由id: 当前安装keepalived节点主机的标识符,全局唯一
router_id keep_151
}
vrrp_instance VI_1{
#表示状态是MASTER主机还是备用机BACKUP
state MASTER
#该实例绑定的网卡
interface ens33
#保证主备节点一致即可
virtual_router_id 51
#权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选
priority 100
#主备之间同步检查时间间隔,默认1秒
advert_int 2
#认证权限密码,防止非法节点进入
authentication {
auth_type PASS
auth_pass 1111
}
#虚拟出来的ip,可以有多个(vip)
virtual_ipaddress {
192.168.1.151
}
}
(BACKUP 192.168.1.152)
global_defs{
#路由id: 当前安装keepalived节点主机的标识符,全局唯一
router_id keep_152
}
vrrp_instance VI_1{
#表示状态是MASTER主机还是备用机BACKUP
state BACKUP
#该实例绑定的网卡
interface ens33
#保证主备节点一致即可
virtual_router_id 51
#权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选
priority 80
#主备之间同步检查时间间隔,默认1秒
advert_int 2
#认证权限密码,防止非法节点进入
authentication {
auth_type PASS
auth_pass 1111
}
#虚拟出来的ip,可以有多个(vip)
virtual_ipaddress {
192.168.1.151
}
}
附:查看网卡
ip addr
三、启动keepalive
进入sbin启动
./usr/local/keepalive/sbin/keepalive
四、注册keepalive为系统服务
- 进入keepalive解压目录
cd /home/keepalived-xxxx/keepalived/etc
- 分别拷贝init.d/keepalived 至 /etc/init.d
sysconfig/keepalived 至 /etc/sysconfig/
cp init.d/keepalived /etc/init.d/
cp sysconfig/keepalive /etc/sysconfig/
- 重启系统服务使之生效
systemctl daemon-reload
- 启动keepalive
systemctl start keepalive.servie
- 停止keepalive
systemctl stop keepalive.servie
- 重启keepalive
systemctl restart keepalive.servie
五、keepalive配置nginx自动重启
(如果主keepalive节点没有挂而nginx挂了,此时虚拟ip还是跟主绑定,因此需要keepalive能够自动重启nginx,实在重启不了,切换备用节点)
cd /etc/keepalived/
- 编写脚本
vim check_nginx_alive.sh
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
#判断nginx是否宕机,如果宕机了,尝试重启
if [$A -eq 0];then
/usr/local/nginx/sbin/nginx
#等待一小会再次检查nginx,如果没有启动成功,则停止keepalvie,使其启动备用机
sleep 3
if [$A -eq 0];then
killall keepalived
fi
fi
- 配置keepalive定时监听脚本
vim keepalived.conf
global_defs {
...
}
vrrp_script check_nginx_alive {
script "/etc/keepalived/check_nginx_alive.sh"
interval 2 # 每隔两秒运行上述脚本
weight 10 #如果脚本运行成功,则升级权重+10
}
vrrp_instance VI_1 {
...
#脚本调用
track_script {
check_nginx_alive #追踪nginx脚本
}
}
六、双主热备高可用
上述方案,备用机并没有被很好地利用,因此可以采用双主热备。
(MASTER 192.168.1.151)
global_defs{
#路由id: 当前安装keepalived节点主机的标识符,全局唯一
router_id keep_151
}
vrrp_instance VI_1{
#表示状态是MASTER主机还是备用机BACKUP
state MASTER
#该实例绑定的网卡
interface ens33
#保证主备节点一致即可
virtual_router_id 51
#权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选
priority 100
#主备之间同步检查时间间隔,默认1秒
advert_int 2
#认证权限密码,防止非法节点进入
authentication {
auth_type PASS
auth_pass 1111
}
#虚拟出来的ip,可以有多个(vip)
virtual_ipaddress {
192.168.1.151
}
}
vrrp_instance VI_2{
#表示状态是MASTER主机还是备用机BACKUP
state BACKUP
#该实例绑定的网卡
interface ens33
#保证主备节点一致即可
virtual_router_id 52
#权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选
priority 80
#主备之间同步检查时间间隔,默认1秒
advert_int 2
#认证权限密码,防止非法节点进入
authentication {
auth_type PASS
auth_pass 1111
}
#虚拟出来的ip,可以有多个(vip)
virtual_ipaddress {
192.168.1.152
}
}
(BACKUP 192.168.1.152)
global_defs{
#路由id: 当前安装keepalived节点主机的标识符,全局唯一
router_id keep_152
}
vrrp_instance VI_1{
#表示状态是MASTER主机还是备用机BACKUP
state BACKUP
#该实例绑定的网卡
interface ens33
#保证主备节点一致即可
virtual_router_id 51
#权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选
priority 80
#主备之间同步检查时间间隔,默认1秒
advert_int 2
#认证权限密码,防止非法节点进入
authentication {
auth_type PASS
auth_pass 1111
}
#虚拟出来的ip,可以有多个(vip)
virtual_ipaddress {
192.168.1.151
}
}
vrrp_instance VI_2{
#表示状态是MASTER主机还是备用机BACKUP
state MASTER
#该实例绑定的网卡
interface ens33
#保证主备节点一致即可
virtual_router_id 52
#权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选
priority 100
#主备之间同步检查时间间隔,默认1秒
advert_int 2
#认证权限密码,防止非法节点进入
authentication {
auth_type PASS
auth_pass 1111
}
#虚拟出来的ip,可以有多个(vip)
virtual_ipaddress {
192.168.1.152
}
}