欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

nginx+keepalived实现主备高可用搭建过程

程序员文章站 2022-05-17 18:05:11
...

1.实验物料

基本的理论在这里就不过多说了,我们就是先只实现主备模型,双主模型我们后续再说。
nginx+keepalived实现主备高可用搭建过程
对于keepalived的理论不是很理解的同学,请参考我之前写的lvs的相关内容:《LVS负载均衡DR模式的搭建过程(不用keepalived)》《LVS+keepalived实现高可用的DR模式负载均衡的搭建过程》

2.软件安装

1.安装虚拟机

这里我安装了两台linux centos7 64的虚拟机,以nat的网络方式配置,两台机器的ip 分别为192.168.222.102和192.168.222.103。至于安装过程,这里不再详细说明,不会的同学可以根据我之前的博客《VMware虚拟机下安装CentOS(NAT模式)》来进行参考。

2.安装nginx

这里我分别在192.168.222.102和192.168.222.103安装nginx,关于安装过程,这里不再想起介绍,不会的同学请参考我之前的博客《CentOS-7下安装Nginx的详细过程》来进行安装。

3.keepalived安装及配置

1.下载及安装

yum install keepalived -y

nginx+keepalived实现主备高可用搭建过程
安装完成后,软件配置在etc/keepalived下
nginx+keepalived实现主备高可用搭建过程

2.配置keepalived

1.先备份一下原始配置文件

cp keepalived.conf keepalived.conf.bak

nginx+keepalived实现主备高可用搭建过程
2.配置:
192.168.222.102 MASTER上的配置:

! Configuration File for keepalived

global_defs {
   notification_email {
     aaa@qq.com
     aaa@qq.com
     aaa@qq.com
   }
   notification_email_from aaa@qq.com
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script chk_http_port {
    script "/opt/chk_nginx.sh"
    interval 2
    weight -5
    fall 2
    rise 1
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.222.150/24 dev eth0 lable eth0:3
    }
}

192.168.222.103 BACKUP上的配置:

! Configuration File for keepalived

global_defs {
   notification_email {
     aaa@qq.com
     aaa@qq.com
     aaa@qq.com
   }
   notification_email_from aaa@qq.com
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script chk_http_port {
    script "/opt/chk_nginx.sh"
    interval 2
    weight -5
    fall 2
    rise 1
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.222.150/24 dev eth0 lable eth0:3
    }
}

3.编写nginx自动化监测脚本

nginx+keepalived实现主备高可用搭建过程
脚本内容如下:

#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
echo "$counter"
if [ "${counter}" = "0" ]; then
    /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    sleep 2
    counter=$(ps -C nginx --no-heading|wc -l)
    if [ "${counter}" = "0" ]; then
        service keepalived stop
    fi
fi

3.启动运行

1.启动nginx

分别在两台虚拟机上执行命令:

/usr/local/nginx/sbin/nginx 

nginx+keepalived实现主备高可用搭建过程

2.启动keepalived

分别在两台虚拟机上执行命令:

service keepalived start

nginx+keepalived实现主备高可用搭建过程

3.查看vip是否成功

在192.168.222.102 MASTER执行:

ip addr

nginx+keepalived实现主备高可用搭建过程
在192.168.222.103 MASTER执行:
nginx+keepalived实现主备高可用搭建过程
配置成功。

4.验证

1.正常情况

直接访问http://192.168.222.150,运行正常:
nginx+keepalived实现主备高可用搭建过程

2.挂掉keepalived

挂掉192.168.222.102 MATER:

service keepalived stop

nginx+keepalived实现主备高可用搭建过程
此时查看ip
nginx+keepalived实现主备高可用搭建过程
看到VIP 192.168.222.150 消失
然后我们查看192.168.222.103 BUCKUP的ip
nginx+keepalived实现主备高可用搭建过程
看到VIP 192.168.222.150 飘到了BUCKUP上,完成了故障转移。
我们再看一下页面是否能访问:
nginx+keepalived实现主备高可用搭建过程
仍然正常进行。

3.重启keepalived的MASTER

在192.168.222.102 MATER 重新启动keepalived:

service keepalived start

nginx+keepalived实现主备高可用搭建过程
查看ip:
nginx+keepalived实现主备高可用搭建过程
VIP又重新飘回了来了。
nginx+keepalived实现主备高可用搭建过程
VIP在BUCKUP上消失了。

4.关掉nginx

关掉nginx后,2秒后又会重启nginx,如果重启失败,会杀掉keepalived,VIP会再次飘到BUCKUP上。

5.注意问题

  1. keepalied 的配置中,要把vrrp_strict这个参数注释掉,否则无法ping通VIP,也无法访问VIP.,还会出现脑裂,就是主备都有VIP;
  2. 注意要编写nginx的自动化监测脚本;
  3. 关掉防火墙,关掉防火墙,关掉防火墙,重要的事情说三遍。