文章目录
简介
正常情况下的应用系统都是多机器部署,通过nginx做负载均衡和网关来访问应用, 但是在实际场景中,会出现nginx所在的服务器因为特殊原因宕机或者网络异常,这个时候整个应用系统都会处于一个无法访问的状态,这个时候就需要keepalived这个神器了。
keepalived
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器.
准备工作
准备2台机器
都需要提前安装到nginx,安装请参考nginx安装和入门博客
- 192.168.52.136 nginx主服务器
- 192.168.52.130 nginx备服务器
安装keepalived
yum install -y keepalived
设置开机自启动
chkconfig keepalived on
修改配置文件
vi /etc/keepalived/keepalived.conf
主配置文件
需要修改的属性
- interface 绑定 IP 的网卡口
- mcast_src_ip 填写本机ip
- virtual_ipaddress 虚拟IP,主备要一致。
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
#keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
vrrp_script chk_nginx {
#运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务
script "/etc/keepalived/nginx_check.sh"
interval 1 #检测时间间隔
weight -2 #如果条件成立的话,则权重 -2
}
vrrp_instance VI_1 {
state MASTER #来决定主从
interface ens33 # 绑定 IP 的网卡口,根据自己的机器填写 (修)
virtual_router_id 120 # 虚拟路由的 ID 号, 两个节点设置必须一样
mcast_src_ip 192.168.52.136 #填写本机ip (修)
priority 100 # 节点优先级,主要比从节点优先级高
advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s
authentication {
auth_type PASS
auth_pass 1111
}
# 将 track_script 块加入 instance 配置块
track_script {
chk_nginx #执行 Nginx 监控的服务
}
virtual_ipaddress {
192.168.52.120/24 # 虚拟ip,通过虚拟Ip切换进行nginx主备切换功能(修)
}
}
备配置文件
! Configuration File for keepalived
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务
interval 1 #检测时间间隔
weight -2 #如果条件成立的话,则权重 -20
}
vrrp_instance VI_1 {
state BACKUP #来决定主从
interface ens33 # 绑定 IP 的网卡名称,根据自己的机器填写
virtual_router_id 120 # 虚拟路由的 ID 号, 两个节点设置必须一样
mcast_src_ip 192.168.52.130 #填写本机ip
priority 99 # 节点优先级,主要比从节点优先级高
advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s
#nopreempt #设置为不抢夺VIP
authentication {
auth_type PASS
auth_pass 1111
}
# 将 track_script 块加入 instance 配置块
track_script {
chk_nginx #执行 Nginx 监控的服务
}
virtual_ipaddress {
192.168.52.120/24 # 虚拟ip
}
}
检查nginx进程的脚本
检测nginx进程是否存在,如果不存在则启动Nginx进程,休眠2秒后再次检测,如果还是不存在,杀死keepalived服务进程VIP切换.
vi /etc/keepalived/nginx_check.sh
chmod 755 /etc/keepalived/nginx_check.sh
NGINXPID="/usr/local/nginx/logs/nginx.pid"
if [ ! -f $NGINXPID ];then
/usr/local/nginx/sbin/nginx
sleep 2
NGINXPID="/usr/local/nginx/logs/nginx.pid"
if [ ! -f $NGINXPID ];then
killall keepalived
fi
fi
测试
启动keepalived
两台机器都要启动
# 启动 | 停止 | 重启
service keepalived start | stop | restart
启动完keepalived服务后,查看ip地址
ip addr
通过VIP的地址访问nginx默认页
停止主节点的keepalived服务
service keepalived stop
通过命令查看到主节点的绑定的VIP地址已经切换了
查看备节点的网卡信息,可以看到VIP已经切换成功了。
这个时候通过VIP去访问的时候,发现访问的nginx服务已经是130备节点上的了。
恢复主节点keepalived服务
service keepalived start
这个时候能看到VIP的地址已经成功切换到了主机器了。