基于keepalived 的nginx高可用方案

Nginx 作为反向代理服务器,所有的流量都会经过 Nginx,所以 Nginx 本身的可靠性十分重要。
可以通过keepalived实现。结构图如下:
在这里插入图片描述
首先准备两台nginx 服务器,并且将每台nginx服务器上都安装好keepalived keepalived安装及高可用实现原理 参考:
keepalived安装 https://blog.csdn.net/zhangxm_qz/article/details/87883653
我这里两台服务 分别为 zk02 和 zk03

keepalived 配置虚拟ip演示
vi /etc/keepalived/keepalived.conf 修改两台服务器上的 keepalived 配置文件如下
master

! Configuration File for keepalived
    global_defs {
        router_id LVS_DEVEL 运行 keepalived 服务器的标识,在一个网络内应该是唯一的
    }
    vrrp_instance VI_1 { #vrrp 实例定义部分
    state MASTER #设置 lvs 的状态,MASTER 和 BACKUP 两种,必须大写
    interface ens33 #设置对外服务的接口
    virtual_router_id 51 #设置虚拟路由标示,这个标示是一个数字,同一个 vrrp 实例使用唯一标示
    priority 100 #定义优先级,数字越大优先级越高,在一个 vrrp——instance 下,master 的优先级必须大于 backup
    advert_int 1 #设定 master 与 backup 负载均衡器之间同步检查的时间间隔,单位是秒
    authentication { #设置验证类型和密码
    auth_type PASS
    auth_pass 1111 #验证密码,同一个 vrrp_instance 下 MASTER 和 BACKUP 密码必须相同
    }
    virtual_ipaddress { #设置虚拟 ip 地址,可以设置多个,每行一个
    192.168.11.100
    }
    }
    virtual_server 192.168.11.100 80 { #设置虚拟服务器,需要指定虚拟 ip 和服务端口
    delay_loop 6 #健康检查时间间隔
    lb_algo rr #负载均衡调度算法
    lb_kind NAT #负载均衡转发规则
    persistence_timeout 50 #设置会话保持时间
    protocol TCP #指定转发协议类型,有 TCP 和 UDP 两种
    real_server 192.168.11.160 80 { #配置服务器节点 1,需要指定 real server 的真实 IP 地址和端口
    weight 1 #设置权重,数字越大权重越高
    TCP_CHECK { #realserver 的状态监测设置部分单位秒
    connect_timeout 3 #超时时间
    delay_before_retry 3 #重试间隔
    connect_port 80 #监测端口
    }
    }
    }

backup配置文件

! Configuration File for keepalived

bal_defs {
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.68.100
    }
}

virtual_server 192.168.68.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server zk03 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            connect_port 80
            delay_before_retry 3
        }
    }
}

修改完配置文件重启 两台服务器上的keepalived 并查看状态是否正常

    [root@zk02 apps]# service keepalived restart
    [root@zk02 apps]# service keepalived status
   keepalived.service - LVS and VRRP High Availability Monitor
   Loaded: loaded (/usr/lib/systemd/system/keepalived.service; enabled; vendor preset: disabled)
   Active: active (running) since 二 2019-01-29 01:44:00 CST; 5s ago
  Process: 82804 ExecStart=/usr/apps/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 82805 (keepalived)
   CGroup: /system.slice/keepalived.service
           ├─82805 /usr/apps/keepalived/sbin/keepalived -D
           ├─82806 /usr/apps/keepalived/sbin/keepalived -D
           └─82807 /usr/apps/keepalived/sbin/keepalived -D

1月 29 01:44:02 zk02 Keepalived_vrrp[82807]: (VI_1) received lower priority (80) advert from...ing
1月 29 01:44:03 zk02 Keepalived_vrrp[82807]: (VI_1) Receive advertisement timeout
1月 29 01:44:03 zk02 Keepalived_vrrp[82807]: (VI_1) Entering MASTER STATE
1月 29 01:44:03 zk02 Keepalived_vrrp[82807]: (VI_1) setting VIPs.
1月 29 01:44:03 zk02 Keepalived_vrrp[82807]: Sending gratuitous ARP on ens33 for 192.168.68.100
1月 29 01:44:03 zk02 Keepalived_vrrp[82807]: (VI_1) Sending/queueing gratuitous ARPs on ens3...100
1月 29 01:44:03 zk02 Keepalived_vrrp[82807]: Sending gratuitous ARP on ens33 for 192.168.68.100
1月 29 01:44:03 zk02 Keepalived_vrrp[82807]: Sending gratuitous ARP on ens33 for 192.168.68.100

启动 zk02 和 zk03两台服务器上的 nginx 保证可用如下:
在这里插入图片描述
zk03 上的nginx做了tomcat负载均衡配置所以会转发到tomcat主页
在这里插入图片描述

浏览器访问虚拟ip 192.168.68.100 可以访问到 nginx主页,因为我们配置的 zk02是mater 所以访问的是zk02 上的 nginx,如下:

加粗样式

通过脚本实现master nginx挂掉后动态切换到 backup
在 master 和 backup节点的 /usr/apps/nginx/sbin/nginx-ha-check.sh 目录下增加一个脚本 –no-headers 不打印头文件

[root@zk03 sbin]# vi nginx-ha-check.sh
#!bin/sh
A=`ps -C nginx --no-header |wc -l`
echo $A -eq 0
if [ $A -eq 0 ]
    then
    echo 'nginx server is died'
    service keepalived stop
fi

修改两台服务器上keepalived配置文件 定期调用 该脚本来监控 nginx状态,如果nginx已经挂掉则 关闭 keepalived服务,从而实现将backup 变为master 。 增加配置如下:
在这里插入图片描述
重新启动 keepalived服务 访问 虚拟地址 可以正常访问
在这里插入图片描述
手动关闭zk02 上的nginx 模拟 nginx挂掉。

[root@zk02 nginx]# sbin/nginx -s stop

再次访问虚拟ip地址 发现并没有 切换到 zk03 的 nginx 而是提示无法访问。查看zk02 上keepalived ,发现还是运行状态。脚本没有执行。

查看日志(tail -f /var/log/messages)发现提示 脚本不可执行 如下:
script '/usr/apps/nginx/sbin/nginx-ha-check.sh ’ is not executable for uid:gid 0:0 - disabling.

设置脚本权限 并重启
chmod 777 /usr/apps/nginx/sbin/nginx-ha-check.sh
[root@zk02 nginx]# service keepalived restart
发现日志中又提示 不安全的权限
Unsafe permissions found for script ‘/usr/apps/nginx/sbin/nginx-ha-check.sh’.
重新设置权限 并重启
chmod 764 /usr/apps/nginx/sbin/nginx-ha-check.sh
[root@zk02 nginx]# service keepalived restart
启动 就正常了。
然后 重新演示服务启动切换。启动 zk02 zk03 上的 nginx 和 keepalived 访问 虚拟ip http://192.168.68.100/ 可以访问到 zk02 上的nginx 。如下:
在这里插入图片描述
模拟 zk02 nginx 宕机

[root@zk02 nginx]# sbin/nginx -s stop

再次访问虚拟ip 自动切换到了zk03 上的nginx 同时 zk02 上的 keepalived 关闭了。 演示成功。
在这里插入图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

catch that elf

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

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

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

打赏作者

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

抵扣说明:

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

余额充值