nginx+keepalive双机双工

一、应用场景:

nginx+keepalived可实现前端调度器的高可用,但如果使用一主一备的方案,会使得主调度器一直处于工作状态直到宕机而从服务器却一直闲着等待主调度器宕机。所以使用双工模式(或者说是双主模式)可以充分利用备用调度器的空闲资源。

二、注意事项:

采用双主模式,理论上应该保持每台调度器的并发访问量最大不超过单台调度器可以承受的最大并发量的50%。实际生产中建议调整为40%,以防其中一台调度器宕机后,高并发量直接撑死另一台调度器。

三、实现原理:

keepalived配置双vip,结合DNS轮询现实现双机双工

四、部署过程

1、环境准备(nginx使用源码安装,直接官网下载;keepalived使用yum安装,这里不做详细介绍):

nginx1: 192.168.247.129  ---》  master-vip:192.168.247.100

nginx2: 192.168.247.130  ---》  master-vip:192.168.247.200

client:192.168.247.128     ---》  配置DNS服务

2、配置vip:

nginx1:

 vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
        root@localhost
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
 #  vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_script check_nginx {
    script "/etc/keepalived/check_nginx_status.sh"    #检查nginx服务状态的脚本
    inerval 5    #每五秒执行一次
}
vrrp_instance VI_1 {
    state MASTER
    nopreempt    #vip不抢占
    interface eth0
    virtual_router_id 51    #两个vip的id不能一样
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.247.100
    }
    track_script {    #调用健康检查脚本
    check_nginx
    }
}
vrrp_instance VI_2 {
    state BACKUP
   # nopreempt
    interface eth0
    virtual_router_id 52    #上边为51,这里设置为52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.247.200       #设置vip
    }
    track_script {            
    check_nginx
    }
}

nginx2:

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
        root@localhost
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
 #  vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_script check_nginx {
    script "/etc/keepalived/check_nginx_status.sh"
    inerval 5
}
vrrp_instance VI_1 {
    state BACKUP
   # nopreempt
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.247.100
    }
    track_script {
    check_nginx
    }
}
vrrp_instance VI_2 {
    state MASTER
    nopreempt
    interface eth0
    virtual_router_id 52
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.247.200
    }
    track_script {
    check_nginx
    }
}

3、编写自动切换脚本(nginx1和nginx2上都做):

vim /etc/keepalived/check_nginx_status.sh

#!/bin/bash
curl localhost  &>/dev/null
if [ $? -ne 0 ];then
        killall  keepalived
fi

4、启动服务(nginx1和nginx2都做):

 /usr/local/nginx/sbin/nginx

systemctl start keepalived

5、查看并验证双机双工:

ipaddr

down调一台nginx查看vip是否切换成功

6、配置dns轮询解析(client上操作):

yum   -y   install  bind-chroot   bind

vim /etc/named.conf

options {
                directory       "/var/named";
                allow-query     { any; };
                rrset-order { order cyclic; };
        };
zone "zywa.com" IN {
                type  master;
                file "zywa.com.zone";
        };

cp -p  /var/named/named.empty    /var/named/zywa.com.zone    # -p 保证新产生的配置文件可以由用户named加载

vim  /var/named/zywa.com.zone

$TTL 3H
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum

zywa.com.      NS     yum              #这个名字可以随便起,与下行的一致即可
yum          A      192.168.247.128    #DNS服务器ip
www          A      192.168.247.200
www          A      192.168.247.100

7、启动dns服务,并验证轮询:

systemctl  start  named

vim /etc/resolv.conf

# Generated by NetworkManager
nameserver 192.168.247.128

curl www.zywa.com    #验证轮询效果。

猜你喜欢

转载自blog.csdn.net/cron_zzx/article/details/84034186