keepalive由浅入深
1. keepalived服务介绍
通过VRRP协议实现高可用功能
2. keepalived服务的三个重要功能
1. 管理LVS负载均衡软件
2. 实现对LVS集群节点健康检查功能
3. 作为系统网络服务的高可用功能
3. keepalived高可用故障切换转移原理
1. keepalived高可用服务之间的故障转移,是通过VRRP协议来实现的。
2. 什么是VRRP协议?
虚拟路由冗余协议,早期是用来解决路由交换的单点问题的。
一组路由器中有一台担当master,其他担当backup,master会组播发包给backup,当master不可用,backup中会重新选举一个master,当master恢复,新的master会自动退位。
4. keepalived高可用服务安装
1. CentOS6
1. 安装
yum install keepalived -y
rpm -qa keepalived
2. 启动keepalived服务
/etc/init.d/keepalived start
3. 配置文件
/etc/keepalived/keepalived.conf
2. CentOS7
1. 安装
yum install keepalived -y
rpm -qa keepalived
2. 启动服务
systemctl enable keepalived
systemctl start keepalived
3. 配置文件
/etc/keepalived/keepalived.conf
3. keepalived配置文件详解
1. 全局配置
global_defs { #全局配置
notification_email { 定义报警邮件地址
yangjianbo@zhen.com
}
notification_email_from yangjianbo@zhen.com #定义发送邮件的地址
smtp_server 192.168.200.1 #邮箱服务器
smtp_connect_timeout 30 #定义超时时间
router_id LVS_DEVEL #定义路由标识信息,相同局域网唯一
}
2. vrrp配置
vrrp_instance VI_1 { #定义实例
state MASTER #状态参数 master/backup 只是说明
interface eth0 #虚IP地址放置的网卡位置
virtual_router_id 51 #同一个集群id一致
priority 100 # 优先级决定是主还是备 越大越优先
advert_int 1 #主备通讯时间间隔,单位为秒
authentication { #
auth_type PASS #
auth_pass 1111 #认证
}
virtual_ipaddress {
192.168.200.16 #设备之间使用的虚拟ip地址
}
}
3. check配置
virtual_server (@IP PORT)|(fwmark num) {
delay_loop num #每隔多少秒,检查RS
lb_algo rr|wrr|lc|wlc|sh|dh|lblc
lb_kind NAT|DR|TUN
(nat_mask @IP)
persistence_timeout num
persistence_granularity @IP
virtualhost string
protocol TCP|UDP
sorry_server @IP PORT
real_server @IP PORT {
weight num
TCP_CHECK {
connect_port num
connect_timeout num
}
}
real_server @IP PORT {
weight num
MISC_CHECK {
misc_path /path_to_script/script.sh
(or misc_path “ /path_to_script/script.sh <arg_list>”)
}
}
}
real_server @IP PORT {
weight num
HTTP_GET|SSL_GET {
url { # You can add multiple url block
path alphanum
digest alphanum
}
connect_port num
connect_timeout num
retry num
delay_before_retry num
}
}
5. keepalived高可用服务单实例单IP
1. 环境
系统:CentOS7.2
主:192.168.2.192
从:192.168.2.193
VIP:192.168.2.195
2. 安装
yum install keepalived -y
3. 配置
1. 全局配置
global_defs {
router_id LVS_01
}
2. vrrp配置
1. master
vrrp_instance VI_1 { #定义实例
state MASTER #状态参数 master/backup 只是说明
interface eth0 #虚IP地址放置的网卡位置
virtual_router_id 51 #同一个集群id一致
priority 100 # 优先级决定是主还是备 越大越优先
advert_int 1 #主备通讯时间间隔,单位为秒
authentication { #
auth_type PASS #
auth_pass 1111 #认证
}
virtual_ipaddress {
192.168.2.196 设备之间使用的虚拟ip地址
}
}
2. backup
global_defs {
router_id LVS_01
}
vrrp_instance VI_1 { #定义实例
state BACKUP #状态参数 master/backup 只是说明
interface eth0 #虚IP地址放置的网卡位置
virtual_router_id 51 #同一个集群id一致
priority 50 # 优先级决定是主还是备 越大越优先
advert_int 1 #主备通讯时间间隔,单位为秒
authentication { #
auth_type PASS #
auth_pass 1111 #认证
}
virtual_ipaddress {
192.168.2.196 #设备之间使用的虚拟ip地址
}
}
3. 日志配置
1. 修改keepalive配置,vi /etc/sysconfig/keepalived
将KEEPALIVED_OPTIONS="-D"修改为KEEPALIVED_OPTIONS="-D -S 0"
2. 修改vi /etc/rsyslog.conf
local7.* /var/log/boot.log
local0.* /var/log/keepalived.log
3. 重启服务
systemctl restart rsyslog
systemctl restart keepalived
6. keepalived高可用服务器的裂脑问题
1. 原因
1. 心跳线坏了
2. 网卡以及相关驱动坏了,IP配置及冲突问题
3. 心跳间的设备坏了
4. 高可用服务器的防火墙阻挡了心跳信息传输
5. keepalived配置文件virtual_route_id两端参数不一致
2. 解决keepalived裂脑的常见方案
1. 只要备用节点出现VIP,就报警。比较简单的方法。
2. 备用节点出现VIP,主节点也有VIP,就报警。比较严谨的方法。
7. Keepalive双网卡配置
1. 环境
系统:CentOS7.2
主: em1: 119.254.109.205 em2: 192.168.1.205
从: eth1:119.254.109.206 eth0: 192.168.1.165
VIP: 119.254.109.204

