注意:用keepalived将多台nginx组成高可用集群时,nginx不能用docker启动
1 下载 keepalived: yum -y install keepalived
2 查看网卡: ip addr ,有eth0,en33这种的就是网卡名,inet后面是ip地址,一个网卡还可以绑定多个ip地址,
比如给eth0网卡添加192.168.0.150ip命令: ip addr add 192.168.0.150/24 dev eth0
3 编辑keepalived配置文件(主机从机都要配): vim /etc/keepalived/keepalived.conf
删除 global_defs中的 vrrp_skip_check_adv_addr 和 vrrp_strict
vrrp_instance VI_1 {
state MASTER :master表示主,backup表示从
interface eth0 :网卡名,用ip addr命令查看网卡名
virtual_router_id 51:主从都一样即可
priority 100 :保证主比从大就行
advert_int 1
authentication { :主从之间认证的用户名密码
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.100 //虚拟ip,主从设成一样就行,腾讯云服务器需要申请VIP,并将VIP和公网ip进行绑定
}
}
4: 开启keepalived命令: systemctl start keepalived,开启后再执行 ip addr就会看到eth0网卡下多了配置的虚拟ip
如果执行 systemctl stop keepalived再查看 ip addr,就会发现eth0网卡下的虚拟ip消失了
5 在/etc/keepalived目录中创建check_nginx.sh脚本,让keepalived监控nginx运行状态
#!/bin/bash
A=`ps -C nginx --no-header |wc -l` //统计nignx进程数
if [ $A -eq 0 ];then //如果进程数为0说明nginx没启动,则
/usr/local/nginx/sbin/nginx (这个是nginx所在目录,每个机器nginx安装目录可能不一样) //启动nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then //启动后再次查看nginx进程数
exit 1 // 如果进程数还是0表示nginx启动失败,就结束keepalived进程
else
exit 0
fi
else
exit 0
fi
给脚本添加可执行权限
6:把启动脚本添加到keepalived配置文件中去:
6.1添加
vrrp_script check_nginx { #定义一个策略,策略名为"check_nginx"
script "/etc/keepalived/check_nginx.sh" #执行一次/etc/keepalived/check_nginx.sh脚本文件
interval 1 #每隔1秒钟
weight -20 #如果发现nginx启动失败了,将当前的机器的priority-20
}
6.2 vrrp_instance中添加:
track_script { #指定keepalived跟踪策略为 "check_nginx"
check_nginx
}
主从节点都启动nginx和keepalived以后,执行ip addr命令,正常情况下只有主节点网络有虚拟ip,从节点没有虚拟ip,如果主节点nginx挂掉并且一直起不来,主节点的
keepalived也会停止运行,从节点的keepalived收不到主节点发送的心跳消息后就会把自己升成主节点,虚拟Ip就会出现在从节点网卡上