本文将介绍如何在腾讯云 VPC 内通过 keepalived 软件 + 高可用虚拟 IP (HAVIP) 搭建高可用主备集群。
说明:目前 HAVIP 产品处于灰度优化中,切换的时延在10s左右,如有需要,请提交 内测申请。
通常高可用主备集群包含2台服务器,一台主服务器处于某种业务的激活状态(即 Active 状态),另一台备服务器处于该业务的备用状态(即 Standby 状态),它们共享同一个 VIP(Virtual IP)。同一时刻,VIP 只在一台主设备上生效,当主服务器出现问题时,备用服务器接管 VIP 继续提供服务。高可用主备模式有着广泛的应用,例如,MySQL 主备切换、Nginx Web 接入。
在 VPC 的云服务器间可以通过部署 Keepalived 来实现高可用主备集群。Keepalived 是基于 vrrp 协议的一款高可用软件,Keepalived 配置通过 keepalived.conf 文件完成。
推荐使用单播方式进行 VRRP 通信。
强烈推荐使用 Keepalived(1.2.24版本及以上)。
确保已经配置以下 garp 相关参数。因为 keepalived 依赖 ARP 报文更新 IP 信息,如果缺少以下参数,会导致某些场景下,主设备不发送 ARP 导致通信异常。
garp_master_delay 1
garp_master_refresh 5
确保同一 VPC 下的每个主备集群需要配置不同的 vrrp router id。
确定没有采用 strict 模式,即需要删除“vrrp_strict” 配置。
控制单个网卡上配置的 VIP 数量,建议目前在单个网卡绑定的高可用虚拟 IP 数量不超过5个。如果需要使用多个虚拟 IP,建议在 keepalived 配置文件的 global_defs 段落添加或修改配置“vrrp_garp_master_repeat 1”。
注意:
本文操作步骤均以如下环境条件为例,实际操作时,请您务必使用实际环境参数进行替换。
- 主节点云服务器:HAVIP-01,172.16.16.5
- 备节点云服务器:HAVIP-02,172.16.16.6
- 高可用HAVIP:172.16.16.12
- 弹性公网IP:81.71.14.118
- 镜像版本:CentOS 7.6 64位
说明:HAVIP 的 IP 地址可以自动分配,也可以手动填写。如果您选择手动填写,请确认填写内网 IP 在所属子网网段内,且不属于系统保留 IP。例如,所属子网网段为:10.0.0.0/24,则可填的内网 IP 范围 为:10.0.0.2 - 10.0.0.254。
本文以 CentOS 7.6镜像类型服务器为例提供 keepalived 的安装方法,如有其他需求,请联系技术支持人员。
查看 keepalived 软件包版本号是否符合要求。
yum list keepalived
使用 yum 方式安装软件包。
yum install -y keepalived
使用源码方式安装软件包。
tar zxvf keepalived-1.2.24.tar.gz
cd keepalived-1.2.24
./configure --prefix=/
make; make install
chmod +x /etc/init.d/keepalived //防止出现 env: /etc/init.d/keepalived: Permission denied
登录主节点云服务器 HAVIP-01,执行 vim /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_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script checkhaproxy
{
script "/etc/keepalived/do_sth.sh"
interval 5
}
vrrp_instance VI_1 {
#注意主备参数选择
state BACKUP # 设置初始状态为“备“
interface eth0 # 设置绑定 VIP 的网卡 例如 eth0
virtual_router_id 51 # 配置集群 virtual_router_id 值
nopreempt # 设置非抢占模式
preempt_delay 10
priority 100 # 设置优先级,值越大优先级越高
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 172.16.16.5 # 设置本机内网IP地址
unicast_peer {
172.16.16.6 # 对端设备的 IP 地址
}
virtual_ipaddress {
172.16.16.12 # 设置高可用虚拟 VIP
}
notify_master "/etc/keepalived/notify_action.sh MASTER"
notify_backup "/etc/keepalived/notify_action.sh BACKUP"
notify_fault "/etc/keepalived/notify_action.sh FAULT"
notify_stop "/etc/keepalived/notify_action.sh STOP"
garp_master_delay 1 # 设置当切为主状态后多久更新 ARP 缓存
garp_master_refresh 5 # 设置主节点发送 ARP 报文的时间间隔
track_interface {
eth0 # 使用绑定 VIP 的网卡 例如 eth0
}
track_script {
checkhaproxy
}
}
按“esc”退出编辑状态,输入:wq!
保存并退出。
登录备节点云服务器 HAVIP-02,执行 vim /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_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script checkhaproxy
{
script "/etc/keepalived/do_sth.sh"
interval 5
}
vrrp_instance VI_1 {
#注意主备参数选择
state BACKUP # 设置初始状态为“备“
interface eth0 # 设置绑定 VIP 的网卡 例如 eth0
virtual_router_id 51 # 配置集群 virtual_router_id 值
nopreempt # 设置非抢占模式
preempt_delay 10
priority 50 # 设置优先级,值越大优先级越高
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 172.16.16.6 # 设置本机内网 IP 地址
unicast_peer {
172.16.16.5 # 对端设备的 IP 地址
}
virtual_ipaddress {
172.16.16.12 # 设置高可用虚拟 VIP
}
notify_master "/etc/keepalived/notify_action.sh MASTER"
notify_backup "/etc/keepalived/notify_action.sh BACKUP"
notify_fault "/etc/keepalived/notify_action.sh FAULT"
notify_stop "/etc/keepalived/notify_action.sh STOP"
garp_master_delay 1 # 设置当切为主状态后多久更新 ARP 缓存
garp_master_refresh 5 # 设置主节点发送ARP报文的时间间隔
track_interface {
eth0 # 使用绑定 VIP 的网卡 例如 eth0
}
track_script {
checkhaproxy
}
}
按“esc”退出编辑状态,输入:wq!
保存并退出。
重启 keepalived 进程使配置生效。
systemctl start keepalived
登录 高可用虚拟 IP 控制台,可以看到 HAVIP 绑定的云服务器为主节点云 HAVIP-01,如下图所示。说明:此示例中 HAVIP-01 的优先级更高,所以正常情况下,HAVIP-01 将被选择为主节点。
keepalived 主要日志仍然记录在“/var/log/message”中,可以通过添加 notify 的脚本来进行简单的日志记录。
登录云服务器,执行 vim /etc/keepalived/notify_action.sh
命令添加脚本“notify_action.sh”,脚本内容如下:
#!/bin/bash
#/etc/keepalived/notify_action.sh
log_file=/var/log/keepalived.log
log_write()
{
echo "[`date '+%Y-%m-%d %T'`] $1" >$log_file
}
[ ! -d /var/keepalived/ ] && mkdir -p /var/keepalived/
case "$1" in
"MASTER" )
echo -n "$1" /var/keepalived/state
log_write " notify_master"
echo -n "0" /var/keepalived/vip_check_failed_count
;;
"BACKUP" )
echo -n "$1" /var/keepalived/state
log_write " notify_backup"
;;
"FAULT" )
echo -n "$1" /var/keepalived/state
log_write " notify_fault"
;;
"STOP" )
echo -n "$1" /var/keepalived/state
log_write " notify_stop"
;;
*)
log_write "notify_action.sh: STATE ERROR!!!"
;;
esac
chmod a+x /etc/keepalived/notify_action.sh
修改脚本权限。通过重启 keepalived 进程、重启子机等方式模拟主机故障,检测 VIP 是否能正常迁移。
随着互联网行业的兴起,网络游戏已经成为了最主要的休闲娱乐的方式之一,而一个...
邮箱 域名 怎么进行实名认证?邮箱域名实名认证,要求用户 注册域名 时,填写真...
在CCE中创建集群时,您需要根据具体的业务需求规划VPC的数量、子网的数量、容器...
一、市场回顾: 疫情催化海外云服务商业绩及估值双升 1.1 疫情导致全球 IT 开支...
哪里可以买到 虚拟主机 ?买虚拟主机要到专业的主机服务商处购买,在大大小小众...
香港 虚拟主机租用 过度到 香港服务器租用 的时候经常会问到一个问题,如何做好...
环境信息 Data Science Workshop Dev ? 打印常量hello tensorflow import tensor...
购买须知 在购买腾讯云 GPU 云服务器前,请确保已了解 腾讯云 GPU 云服务器,且...
在云容器实例中,您可以使用多种方法创建负载,包括使用云容器实例的Console控制...
如果ECS实例发生了实例自动恢复事件,例如物理机非预期宕机或进行主动运维,阿里...