2. 安装
yum install keepalived -y
添加防火墙规则:iptables -I INPUT -p vrrp -s 0.0.0.0 -j ACCEPT
3. 配置
1. 主配置
global_defs {
router_id LVS_01
}
vrrp_instance VI_205 { #定义实例
state MASTER #状态参数 master/backup 只是说明
interface em1 #虚IP地址放置的网卡位置
virtual_router_id **** #同一个集群id一致
priority 100 # 优先级决定是主还是备 越大越优先
advert_int 1 #主备通讯时间间隔,单位为秒
authentication { #
auth_type PASS #
auth_pass *** #认证
}
virtual_ipaddress {
119.254.109.204 #设备之间使用的虚拟ip地址
}
}
2. 从配置
global_defs {
router_id LVS_01
}
vrrp_instance VI_205 { #定义实例
state BACKUP #状态参数 master/backup 只是说明
interface eth1 #虚IP地址放置的网卡位置
virtual_router_id *** #同一个集群id一致
priority 50 # 优先级决定是主还是备 越大越优先
advert_int 1 #主备通讯时间间隔,单位为秒
authentication { #
auth_type PASS #
auth_pass **** #认证
}
virtual_ipaddress {
119.254.109.204 #设备之间使用的虚拟ip地址
}
}
8. Zabbix监控keepalive脑裂
1. 在从keepalive服务器的zabbix_agent,添加脚本check_keepalive.sh,内容如下:
#!/bin/bash
#Create by Yangjianbo at 2023-03-03 14:00
function check() {
Count=`ip add show eth1 | grep 119.254.109.204 | wc -l`
if [ $Count -ne 0 ];then
echo "1"
else
echo "0"
fi
}
check
2. 创建zabbix参数文件check_keepalive.conf
UserParameter=check_keepalive,/usr/local/zabbix/etc/zabbix_agentd.conf.d/check_keepalive.sh
3. 在zabbix_agent配置文件,添加一行
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/check_keepalive.conf
4. 在zabbix客户端,添加对应主机的监控项与触发器,报警机制
1. 监控项

2. 触发器
3. 报警机制
添加触发器到对应的动作

浙公网安备 33010602011771号