目录
Keepalived 是什么
Keepalived 功能
Keepalived 模块
工作原理
脑裂现象及解决方案
脑裂
形成脑裂的原因
解决脑裂的几种方法:
为了减少或避免HA集群中出现脑裂现象,我们可以采取以下措施:
Keepalived服务主要功能(详细)
1、管理LVS负载均衡软件
2、支持故障自动切换
3、实现LVS集群中节点的健康检查
4、实现LVS负载调度器、节点服务器的高可用性
官方说法如下:
实验 :
Keepalived 是什么
Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题的一款检查工具
在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP,主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
Keepalived 功能
- 支持单点故障自动切换 (Failover)
Keepalived可以实现任意两台主机之间,例如:Master和Backup主机之间的故障转移和自动切换,这个主机可以是普通的不能停机的业务服务器,也可以是LVS负载均衡,Nginx反向代理这样的服务器。
Keepalived高可用功能实现的简单原理为,两台主机同时安装好Keepalived软件并启动服务,开始正常工作时,由角色为Master的主机获得所有资源并对用户提供服,角色为Backup的主机为Master主机的热备,当角色为Master的主机失效或出现故障时,角色为Backup的主机将自动接管Master主机的所有工作,包括接管VIP资源及相应资源服务,当角色为Master的主机故障修复后,又会自动接管回他原来处理的工作,角色Bachup的主机则同时释放Master主机时它接管的工作,此时,两台主机将恢复到最初启动时各自的原始及工作状态
- 支持节点健康检查状态
Keepalived可以通过在自身的Keepalived.conf文件里配置LVS的节点IP和相关参数实现对LVS的直接管理;除此之外,当LVS集群中的某一个甚至是几个节点服务器同时发生故障无法提供服务时,Keepalived服务会自动将失效的节点服务器从LVS的正常转发队列中清除出去,并将请求调度到别的正常节点服务器上,从而保证最终用户的访问不受影响;当故障的节点服务器被修复以后,Keepalived服务又会自动地把它们加入到正常转发队列中,对客户提供服务
- 节点服务器的高可用性 —— HA
Keepalived 模块
- core:核心模块;负责主进程启动、维护及全局配置文件的加载和解析
- vrrp:来实现vrrp的协议
- check:健康检查;端口及URL检查的方式
工作原理
Keepalived 高可用之间是通过VRRP协议来实现LVS高可用方案,从而解决静态路由的单点故障的问题
VRRP是通过竞选的来确定主备,主优先级高于备,因此工作时主优先获得所有资源,备节点处于等待状态;当备服务器收不到主服务器VRRP信息时,代表主服务器故障,于是备节点就会接管主节点资源(VIP)然后顶替主节点对外提供服务,实现高可用性(HA)
在Keepalived 服务之间,只有作为主的服务器会一直发送VRRP广播包,告诉备服务器还在,此时备不会去抢占主;当主不可用的时候,即备要监听不到主发送的广播包时,它就会启动相关服务来去接管资源,保证业务的连续性,接管速度最快小于1秒
脑裂现象及解决方案
脑裂
当MASTER节点出现网络堵塞等现象时,BACKUP节点因无法及时检测到MASTER节点的heartbeat而认为MASTER节点已经挂掉了,就抢来了MASTER节点的VIP,并接管了MASTER节点的资源;MASTER节点认为自己还是正常的
这就出现了同一个服务集群中,同一个VIP地址同时飘在两个节点上的现象,即产生了两个MASTER节点;正常情况下是一个节点对外提供服务,现在也变成了两个节点能同时被用户访问到,对于一个集群同时存在两个MASTER状态的现象,我们称之为脑裂
形成脑裂的原因
- 高可用集群服务器队列之间的心跳线链路发生了故障,如心跳线的断裂、老化等导致各节点之间无法正常通信;
- 集群服务器队列之间的IP配置发生了冲突;
- 网卡或交换机等负责连接心跳线的设备发生了故障;
- 高可用服务器上未禁止iptables防火墙规则的生成,导致心跳消息无法传输;
- 在同一个VRRP实例中,各节点上的virtual_router_id设置的参数不同;
- 开启了抢占模式,但是未设置抢占延时;
解决脑裂的几种方法:
为了减少或避免HA集群中出现脑裂现象,我们可以采取以下措施:
- 添加冗余心跳线,如双线条线等;
- 启动“智能”磁盘锁,只有正在提供服务的MASTER节点才能锁住或者解锁共享磁盘,当MASTER节点出现了短暂的网络堵塞等情况时会自动加锁,BACKUP节点也无法接管资源,只有当MASTER出现故障无法提供服务时才会自动解锁共享磁盘,并交由BACKUP节点接管
- 设置仲裁机制,例如出现检测不到心跳线的情况时,MASTER节点和BACKUP节点都去ping一下网关IP,如果ping不通则主动释放资源或者放弃抢占资源;
- 通过脚本来监控和监测节点是否处于正常工作状态,如果MASTER节点出现了异常,并在脚本设定的期限内无法恢复正常,则杀死当前MASTER的服务进程,将资源交由BACKUP节点来接管
Keepalived服务主要功能(详细)
1、管理LVS负载均衡软件
Keepalive可以通过读取自身的配置文件,实现通过更底层的接口直接管理LVS的配置以及控制服务的启动、停止功能。
2、支持故障自动切换
- Keepalived可以实现任意两台主机之间,例如:Master和Backup主机之间的故障转移和自动切换,这个主机可以是普通的不能停机的业务服务器,也可以是LVS负载均衡,Nginx反向代理这样的服务器。
- Keepalived高可用功能实现的简单原理为,两台主机同时安装好Keepalived软件并启动服务,开始正常工作时,由角色为Master的主机获得所有资源并对用户提供服,角色为Backup的主机为Master主机的热备,当角色为Master的主机失效或出现故障时,角色为Backup的主机将自动接管Master主机的所有工作,包括接管VIP资源及相应资源服务,当角色为Master的主机故障修复后,又会自动接管回他原来处理的工作,角色Bachup的主机则同时释放Master主机时它接管的工作,此时,两台主机将恢复到最初启动时各自的原始及工作状态。
3、实现LVS集群中节点的健康检查
Keepalived可以通过在自身的Keepalived.conf文件里配置LVS的节点IP和相关参数实现对LVS的直接管理;除此之外,当LVS集群中的某一个甚至是几个节点服务器同时发生故障无法提供服务时,Keepalived服务会自动将失效的节点服务器从LVS的正常转发队列中清除出去,并将请求调度到别的正常节点服务器上,从而保证最终用户的访问不受影响;当故障的节点服务器被修复以后,Keepalived服务又会自动地把它们加入到正常转发队列中,对客户提供服务。
4、实现LVS负载调度器、节点服务器的高可用性
一般企业集群需要满足三个特点: 负载均衡、健康检查、故障切换 ,使用LVS+Keepalived完全可以满足需求。
keeplived的检查方式
-
ping方式检查(不全面)
-
基于脚本检查(周期检查master服务器的服务是否停止,停止之后使用停止keeplived,进行漂移,并邮件告警)
官方说法如下:
Keepalived 是一个开源的软件框架,为 Linux 系统提供高可用性和负载均衡功能。它通常用于网络环境中,以确保即使承载关键服务(如 Web 服务器或数据库)的服务器之一或多个发生故障,这些关键服务仍然可用。Keepalived 通过采用虚拟路由冗余协议(VRRP)和健康检查机制来实现这一目标。
以下是其主要特点:
高可用性(HA): Keepalived 允许多台服务器在故障转移配置中协同工作。一台服务器充当主服务器,其他服务器充当备份。如果主服务器不可用,其中一台备份服务器将接管,以确保持续的服务。
虚拟路由冗余协议(VRRP): VRRP 是一种网络协议,为路由功能提供自动故障转移。Keepalived 实现了 VRRP,创建一个虚拟 IP 地址,这个虚拟 IP 在活动服务器之间共享。客户端通过此虚拟 IP 访问服务,实现服务器之间的无缝故障转移。
健康检查: Keepalived 持续监控其管理的服务器和服务的健康状况。它可以执行各种健康检查,如执行 ping、连接到特定端口或执行自定义脚本。如果服务器或服务未通过这些检查,Keepalived 将触发故障转移过程。
负载均衡: Keepalived 还可以在多台服务器之间分配传入的流量,有助于平衡负载,防止任何单个服务器过载。此功能特别有助于保持一致的性能并防止拥塞。
配置灵活性: Keepalived 通过简单的配置文件提供配置选项。管理员可以自定义设置,如优先级、定时器、健康检查方法等。
Keepalived 通常用于系统的正常运行时间和可用性至关重要的场景,例如数据中心、Web 托管环境和网络基础设施。需要注意的是,虽然 Keepalived 是一个强大的工具,但需要正确配置和理解其功能,以确保有效的高可用性和负载均衡。
实验 :
LVS+Keepalived部署
需要5台系统,一台做负载调度器主设备,一台做负载调度器备设备,两台做web服务器的节点,一台windows客户端,这边主要验证主备之间切换,NFS服务器暂时不配。
VIP:192.168.77.100
主DR服务器:192.168.77.21
备DR服务器:192.168.77.22
Web1服务器:192.168.77.23
Web2服务器:192.168.77.24
Windiw客户端:~
一:配置负载调度器(192.168.77.21 192.168.77.22)
1:关闭防火墙和安全机制
2:安装ipvsadm keepalived
yum -y install ipvsadm keepalived
modprobe ip_vs
cat /proc/net/ip_vs
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
3:安装ip_vs模块、查看
4:配置keepalived(主备都设置)
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
global_defs { #定义全局参数
--10行--修改,邮件服务指向本地
smtp_server 127.0.0.1
--12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02
router_id LVS_01
--14行--注释掉,取消严格遵守VRRP协议功能,否则VIP无法被连接
#vrrp_strict
}
vrrp_instance VI_1 { #定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUP
state MASTER
--21行--修改,指定承载vip地址的物理接口
interface ens33
--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致
virtual_router_id 10
#nopreempt #如果设置非抢占模式,两个节点state必须为bakcup,并加上配置 nopreempt
--23行--修改,指定优先级,数值越大优先级越高,这里设置主为100,备为90
priority 100
advert_int 1 #通告间隔秒数(心跳频率)
authentication { #定义认证信息,每个热备组保持一致
auth_type PASS #认证类型
--27行--修改,指定验证密码,主备服务器保持一致
auth_pass 1111
}
virtual_ipaddress { #指定群集vip地址
192.168.77.100
}
}
--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.77.100 80 {
delay_loop 6 #健康检查的间隔时间(秒)
lb_algo rr #指定调度算法,轮询(rr)
--39行--修改,指定群集工作模式,直接路由(DR)
lb_kind DR
persistence_timeout 50 #连接保持时间(秒)
protocol TCP #应用服务采用的是 TCP协议
--43行--修改,指定第一个Web节点的地址、端口
real_server 192.168.77.23 80 {
weight 1 #节点的权重
--45行--删除,添加以下健康检查方式
TCP_CHECK {
connect_port 80 #添加检查的目标端口
connect_timeout 3 #添加连接超时(秒)
nb_get_retry 3 #添加重试次数
delay_before_retry 3 #添加重试间隔
}
}
real_server 192.168.77.24 80 { #添加第二个 Web节点的地址、端口
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
##删除后面多余的配置##
}
5:配置VIP(主备都设置)
vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.77.100
NETMASK=255.255.255.255
ipup ens33:0
systemctl start keepalived
6:查看ip
二:启动ipvsadm 服务,并配置ipvsadm策略:(主备都设置)
ipvsadm -C
ipvsadm -A -t 192.168.77.100:80 -s rr
ipvsadm -a -t 192.168.77.100:80 -r 192.168.77.23:80 -g
ipvsadm -a -t 192.168.77.100:80 -r 192.168.77.24:80 -g
ipvsadm -ln #查看
ipvsadm -Lnc #监控连接数
2:并设置proc相应参数、关闭linux内核的重定向参数响应
vim /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p
刷新内核:
三:配置节点服务器(192.168.77.23 192.168.77.24)
1:关闭防火墙与安全机制:
2:安装httpd服务并开启
3:配置回环虚拟接口,并启动
4:添加转发本地路由:
5:配置内核参数,拒接ARP请求
另外一台的配置:
其余的和第一台一样!
最后客户端访问一下:
文章来源:https://www.toymoban.com/news/detail-665742.html
另一个页面刷新一下就可以,以及后边可以模拟挂掉一台DR服务器看看VIP地址会不会飘向备服务器这里就不用图展示了,大家可以试一下!文章来源地址https://www.toymoban.com/news/detail-665742.html
到了这里,关于LVS+Keepalived群集实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!