Keepalived+Nginx 高可用集群 (主从模式)
单台的nginx如果宕机,会导致整个系统瘫痪,如果使用nginx集群,当一台nginx宕机,备nginx依然可以提供服务。
环境准备
配置高可用准备工作:
- 需要2台服务器 192.169.72.129 ,192.168.72.130
- 在2台服务器安装nginx
- 在2台服务器安装keepalived
nginx安装请参考nginx安装
安装keepalived:
1.使用yum 命令进行安装:
yum install keepalived -y
(本人在/usr 目录下执行)
2. 查看是否安装成功: rpm -q -a keepalived
高可用配置
使用yum命令安装keepalived成功后,在/etc/keepalived目录下有keepalived.conf配置文件,高可用配置就是主要配置该文件。
把该配置文件的所有内容替换如下内容:(详细注释如下)
主机配置:
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
router_id 192.168.72.129 ## 标识本节点的字符串,通常为 hostname,也可以是本机ip
}
## keepalived 会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance 的优先级
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh" ## 检测 nginx 状态的脚本路径
interval 2 # (检测脚本执行的间隔)
weight -20 ## 如果条件成立,权重-20
}
## 定义虚拟路由, VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
state MASTER # 主节点为 MASTER, 对应的备份节点为 BACKUP
interface eth0// # 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同, 我的是 eth0
virtual_router_id 51 # 虚拟路由的 ID 号, 两个节点设置必须一样, 可选 IP 最后一段使用, 相同的 VRID 为一个组,他将决定多播的 MAC 地址
mcast_src_ip 192.168.72.129 ## 本机 IP 地址
priority 100 #节点优先级, 值范围 0-254, MASTER 要比 BACKUP 高
advert_int 1 ## 组播信息发送间隔,两个节点设置必须一样, 默认 1s
authentication { ## 设置验证信息,两个节点必须一致
auth_type PASS
auth_pass 1111 ## 真实生产,按需求对应该过来
}
virtual _ipaddress {
192.168.17.50 ## 虚拟 ip,可以定义多个
}
}
从机配置:
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
router_id 192.168.72.130 ## 标识本节点的字符串,通常为 hostname
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh" ## 检测 nginx 状态的脚本路径
interval 2 # (检测脚本执行的间隔)
weight -20 ## 如果条件成立,权重-20
}
vrrp_instance VI_1 {
state BACKUP # 主节点为 MASTER, 对应的备份节点为 BACKUP
interface eth0// # 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同, 我的是 eth0
virtual_router_id 51 # 虚拟路由的 ID 号, 两个节点设置必须一样, 可选 IP 最后一段使用, 相同的 VRID 为一个组,他将决定多播的 MAC 地址
mcast_src_ip 192.168.72.130 ## 本机 IP 地址
priority 80 #节点优先级, 值范围 0-254, MASTER 要比 BACKUP 高
advert_int 1 ## 组播信息发送间隔,两个节点设置必须一样, 默认 1s
authentication { ## 设置验证信息,两个节点必须一致
auth_type PASS
auth_pass 1111 ## 真实生产,按需求对应该过来
}
virtual _ipaddress {
192.168.17.50 ## 虚拟 ip,可以定义多个
}
}
检测脚本:nginx_check.sh (放在keepalived.conf配置的指定位置,本机位置:/usr/local/src/nginx_check.sh)
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
启动2台服务器上的 nginx 和 keepalived
启动 ngxin : ./nginx
启动keepalived: service keepalived start
也可以切换到 /usr/sbin/目录下执行 :./keepalived
查看启动进程: