在VPC环境中利用keepalived实现主备双机高可用

本文涉及的产品
云服务器 ECS,每月免费额度280元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 原作者:阿里云解决方案架构师,袖手。本文告诉你,如何通过keepalived,在VPC中搭建一套主备双机高可用架构。

1. 测试资源准备

VPC环境内
a) ECS HA1:  172.16.0.224 
b) ECS HA2:  172.16.0.225
c) EIP:   139.196.75.13
d) HAVIP: 172.16.0.222
0d8d052f1aa0b7fab049ab381d0e7dfb6e215bbd

2.Nginx安装

分别在两台ECS中安装Nginx,安装过程不再赘述。
82b3610555fed210cc7c4e58f7e158ad9d2024e7
更改相应的nginx index.html,以便测试时方便识别主机。
53ec10f3e092d1010c1b795d13cacc07346d6972

3.keepalived安装

3.1安装依赖包
yum -y install gcc gcc+ gcc-c++
yum install popt-devel openssl openssl-devel libssl-dev libnl-devel popt-devel
3.2 建立kernel的软连接
ln -s /usr/src/kernels/2.6.32-431.23.3.el6.x86_64/ /usr/src/linux
3.3 安装配置keepalived
yum install keepalived
配置keepalived.conf
Keepalived会定期检查服务器的健康情况,并通过VRRP协议互通监控情况(默认为组播方式)。一旦任何一个服务出现故障,Keepalived会广播ARP包告诉大家,这台故障的服务器不再拥有这个虚拟IP,而是另一台健康的资源服务器才是这个虚拟IP的真正归属。这样所有发送给故障服务的请求就发送给另外一台资源服务器了。
但在阿里云VPC环境中,目前网络环境并不支持VRRP的组播方式,需要将keepalived的通信方式改为单播。
VRRP组播可能导致脑裂,争抢IP,频繁切换,无法连接等情况。典型的错误如下:
928ed3c1c6af7abcee1775cec6873b23ae0800b7
正确编辑配置文件,需要注意以下几点:
1) 两台机器的vrrp_instance State应根据主备需求,分别设置为MASTER或BACKUP。
2) virtual_ipaddress为绑定的havip,并且需要指定绑定的虚拟网卡(如eth0:1)。
3) 务必使用unicast_src_ip 和unicast_peer,将vrrp通信方式改为单播,否则两台机器无法通信。
4) 注意配置文件中virtual_ipaddress与unicast_src_ip/unicast_peer的顺序,否则会影响互备切换。
1a9a9ae701d396ca060c3b541eae1db140864381
同理配置ECS HA2。
完整的keepalived.conf配置文件如下所示(文件路径:/etc/keepalived/keepalived.conf):
####主服务器配置文件##########
! 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_instance VI_1 {
    state MASTER 
    interface eth0
    virtual_router_id 51
    priority 120
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
       172.16.0.222/16 dev eth0 label eth0:1 
    }
    unicast_src_ip 172.16.0.224
    unicast_peer {
172.16.0.225
    }
}
virtual_server 172.16.0.222 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    nat_mask 255.255.0.0
    persistence_timeout 50
    protocol TCP
    real_server 172.16.0.224 80 {
        weight 1
        TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
        }
    }
}
#######备服务器配置文件#########
! 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_instance VI_1 {
    state BACKUP 
    interface eth0
    virtual_router_id 51
    priority 120
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
       172.16.0.222/16 dev eth0 label eth0:1 
    }
    unicast_src_ip 172.16.0.225
    unicast_peer {
172.16.0.224
    }
}
virtual_server 172.16.0.222 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    nat_mask 255.255.0.0
    persistence_timeout 50
    protocol TCP
    real_server 172.16.0.225 80 {
        weight 1
        TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
        }
    }
}

4. 绑定HaVIP

在管理控制台把两台ECS分别绑上HAVIP
c79f245654d16bc40f767c7048efdbdc851b18d0
分别在两台机器上启动nginx和keepalived
# /usr/local/nginx/nginx
#/etc/init.d/keepalived  start
此时可看到,绑定资源界面主实例一侧链接线已由虚线变为实线,说明链接成功。
669100f5a6986001e24c35c6f68471829ef7f4e0
在管理控制台中可看到实例i-113xhadtu为主实例,i-11kf0kbv7为备实例。
d4217e4ebb88284a0ead75e2def9d714882be65b
在主实例上,通过ifconfig,可以看到,havip已经被绑定到eth0:1上生效。
f17a7211b00096e01b7b2a40c1201c05f82d3e0a

5. 绑定EIP

在管理控制台—专有网络—高可用虚拟IP -- 绑定资源界面中,将HaVIP绑上弹性公网EIP。弹性公网与高可用虚拟IP连接线由虚线变为实线,连接成功。
7dae12897da8a627776abd2449316e62c3216f93

6. 测试

