使用keepalived 实现nginx 负载均衡+主备高可用

目录

1.概述

2.环境拓扑

3.在nginx01和ngixn02 两台主机上安装nginx

1.rpm 安装nginx

4. 在nginx-01和nginx-02安装keepalived

1.解决依赖:

2.安装 keppalived

3.修改keepalived配置文件:

4.配置nginx02主机上的keepalived配置文件

5.创建ngixn服务检测脚本

nginx01,ngixn02服务器启动keepalived服务

 测试故障转移

抢占模式

 非抢占模式:


1.概述

ngixn作为负载均衡器,在架构中,可以利用nginx的反向代理和负载均衡实现后端应用的负载均衡和高可用性,同时我们还需考虑Nginx的单点故障。真正做到架构高可用性。

主要考虑以下几点:

1.ngixn 服务意外现象挂掉

2.服务器宕机导致nginx 不可用

可以采取 keepalived+nginx 实现ngixn的故障转移,同时做好监控报警,排查隐患

keepalived 的 HA(高可用)分为抢占模式和非抢占模式,

抢占模式:当master从故障中恢复后,会将 VIP 从 BACKUP节点中抢占过来,非抢占模式即 master 恢复后不强站BACKUP升级为MASTER后的VIP

2.环境拓扑

两台ngixn,一主一备: 192.168.30. 和 192.168.30.

主机名VIPNgixn端口IP备注
ngixn01192.168.30.20080192.168.30.10主nginx,反向代理
        nginx02192.168.30.20080192.168.30.11备ngixn,反向代理

分别在两台服务器安装nginx和keepalived

3.在nginx01和ngixn02 两台主机上安装nginx

两天ngixn安装步骤一致

1.rpm 安装nginx

yum -y install wget  安装wget

设置epel 源: 

 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

 安装nginx:

yum -y install nginx

启动nginx服务

systemctl start nginx

设置开机自启:

systemctl enable nginx 

4. 在nginx-01和nginx-02安装keepalived

1.解决依赖:

yum -y install gcc openssl-devel pcre-devel libnl-devel

2.安装 keppalived

上传软件包解压

 tar zxf keepalived-2.0.18.tar.gz

 cd keepalived-2.0.18/  

 ./configure --prefix=/usr/local/keepalived  指定安装路径

编译和编译安装:

 make && make install

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

ngixn02上同样用次方法安装

3.修改keepalived配置文件:

修改nginx01的配置文件

ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/

mkdir /etc/keepalived/

 cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

 vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   router_id nginx01
}
vrrp_script chk_nginx {
       script "/etc/keepalived/nginx_check.sh"   #使用脚本的路径
       interval 2  #每2秒检测一次nginx的运行状态
       weight -20  #失败一次,将自己的优先级-20
}

vrrp_instance nginx {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    !nopreempt    #不抢占模式,如果使用抢占模式,只需将其注释即可
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.30.200
    }
}
track_script {
       chk_nginx  #nginx 存活状态检测脚本 
    }
}

重新启动keepalived:

systemctl restart keepalived

4.配置nginx02主机上的keepalived配置文件

将ngixn01的配置文件cp 过来做修改即可:

 ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/   

mkdir /etc/keepalived/

scp /etc/keepalived/keepalived.conf root@192.168.30.11:/etc/keepalived/keepalived.conf

 vim /etc/keepalived/keepalived.conf   修改配置文件

 修改以下部分:

 router_id nginx-02  #修改唯一Id 标识

  state BACKUP   #修改状态

    priority 90    #修改优先级

5.创建ngixn服务检测脚本

分别在nginx-01和nginx-02服务器的/etc/keepalived目录下创建nginx_check.sh脚本,并为其添加执行权限,keppalved定时检测nginx 状态 ,nginx停止运行,会尝试重新nginx,启动失败则将

keepalived进程杀死,将vip票便宜到备用机器上

vim /etc/keepalived/ngixn_check.sh

#!/bin/bash
num=$(ps -C nginx --no-header | wc -l)
if [ $num -eq 0 ];then
    systemctl start nginx  #尝试重新启动nginx
    sleep 1  #睡眠1秒
    if [ $(ps -C nginx --no-header | wc -l) -eq 0 ];then
        killall keepalived  #若nginx启动失败,将keepalived服务杀死。将vip漂移到其它备份节点
    fi
fi

 说明:

-C <指令名称> 选项用来指定程序的名称

--no-header 选项去掉头部

killall命令由软件包 psmisc 提供, 确保两台主机都安装 psmisc

给予执行权限:

chmod +x /etc/keepalived/ngixn_check.sh 

nginx01,ngixn02服务器启动keepalived服务

systemctl enable keepalived 

systemctl start keepalived

 查看vip绑定情况:

主nginx:

  备nginx:

 测试故障转移

抢占模式

修改nginx配置文件删除某个分号让ngixn无法通过脚本自启,测试脚本

vim /etc/nginx/nginx.conf

重启nginx:

systemctl restart nginx

查看keepalived状态是否自动杀掉:

systemctl status keepalived

killall 自动杀死了keepalived 

查看nginx02是否漂移:

VIP漂移成功

在修复nginx,启动nginx,启动keepalived

查看修复好的nginx VIP是否抢占回来

 非抢占模式:

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

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

2. 两个节点的state都为BACKUP

非抢占模式下,两个keepalived节点都启动后,默认都是BACKUP状态,会根据优先级来选举一个MASTER出来,两者都配置了nopreempt,所以MASTER从故障中恢复后,不会抢占vip

修改keepalived配置文件配置非抢占模式

修改nginx01 keepalived 配置文件:

vim /etc/keepalived/keepalived.conf 

state BACKUP  #修改状态

nopreempt     #添加设置不抢占模式

修改nginx02 配置文件

添加:nopreempt

 重启主备的keepalived 服务

[root@nginx01 ~]# systemctl restart keepalived

root@nginx02 ~]# systemctl restart keepalived

重复抢占模式的测试来确认是否为抢占模式:

 查看vip 是否漂移到nginx02上:

修复nginx01验证非抢占:

修复好重启nginx 、keppalived服务

 查看VIP是否是非抢占模式:

 可以看到VIP没有切换到原主nginx01,非抢占设置成功。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蟹黄堡!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值