首页 > 技术文章 > Nginx配置keepalived达到高可用(三)

bearbrick0 2022-01-15 17:50 原文

Nginx配置高可用的集群

推荐阅读

image-20220114162019940

image-20220114162834930

image-20220114163159838

image-20220114163406336

是一种主备的模式

需要两个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目录下

image-20220114172325705

需要keepalived

//centos安装
yum install keepalived -y
//验证
rpm -q -a keepalived

centos的配置文件位置

image-20220115151514032

因为我是垃圾在ubuntu上安装的keepalived没有配置文件,有换成了centos

image-20220115164009170

修改配置文件

主服务器的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安装在自定义的目录

image-20220115165630720

#!/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

image-20220115165824294

image-20220115165912151

从服务器的keepalived的配置

image-20220115170450236

image-20220115170908529

image-20220115170953892

重新启动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
  

image-20220115173611002

image-20220115173645395

网上说网段要保持一致,我重新配了一次,但是不生效!

把主服务器的Nginx和keepalived断掉,也会生效。达到了高可用的效果。

硬着头皮来!

image-20220115174603043

推荐阅读