应用级高可用架构——keepalive
前言
企业级应用往往追求高可用,考虑到生产环境的安全性及稳定性,生产应用不可单点部署,同时要求当应用服务节点出现异常时可自动切换至备用节点并且在故障节点恢复后,应用环境可自动恢复至故障前状态。
实现过程
实现原理
通过部署keepalived应用,可实现应用层面的高可用HA架构,如下图所示:
当主节点(master)应用异常退出时,生产服务ip自动切换至备用节点(backup),并且当主节点恢复后可自动抢夺vip。
主节点故障:
主节点故障恢复:
配置过程
这里以syslog-ng应用的高可用为例,配置syslog接收服务的高可用HA架构
- 安装部署syslog-ng应用
yum remove -y rsyslog
yum install -y syslog-ng
systemctl start syslog-ng
systemctl enable syslog-ng
配置syslog-ng,使其监听514端口
重启syslog-ng
systemctl restart syslog-ng
- 两台机器同时部署keepalived应用并指定master节点和backup节点
yum install -y keepalived
编辑keepalived配置文件内容如下:
master节点
! Configuration File for keepalived
vrrp_script chk_syslog {
script "/etc/keepalived/check_syslog.sh"
interval 1
weight -2
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 100
priority 100
advert_int 1
mcast_src_ip 172.160.100.20
smtp_alert
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.160.100.30
}
track_script {
chk_syslog
}
}
backup节点
! Configuration File for keepalived
vrrp_script chk_syslog {
script "/etc/keepalived/check_syslog.sh"
interval 1
weight -2
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 100
priority 99
advert_int 1
mcast_src_ip 172.160.100.21
smtp_alert
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.160.100.30
}
track_script {
chk_syslog
}
}
- 编写检查脚本用于检查本地应用是否存活(或者正常),脚本内容如下:
#! /usr/bin/sh
m_status=`lsof -i:514`
if [ "$m_status" = "" ]; then
exit 1
fi
echo "check success"
- 两台服务器上均启动keepalived应用并且设置开机自启动
systemctl start keepalived
systemctl enable keepalived
效果效果
首先确认服务器1(ip:172.160.100.20)的名称为“server-20”,服务器2(ip:172.160.100.21)的名称为“server-21”,直接通过第三台服务器登录172.160.100.30
PS: 由于此处做了登录免密,因此不需要输入用户密码
可以看到此时172.160.100.30的服务器名称为server-20,此时关闭server-20上的syslog-ng应用
systemctl stop syslog-ng
再次登录172.160.100.30
发现设备名称已经变成“server-21”,可见第二台服务器已经抢占了该虚拟ip,此时重新启动“server-20”上的syslog-ng,
systemctl start syslog-ng
再次登录172.160.100.30
发现服务器名称重新变成“server-20”,表明虚拟ip已经被“server-20”重新抢占。