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. 报警机制
添加触发器到对应的动作