一.背景
企业应用中,单点服务器承担应用存在单点故障的危险
单点故障一旦发生,企业服务将发生中断,造成极大的危害
为解决单点故障,而引入keepalived
keepalived工具介绍
专为LVS和HA设计的一款健康检查工具
-
支持故障自动切换(Failover)
-
支持节点健康状态检查(Health Checking)
判断LVS负载调度器、节点服务器的可用性,当master主机出现故障及时切换到backup 节点保证业务正常,当master故障主机恢复后将其重新加入群集并且业务重新切换回master节点。
- 官方网站: http://www.keepalived.org/
Keepalived实现原理剖析
Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能
VRRP(虚拟路由冗余协议)
-
是针对路由器的一种备份解决方案
-
由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
-
每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态
-
若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务
VRRP 相关术语
虚拟路由器:Virtual Router
虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器
VIP:Virtual IP
VMAC:Virutal MAC (00-00-5e-00-01-VRID)
物理路由器:
master:主设备
backup:备用设备
priority:优先级
虚拟路由器的主备 是由priority:优先级决定的
VRRP工作过程
-
选举Master,比较优先级,高的为Master,若优先级相同无Master时,比较接口IP地址,大的为Master,Master设备发送ARP报文,承担报文转发工作;
-
状态维持,Master设备周期发送通告报文,公布配置信息和工作状态;
-
Backup设备根据收到的通告报文判断Master设备是否工作正常,如果Master设备主动放弃Master地位时,会发送优先级为0的通告报文,Backup设备收到后会快速切换成Master设备或者定时器超时后Backup设备认为Master设备无法正常工作,会切换状态为Master。
当Master设备出现故障后怎么办?
- Master设备故障后,组内的备份设备一段时间(Master_Down_Interval定时器取值为:3×Advertisement_Interval+Skew_Time,单位为秒)内没有接收到来自Master设备的报文,则将自己转为Master设备。一个VRRP组里有多台备份设备时,短时间内可能产生多个Master设备,设备将会对收到的VRRP报文中的优先级与本地优先级做比较,从而选取优先级高的设备成为Master。
Master设备故障后恢复的时候会怎么样?
- Master设备恢复后,若其优先级为255则立即为Master设备,若优先级小于255,先切换为Backup设备,当Backup优先级高于Master设备时,如果此时工作模式为抢占模式,则Backup设备切换为Master设备,如果工作模式为非抢占模式,Backup设备不会切换为Master。(当设备切换为Master地位时都会发送免费ARP报文,承担报文转发功能)
Keepalived案例讲解
- Keepalived可实现多机热备,每个热备组可有多台服务器
- 双机热备的故障切换是由虚拟P地址的漂移来实现,适用于各种应用服务器
- Keepalived配置目录位于/etc/keepalived/
Keeplived及其工作原理
-
Keepalived是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。
-
在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP。主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性
Keepalived体系主要模块及其作用
keepalived体系架构中主要有三个模块,分别是core、check和vrrp。
- core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
- vrrp模块:是来实现VRRP协议的。
- check模块:负责健康检查,常见的方式有端口检查及URL检查。
keepalive服务
keepalive服务可以使用yum安装、以及编译安装
本地yum源自带的版本比较旧
编译安装可以从官网下载较新的安装包进行安装
安装keepalive
使用yum安装:yum install keepalived.x86_64 -y
默认的主配置文件有157行
cat /etc/keepalived/keepalived.conf |wc -l
配置文件详解
全局配置
global_defs
#全局配置
notification_email
#定义当VRRP实例状态发生变化时,系统将通过电子邮件发送通知给指定的收件人列表。
acassen@firewall.loc, failover@firewall.loc, sysadmin@firewall.loc
#邮件通知的接收者。
notification_email_from Alexandre.Cassen@firewall.loc
#设置发送邮件通知时显示的发件人地址,这里是 Alexandre.Cassen@firewall.loc。
smtp_server 192.168.200.1
#指定SMTP服务器地址,本例中为 192.168.200.1,该服务器用于发送邮件通知。
smtp_connect_timeout 30
#设置SMTP服务器连接超时时间,单位为秒,这里为30秒。
router_id LVS_DEVEL
#为当前运行的Keepalived实例设置一个唯一的标识符,用在日志和其他网络通信中
vrrp_skip_check_adv_addr
#跳过对通告地址(advertised address)的检查。如果启用此选项,在某些情况下
#可以避免错误,比如通告地址未在任何接口上配置。
vrrp_strict
#启用严格模式,要求配置必须符合RFC文档的标准规范,否则Keepalived服务可能不会启动。
#建议关闭
vrrp_garp_interval 0
#设置发送GARP(即无请求的ARP响应)消息的时间间隔,默认值通常为1秒。设为0表示禁用GARP功能。
vrrp_gna_interval 0
#设置发送GNA(即IPv6下的无请求邻居通告)消息的时间间隔。设为0表示禁用GNA功能
VRRP实例配置
vrrp_instance VI_1
'定义VRRP实例名称。'
state MASTER
'设置当前节点在VRRP组中的初始状态为MASTER。这意味着该节点将优先处理请求,
并拥有VIP(虚拟IP地址)的所有权'
'interface eth0'
'指定VRRP通告报文通过哪个网络接口发送,这里使用的是eth0接口。'
virtual_router_id 51
'每个VRRP实例需要一个唯一的标识符,这里用数字51表示。主备需要在同一个标识符内'
priority 100
'设置本节点在VRRP组中的优先级,数值越高代表优先级越高,优先级最高的节点将成为MASTER'
advert_int 1
'设置VRRP通告消息的时间间隔,单位为秒。此处设置为每秒发送一次心跳消息以确认其是否在线'
authentication:
auth_type PASS '设置认证类型为密码认证。'
auth_pass 1111 '设置用于身份验证的共享密码。'
virtual_ipaddress
'列出此VRRP实例要管理的一系列虚拟IP地址'
服务器配置
'虚拟服务器'
virtual_server 192.168.200.100 443
#定义了一个虚拟服务器,对外提供服务的地址为192.168.200.100,监听端口为443(即HTTPS服务)。
delay_loop 6
#健康检查间隔,每隔6秒对后端服务器执行一次健康检查。
lb_algo rr
#负载均衡算法采用轮询(Round Robin)策略。
lb_kind NAT
#负载均衡方式采用NAT,客户端与真实服务器之间的通信通过NAT进行转发。
#persistence_timeout 50
#会话保持超时时间,同一个客户端在50秒内发起的新请求都会被转发到同一台后端服务器上。
protocol TCP
#明确指出虚拟服务器处理的是TCP流量。
'真实服务器配置'
real_server 192.168.201.100 443
#定义一个真实服务器,其IP地址为192.168.201.100,同样监听443端口
weight 1
#权重值为1,表示该服务器在负载均衡中分配请求的相对权重。
SSL_GET
#使用SSL协议发送GET请求来进行健康检查。
url
#定义了两个需要检查的URL路径及其预期的HTTP响应摘要。一般不适用url,需要更改
connect_timeout 3 #设置连接到真实服务器的超时时间为3秒。
nb_get_retry 3 #如果首次请求未能得到正确的摘要,将重试3次。
delay_before_retry #每次重试前等待3秒。
扩展
脑裂
脑裂:
在高可用(HA)系统中,当联系2个节点的“心跳线”断开时,本来为一整体、动作协调的HA系统,就分裂成为2个独立的个体。
由于相互失去了联系,都以为是对方出了故障。两个节点上的HA软件像“裂脑人”一样,争抢“共享资源”、争起“应用服务”,就会发生严重后果。共享资源被瓜分、两边“服务”都起不来了;或者两边“服务”都起来了,但同时读写“共享存储”,导致数据损坏
造成脑裂的原因有哪些?
高可用服务器对之间心跳线链路发生故障,导致无法正常通信。
因心跳线坏了(包括断了,老化)。
因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)
因心跳线间连接的设备故障(网卡及交换机)
因仲裁的机器出问题(采用仲裁的方案)
高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输。
高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败
其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等。
如何解决keepalived脑裂问题?
同时使用串行电缆和以太网电缆连接、同时使用两条心跳线路,这样一条线路断了,另外一条还是好的,依然能传送心跳消息
当检查脑裂时强行关闭一个心跳节点(这个功能需要特殊设备支持,如stonith、fence)相当于备节点接收不到心跳消息,通过单独的线路发送关机命令关闭主节点的电源
做好对脑裂的监控报警
解决常见方案:文章来源:https://www.toymoban.com/news/detail-849137.html
如果开启防火墙,一定要让心跳消息通过,一般通过允许IP段的形式解决
可以拉一条以太网网线或者串口线作为主被节点心跳线路的冗余
开发检测程序通过监控软件检测脑裂
文章来源地址https://www.toymoban.com/news/detail-849137.html
到了这里,关于LVS+Keepalived 高可用群集的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!