nginx使用keepalived做高可用

环境说明

VIP: 10.1.xxx.73

IP服务
10.1.xx.68keepalived(master),nginx-01
10.1.xx.69keepalived(backup),nginx-02

1. 安装

 yum install keepalived -y

2. 安装 MASTER节点

2.1 配置文件

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

# ConfigurationFile for keepalived
global_defs {
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   script_user root
   enable_script_security
}
vrrp_script chk_http_nginx {
        script "/etc/keepalived/check_nginx_status.sh"
        interval 2
}
vrrp_instance nginx {
    state MASTER
    interface ens192
    virtual_router_id 51
    priority 100
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass liubei
    }
    track_script {
       chk_http_nginx
    }
    virtual_ipaddress {
        10.1.xxx.73 dev ens192 scope global
    }
}
  • 上文注释如下
# ConfigurationFile for keepalived

global_defs {
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   script_user root  # 执行检查脚本的用户
   enable_script_security 
}
#健康检查模块,将被vrrp_instance引用
vrrp_script chk_http_nginx {
        script "/etc/keepalived/check_nginx_status.sh" # 检查nginx存活脚本(后边会配置)
        interval 2  # 健康检查间隔
}

vrrp_instance nginx {
    state MASTER #主机是master
    interface ens192 #绑定虚拟Ip的网卡
    virtual_router_id 51 #虚拟路由ID,集群中所有节点一致即可
    priority 100 #权重,主节点设置大一些
    advert_int 1  #主从通信间隔
    nopreempt  #非竞争(允许低权重从节点做主,避免从节点持续竞争)。master上不生效,可不写。
    authentication {
        auth_type PASS  # 节点间认证方式
        auth_pass liubei #所有节点一致即可
    }
    track_script {
       chk_http_nginx #引用上边健康检查模块
    }
    virtual_ipaddress {
        10.1.xxx.73 dev ens192 scope global #global表示允许所有地址连接;site 仅允许ipv6 和本机连接;link 仅允许本机连接;host 仅允许内部连接
    }
}

2.2 创建检查脚本

创建配置文件中引用的健康检查脚本/etc/keepalived/check_nginx_status.sh

说明:curl 本机nginx 80端口,如果报错关闭keepalive。该脚本根据实际情况更改。

#!/bin/bash
/usr/bin/curl http://localhost &>/dev/null
if [ $? -ne 0 ]
then
 systemctl stop keepalived
fi

测试时如果不能调用,添加执行权限。

2.3 启动

systemctl start keepalived

查看结果

10.1.xxx.73/32 已绑定到 ens192网卡

[root@web-01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:xx:a7:92:15 brd ff:ff:ff:ff:ff:ff
    inet 10.1.xxx.68/24 brd 10.1.30.255 scope global noprefixroute ens192
       valid_lft forever preferred_lft forever
    inet 10.1.xxx.73/32 scope global ens192
       valid_lft forever preferred_lft forever
    inet6 fe80::a7bc:8df1:4b85:3f3/64 scope link tentative noprefixroute dadfailed
       valid_lft forever preferred_lft forever
    inet6 fe80::39a2:fd70:b54a:7e5c/64 scope link tentative noprefixroute dadfailed
       valid_lft forever preferred_lft forever
    inet6 fe80::aff7:274:2d01:8423/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

3. 安装BACKUP节点

3.1 配置文件

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

# ConfigurationFile for keepalived
global_defs {
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   script_user root
   enable_script_security
}

vrrp_script chk_http_nginx {
        script "/etc/keepalived/check_nginx_status.sh"
        interval 2
        weight 2
}

vrrp_instance nginx {
    state BACKUP
    interface ens192
    virtual_router_id 51
    priority 80
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass liubei
    }
    track_script {
       chk_http_nginx
    }
    virtual_ipaddress {
        10.1.xxx.73 dev ens192 scope global
    }
}

说明见master节点配置的注释。区别:

  • priority 80,权重调低一些。
  • state BACKUP,状态改为备节点。

3.2 创建检查脚本

创建配置文件中引用的健康检查脚本/etc/keepalived/check_nginx_status.sh

说明:curl 本机nginx 80端口,如果报错关闭keepalive。该脚本根据实际情况更改。

#!/bin/bash
/usr/bin/curl http://localhost &>/dev/null
if [ $? -ne 0 ]
then
/etc/init.d/keepalived stop
fi

测试时如果不能调用,添加执行权限

3.3 启动

systemctl start keepalived

4. 测试

关闭keepalived测试

1)关闭master上keepalived

  • 主节点失去 VIP
  • 备节点获得 VIP

2)启动master上keepalived

  • 备节点失去VIP
  • 主节点重新获得VIP

nginx宕机测试

1)关闭master上nginx服务

  • 主节点keepalived被健康检查脚本关闭,主节点失去 VIP
  • 备节点获得 VIP

2)启动master上nginx服务,重启keepalived

  • 备节点失去VIP
  • 主节点重新获得VIP

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

玄德公笔记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值