本文共 4079 字,大约阅读时间需要 13 分钟。
第一章 keepalived介绍
keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点状态,后来又加入了可以实现高可用的VRRP功能.此,keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx,Haproxy,MySQL等)的高可用解决方案软件.
keepalived软件主要是通过VRRP协议实现高可用功能的.VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,他能够保证当个别节点宕机时,整个网络可以不间断地运行.Keepalived一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能,
第二章 keepalived服务的重要功能
2.1 作为系统网络服务的高可用功能(failover)
keepalived可以实现任意两台主机之间,例如Master和Backup主机之间的故障转移和自动切换,这个主机可以使普通的不能停机的业务服务器,也可以是LVS负载均衡,Nginx反向代理这样的服务器.
keepalived高可用功能实现的基本原理为:
两台主机同时安装好keepalived软件并启动服务,开始正常工作时 角色为Master的主机获得所有资源并对用户提供服务 角色为Backup的主机作为Master主机的热备;当角色为Master的主机失效或出现故障时
角色为Backup的主机将自动接管Master主机的所有工作,包括接管VIP资源及相应资源服务而当角色为Master的主机故障修复后,又会自动接管回他原来处理的工作
角色为Backup的主机则同时释放Master主机失效时他接管的工作 此时,两台主机将恢复到启动时各自的原始角色及工作状态2.2 什么是VRRP
VRRP,全称Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议
VRRP的出现就是为了解决静态路由的单点故障问题 VRRP是通过一种竞选机制来将路由的任务交给某台VRRP路由器的.VRRP通过竞选机制来实现虚拟路由器的功能,所有的协议报文都是通过IP多播(Multicast)包(默认的多播地址224.0.0.18)形式发送的
虚拟路由器由VRID(范围0-255)和一组IP地址组成,对外表现为一个周知的MAC地址,:00-00-5E-00-01-{VRID}. 所以,在一个虚拟路由器中,不管谁是Master,对外都是相同的MAC和IP(称之为VIP). 客户端主机并不需要因Master的改变修改自己的路由配置.对它们来说,这种切换是透明的.在一组虚拟路由器中,只有作为Master的VRRP路由器会一直发送VRRP广播包,此时Backup不会抢占Master
当Master不可用时,Backup就收不到来自Master的广播包了,此时多台Backup中优先级最高的路由器会抢占为Master. 这种抢占是非常快速的(可能只有1秒甚至更少),以保证服务的连续性,处于安全性考虑,VRRP数据包使用了加密协议进行了加密.**
3.4 keepalived配置文件说明
**
! Configuration File for keepalivedglobal_defs { #全局配置部分 notification_email { #设置发送邮件信息的收件人 acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc #设置连接的邮件服务器信息 smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL #本服务器的名称,若环境中有多个keepalived时,此名称不能一致}vrrp_script chk_web{ script "/usr/local/sbin/check_ng.sh" --定义需要监控的脚本(脚本是执行权限) interval 3 --执行脚本的间隔时间 weigth 2}vrrp_instance VI_1 { #vrrp协议家族,主备要一致 state MASTER #标识所在家族的身份 interface ens33 #承载VIP地址的物理接口 virtual_router_id 51 #标识家族身份信息, 虚拟路由器的ID号,(主备要一致)每一个keep组都不同 priority 100 #优先级,数值越大优先级越高 advert_int 1 authentication { #通讯需要认证 auth_type PASS ##认证类型 auth_pass 1111 ##密码字串 } virtual_ipaddress { 192.168.8.100 } track_script { ---调用执行脚本信息 chk_web}}
设置主恢复不强占vip
描述:主服务器有问题,虚拟ip会切换到从服务器上,如果主恢复了,会把vip强占过来,这边设置不强占
主库 配置
[root@mysqltest ~]# more /etc/keepalived/keepalived.confglobal_defs { router_id mysqlmha}vrrp_script check_run { script "/etc/keepalived/check_mysql.sh" interval 1}vrrp_instance VI_1 { state BACKUP --这里状态指定为backup interface eth0 virtual_router_id 151 priority 100 advert_int 1 nopreempt --设置 nopreempt 防止抢占资源 authentication { auth_type PASS auth_pass 1111 } track_script { check_run } virtual_ipaddress { 192.168.66.53 }}
keepalived高可用服务器的裂脑问题
5.1 什么是裂脑
由于某些原因,导致两台高可用服务器对在指定时间内,无法检测到对方的心跳消息,各自取得资源及服务的所有权,而此时的两台高可用服务器都还活着并在正常运行,这样就会导致同一个IP或服务在两端同时存在而发生冲突,最严重的是两台服务器占用同一个VIP地址,当用户写入数据时可能会分别写入到两端,这可能会导致服务器两端的数据不一致或造成数据丢失,这种情况就被成为裂脑.5.2 导致裂脑发生的原因
一般来说,裂脑的发生,有以下几种原因 高可用服务器对之间心跳线链路发生故障,导致无法正常通信 心跳线坏了(包括断了,老化) 网卡及相关驱动坏了,IP配置及冲突问题(网卡直连) 心跳线之间连接的设备故障(网卡及交换机) 仲裁的机器出问题了(采用总裁的方案) 高可用服务器上开启了iptables防火墙阻挠了心跳信息传输 高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败 其他服务配置不当等原因,如心跳方式不同,心跳广播冲突,软件bug等.5.3 解决裂脑的常见方法
在实际成产环境中,我们可以从以下几个方面来防止裂脑问题发生:同时使用串行电缆和以太网电缆连接,同时用两条心跳线,这样一条线路坏了,另一个还是好的,依然能传送心跳信息.
当检测到裂脑时强行关闭一个心跳节点(这个功能需要特殊设备支持,如stonith,fence)相当于备节点接收不到心跳信息,通过单独的线路发送命令关闭主节点的电源.
做好对裂脑的监控报警(如邮件及手机短信等或值班),在问题发生时人为第一时间介入仲裁,降低损失.
5.4 解决keepalived裂脑的常见方案
作为互联网应用服务器的高可用,特别是前端web负载均衡器的高可用,裂脑的问题对普遍业务的影响是可容忍的,如果是数据库或者存储的业务,一般出现裂脑问题就非常严重了.因此,通过增加冗余心跳线来避免裂脑问题发生,同时加强了对系统的监控.如果开启防火墙,一定要让心跳消息通过.一般通过允许IP段的形式解决
可以拉一条以太网网线或者串口线作为主备节点心跳线路的冗余 开发检测程序通过监控软件检测裂脑,如zabbix检测如果主备都有VIP就报警. 比较严谨的判断,备节点出现对应VIP,并且主节点及对应服务(如果能远程连接主节点看是否有VIP就更好了)还活着,就说明发生裂脑了. 具体监控系统裂脑的脚本见文章结尾"开发检测keepalived裂脑的脚本"转载地址:https://blog.csdn.net/qq_45335806/article/details/108331566 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!