nginx+keepalived实现七层负载

目录

一、部署nginx01、nginx02

二、keepalived配置(抢占模式、master- backup模式)

三、测试

四、非抢占模式(backup-backup模式)


nginx01 

11.0.1.31
nginx02 11.0.1.32
虚拟IP(VIP) 11.0.1.30

一、部署nginx01、nginx02

部署nginx:Nginx、keepalived安装详细步骤_keepalive 安装-CSDN博客

先部署一台,另一台直接克隆改ip就可以

nginx+keepalived实现七层负载_第1张图片

二、keepalived配置(抢占模式、master- backup模式)

keepalived配置文件路径 /etc/keepalived/keepalived.conf

主机 11.0.1.31 

需要更改的参数:router_id、interface ens33、真实IP mcast_src_ip 、虚拟IP11.0.1.30、优先级priority(master需要比backup高)

global_defs {
   router_id nginx-01  #标识本节点的名称,通常为hostname
}

## keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
##如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。如果脚本执行结果非0,
##并且weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中priority对应的值。
vrrp_script chk_nginx {
       script "/etc/keepalived/nginx_check.sh"
       interval 2  #每2秒检测一次nginx的运行状态
       weight -20  #失败一次,将自己的优先级-20
}

vrrp_instance VI_1 {
    state MASTER                  # 状态,主节点为MASTER,备份节点为BACKUP
    interface ens33              # 绑定VIP的网络接口,通过ifconfig查看自己的网络接口
    virtual_router_id 51          # 虚拟路由的ID号,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址
    mcast_src_ip 11.0.1.31    # 本机IP地址    
    priority 100                  # 节点优先级,值范围0~254,MASTER要比BACKUP高
    advert_int 1                  # 组播信息发送时间间隔,两个节点必须设置一样,默认为1秒
    # 设置验证信息,两个节点必须一致
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟IP,两个节点设置必须一样。可以设置多个,一行写一个
    virtual_ipaddress {
        11.0.1.30
    }

    track_script {
       chk_nginx  # nginx存活状态检测脚本
    }
}

备机 11.0.1.32

global_defs {
   router_id nginx-02
}

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh"
    interval 2
    weight -20
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    mcast_src_ip 11.0.1.32
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        11.0.1.30
    }

    track_script {
       chk_nginx
    }
}

检测nginx存活脚本,如果nginx进程不存在,尝试启动,如果nginx启动失败(服务器宕机),杀死主机的keepalived程序。主机的keepalived被杀死后VIP将转移到备机11.0.1.32。

主备机都要有检测脚本

vi /etc/keepalived/nginx_check.sh
chmod +x /etc/keepalived/nginx_check.sh

注意许多教程的脚本是centos6的,需要注意“systemctl stop keepalived” 命令是否可以正常关闭keepalived进程。

#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
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
        systemctl stop keepalived
    fi
fi

 主机IP,此时VIP在主机上

nginx+keepalived实现七层负载_第2张图片

备机IP

nginx+keepalived实现七层负载_第3张图片

三、测试

VIP可以正常访问,主机正常

 nginx+keepalived实现七层负载_第4张图片

关闭主机nginx进程 

[root@nginx01 sbin]# ./nginx -s stop

访问正常

nginx+keepalived实现七层负载_第5张图片

将主机11.0.1.31直接关机,再次测试 

VIP成功漂移到备机11.0.1.32 

nginx+keepalived实现七层负载_第6张图片

查看备机IP,VIP漂移到备机上

nginx+keepalived实现七层负载_第7张图片

重启主机后VIP重新漂移回到主机11.0.1.31 

nginx+keepalived实现七层负载_第8张图片

nginx+keepalived实现七层负载_第9张图片

不需要给nginx设置开机自启动,keepalived开机自启动即可,keepalived发现nginx没启动,会自动执行脚本启动nginx。

四、非抢占模式(backup-backup模式)

两台主机均为backup,谁先启动谁就是临时master

11.0.1.31 backup

global_defs {
   router_id nginx-01  #标识本节点的名称,通常为hostname
}

## keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
##如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。如果脚本执行结果非0,
##并且weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中priority对应的值。
vrrp_script chk_nginx {
       script "/etc/keepalived/nginx_check.sh"
       interval 2  #每2秒检测一次nginx的运行状态
       weight -20  #失败一次,将自己的优先级-20
}

vrrp_instance VI_1 {
    state BACKUP                  # 状态,主节点为MASTER,备份节点为BACKUP
    interface ens33              # 绑定VIP的网络接口,通过ifconfig查看自己的网络接口
    virtual_router_id 51          # 虚拟路由的ID号,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址
    mcast_src_ip 11.0.1.31    # 本机IP地址
    priority 100                  # 节点优先级,值范围0~254,MASTER要比BACKUP高
    advert_int 1                  # 组播信息发送时间间隔,两个节点必须设置一样,默认为1秒
    nopreempt
    # 设置验证信息,两个节点必须一致
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟IP,两个节点设置必须一样。可以设置多个,一行写一个
    virtual_ipaddress {
        11.0.1.30
    }

    track_script {
       chk_nginx  # nginx存活状态检测脚本
    }
}

11.0.1.32 backup

global_defs {
   router_id nginx-02
}

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh"
    interval 2
    weight -20
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    mcast_src_ip 11.0.1.32
    priority 90
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        11.0.1.30
    }

    track_script {
       chk_nginx
    }
}

非抢占模式backup-backup模式,在此模式下,即使重启了主机11.0.1.31,VIP仍然保留在备机11.0.1.32。

在非抢占模式下,也有优先级的高低,谁先启动谁就被选举为master,不看优先级(两台抖配配置nopreempt情况下),并且不会被抢走VIP,除非master宕机,VIP漂移到backup(注意此时backup已经升级为master,而原先的master重启后已经变为backup)。

nginx+keepalived实现七层负载_第10张图片

现在将11.0.1.32关机,VIP回到11.0.1.31

nginx+keepalived实现七层负载_第11张图片

重新将11.0.1.32开机,发现VIP不会回到11.0.1.32,因为11.0.1.32配置了nopreempt参数,所以“不会抢11.0.1.31的VIP”

nginx+keepalived实现七层负载_第12张图片

和抢占模式的配置相比,只改了两个地方:

1> 在vrrp_instance块下两个节点各增加了nopreempt指令,表示不争抢vip

2> 节点的state都为BACKUP

两个keepalived节点都启动后,默认都是BACKUP状态,双方在发送组播信息后,keepalived会自动选举一个MASTER出来(不是根据优先级)。由于两者都配置了nopreempt,所以MASTER从故障中恢复后,不会抢占vip。这样会避免VIP切换可能造成的服务延迟。

两台服务器都启用nopreempt后,必须修改角色状态统一为BACKUP,唯一的区分就是优先级。

官方对nopreempt参数解释:高优先级VRRP实例通常会抢占低优先级VRRP实例,
"nopreempt"参数将停止优先级更高的机器在抢占vip,并允许较低优先级的机器保持为master。
注意:要使nopreempt参数起作用,初始状态不能是MASTER。

https://www.cnblogs.com/lichunyang321/p/8889326.html

非抢占模式与优先级关系:

keepalived配置非抢占模式_keepalived非抢占模式-CSDN博客

你可能感兴趣的:(nginx,nginx)