Nginx+keepalived双主配置(双机双主热备)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx+keepalived双主配置(双机双主热备)相关的知识,希望对你有一定的参考价值。

参考技术A

简介

这种方案,使用两个VIP地址,前端使用2台机器,互为主备,同时有两台机器工作,当其中一台机器出现故障,两台机器的请求转移到一台机器负担,非常适合于生产架构环境。

一、网络拓扑

四台虚拟机如下所示:

为什么使用keepalived呢?

使用keepalived就用来做高可用的,提供虚拟VIP

将两台机器上的/etc/keepalived/keepalived.conf配置文件修改成如下:

nginx-A:

Nginx-B:

然后修改两台机器上的nginx首页

chk_nginx.sh脚本也不用改,然后重启keepalived

3.1 查看服务器上的IP地址

查看Nginx-A的地址:

查看Nginx-B的地址:

会多出两个虚拟IP

首先通过两个VIP地址访问如下:

3.2、关闭Nginx-A上的nginx,keepalived将在2s内将它重新启动

3.3、关闭Nginx-A上的keepalived,VIP会切换到Nginx-B上

不管访问的是:http://192.168.182.157/ 还是http://192.168.182.156/ 都将导到Nginx-B上去。

同时会发现Nginx-A上的虚拟IP会消失

实现双主模型NGINX架构

实验拓扑图

技术分享图片

主节点配置

yum -y install nginx keepalived psmisc

#修改keepalived配置文件
vim  /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30

   router_id LVS1           #用于标识本节点的名称
   vrrp_garp_interval 0     
   vrrp_gna_interval 0
   vrrp_iptables            #关闭防火墙功能
#  vrrp_mcast_group4 224.0.0.18
}

vrrp_script chk_down {  #定义检测资源
    script "/bin/bash -c ‘[[ -f /etc/keepalived/down ]]‘ && exit 1 || exit 0"
    interval 1          #间隔检测时间
    weight -5           #检测失败后权重-5
}

vrrp_script chk_nginx { #定义检测资源
    script "killall -0 nginx && exit 0 || exit 1"
    interval 1          #间隔检测时间
    weight -5           #检测失败后权重-5
}
vrrp_instance VI_1 {    
    state MASTER        #定义状态为主或从
    interface ens34     #定义对外的网卡接口
    virtual_router_id 88    #虚拟路由ID,相同的IP为一组
    priority 100        #定义主节点的优先级
    advert_int 1
    authentication {    #定义认证信息
        auth_type PASS
        auth_pass rilegou
    }
    virtual_ipaddress { #定义虚拟IP(VIP)
        172.20.29.111
    }
    track_script {      #调用定义的检测资源脚本
        chk_nginx
        chk_down
    }
}

vrrp_instance VI_2 {
    state BUCKUP
    interface ens34
    virtual_router_id 99
    priority 95
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass centos
    }
    virtual_ipaddress {
            172.20.29.114
    }
    track_script {      #调用定义的检测资源脚本
        chk_nginx
        chk_down
    }
}

#配置NGINX服务
vim /etc/nginx/conf.d/test.conf
upstream websrvs {
    server 172.20.29.103:80;
    server 172.20.29.104:80;
}
server {
        listen 80 default_server;
        server_name node01.magedu.com;
        root /usr/share/nginx/html;
        location / {
                proxy_pass http://websrvs;
        }
}

#开启服务
systemctl nginx keepalived

从节点配置

! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS2           #用于标识本节点的名称
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_iptables            #关闭防火墙功能
#   vrrp_mcast_group4 172.20.29.77
}
vrrp_script chk_down {      #定义检测资源
    script "/bin/bash -c ‘[[ -f /etc/keepalived/down ]]‘ && exit 1 || exit 0"
    interval 1              #间隔检测时间
    weight -5               #检测失败后权重-5
}
vrrp_script chk_nginx {     #定义检测资源
    script "killall -0 nginx && exit 0 || exit 1"
    interval 1              #间隔检测时间
    weight -5               #检测失败后权重-5
}

vrrp_instance VI_1 {
    state BACKUP            #定义状态为主或从
    interface ens34         #定义外对的网卡接口
    virtual_router_id 88    #虚拟路由ID,相同的ID为一组
    priority 98             #定义从服务器的优先级
    advert_int 1
    authentication {        #认证信息
        auth_type PASS
        auth_pass rilegou
    }
    virtual_ipaddress {     #定义虚拟IP(VIP)
        172.20.29.111
    }
    track_script {          #调用定义的检测资源脚本
        chk_nginx
        chk_down
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface ens34
    virtual_router_id 99
    priority 96
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass centos
    }
    virtual_ipaddress {
        172.20.29.114
    }
    track_script {      #调用定义的检测资源脚本
        chk_nginx
        chk_down
    }
}

    #配置NGINX服务
vim /etc/nginx/conf.d/test.conf
upstream websrvs {
    server 172.20.29.103:80;
    server 172.20.29.104:80;
}
server {
        listen 80 default_server;
        server_name node01.magedu.com;
        root /usr/share/nginx/html;
        location / {
                proxy_pass http://websrvs;
        }
}

#开启服务
systemctl nginx keepalived

web服务器配置

#配置httpd页面
echo "<h1>`hostname`</h1>" > /var/www/html/index.html
#添加VIP
ip a a 172.20.29.111/32 dev lo

#配置VIP不冲突
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

#开启服务
systemctl start httpd

以上是关于Nginx+keepalived双主配置(双机双主热备)的主要内容,如果未能解决你的问题,请参考以下文章

keepalived + lvs + nginx 双主配置案例

Keepalived+Nginx实现双主高可用负载均衡

Nginx+keepalived双机热备(主主模式)

高可用集群架构Keepalived双主热备

keepalived主从及双主配置

nginx+keepalived高可用及双主模式