最近更新时间:2021-11-10 10:57:42
Keepalived通常用来搭建高可用服务,比如Nginx、Haproxy、MySQL,DNS等。由于云网络和传统网络的差异,云网络(VPC)里使用keepalived方式会略有差异。
本文通过给出若干keepalived 配置和脚本文件,帮助用户在云主机上作本次实践。
通常高可用主备集群包含 2 台服务器,一台主服务器处于某种业务的激活状态(即 Active
状态),另一台备服务器处于该业务的备用状态(即 Standby 状态),它们共享同一个 VIP(Virtual
IP),同一时刻 VIP 只在一台主设备上生效,当主服务器出现问题,备用服务器接管 VIP
继续提供服务。
在传统的物理网络中可以通过 keepalived 的 VRRP 协议协商主备状态,主节点和备节点之间通过多播或者单播的方式发送心跳消息来选举主节点,主节点周期性发送免费
ARP 报文刷新上联交换机的 MAC 表或终端 ARP 表,触发 VIP 的迁移到主设备上。
金山云 VPC 支持部署keepalived 来搭建主备高可用集群,与物理网络相比,主要区别是:VIP迁移后在VPC Domain内生效需要调用OPENAPI调整路由后生效。
云主机需要能访问公网(通过公网EIP或者公网NAT)
在某个VPC内创建子网后,可选择子网内未使用的任意IP作为VIP,可以从VPC控制台->子网页面查看已使用IP,子网网段内未使用IP即可作为VIP使用。
注意:
本文部署环境示例如下,用户需按照自身网络配置修改。
VPC 172.18.0.0/16
主机1 172.18.0.10
主机2 172.18.0.20
预留VIP 172.18.0.253
主备云主机安装 keepalived(1.3.5 版本以上)
以 CentOS 为例:yum –y install keepalived
准备脚本 notify_action.sh, nexthop.py 和keepalived 配置文件
step1: git clone https://github.com/KscSDK/ksc-sdk-python.git
step2: python setup.py install 按装 KSCSDK,某些环境下需执行更新 yum install python-pip;pip install -U pip setuptools
step3:从ksc-sdk-python/examples中 copy nexthop.py,keepalived.conf,notify_action.sh 到/etc/keepalived目录
0) state 初始角色,均填写 BACKUP
1) interface 改成本机网卡名 例如 eth0
2) priority 两台设备配置大小相同的整数,如 50
3) unicast_src_ip 改成本机内网 IP
4) unicast_peer 改成对端机器内网 IP
5) virtual_ipaddress 改成内网 VIP
6) track_interface 改成本机网卡名 例如 eth0
注意:需要配置单播模式是很重要的,即指定对端设备的 IP 地址。单播模式需从配置文件中删除vrrp_strict
nexthop.py:云 OPENAPI 主备切换程序,通过调用VPC路由修改OPENAPI,将VIP指向到另一台主机。
##################需修改部分Begin####################
region='cn-beijing-6' #region code,云服务所在的金山云区域
vpcId = '1858a08a-6cc9-4278-8d0c-d536f441fe8e' #vpcId
ks_access_key_id = '您的ak'
ks_secret_access_key = '您的sk'
vip = "172.18.0.253" #改成您的本机内网 VIP
DestinationCidrBlock = '172.18.0.253/32' #修改为VIP
thisInstanceId = '1cf963ff-7847-4859-8462-5405f0facc1d' #当前主机的Id
thatInstanceId = 'b141da5f-8e3e-44c0-ac0f-a0feccba78c7' #迁移前所在主机Id
interface = {"eth0":"172.18.0.13"} #当前机器主网卡和主IP
##################需修改部分End######################
说明:
1) 由于路由重定向 以 API 方式异步实现,路由生效在1分钟以内,跨子网访问VIP可能会存在分钟以内的访问不通。同子网访问VIP只受限于keepalived自身的切换时间。
2) 脚本日志将会写到 /var/log/keealived.log 中。日志会占用您的磁盘空间。您可以自行借助 logrotate 等工具处理日志累积的问题。keepalived 进程的日志仍会写到/var/log/message中。
纯净模式