腾讯云配置高可用虚拟IP打造nginx+keepalived高可用

在上次文章中对于Nginx进行负载均衡操作,有效保障了客户端请求的合理分发到不同的应用层服务器进行处理。文章nginx反向代理实现应用层的高可用 有讲解。

但是,Nginx负载均衡器一旦宕机,这就玩不转了。一般应对这种情况,有冗余和自动故障转移。也即数据冗余或其他主机冗余和failover机制。

要做到这方面,需要另外一台相同配置的主机,这里相同配置是Nginx负载均衡配置相同,其他主机参数也可以相似。用什么实现failover呢,就是下面讲的keepalived。

keepalived实现原理是使用一个虚拟ip转发数据包给主机,master主机对外服务,一旦检测到master主机keepalived进程挂掉,backup服务器顶上。

网上有许多针对keepalived和nginx打造高可用集群的方法,讲解的很详细,这里呢不作介绍,主要我们用的基本是云主机了,阿里云、腾讯云等等,这章基本围绕云主机的配置。

在云主机配置高可用虚拟IP需要单独配置,每个云平台各不相同,文档都有介绍。这里以腾讯云为例。

在腾讯云申请使用高可用虚拟IP,如图:

操作步骤(复制官方操作文档)

  1. 登录 私有网络控制台,在左侧导航栏中,选择IP 与网卡 > 高可用虚拟 IP
  2. 在 HAVIP 管理页面,选择所在地域,单击申请
  3. 在弹出的申请高可用虚拟 IP 对话框中,配置 HAVIP 的参数。
  4. 单击确定,创建成功的 HAVIP 展示在列表中,状态为未绑定云服务器

创建完成后会进入一个列表,里面有虚拟IP,注意这里申请的是内网虚拟IP

这时候的状态是”没有绑定到云服务器“,此时需准备两台云主机,分别在每台主机上安装Nginx和keepalived应用。

keepalived配置如下:

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict   #单播模式下需要关闭
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script chk_nginx {
    #检测Nginx是否存活脚本,需要自己编写
    script "/etc/keepalived/check_nginx.sh"
    interval 2
    weight -5
}

vrrp_instance VI_1 {
    state BACKUP  #这里为备份服务器,主服务器写MASTER
    interface eth0
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    #本机IP
    unicast_src_ip 172.16.0.2
    unicast_peer {
        #填写对端内网IP
        172.16.0.10
    }
    virtual_ipaddress {
        #高可用虚拟IP,通过申请获得
        172.16.0.13
    }

    #检测nginx是否运行脚本,对应上面的chk_nginx模块
    track_script {
       chk_nginx
    }
}

 在master主机上配置index.html访问内容为:

<!DOCTYPE>
<html>  
<head>
  <title>Welcome to CentOS</title>
</head>
<body>
 <h1>master</h1>
</body>
</html>

备份主机nginx默认访问内容为:

<!DOCTYPE>
<html>  
<head>
  <title>Welcome to CentOS</title>
</head>
<body>
 <h1>slave</h1>
</body>
</html>

 启动Nginx和keepalived,通过虚拟IP访问,默认访问的到的是master主机,这时候将Nginx和keepalived停止,再次访问虚拟IP,访问内容为slave内容。

要让keepalived自动检测Nginx是否停止运行,需要配合检测脚本,也即chk_nginx模块内容,如下:

#!/bin/bash
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ];then
    /usr/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

跟网上大多数内容一致,先检测Nginx进程是否存在,进程数为0时,尝试重启Nginx,再次检测判断是否有效,无效则停止keepalived进程,这个时候虚拟IP会转发请求到备份服务器了。

注意上面的虚拟的IP是内网虚拟IP,如果要保证外网能够使用,需要申请EIP的使用权限。可以查看官方文档申请。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值