虚拟IP(VIP)主要用于弹性云服务器的主备切换,达到高可用性的目的。如果主ECS实例发生故障,备用ECS实例会自动调用自身的接管程序,接管主ECS实例的虚拟IP资源及服务,实现业务高可用。
前提准备
实例镜像及vm实例已创建且能登录互通。
配置步骤
本场景整体操作流程如下:
步骤一:创建虚拟IP
虚拟IP是一种可以独立创建和释放的私网IP资源。弹性云服务器绑定虚拟IP后,弹性云服务器可以通过使用ARP协议进行该IP的宣告。
本文以可用区资源池华东1为例:
1、登录管理控制台。
2、选择“服务列表 > 网络 > 虚拟私有云”。
3、在左侧导航栏选择“子网”。
4、在“子网”列表中,单击子网名称。
5、在“虚拟IP”页签中,单击“申请虚拟IP地址”,根据界面提示配置参数。
步骤二:申请所需云资源
1、登录管理控制台。
2、选择“服务列表 > 计算 > 弹性云主机”,购买弹性云服务器。
3、选择“服务列表 > 网络 > 弹性IP”申请EIP(根据是否有访问公网业务需求来购买)。
步骤三:在主备弹性云服务器上安装keepalived
本示例介绍如何部署keepalived 和nginx进程。
1、登录ECS1实例。具体操作,请参见弹性云主机。
2、在port-nouqagnspx 所在的实例中启动keepalived服务。
2.1 安装keepalived
yum install -y keepalived
2.2 修改配置文件,并启动服务。
- vi /etc/keepalived/keepalived.conf
- 清除文件内容
- 每个server填入各自配置
server1:
! Configuration File for keepalived
global_defs {
router_id my_router
vrrp_garp_interval 3
vrrp_gna_interval 3
}
vrrp_instance VI_1 {
# 注意主备参数选择
state BACKUP # 设置初始状态均为"备"
interface eth0 # 设置绑定 VIP 的网卡 例如 eth0
virtual_router_id 51 # 配置集群 virtual_router_id 值
nopreempt # 设置非抢占模式,
priority 100 # 两设备是相同值的等权重节点
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 172.17.0.3 # 设置本机内网IP地址
unicast_peer {
172.17.0.4 # 对端设备的 IP 地址
}
virtual_ipaddress {
172.17.0.7 # 设置高可用虚拟 VIP
}
garp_master_delay 1 # 设置当切为主状态后多久更新 ARP 缓存
garp_master_refresh 5 # 设置主节点发送 ARP 报文的时间间隔
track_interface {
eth0 # 使用绑定 VIP 的网卡 例如 eth0
}
}
server2:
! Configuration File for keepalived
global_defs {
router_id my_router
vrrp_garp_interval 3
vrrp_gna_interval 3
}
vrrp_instance VI_1 {
# 注意主备参数选择
state BACKUP # 设置初始状态均为"备"
interface eth0 # 设置绑定 VIP 的网卡 例如 eth0
virtual_router_id 51 # 配置集群 virtual_router_id 值
nopreempt # 设置非抢占模式,
priority 100 # 两设备是相同值的等权重节点
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 172.17.0.4 # 设置本机内网IP地址
unicast_peer {
172.17.0.3 # 对端设备的 IP 地址
}
virtual_ipaddress {
172.17.0.7 # 设置高可用虚拟 VIP
}
garp_master_delay 1 # 设置当切为主状态后多久更新 ARP 缓存
garp_master_refresh 5 # 设置主节点发送 ARP 报文的时间间隔
track_interface {
eth0 # 使用绑定 VIP 的网卡 例如 eth0
}
}
2.3 启动keepalived:
3、在port为port-5oq20ui7dl的实例中做同样的上述操作,keepalived的配置文件响应的地址需要修改下,然后启动keepalived服务。
注意您需要将配置文件中的通信方式配置为单播通信方式做心跳检测。
步骤四:将虚拟IP与主备弹性云服务器绑定
点击绑定服务器,弹出的对话框中,
4.1 选择“服务器类型”:云主机/物理机
4.2 选择网卡:云主机支持多网卡,可选择主网卡/扩展网卡(需确保网卡与虚拟IP在同一子网内才可绑定)。
步骤五:放通安全组规则
放通绑定虚拟IP的弹性云服务器所在的安全组,即放通对端入向安全组规则协议为Any。
说明1、出向默认是全通的,如果有做限制,请放通出向规则协议为Any。
步骤六:将虚拟IP与EIP绑定(如有访问公网需求可绑定)
点击绑定弹性IP,弹出的对话框中选择未绑定的弹性IP。绑定弹性公网IP为单选,每个IP只能绑定一个虚拟IP,且绑定虚拟IP后不能再绑定其它云资源。
步骤七:访问测试
7.1 在port-5oq20ui7dl和 port-nouqagnspx两个vip 后端节点启动keepalived服务后,可以通过 ip addr查看vip设置在哪个节点(即master)。
port-5oq20ui7dl节点:
port-nouqagnspx 节点:
在另一个同子网的port实例中ping vip,然后期间重启port-5oq20ui7dl节点上的keepalived服务,观察ping的情况:
同时vip两个后端节点分别执行ip addr ,观察vip 是否漂移到了另一个节点。
注意
如不放通安全组规则可能会存在双主的现象,请保证您的对端安全组规则已放通。
keepalived不同版本配置可能存在部分差异,本文档已在keepalived-2.0.20-19.ct12.x86_64做过验证,仅供参考。
tips :
keepalived 关键配置说明(必须配置):
IPv4:
vrrp_garp_master_delay :切换成master后,发送免费arp的延时时间,单位s,默认值为 5 ( 5s )。建议配置值为 1s 。
vrrp_garp_master_repeat :切换成master后,一次发送免费arp的数量。默认值为5。 建议值为3,或者不配置使用默认值5。
vrrp_garp_master_refresh :角色为master节点刷新发送免费arp的时间间隔。单位s ,默认值为 0 (不刷新),建议配置值为 5s 。
vrrp_garp_master_refresh_repeat :角色为master节点刷新免费arp时发送的免费arp的数量。默认值为1。
vrrp_garp_interval :接口发送免费arp报文间的时间间隔。默认值为0。
vrrp_gna_interval :接口发送NA报文的时间间隔。默认值为0。
VRRP实例对应的配置:
garp_master_delay 10
garp_master_repeat 1
garp_lower_prio_delay 10
garp_lower_prio_repeat 1
garp_master_refresh 60
garp_master_refresh_repeat 2
注意虚拟IP本身是一种可以独立创建和释放的私网IP资源,与高可用软件(例如Keepalived)配合使用,搭建高可用主备服务,提高业务的可用性。理论上不推荐您在尚未使用高可用软件的前提下去手动切换虚拟IP所绑定资源的主备状态,底层在未收到免费ARP(IPv4类型)/NS消息(IPv6类型)时,无法识别主的切换行为,因此会造成服务器切换状态失败。
若您仍需要手动切换资源主备状态,请确保您的虚机可以发出相应的免费ARP(IPv4类型)/NS消息(IPv6类型)来宣告主资源。请确保虚机发出的对应协议报文中:
1、IPv6时,NA报文(ICMPv6):源IP是网卡的VIP,目的IP是IPv6组播 FF02::1,源MAC是网卡的MAC,目的MAC是IPv6组播33:33:00:00:00:01。
2、IPv4时,ARP:源、目的IP均为VIP,源MAC为网卡MAC,目的MAC为 FF:FF:FF:FF:FF:FF。