当前位置:网站首页>LVS+Keepalived高可用群集
LVS+Keepalived高可用群集
2022-07-27 19:10:00 【灌南牛x人】
目录
前言:
Keepalived一个基于VRRP 协议来实现的 LVS 服务高可用方案,可以利用其来解决单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候, 备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
Keepalived工具介绍
专为LVS和HA设计的一款健康检查工具
支持故障自动切换(Failover)
支持节点健康状态检查(Health Checking)
判断LVS负载调度器、节点服务器的可用性,当master主机出现故障及时切换到backup节点保证业务正常,当 master 故障主机恢复后将其重新加入群集并且业务重新切换回 master 节点
Keepalived的作用
Keepalived 提供了很好的高可用性保障服务,它可以检查服务器的状态,如果有服务器出现问题,Keepalived 会将其从系统中移除,并且同时使用备份服务器代替该服务器的工作,当这台服务器可以正常工作后,Keepalived 再将其放入服务器群中,这个过程是 Keepalived 自动完成的,不需要人工干涉,我们只需要修复出现问题的服务器即可
Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能
keepalived实现原理剖析
keepalived采用vrrp热备份协议实现linux服务器的多机热备功能
vrrp(虚拟路由冗余协议)是针对路由器的一种备份解决方案
是针对路由器的一种备份解决方案
由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态
若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务
vrrp虚拟路由冗余协议
vrrp会把多台路由组成一个虚拟路由组vrid,vrrp会生成一个虚拟路由(包含虚拟ip和虚拟mac,局域网内用户不关心哪个是主哪个是备,他们只用虚拟路由器的虚拟ip作为他们的网关)实际上虚拟ip是承载在master路由器,也就是说实际的数据通过master进行转发backup是通过优先级来决定哪个是master路由,优先级最大的那台就是master,backup只是用来监听master定时发送的vrrp报文,如果超时未收到master发来的vrrp报文backup就会抢占master虚拟ip也会飘移到backup上
Keepalived体系主要模块及其作用
keepalived体系架构中主要有三个模块:core、check和vrrp
core模块
为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析
vrrp模块
是来实现vrrp协议的
check模块
负责健康检查,常见的方式有端口检查及url检查
LVS+Keepalived高可用群集的搭建
#环境
主DR服务器:192.168.10.19 ipvsadm、keepalived
备DR服务器:192.168.10.20 ipvsadm、keepalived
web服务器1:192.168.10.21 httpd
web服务器2:192.168.10.22 httpd
VIP(虚拟ip):192.168.10.60
客户端:192.168.10.100
配置主负载均衡调度器(192.168.10.19)
关闭防火墙、增强机制和下载httpd服务
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
yum install httpd -y
安装 ipvsadm和keepalived服务
yum -y install ipvsadm keepalived
修改配置文件keeplived.conf
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
}
vrrp_instance VI_1 { #定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUP
state MASTER
--21行--修改,指定承载vip地址的物理接口
interface ens33
--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致
virtual_router_id 10
--23行--修改,指定优先级,数值越大优先级越高,主为100,备为99
priority 100
advert_int 1 #通告间隔秒数(心跳频率)
authentication { #定义认证信息,每个热备组保持一致
auth_type PASS #认证类型
--27行--修改,指定验证密码,主备服务器保持一致
auth_pass 123456
}
virtual_ipaddress { #指定群集vip地址
192.168.10.60
}
}
--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.137.60 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.10.21 80 {
weight 1 #节点的权重
--45行--删除,添加以下健康检查方式
TCP_CHECK {
connect_port 80 #添加检查的目标端口
connect_timeout 3 #添加连接超时(秒)
nb_get_retry 3 #添加重试次数
delay_before_retry 3 #添加重试间隔
}
}
real_server 192.168.137.30 80 { #添加第二个 Web节点的地址、端口
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
##删除后面多余的配置##

解释


解释


解释

启动服务、查看虚拟网卡VIP
#启动服务、查看虚拟网卡vip
systemctl start keepalived
ip addr show dev ens33
调整proc响应参数,关闭Linux内核的重定向参数响应
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
#刷新一下
sysctl -p
刷新一下
配置负载分配策略,并启动服务
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
清空ipvsadm,并做策略
ipvsadm -C
ipvsadm -A -t 192.168.10.60:80 -s rr
ipvsadm -a -t 192.168.10.60:80 -r 192.168.10.21:80 -g
ipvsadm -a -t 192.168.10.60:80 -r 192.168.10.22:80 -g
保存设置
ipvsadm
ipvsadm -ln
ipvsadm-save > /etc/sysconfig/ipvsadm
配置备负载均衡调度器(192.168.10.20)
关闭防火墙、增强机制和下载httpd服务
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
yum install httpd -y

安装ipvsadm、keepalived服务
yum -y install ipvsadm keepalived
修改配置文件keeplived.conf
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
}
vrrp_instance VI_1 { #定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUP
state BACKUP
--21行--修改,指定承载vip地址的物理接口
interface ens33
--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致
virtual_router_id 10
--23行--修改,指定优先级,数值越大优先级越高,主为100,备为99
priority 99
advert_int 1 #通告间隔秒数(心跳频率)
authentication { #定义认证信息,每个热备组保持一致
auth_type PASS #认证类型
--27行--修改,指定验证密码,主备服务器保持一致
auth_pass 123456
}
virtual_ipaddress { #指定群集vip地址
192.168.10.60
}
}
--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.10.60 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.10.21 80 {
weight 1 #节点的权重
--45行--删除,添加以下健康检查方式
TCP_CHECK {
connect_port 80 #添加检查的目标端口
connect_timeout 3 #添加连接超时(秒)
nb_get_retry 3 #添加重试次数
delay_before_retry 3 #添加重试间隔
}
}
real_server 192.168.10.22 80 { #添加第二个 Web节点的地址、端口
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
##删除后面多余的配置##



启动服务、查看虚拟网卡VIP
systemctl start keepalived
ip addr show dev ens33调整proc响应参数,关闭Linux内核的重定向参数响应
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
#刷新一下
sysctl -p

刷新一下

配置负载分配策略,并启动服务
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
清空ipvsadm,并做策略
ipvsadm -C
ipvsadm -A -t 192.168.10.60:80 -s rr
ipvsadm -a -t 192.168.10.60:80 -r 192.168.10.21:80 -g
ipvsadm -a -t 192.168.10.60:80 -r 192.168.10.22:80 -g
保存设置
ipvsadm
ipvsadm -ln
ipvsadm-save > /etc/sysconfig/ipvsadm配置节点服务器web1(192.168.10.21)
关闭防火墙、增强机制和下载httpd服务
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
yum install httpd -y配置站点文件
vim /var/www/html/index.html
zuo yi ge bu shu de ren配置虚拟VIP
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.10.60
NETMASK=255.255.255.255
j解释

重启网络服务,开启虚拟网卡
systemctl restart network
ifup lo:0
ifconfig lo:0
设置路由
route add -host 192.168.10.60 dev lo:0
route -n
调整proc响应参数
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2 
刷新proc参数
sysctl -p
配置节点服务器web2(192.168.10.22)
关闭防火墙、增强机制和下载httpd服务
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
yum install httpd -y
配置站点文件
vim /var/www/html/index.html
gui mie zhi ren
配置虚拟vip
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.10.60
NETMASK=255.255.255.255
重启网络服务,开启虚拟网卡
systemctl restart network
ifup lo:0
ifconfig lo:0
设置路由
route add -host 192.168.10.60 dev lo:0
route -n
调整proc响应参数
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
刷新proc参数
sysctl -p
进行测试
主

备
断开主DR服务器的Keepalived测试
systemctl stop keepalived.service
在客户端进行测试



轮询
Keepalived脑裂及解决办法
Keepalived脑裂
在高可用(HA)系统中,当联系2个节点的“心跳线”断开时,本来为一整体、动作协调的HA系统,就分裂成为2个独立的个体。由于相互失去了联系,都以为是对方出了故障。两个节点上的HA软件像“裂脑人”一样,争抢“共享资源”、争起“应用服务”,就会发生严重后果——或者共享资源被瓜分、2边“服务”都起不来了;或者2边“服务”都起来了,但同时读写“共享存储”,导致数据损坏(常见如数据库轮询着的联机日志出错)
脑裂的原因
高可用服务器对之间心跳线链路发生故障,导致无法正常通信。如心跳线坏了(包括断了,老化)。
因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)。
因心跳线间连接的设备故障(网卡及交换机)。
因仲裁的机器出问题(采用仲裁的方案)。
高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输。
Keepalived配置里同一 VRRP实例如果 virtual_router_id两端参数配置不一致也会导致裂脑问题发生。
vrrp实例名字不一致、优先级一致。
对应策略
添加冗余的心跳线,例如:双线条线(心跳线也HA),尽量减少“裂脑”发生几率
启用磁盘锁。正在服务一方锁住共享磁盘,“裂脑”发生时,让对方完全“抢不走”共享磁盘资源。但使用锁磁盘也会有一个不小的问题,如果占用共享盘的一方不主动“解锁”,另一方就永远得不到共享磁盘。现实中假如服务节点突然死机或崩溃,就不可能执行解锁命令。后备节点也就接管不了共享资源和应用服务。于是有人在HA中设计了“智能”锁。即:正在服务的一方只在发现心跳线全部断开(察觉不到对端)时才启用磁盘锁。平时就不上锁了
设置仲裁机制。例如设置参考IP(如网关IP),当心跳线完全断开时,2个节点都各自ping一下参考IP,不通则表明断点就出在本端。不仅“心跳”、还兼对外“服务”的本端网络链路断了,即使启动(或继续)应用服务也没有用了,那就主动放弃竞争,让能够ping通参考IP的一端去起服务。更保险一些,ping不通参考IP的一方干脆就自我重启,以彻底释放有可能还占用着的那些共享资源。
利用脚本检测、报警
vim check_keepalived.sh
#!/bin/bash
$ip=192.168.233.9
while true
do
if [ `ip a show ens33 |grep $ip|wc -l` -ne 0 ]
then echo "keepalived is error!"
else echo "keepalived is OK !"
fi
done
边栏推荐
- 零钱通项目(两个版本)含思路详解
- @The difference between Autowired annotation and @resource annotation
- Comprehensively design an oppe homepage -- Design of selected accessories on the page
- 微软商店无法下载应用,VS2019无法下载插件问题解决方案
- Log4j 漏洞仍普遍存在?
- 三星最先进EUV产线已投产:今年7nm产能将是去年3倍
- 软件测试面试题:假设有一个文本框要求输入10个字符的邮政编码,对于该文本框应该怎样划分等价类?
- 除了「加机器」,其实你的微服务还能这样优化
- Ora-27300, ora-27301, ora-27302, ora-27303, tns-2518, tns-12549, tns-12560, tns-00519 and other alarm processing
- Why use MQ message oriented middleware? These questions must be solved
猜你喜欢

