KeepAlived(三):vrrp实例故障转移(keepalived+haproxy)
keepalived使用脚本进行健康检查时的相关配置项。例如keepalived+haproxy实现haproxy的高可用。
keepalived分为vrrp实例的心跳检查和后端服务的健康检查。如果要配置后端服务,则后端服务只能是LVS。但vrrp能独立与lvs存在,例如keepalive结合haproxy、mysql等服务实现它们的高可用。
- vrrp实例的心跳检查(lvs,haproxy,mysql...)
- (1).除了LVS,vrrp只能通过脚本来实现vrrp的健康检查,并通过脚本结束keepalived进程来中断该实例的心跳通告。此时virtual server部分的配置需省略。
- (2).对于LVS,无需使用任何脚本,因为所有keepalived节点会同时对后端服务进行健康检查,并同时从LVS规则中剔除下线的服务。如果所有后端服务都不健康,那就没有必要切换keepalived。
- 后端RS的健康检查(只能是LVS)
- (1).一般采用TCP_CHECK、HTTP_GET、SSL_GET进行健康检查。
- (2).但也能自写脚本进行后端服务的健康检查,这种模式称为MISC_CHECK。
以下是从man keepalived
中截取的通过脚本进行心跳检查、健康检查时的相关配置选项。
VRRP script(s) # 定义一个vrrp脚本,后续vrrp组或vrrp实例要执行某脚本时,需要从此处引用 # 注意,所有vrrp实例都会监控脚本的退出状态码 vrrp_script <SCRIPT_NAME> { script <STRING>|<QUOTED-STRING> # 要执行的命令或脚本路径 interval <INTEGER> # 脚本调用时间间隔,默认1秒 timeout <INTEGER> # 脚本执行等待超时时长,超过该时长,表示脚本执行失败 weight <INTEGER:-254..> # 根据该权重值调整vrrp实例优先级值,默认值为0 rise <INTEGER> # 需要成功多少次,vrrp才进行角色状态切换 fall <INTEGER> # 需要失败多少次,vrrp才进行角色状态切换 user USERNAME [GROUPNAME] # 脚本执行身份,group默认同username init_fail # 假定脚本初始化时就处于失败状态 } VRRP synchronization group(s) # 分别表示切换为主/备/出错(例如监控的eth0坏了)时所执行的脚本。 # 要为脚本传递参数时,使用引号包围整个脚本和参数 notify_master /path/to_master.sh [username [groupname]] notify_backup /path/to_backup.sh [username [groupname]] notify_fault "/path/fault.sh VG_1" [username [groupname]] # notify表示只要状态切换都会调用的脚本,且该脚本是在以上三个脚本执行之后再调用的, # keepalived会自动传递四个参数,因此不要手动为脚本传递参数。 # $1 = "GROUP"|"INSTANCE" # $2 = vrrp组名称或vrrp实例名 # $3 = 切换的目标状态(MASTER/BACKUP/FAULT) # $4 = 优先级数值(priority value) notify /path/notify.sh [username [groupname]] VRRP instance(s)部分 # 监控接口,当某接口down掉时,切换为fault状态 track_interface { eth0 eth1 eth2 weight <-254..> ... } # 监控脚本,即执行vrrp_script定义的脚本 track_script { <SCRIPT_NAME> <SCRIPT_NAME> weight <-254..> } # notify_master/backup/fault/stop分别表示切换为主、备、出错(例如监控的eth0坏了)、vrrp停止时所执行的脚本 # 要为脚本传递参数时,使用引号包围整个脚本和参数 notify_master <STRING>|<QUOTED-STRING> [username [groupname]] notify_backup <STRING>|<QUOTED-STRING> [username [groupname]] notify_fault <STRING>|<QUOTED-STRING> [username [groupname]] notify_stop <STRING>|<QUOTED-STRING> [username [groupname]] # executed when stopping vrrp # notify表示只要状态切换都会调用的脚本,并且该脚本是在以上三个脚本执行之后再调用的 notify <STRING>|<QUOTED-STRING> [username [groupname]] Virtual server(s)部分 # 投票被选举成功或失败时执行的脚本 quorum_up <STRING>|<QUOTED-STRING> quorum_down <STRING>|<QUOTED-STRING> real_server <IPADDR> <PORT> { # 当健康检查的后端rs上线、下线时执行的脚本 notify_up <STRING>|<QUOTED-STRING> notify_down <STRING>|<QUOTED-STRING> # MISC健康检查类型,该类型通过自定义脚本来检查后端健康状况 MISC_CHECK { # 执行哪个脚本来判断后端是否健康 misc_path <STRING>|<QUOTED-STRING> # Script execution timeout misc_timeout <INT> # 指定一个随机延迟时间,防止同时检查所有后端,指定为0时表示禁止该功能。 # 默认启动该功能,默认最大间隔为delay_loop的值。 warmup <INT> # 如果指定该选项,则根据健康检查脚本的退出状态码动态调整权重值 # 退出状态码为: # 0:表示检查成功,不做任何权重修改 # 1:表示检查失败 # 2-255:表示检查成功,但权重值减2,例如(状态码为255,则设置权重为253) misc_dynamic # 指定运行后端健康检查脚本的身份,不指定group时将默认使用username user USERNAME [GROUPNAME] } } }
例如,在keepalived+haproxy时。
vrrp_script check_haproxy { script"/etc/keepalived/chk_haproxy.sh" interval 2 weight 2 } global_defs { router_id haproxy1 } vrrp_instanceVI_1 { state MASTER interface eth0 virtual_router_id 150 priority 50 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress{ 192.168.1.201 } track_script { check_haproxy } }
其中check_haproxy的脚本/etc/keepalived/chk_haproxy.sh内容如下:
#!/bin/bash if killall - haproxy &>/dev/null;then serivce haproxy restart sleep if killall - haproxy &>/dev/null;then service keepalived stop fi fi
回到Linux系列文章大纲:http://www.cnblogs.com/f-ck-need-u/p/7048359.html
回到网站架构系列文章大纲:http://www.cnblogs.com/f-ck-need-u/p/7576137.html
回到数据库系列文章大纲:http://www.cnblogs.com/f-ck-need-u/p/7586194.html
转载请注明出处:http://www.cnblogs.com/f-ck-need-u/p/8566233.html
注:若您觉得这篇文章还不错请点击右下角推荐,您的支持能激发作者更大的写作热情,非常感谢!
相关推荐
MichelinMessi 2020-06-21
GenvenLiang 2020-06-15
Jaystrong 2020-06-10
zwmnhao0 2020-06-07
DriveCar 2020-06-06
CurrentJ 2020-05-28
xiunai 2020-05-15
极地雪狼 2020-05-15
后厂村老司机 2020-04-19
yongzhang 2020-05-11
快乐de馒头 2020-04-22
yungame 2020-04-21
快乐de馒头 2020-04-11
畅聊架构 2020-03-28
泥淖 2020-03-26
yevvzi 2020-03-01
xcznb 2020-02-28
sunnyxuebuhui 2020-02-16
OwenJi 2020-02-15