keepalive高可用
-------------------------------------------------------------------------------------------------------------------------------------------
LB lvs/nginx(http/upstream, stream/upstream)
几个9(指标): 99%, ..., 99.999%,99.9999%;
active --> HEARTBEAT --> passive
active <--> HEARTBEAT <--> active
vip/nginx process[/shared storage]
node:STONITH = Shooting The Other Node In The Head,断电重启
8、Failover:故障切换,即某资源的主节点故障时,将资源转移至其它节点的操作
Failback:故障移回,即某资源的主节点故障后重新修改上线后,将之前已转移至其它节点的资源重新切回的过程
RHCS:Red Hat Cluster Suite红帽集群套件
vrrp协议:Virtual Router Redundancy Protocol,一种容错协议
backup:备用设备,主路由器故障时,能代替主路由器工作的备用路由器
VIP:Virtual IP,虚拟路由器的IP地址,一个虚拟路由器可以拥有一个或多个IP地址
VMAC:Virutal MAC (00-00-5e-00-01-VRID),不能用来通信,只是一种标识而已
抢占式:发现优先级比自己低的设备在主设备,都会发起新一轮的选举,让自己做主设备
(2)为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)
(4)基于脚本调用接口通过执行脚本完成脚本中定义的功能,进而影响集群事务,以此支持作调度器的nginx、haproxy等服务
VRRP Stack:vrrp协议的实现,判定主节点和从节点,并检测主节点可以和从节点发heartbeats
建议使用/etc/hosts文件实现,如果DNS出现问题会使稳定性大打折扣
(4) 各节点之间的root用户可以基于密钥认证的ssh服务完成互相通信(对KA并非必须)
主配置文件:/etc/keepalived/keepalived.conf
Unit File:/usr/lib/systemd/system/keepalived.service
Unit File的环境配置文件:/etc/sysconfig/keepalived
VRRP synchronization group(s):vrrp同步组
Virtual server(s):ipvs集群的vs和rs
(1)配置虚拟路由器:每一个虚拟路由器对应一个vrrp_instance(vrrp实例)
state MASTER|BACKUP:当前节点在此虚拟路由器上的初始状态;只能有一个是MASTER,余下的都应该为BACKUP
interface IFACE_NAME:绑定为当前虚拟路由器使用的物理接口
virtual_router_id VRID:当前虚拟路由器惟一标识,范围是0-255
priority 100:当前物理节点在此虚拟路由器中的优先级;范围1-254
<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
192.168.200.18/24 dev eth2 label eth2:1
track_interface { #配置监控网络接口,一旦出现故障,则转为FAULT状态 实现地址转移
(4)preempt_delay 300:抢占式模式,节点上线后触发新选举操作的延迟时长,默认模式
notify_master <STRING>|<QUOTED-STRING>:
notify_backup <STRING>|<QUOTED-STRING>:
notify_fault <STRING>|<QUOTED-STRING>:
notify <STRING>|<QUOTED-STRING>:
通用格式的通知触发机制,一个脚本可完成以上三种状态的转换时的通知
! Configuration File for keepalived
notification_email { ----》定义目标收件人
notification_email_from keepalived@localhost ----》模拟发件人
router_id node1 #主机名,在另一结点为node2
vrrp_mcast_group4 224.0.100.100
----》定义组播域的组播地址,默认是224.0.0.18(224~239)
state MASTER ----》定义自己为master,其余结点上都为BACKUP
virtual_router_id 6 ----》多个节点必须相同,0~255之间
auth_type PASS ----》只有PASS和AH选项,简易用PASS
auth_pass 571f97b2 ----》无论密码多长,只支持前8个字符
virtual_ipaddress { ----》定义虚拟ip
172.18.100.66/16 dev eth0 label eth0:0
结束时候主服务器重启keepalived服务,从服务器tcpdump -i eth0 -nn host 224.0.56.18,对广播域抓包,有结果:
在vrrp_instance VI_1 语句块最后面加下面行
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
contact='root@localhost' ----》表示邮件接受者
mailsubject="$(hostname) to be $1, vip floating"
mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
echo "$mailbody" | mail -s "$mailsubject" $contact
echo "Usage: $(basename $0) {master|backup|fault}"
之后vim /etc/keepalived/keepalived.conf,修改完成后重启keepalived
在另一节点主机vim /etc/keepalived/keepalived.conf添加同样内容,scp脚本至此主机,完成后重启keepalived
virtual_server IP port | virtual_server fwmark int ----》vip 端口或者防火墙标记
lb_algo rr|wrr|lc|wlc|lblc|sh|dh:定义调度方法
persistence_timeout <INT>:持久连接时长
sorry_server <IPADDR> <PORT>:所有RS故障时,备用服务器地址
notify_up <STRING>|<QUOTED-STRING> RS上线通知脚本
notify_down <STRING>|<QUOTED-STRING> RS下线通知脚本
HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHEC K { ... }:定义当前主机的健康状态检测方法
status_code <INT>:判断上述检测机制为健康状态的响应码
digest <STRING>:判断为健康状态的响应的内容的校验码
connect_timeout <INTEGER>:连接请求的超时时长
delay_before_retry <INT>:重试之前的延迟时长
connect_ip <IP ADDRESS>:向当前RS哪个IP地址发起健康状态检测请求
connect_port <PORT>:向当前RS的哪个PORT发起健康状态检测请求
bindto <IP ADDRESS>:发出健康状态检测请求时使用的源地址
bind_port <PORT>:发出健康状态检测请求时使用的源端口
connect_ip <IP ADDRESS>:向当前RS的哪个IP地址发起健康状态检测请求
connect_port <PORT>:向当前RS的哪个PORT发起健康状态检测请求
bindto <IP ADDRESS>:发出健康状态检测请求时使用的源地址
bind_port <PORT>:发出健康状态检测请求时使用的源端口
connect_timeout <INTEGER>:连接请求的超时时长
1、keepalived调用外部的辅助脚本进行资源监控,并根据监控的结果状态能实现优先动态调整
2、vrrp_script:自定义资源监控脚本,vrrp实例根据脚本返回值,公共定义,可被多个实例调用,定义在vrrp实例之外
3、track_script:调用vrrp_script定义的脚本去监控资源,定义在实例之内,调用事先定义的vrrp_script
十、LVS NAT模型VIP和DIP需要同步,需要同步组,一般高可用实现此模型较为复杂,建议用nginx或haproxy实现
VI_1 # name of vrrp_instance (below)
VI_2 # One for each moveable IP.
说明vip写到实例VI_1库,dip写到实例VI_2里,两个实例在之前被vrrp_sync_group 定义到一个同步组VG_1中,所以调度的时候这两个地址一起漂移
十一、keepalived调用外部的辅助脚本进行资源监控,并根据监控的结果状态能实现优先动态调整;
分两步:(1) 先定义一个脚本;(2) 在vrrp实例中调用此脚本;
script "/bin/bash -c '[[ -f /etc/keepalived/down ]]' && exit 1 || exit 0"
[[ -f /etc/keepalived/down ]]要特别地作为bash的参数的运行!
示例:结合外部脚本来影响虚拟路由器的内部判断结果中各节点或各实例的相关权重
vim /etc/keepalived/keepalived.conf
结果当master的LVS1服务器在/etc/keepalived/新建down文件后,LVS1将降权,ip地址漂移到LVS2上
! Configuration File for keepalived
notification_email_from keepalived@localhost
vrrp_mcast_group4 224.0.100.19
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
}
vrrp_script chk_nginx {
script "/usr/bin/killall -0 nginx && exit 0 || exit 1"
}
virtual_ipaddress {
10.1.0.93/16 dev eno16777736
}
track_script {
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"