Keepalived
配置Keepalived -主
- 进入/etc/keepalived
- 通过命令 vim keepalived.conf
#全局配置
global_defs {
#路由id:当前安装keepalived的节点主机标识符,保证全局唯一
router_id keep_133
}
#基于vrrp的一个实例 就是一个服务器节点
vrrp_instance VI_1 {
#表示的状态 当前133nginx的主节点 master|backup
state MASTER
#当前实例绑定的网卡
interface ens33
#虚拟路由ip 保证主备节点一致即可
virtual_router_id 51
#权重 谁的优先级高,在master挂掉之后,就成为master
priority 100
#主备之间同步检查时间间隔 s
advert_int 1
#认证授权密码,防止非法节点进入
authentication {
auth_type PASS
auth_pass 1111
}
#vip
virtual_ipaddress {
172.16.139.151
}
}
- 查看网卡名称
- 启动keepalived
cd /usr/local/keepalived/
- 查看进程
ps -ef | grep keepalived
- 再次查看网卡名称
在网卡ens33下,多了个151,这个就是虚拟ip,上面配置文件中配置的ip
把Keepalived注册为系统服务
-
目前结束Keepalived需要kill进程
-
将Keepalived注入到系统服务操作会更好
2.1 cd /home/software/keepalived-2.0.20/keepalived/etc/
放到系统两个不同的etc目录下
2.2 cp init.d/keepalived /etc/init.d/
cp sysconfig/keepalived /etc/sysconfig/
刷新服务加载
systemctl daemon-reload
systemctl start keepalived.service
配置Keepalived -备
- 选择另外一个服务器配置备用节点,安装Keepalived
- 配置备节点 Keepalived
cd /etc/keepalived/
vim keepalived.conf
bal_defs {
#路由id:当前安装keepalived的节点主机标识符,保证全局唯一
router_id keep_137
}
vrrp_instance VI_1 {
#表示的状态 当前137nginx的备节点 master|backup
state BACKUP
#当前实例绑定的网卡
interface ens33
#虚拟路由ip 保证主备节点一致即可
virtual_router_id 51
#权重 谁的优先级高,在master挂掉之后,就成为master
priority 80
#主备之间同步检查时间间隔 s
advert_int 1
#认证授权密码,防止非法节点进入
authentication {
auth_type PASS
auth_pass 1111
}
#vip
virtual_ipaddress {
172.16.139.151
}
}
3.启动keepalived
systemctl start keepalived
Keepalived实现双机主备高可用演示
- 配置域名
其中,133是主节点 137是备节点 151是主备Keepalived配置文件中的虚拟IP(vip) - 启动主备节点的Keepalived并查看ip
2.1 133主服务器上
2.2 137备服务器上
我们发现151虚拟IP绑定的是主节点133 - 请求151所对应的域名
访问的也是主节点133 - 模拟133节点Keepalived服务挂掉,再次请求151所对应的域名
此时发现151访问的服务器是备用节点137,查看节点上面的ip发现151vip已经绑定到备用节点上。主节点上ip已经没有151了
4.1 133主服务器上
4.2 137备服务器上
- 模拟133节点恢复Keepalived服务
在133节点上: systemctl start keepalived.service
发现又重新访问133主服务器了,这样就实现了高可用。
Keepalived配置nginx自动重启
- 假设nginx宕机了,查看IP
请求域名,发现访问不了了,这是因为请求的域名还是访问到133主节点的nginx,为了保证高可用,应该要让Keepalived这个组件定时的检测nginx是否正常,如果nginx发生问题,要尝试重启Nginx,重启成功则正常继续。如果重启失败,则需要切换到137备用节点。
- 增加nginx重启检测脚本
2.1 cd /etc/keepalived/
vi 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,如果没有启动成功,则停止keepalived,使其启动备用机
sleep 3
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
执行shell脚本发现没有执行权限,赋予权限
chmod +x check_nginx_alive.sh
执行文件
./check_nginx_alive.sh
- 做完上述命令再次请求域名
发现域名可以再次请求,说明nginx已经通过刚刚shell命令重启
- 配置让keepalived定时监听nginx脚本
vi keepalived.conf
添加配置
vrrp_script check_nginx_alive {
script "/etc/keepalived/check_nginx_alive.sh"
interval 2 #每隔两秒运行上一行脚本
weight 10 #如果脚本运行成功,则升级权重+10
}
- 配置了一个脚本,需要去调用,在vrrp_instance中新增监控
track_script { check_nginx_alive #追踪nginx脚本 }
- 重启keepalived让配置文件生效
systemctl restart keepalived.service - 手动停止nginx发现 还是可以正常运行,这样就实现了nginx 7*24小时之久运行