keepalived + nginx 实现高可用 - AskaJohnny
source link: https://www.cnblogs.com/askajohnny/p/16981112.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
keepalived + nginx 实现高可用
本篇主要介绍一下 keepalived + nginx 来实现 对于nginx的高可用, 还是简单的主备模式
前面有了解keepalived 的主备的基本使用, 但是那种是针对宕机等情况 停止了keepalived 的进程实现的 vip的漂移,本篇把keepalived 添加校验nginx存活脚本 实现针对nginx的监控, 实现nginx的高可用
2.准备工作
准备2台机器 , 把111定义为 keepalived 的 MASTER 节点
ip | keepalived |
---|---|
172.16.225.111 | MASTER |
172.16.225.110 | BACKUP |
分别在2台服务器上配置好nginx 并且修改默认的 index.html 添加上 ip 标识方便区分. 如下:
3.配置 keepalived
在keepalived 的配置文件中的 instance 里面配置 track_script 指定 检查nginx是否存活的脚本
3.1 master (172.16.225.111)
! Configuration File for keepalived
global_defs {
router_id LB111
}
vrrp_script chk_nginx {
# 具体的脚本
script "/etc/keepalived/nginx_check.sh"
interval 2 # 2s执行一次
weight -20 # 失败一次 则优先级 -20
}
vrrp_instance VI_1 {
state MASTER
interface ens160
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.16.225.200
}
# 指定脚本
track_script {
chk_nginx
}
}
3.2 master (172.16.225.110)
! Configuration File for keepalived
global_defs {
router_id LB111
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface ens160
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.16.225.200
}
track_scrip {
chk_nginx
}
}
4.配置 nginx_check.sh
主要是这个脚本 这个脚本的内容就是 通过ps命令检查 nginx进程是否存活
,如果不存活 则尝试启动一次 则检查 ,如果还是启动不起来 则 把keepalived 关闭
, 从而让 keepalived 能检测到 并且 vip 能够漂移到其他机器
#!/bin/bash
status=$(ps -C nginx --no-heading|wc -l)
if [ "${status}" = "0" ]; then
# 尝试启动一次
systemctl start nginx
# 再次检查ngixn 进程
status2=$(ps -C nginx --no-heading|wc -l)
if [ "${status2}" = "0" ]; then
# 关闭 keepalived
systemctl stop keepalived
fi
fi
需要在2台机器上都配置上这个脚本
# 给脚本一个 可执行的权限
chmode +x /etc/keepalived/nginx_check.sh
# 重启或者启动 keepalived
systemctl restart keepalived
5.关闭 selinux
如果重启后或者启动后 查看日志有如下抛错 , 则是 selinux 没有关闭
# 临时关闭
setenforce 0
#永久关闭
sed -i 's/SELINUX=enforcing/\SELINUX=disabled/' /etc/selinux/config
6.模拟测试
2台机器 分别启动nginx 和 keepalived 后
访问 vip 172.16.225.200 这个vip 目前在 111 master机器上
在master机器上 把ngixn关闭
# 关闭 nginx
./nginx -s stop
# 此时查看 keepalived 的状态就是 dead了
systemctl status keepalived
● keepalived.service - LVS and VRRP High Availability Monitor
Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
Active: inactive (dead)
再次访问vip 172.16.225.200 , 可以看到 vip 已经跑到了 backup机器110上了
本篇主要介绍了 keepalived + nginx 的基本的主备配置 实现了 nginx 的高可用,核心点就是配置 nginx_check.sh脚本给keepalived 的执行, 这个nginx_check.sh 脚本内如果发现nginx 不存活 尝试启动 如果还是不存活 则直接关闭 keepalived 进程
欢迎大家访问 个人博客 Johnny小屋
欢迎关注个人公众号
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK