keepalived
Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。一个mysql或lvs或nginx服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
vrrp协议完成地址流动;
为vip地址所在的节点生成ipvs规则(在配置文件中预先定义);
为ipvs集群的各RS做健康状态检测;
基于脚本调用接口通过执行脚本完成脚本中定义的功能,进而影响集群事务;
HA Cluster配置前提:
(1) 各节点时间必须同步;
ntp, chrony
安装keepalived
CentOS 6.4以后再base仓库中就已经提供了keepalived软件包,因此可直接使用yum -y install keepalived安装即可
程序环境:
配置文件:/etc/keepalived/keepalived.conf
主程序:/usr/sbin/keepalived
配置文件讲解
keepalived有三类配置区域,注意不是三种配置文件,是一个配置文件里面三种不同类别的配置区域,全局配置(Global Configuration)、VRRPD配置、LVS配置
##########################全局配置#############################
global_defs {
notification_email {
root@localhost #指定keepalived在发生故障切换时需要发送的Email地址,可定义多个
}
notification_email_from keepalived@localhost #指定故障切换时的发件人地址
smtp_server 127.0.0.1 #指定smtp服务器地址
smtp_connect_timeout 30 #指定smtp连接超时时间
router_id LVS_DEVEL #运行keepalived机器的一个标识
vrrp_mcast_group4 224.0.0.9 #指定ipv4组播地址
}
##########################VRRP配置##################################
vrrp_instance VI_1 {
state MASTER #指定在当前VRRP示例的状态MASTER|BACKUP,如果设置了nopreempt这个值不起作用,主备靠priority决定
interface eth0 #设置实例绑定的网卡
virtual_router_id 51 ##VRID标记 ,路由ID,可通过#tcpdump vrrp查看
priority 100 #优先级,高优先级竞选为master
advert_int 1 #检查间隔,默认1秒
nopreempt #非抢占(因为默认如果master挂的时候,backup会顶上,当master再好的时候,会再切回去,这样就会造成两次
#断开,加上nopreempt的时候,及时master又好了,依旧不会切换,但是要注意两个state 都要是backup)
preempt_delay 300 #抢占式模式下,节点上线后触发新选举操作的延迟时长;
authentication { #设置认证
auth_type PASS #认证方式
auth_pass 1111 #认证密码
}
virtual_ipaddress { #设置vip
192.168.200.16
192.168.200.17
192.168.200.18
}
track_interface { #配置要监控的接口,一旦出现故障则转为FAULT状态
eth0
eth1
...
}
notify_master <STRING>|<QUOTED-STRING> #当前节点成为主节点时触发的脚本;
notify_backup <STRING>|<QUOTED-STRING> #当前节点转为备节点时触发的脚本;
notify_fault <STRING>|<QUOTED-STRING> #当前节点转为“失败”状态时触发的脚本;
}
################################LVS配置##################################
virtual_server 192.168.200.100 443 { #VIP 端口
delay_loop 6 #健康检查时间间隔
lb_algo rr #lvs调度算法lrr|wrr|lc|wlc|lblc|sh|dh
lb_kind NAT #负载均衡转发规则NAT|DR|TUN
nat_mask 255.255.255.0 #nat掩码
persistence_timeout 50 #会话保持时间
protocol TCP #使用的协议
sorry_server <IPADDR> <PORT> #备用服务器地址,所有realserver失效后启用
real_server 192.168.201.100 443 { #RIP地址,端口
weight 1 #权重,默认为1,0失效
inhibit_on_failure ##在服务器健康检查失效时,将其设为0,而不是直接从ipvs中删除
notify_up <STRING>|<QUOTED-STRING> #在检测到server up后执行脚本
notify_down <STRING>|<QUOTED-STRING> #在检测到server down后执行脚本
HTTP_GET|SSL_GET {
url {
path <URL_PATH> #定义要监控的URL
status_code <INT> #判断上述检测机制为健康状态的响应码
digest <STRING> #判断上述检测机制为健康状态的响应的内容的校验码;
}
connect_timeout <INTEGER> #连接请求的超时时长
nb_get_retry <INT> #重试次数
delay_before_retry <INT> #重试之前的延迟时长
connect_ip <IP ADDRESS> #向当前RS的哪个IP地址发起健康状态检测请求
connect_port <PORT> #向当前RS的哪个PORT发起健康状态检测请求
bindto <IP ADDRESS> #发出健康状态检测请求时使用的源地址
bind_port <PORT> #发出健康状态检测请求时使用的源端口
}
TCP_CHECK {
connect_ip <IP ADDRESS> #向当前RS的哪个IP地址发起健康状态检测请求
connect_port <PORT> #向当前RS的哪个PORT发起健康状态检测请求
bindto <IP ADDRESS> #发出健康状态检测请求时使用的源地址;
bind_port <PORT> #发出健康状态检测请求时使用的源端口;
connect_timeout <INTEGER> #连接请求的超时时长;
}
}
}
转载于:https://blog.51cto.com/zhaizhai/1871617