【Keepalived 】keepalived check and notify scripts
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【Keepalived 】keepalived check and notify scripts相关的知识,希望对你有一定的参考价值。
参考技术A Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:nginx、Haproxy、mysql等)的高可用解决方案软件。Keepalived采用是模块化设计,不同模块实现不同的功能。
keepalived主要有三个模块,分别是core、check和vrrp。
core :是keepalived的核心,负责主进程的启动和维护,全局配置文件的加载解析等
check : 负责healthchecker(健康检查),包括了各种健康检查方式,以及对应的配置的解析包括LVS的配置解析;可基于脚本检查对IPVS后端服务器健康状况进行检查
vrrp :VRRPD子进程,VRRPD子进程就是来实现VRRP协议的
keepalived 配置文件:
Keepalived 配置文件为:keepalived.conf;
主要有三个配置区域,分别是:全局配置(Global Configuration)、VRRPD配置、LVS配置
全局配置又包括两个子配置: 全局定义(global definition) 静态IP地址/路由配置(static ipaddress/routes)
Keepalived服务VRRP的工作原理:
Keepalived高可用对之间是通过 VRRP进行通信的, VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主宕机的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务
在 Keepalived服务对之间,只有作为主的服务器会一直发送 VRRP广播包,告诉备它还活着,此时备不会抢占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性.接管速度最快
出现脑裂的原因:
高可用服务器对之间心跳线链路发生故障,导致无法正常通信。
因心跳线坏了(包括断了,老化)。
因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)
因心跳线间连接的设备故障(网卡及交换机)
因仲裁的机器出问题(采用仲裁的方案)
高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输。
高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败
其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等。
如何解决脑裂:
① 同时使用串行电缆和以太网电缆连接,同时用两条心跳线路,这样一条线路坏了,另一个还是好的,依然能传送心跳消息。
② 当检测到裂脑时强行关闭一个心跳节点(这个功能需特殊设备支持,如Stonith、feyce)。相当于备节点接收不到心跳消患,通过单独的线路发送关机命令关闭主节点的电源。
③ 做好对裂脑的监控报警(如邮件及手机短信等或值班).在问题发生时人为第一时间介入仲裁,降低损失。管理员可以通过手机回复对应数字或简单的字符串操作返回给服务器.让服务器根据指令自动处理相应故障这样解决故障的时间更短。
####################################################################
大家知道keepalived会有四种状态的变化,每种状态变化时,都可以调用一个脚本
当进入Master状态时会呼叫notify_master
当进入Backup状态时会呼叫notify_backup
当发现异常情况时进入Fault状态呼叫notify_fault
当Keepalived程序终止时则呼叫notify_stop
进入Master和Backup这两种状态很容易理解了,就是分别变为主和从
进入Fault,简单的说就是keepalived发现自己有问题了,不能能再去参与Master竞选了,你得修好他才行。
进入这种状态一般是keepalived自身出问题了,或者keepalived检测的网卡出问题不通了,再或者就是我们自己写的检测业务的脚本返回错误
进入Stop 这个就容易理解了,执行service keepalived stop 或者 systemctl stop keepalived 就会进入这个状态。
设置selinux为宽松模式
# setenforce 0
# sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
CentOS防火墙默认是不允许keepalived使用 vrrp的组播。
如果不开启组播ip,keepalived双机不能实现热备的效果,只能实现负载的效果,即虚拟ip不能实现漂移 。
Check that the multicast IP and protocol for VRRP are allowed in the firewall on both servers.
For firewalld:
添加规则
# firewall-cmd --direct --permanent--add-rule ipv4 filterINPUT 0 --in-interface eth0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
# firewall-cmd --direct --permanent--add-ruleipv4 filterOUTPUT 0 --out-interface eth0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
# firewall-cmd --reload
删除规则
# firewall-cmd --direct --permanent--remove-ruleipv4 filterINPUT 0 --in-interface eth0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
# firewall-cmd --direct --permanent--remove-rule ipv4 filterOUTPUT 0 --out-interface eth0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
# firewall-cmd --reload
For iptables:
添加规则
# iptables -A INPUT -p vrrp -j ACCEPT
# iptables -A OUTPUT -p vrrp -j ACCEPT
# service iptables save
删除规则
# iptables -D INPUT -p vrrp -j ACCEPT
# iptables -D OUTPUT -p vrrp -j ACCEPT
# service iptables save
keepalived基本应用解析
http://blog.51cto.com/pangge/1301878
keepalived官方文档
http://www.keepalived.org/doc/introduction.html
使用keepalived实现redis的故障切换
http://peiqiang.net/2014/11/21/keepalived-and-redis.html
Kamailio High Availability Done Right with Keepalived
http://blog.unicsolution.com/2015/01/kamailio-high-availability-with.html
Keepalived Check and Notify Scripts
https://tobrunet.ch/keepalived-check-and-notify-scripts
keepalived双机热备原理及实例部署LVS+keepalived
keepalived简介
它是由C语言编写的路由热备软件,主要提供简单高效的负载均衡及高可用解决方案。keepalived通过VRRP协议实现高可用架构。lvs实现集群分发,keepalived实现调度器的主备方案,两者结合实现集群系统的高负载高可用。
VRRP协议是为了防止单点故障而设计的主从灾备协议,VRRP将两台或者多台路由设备虚拟成一个设备,对外提供一个虚拟路由ip地址,主路由设备处于启用状态时,不断的发送自身信息到备用设备,以表明主路由状态正常,当备用设备收不到主设备的信息时,备用设备会根据自身的优先级选举出新的主设备,并保证提供所有业务功能。
LVS+keepalived实例
服务器名称 网络接口 IP地址
router | 外网接口eth1 | 122.126.152.183 |
内网接口eth0 | 192.168.1.1 | |
lvs_1.test.com | eth0 | 192.168.1.5 |
eth0 VIP | 192.168.1.2 | |
lvs_2.test.com | eth0 | 192.168.1.6 |
eth0 VIP | 192.168.1.2 | |
web1.test.com | eth0 | 192.168.1.7 |
lo:0 VIP | 192.168.1.2 | |
web1.test.com | eth0 | 192.168.1.8 |
lo:0 VIP | 192.168.1.2 |
首先安装配置web1和web2
设置web1网路参数及回环设备lo:0设置VIP
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.7
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT=yes
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
BOOTPROTO=static
IPADDR=192.168.1.2
NETMASK=255.255.255.255
GATEWAY=192.168.1.1
ONBOOT=yes
修改ARP参数
vim /etc/sysctl.conf
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
执行 sysctl -p
service network restart
iptables -F
iptables -X
service iptables save
setenforce 0
sed -i s/enforcing/disabled/g /etc/sysconfig/selinux
yum install -y httpd
echo "web1 192.168.1.7" > /var/www/html/index.html
service httpd restart
chkconfig httpd on
web2机器上执行与web1相同步骤,注意修改部分参数
lvs_1调度器操作
首先设置网络
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.5
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT=yes
TYPE=Ethernet
service network restart
安装部署keepalived ipvsadm
yum install -y gcc openssl-devel popt-devel libnl libnl-devel kernel-devel ipvsadm
下载keepalived
wget http://www.keepalived.org/software/keepalived-1.3.0.tar.gz
tar zxf keepalived-1.3.0.tar.gz -C /usr/src/
cd /usr/src/keepalived-1.3.0/
./configure
make && make install
ln -s /usr/local/etc/keepalived/ /etc/
ln -s /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/sbin/keepalived /usr/sbin/
lvs_1为主设备,lvs_2为从设备,下面修改配置文件
vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id lvs_1
}
vrrp_instance LVS_HA {
state MASTER #lvs_2为BACKUP
interface eth0
virtual_router_id 60 #lvs_2的VRID必须与lvs-1相同
priority 100 #lvs-2为从设备,必须小于 lvs-1的参数
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.2/24
}
}
virtual_server 192.168.1.2 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server 192.168.1.7 80 {
weight 1
TCP_CHECK {
connect_timeout 20
connect_port 80
nb_get_retry 3
}
}
real_server 192.168.1.8 80 {
weight 1
TCP_CHECK {
connect_timeout 20
connect_port 80
nb_get_retry 3
}
}
}
service keepalived start
chkconfig keepalived on
ip addr show #查看虚拟ip
ipvsadm -Ln #查看lvs规则
iptables -F
iptables -X
service iptables save
setenforce 0
sed -i s/enforcing/disabled/g /etc/sysconfig/selinux
lvs_2机器上执行相同操作,注意修改部分参数
下面配置router机器,这里用做软路由,生产环境直接用硬件路由设备
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.1
NETMASK=255.255.255.0
ONBOOT=yes
DNS=8.8.8.8
vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=static
IPADDR=122.126.152.183
NETMASK=255.255.255.254
ONBOOT=yes
DNS=8.8.8.8
service network restart
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t nat -I PREROUTING -d 122.126.152.183 -p tcp -dport 80 -j DANT --to--destination 192.168.1.2:80
iptables -t nat -I PREROUTING -s 192.168.1.0/24 -p tcp -j SNAT --to-source 122.126.152.183
service iptables save
setenforce 0
sed -i s/enforcing/disabled/g /etc/sysconfig/selinux
vim /etc/sysctl.conf
net.ipv4..ip_forward = 1
sysctl -p
客户端测试
浏览器访问http://122.126.152.183 将得到不同real server的数据包
本文出自 “实用Linux知识技能分享” 博客,请务必保留此出处http://superleedo.blog.51cto.com/12164670/1894886
以上是关于【Keepalived 】keepalived check and notify scripts的主要内容,如果未能解决你的问题,请参考以下文章