Nginx配置高可用的集群
是一种主备的模式
需要两个Nginx服务器
现有 192.168.189.136
192.186.189.140
另一台服务器我选择的是Ubuntu。安装Nginx的过程
sudo apt update
sudo apt install nginx
sudo systemctl status nginx
//配置防火墙 允许通过HTTP 80 HTTPS 443
sudo ufw allow "Nginx Full"
//验证
sudo ufw status
在Ubuntu,如果通过这种方式安装,Nginx的配置文件在/etc/nginx
目录下
需要keepalived
//centos安装
yum install keepalived -y
//验证
rpm -q -a keepalived
centos的配置文件位置
因为我是垃圾在ubuntu上安装的keepalived没有配置文件,有换成了centos
修改配置文件
主服务器的keepalived的配置
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_form Alexandre.Cassen@firewall.loc
smtp_server 192.168.189.136
smtp_connect_timeout 30
router_id nginx_01 #标识本节点的名称,通常为hostname
}
## keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
##如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。如果脚本执行结果非0,
##并且weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中priority对应的值。
vrrp_script chk_nginx {
script "/usr/local/src/nginx_check.sh"
interval 2 #每2秒检测一次nginx的运行状态
weight -20 #失败一次,将自己的优先级-20
}
vrrp_instance VI_1 {
state MASTER # 状态,主节点为MASTER,备份节点为BACKUP
interface ens160 # 绑定VIP的网络接口,通过ifconfig查看自己的网络接口,网卡名称
virtual_router_id 51 # 虚拟路由的ID号,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址
priority 100 # 节点优先级,值范围0~254,MASTER要比BACKUP高
advert_int 1 # 组播信息发送时间间隔,两个节点必须设置一样,默认为1秒
# 设置验证信息,两个节点必须一致
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟IP,两个节点设置必须一样。可以设置多个,一行写一个
virtual_ipaddress {
192.168.189.50 #后来我换了
}
}
编写脚本文件,由于我的Nginx安装在自定义的目录
#!/bin/bash
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ];then
/software/nginx/sbin/nginx #自己Nginx的启动位置
sleep 2 #睡眠2秒
if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
killall keepalived #启动失败,将keepalived服务杀死。将vip漂移到其它备份节点
fi
fi
从服务器的keepalived的配置
重新启动Nginx和keepalived
//192.168.189.136
//重新启动Nginx
cd /software/nginx/sbin
./nginx -s stop
./nginx
//启动keepalived
systemctl start keepalived.service
ps aux | grep keepalived
//192.168.189.140
//重新启动Nginx
cd /usr/sbin/nginx
./nginx -s stop
./nginx
//启动keepalived
systemctl start keepalived.service
ps aux | grep keepalived
网上说网段要保持一致,我重新配了一次,但是不生效!
把主服务器的Nginx和keepalived断掉,也会生效。达到了高可用的效果。
硬着头皮来!