一文读懂Plato Farm的ePLATO,以及其高溢价缘由

Characteristics of exonuclease in Worthington venom and related literature

深入理解递归的方法调用(含实例迷宫问题、汉诺塔、猴子吃桃、斐波拉契、阶乘))

Instructions - Worthington reverse transcriptase, recombinant HIV testing program

ACM mm 2022 | Zhejiang University proposed: point cloud segmentation, active learning of new SOTA

STL源码剖析

Dual process theory and triple mental model
![Tencent cloud [hiflow] | automation --------- hiflow: still copying and pasting?](/img/dd/8ee989f5c9db632f78e79425497e71.png)
Tencent cloud [hiflow] | automation --------- hiflow: still copying and pasting?

"Geography language" large model Wenxin Ernie geol and its application

Daily Mathematics Series 60: February 29
随机推荐
Daily news on July 15, 2022: meta announced the launch of make-a-scene: AI image generation can be controlled based on text and sketches
软件测试面试题:软件测试项目从什么时候开始?为什么?
枚举Enum的简单使用
Principle analysis and best practice of guava cache
QT take out the input box string, lineedit
软件测试面试题:单元测试、集成测试、系统测试的侧重点是什么?
@Autowired注解与@Resource注解的区别
Troubleshooting and resolution of program operation problems: an instance of 'std:: Logic_ error‘what(): basic_ string::_ M_ construct null not valid
首发展锐5G芯片!纯国产5G手机海信F50曝光:搭载虎贲T710+春藤510
Software testing interview question: what is the focus of unit testing, integration testing, and system testing?
ZABBIX monitoring service (III) configuration management graphics and windows
Search, insert and delete of hash table
Can China make a breakthrough in the future development of the meta universe and occupy the highland?
Software testing interview question: what aspects should be considered when designing test cases, that is, which aspects should different test cases be tested for?
枚举和注解
软件测试面试题:通过画因果图来写测试用例的步骤为___、___、___、___及把因果图转换为状态图共五个步骤。 利用因果图生成测试用例的基本步骤是?
Shengyang technology officially launched the remote voiceprint health return visit service system!
最高7.5Gbps!全球首款5nm 5G基带骁龙X60发布:支持聚合全部主要频段!
Comprehensively design an oppe homepage -- Design of selected accessories on the page
CBAM学习笔记

