nginx通过keepalived实现高可用

首先搭建两台nginx

node1 192.168.31.128 (backup)
node2 192.168.31.129 (master)

两台node都安装keepalived服务

yum -y install keepalived

修改keepalived的配置文件

vim /etc/keepaliced/keepalived.conf

master的配置文件

#检测脚本
vrrp_script chk_http_port {
    script "/usr/local/src/check_nginx_pid.sh" #心跳执行的脚本检测nginx是否启动
    interval 2                          #检测脚本执行的间隔单位是秒
    weight 2                            #权重
}
#vrrp 实例定义部分
vrrp_instance VI_1 {
    state MASTER            # 指定keepalived的角色MASTER为主BACKUP为备
    interface ens33         # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
    virtual_router_id 66    # 虚拟路由编号主从要一直
    priority 100            # 优先级数值越大获取处理请求的优先级越高
    advert_int 1            # 检查间隔默认为1s(vrrp组播周期秒数)
    #授权访问
    authentication {
        auth_type PASS #设置验证类型和密码MASTER和BACKUP必须使用相同的密码才能正常通信
        auth_pass 1111
    }
    track_script {
        chk_http_port            #调用检测脚本
    }
    virtual_ipaddress {
        192.168.31.130            # 定义虚拟ip(VIP)可多设每行一个
    }
}

backup的配置文件

#检测脚本
vrrp_script chk_http_port {
    script "/usr/local/src/check_nginx_pid.sh" #心跳执行的脚本检测nginx是否启动
    interval 2                          #检测脚本执行的间隔
    weight 2                            #权重
}
#vrrp 实例定义部分
vrrp_instance VI_1 {
    state BACKUP                        # 指定keepalived的角色MASTER为主BACKUP为备
    interface ens33                      # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
    virtual_router_id 66                # 虚拟路由编号主从要一直
    priority 99                         # 优先级数值越大获取处理请求的优先级越高
    advert_int 1                        # 检查间隔默认为1s(vrrp组播周期秒数)
    #授权访问
    authentication {
        auth_type PASS #设置验证类型和密码MASTER和BACKUP必须使用相同的密码才能正常通信
        auth_pass 1111
    }
    track_script {
        chk_http_port                   #调用检测脚本
    }
    virtual_ipaddress {
        192.168.31.130                   # 定义虚拟ip(VIP)可多设每行一个
    }
}

检测脚本

#!/bin/bash
#检测nginx是否启动了
A=`ps -C nginx --no-header |wc -l`        
if [ $A -eq 0 ];then    #如果nginx没有启动就启动nginx                        
      systemctl start nginx                #重启nginx
      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    #nginx重启失败,则停掉keepalived服务,进行VIP转移
              killall keepalived                    
      fi
fi

启动keepalived

systemctl start keepalived

为了方便观察实验效果,我们修改两台节点的nginx 的index内容

/usr/share/nginx/html/index.html

访问vip(192.168.31.30)

可以看到是主nginx
在这里插入图片描述

那么我们关掉node(master)(或者关闭nginx)

在这里插入图片描述

恢复master

实验成功
在这里插入图片描述

如果vip是公网IP如何实现?

需要借助阿里云或者腾讯云的高可用虚拟IP实现(目前还在公测中),不过对于防范攻击意义不大,在遭受到ddos或者cc攻击时,当流量过大这个公网ip依然会被隔离(黑洞),nginx高可用只适用于防范服务器意外宕机的情况。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值