Keepalived"/>
Keepalived
Keppalived概念:keepalived是以VRRP协议为基础实现的,VRRP全称VirtualRouterRedundancyProtocol,中文名为虚拟路由冗余协议,VRRP的出现就是为了解决静态路由的单点故障问题,VRRP是通过一种竞选机制来将路由的任务交给某台VRRP路由器的。
在两个负载均衡调度器上安装Keepalived以实现高可用的目的。
两个调度器之间通过VRRP协议来保证高可用性,当一台调度器宕机时,另一台备用的立即接替原主机服务,当主机被修复之后又将服务返还给主机。
Keepalived故障切换原理:在主节点正常工作的时候,会不断地向备节点广播心跳消息,用来告诉备节点自己还活着,当主节点发生故障的时候,备节点就无法收到主节点广播的消息,即可判定主节点发生故障,进而调用自身的接管程序,接管主节点的IP资源及服务。而当主节点被修复时,备节点会释放主节点故障时自己所接管的IP资源和服务,恢复到原来备用的角色。
两个节点都为BACKUP节点,优先级一样,谁先启动谁就是主节点
配置文件详解
global_defs { ##全局定义,对整个Keepalived起作用router_id MySQL-HA ##运行Keepalived的机器的标识
} ##配置虚拟路由器
vrrp_instance 名字 {state MASTER/BACKUP ##主/备interface IFACE_NAME ##绑定为当前虚拟路由器使用的物理接口;virtual_router_id VRID ##当前虚拟路由器的惟一标识,范围是0-255;priority 100 ##当前主机在此虚拟路径器中的优先级;范围1-254;advert_int 1 ##vrrp通告的时间间隔;主备间通告时间检查的时间间隔,单位为s,默认1s##配置认证authentication {auth_type AH|PASS ##加密认证|明文认证auth_pass <PASSWORD> ##密码}##设置VIP即虚拟IP地址virtual_ipaddress {<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>192.168.200.17/24 dev eth1192.168.200.18/24 dev eth2 label eth2:1}##配置要监控的网络接口,一旦接口出现故障,则转为FAULT状态;track_interface {eth0eth1nopreempt:定义工作模式为非抢占模式;preempt_delay 300:抢占式模式下,节点上线后触发新选举操作的延迟时长;}}##配置业务进程脚本
vrrp_script check_run {
script "/home/mysql/mysql_check.sh" ##设置脚本文件名
interval 60 ##设置脚本执行的时间间隔
fall 2 ##定义检测失败的最大次数,表示当请求失败几次时就认为节点资源故障
rise 1 ##定义请求成功的次数,表示当进行几次请求成功后就认为节点资源恢复正常
}vrrp_sync_group VG1 {
group { ##设置同一组中的vrrp实例名
VI_1
}
}
##vrrp_sync_group配置VRRP同步组。不使用Sync Group的话,如果机器有两个网段,一个内网一个外网,每个网段开启一个VRRP实例。假设VRRP配置为检查内网,那么当外网出现问题时,VRRPD认为自己仍然健康,那么不会触发Master和Backup的切换,从而导致问题。Sync Group解决这个问题,可以把两个实例都放进一个Sync Group,这样的话,Sync Group里面任何一个实例出现问题都会发生切换vrrp_instance VI_1 {state BACKUP ##实例出事状态interface ens32 ##实例绑定的网卡virtual_router_id 51 ##VRID标记,值为0-255priority 90 ##优先级advert_int 1 ##检查间隔nopreempt ##不发生抢占authentication { ##认证类型和密码auth_type PASS ##认证类型auth_pass 1234 ##铭文认证密码}##vrrp_instance配置VRRP实例。VRRP实例表示在上面开启了VRRP协议。这个实例说明了VRRP的一些特性,比如主从、VRID等等。可以在每个网卡上开启一个实例。VRRP实例主要定义vrrp_sync_group里面的每个组的漂移IP等。track_script { ##设置追踪脚本,调用vrrp_script使之生效check_run ##调用vrrp_script中定义的脚本}##定义通知脚本notify_master /home/mysql/master.sh ##当切换到master时执行的脚本notify_stop /home/mysql/stop.sh ##vrrp停止以后执行的脚本notify_backup /home/mysql/backup.sh ##当前节点转为备节点时触发的脚本;notify_fault /home/mysql/fault.sh ##当前节点转为“失败”状态时触发的脚本;notify /home/mysql/general.sh ##通用格式的通知触发机制,一个脚本可完成以上三种状态的转换时的通知;virtual_ipaddress { ##指定漂移地址172.16.1.100/24 ##不加掩码,默认是32位的}
}
配置的脚本
#!/bin/bashkkk=`/usr/local/mysql/bin/mysqld -h127.0.0.1 -pmysql_passwd -Pmysql_port -N -s -e "show databases" 2>/dev/null`if [ ! -z "$kkk" ]; thenexit 0 ##表示服务正常
elseexit 1 ##表示服务有报错
fi
当查看数据库里有哪些库时报错时,keepalived就会自动转移VIP到正常的backup节点
更多推荐
Keepalived
发布评论