1)访问测试,浏览器中访问EIP地址,可见nginx的欢迎界面,且欢迎界面来自HA1。
a26d17b2020e4cf2fab5405df1d3cbb47a4f54cc
2)将i-113xhadtu实例关机
2c81acf8535d45a8abb99594b84eea2b2c2096c6
在高可用虚拟IP界面看到,原来的i-113xhadtu实例已经变为备实例,主实例切换为了i-11kf0kbv7。
dec25f3fbddee88b3af83864cbf4e0831dc078aa
同时,图形界面里的绑定的虚实关系也发生变化,实线连到了当前的新主实例i-11kf0kbv7。
9d8dccb4ded5b4dfbe08107804b72203ce57e79f
3) 仍然访问EIP地址,nginx欢迎界面已切换至HA2实例。
259ed286f439d28a724097a16ad230b3f7a88642
至此,在VPC环境中,利用HaVip+keepalived配置主备双机高可用完成。

7. 小结

由于HaVIP目前还处于有限用户公测阶段,使用时的限制小结如下:
1) 目前VPC中的网络通信不支持多播和广播,只支持单播;在使用keepalived之类的第三方软件实现高可用,需要通过配置文件把通信方式改成单播;
2) 如果是使用keepalived之类的第三方软件, 需要把信条消息的源IP改成ECS的私网IP(而不要用HaVip的私网IP进行心跳检查),否则可能造成脑裂;
3) 如使用HaVip做自建SNAT网关的高可用时,SNAT实例上配置的SNAT规则中,source IP应该是havip的私网IP而不是ECS自己的私网IP。
4) 目前尚不支持利用LVS搭建负责均衡。
5) 目前每个VPC中最多只能同时存在5个havip对象; 
相关实践学习
阿里云专有网络VPC使用教程
专有网络VPC可以帮助您基于阿里云构建出一个隔离的网络环境,并可以自定义IP 地址范围、网段、路由表和网关等;此外,也可以通过专线/VPN/GRE等连接方式实现云上VPC与传统IDC的互联,构建混合云业务。 产品详情:https://www.aliyun.com/product/vpc
目录
相关文章
|
DataWorks 关系型数据库 网络安全
DataWorks百问百答38:有哪些阿里云vpc环境数据源与数据集成独享资源组网络打通案例?
阿里云vpc环境数据源与数据集成独享资源组网络打通案例指导
2904 0
|
监控
【业务不裸奔系列】10秒创建本地健康检查(支持VPC环境)
定期探测本地指定路径或端口是否正常响应,当出现响应超时或状态码错误时,发送报警通知。快速发现进程存活但不再正常响应的情况。偷偷告诉你对进程挂掉、不响应假死特别有效果。
1452 0
|
弹性计算 API 网络安全
基于资源编排在专有网络环境下快速部署高可用的Dubbox服务(ZooKeeper版)
本文将介绍在专有网络VPC(Virtual Private Cloud)下,基于资源编排服务,快速部署高可用的Dubbox服务的过程。Dubbox服务采用的注册中心是ZooKeeper集群。做这件事情的意义在于:节约部署Dubbox的时间,降低部署Dubbox过程中出错的风险。
4451 0
|
弹性计算 NoSQL Java
基于资源编排在专有网络环境下快速部署高可用的Dubbox服务(Redis版)
本文将介绍在专有网络VPC(Virtual Private Cloud)网络环境下,基于资源编排服务,快速部署高可用的Dubbox服务的过程。Dubbox服务采用的注册中心是主备高可用Redis服务器KVStore。做这件事情的意义在于:节约部署Dubbox的时间,降低部署Dubbox过程中出错的风
3620 0
|
1月前
|
NoSQL 网络协议 架构师
|
2月前
|
弹性计算 Linux 网络安全
三步搭建VPC专有网络NAT网关,配置SNAT和DNAT规则(补充版)
申明:该文档参考于用户 “帅宝宝”的文档进行的优化,新增永久生效的方式
284 1
|
4月前
|
弹性计算 监控 网络安全
使用云企业网实现跨地域跨VPC的网络互通的评测
使用云企业网实现跨地域跨VPC的网络互通
100 1
|
4月前
|
网络协议 关系型数据库 MySQL
VPC企业云上网络搭建+TR转发路由器测评报告
VPC企业云上网络搭建+TR转发路由器测评报告
72422 10
VPC企业云上网络搭建+TR转发路由器测评报告
|
4月前
|
存储 弹性计算 数据中心
TR转发路由器测评—云企业网实现跨地域跨VPC的网络互通测评实战
TR转发路由器测评—云企业网实现跨地域跨VPC的网络互通测评实战
67488 6
TR转发路由器测评—云企业网实现跨地域跨VPC的网络互通测评实战
|
4月前
|
监控 测试技术 网络架构
使用云企业网实现跨地域跨VPC的网络互通的场景测评
使用云企业网实现跨地域跨VPC的网络互通的场景测评
362 4