一 .Keepalived 简介
Keepalived :高可用的工具
1. Keepalived工具介绍
2. 工作原理:
- Keepalived 是一个基于VRRP协议来实现的IVS服务高可用方案,可以解决静态路由出现的单点故障问题。
- 判断 LVS 负载调度器、节点服务器的可用性,当 master 主机出现故障及时切换到backup 节点保证业务正常,当 master故障主机恢复后将其重新加入群集并且业务重新切换回 master 节点。
3. 下载keepalived 软件包官网
官方网站: www.keepalived.org/
4. 普及
一个合格的集群应该具备以下几个特性
1. 负载均衡
2. 健康检查(探针)能力
*检查方法
- 1.发送心跳消息 ping / pong
- 2.TCP端口检查,向一台主机,IP:PORT 发起TCP连接
- 3.HTTP URL 检查 向一个主机的 http://IP:port/URL路径 发送HTTP GET请求方法,主机响应返回 2xx 3xx 状态码则认为健康检查正常,如响应返回 4xx 5xx 状态码则认为健康检查异常。
3. 故障转移能力
主备切换
二 . Keepalived实现原理剖析
-
Keepalived采用VRRP热备份协议实现
-
Linux服务器的多机热备功能
1. 原理剖析
VRRP(虚拟路由元余协议)
是针对路由器的一种备份解决方案
由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态
若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务
Keepalived案例讲解
双机热备
的故障切换是由虚拟IP地址的漂移
来实现,适用于各种应用服务器
实现基于Web服务的双机热备
-
漂移地址: 192.168.10.72
-
主、备服务器:192.168.10.73、192.168.10.74
-
提供的应用服务:Web
三. 实现主备漂移实验部署
Keepalived体系主要模块及其作用:
keepalived体系架构中主要有三个模块,分别是core、check和vrrp。
- core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
- vrrp模块:是来实现VRRP协议的。(调度器之间的健康检查和主备切换)
- check模块:负责健康检查,常见的方式有端口检查及URL检查。(节点服务器的健康检查)
工作原理
- Keepalived 是一个基于VRRP协议来实现的IVS服务高可用方案,可以解决静态路由出现的单点故障问题。
- 在一个WS服务集群中通常有主服务器(MSTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP (P),主服务器会发送VRP通告信息给备份服 各器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
1. 实验操作过程
Keepalived通过什么判断哪台主机为主服务器,通过什么方式配置浮动IP?
答案: Keepalived首先做初始化先检查state状态,master为主服务器,backup为备服务器然后再对比所有服务器的prioritv,谁的优先级高谁是最终的主服务器。优先级高的服务器会通过ip命令为自己的电脑配置一个提前定义好的浮动IP地址。
keepalived的抢占与非抢占模式:
抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP 非抢占式俩节点state必须为bakcup,且必须配置nopreempt 注意:这样配置后,我们要注意启动服务的顺序,优先启动的获取master权限,与优先级没有关系了
四. LVS+Keepalived实现部署
1.先准备好nfs共享目录7-4和两个节点服务器安装nginx7-2,7-3,(详细过程去lvs DR模式博客翻阅 哪里有详细过程,内核参数都有,过程完全一样。)
🧈
🥗
内核 sysctl -p 路由route-n
vip地址也配好了
2.配置调度器 7-1,7-5
# 1.先关闭防火墙
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
2 #.将光驱到mnt上
#安装
yum -y install ipvsadm keepalived
给7-1,7-5加载模块
modprobe ip_vs
cat /proc/net/ip_vs
关闭重定向内核参数两台调度器都要添加
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
修改7-1 keepalived配置文件
cd /etc/keepalived
ls
#改名备份
cp keepalived.conf{,.bak}
#修改文件
vim keepalived
修改内容如下
测试keepalive是否自动生成节点地址
ipvsadm-save > /etc/sysconfig/ipvsadm
ipvsadm -ln
systemctl start ipvsadm
systemctl start keepalived
ipvsadm -ln
#查看出来ip地址
自动根据keepalived配置文件生成LVS相关配置规则
ip a
将7-1的keepalived配置文件远程拷贝到7-5下面
编写7-5的keepalived配置文件
vim keepalived.conf
设置7-5ipvsadm工具
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl enable --now ipvsadm
systemctl start keepalived.service
ipvsadm -ln
ip a
#查看关闭重定向内核参数是否添加
sysctl -p
内核
测试:访问keepalivedvip地址 192.168.47.200/test.html
现在将主keepalived关闭
备keepalived :ip a 查看
再次测试:
上面操作的是抢占模式:主故障,好了以后vip地址回来
接下来演示不抢占模式:主故障,好了以后vip地址不回来
先设置7-1主keepalived
7-5备keepalived和7-1同样的设置
先都将keepalived关闭因为谁先启动谁就是主
先启动7-5,所以是主服务器vip,
非抢占模式和优先级没关系,只和谁先启动有关系
五.脑裂
1. 脑裂现象:
主服务器和备服务器同时拥有 VIP
2. 脑裂原因:
因为主服务器和备服务器之间的通信链路中断,导致备服务器无法正常收到主服务器发送的VRRP心跳报文
3. 脑裂的解决:
关闭主服务器或者备服务器其中一个的keepalived服务
脑裂的预防:
1)主服务器与备服务器之间添加双通信链路
2)在主服务器上定义运行脚本判断与备服务器通信链路是否中断,如果中断则自行关闭keepalived服务
3)利用第三方监控软件检测是否发生脑裂故障,如果发生则通过监控软件关闭主或者备服务器上的keepalived服务
七. 课后练习题
keepalived
- 基于什么协议 ?
- 基于VRRP协议。
- 怎么选举master?
- 1.初始化的时候看state状态,master为主,backup为备,对比服务的优先级,优先级高的为master。
- 怎么生成VIP?
- keepalived会在master节点上面调用ip命令自动创建VIP地址
- 怎么故障切换?
- 主故障,备收不到主发来的VIP心跳线信息,他就会自己升为主,用ip命令生成VIP地址
- 抢占模式和非抢占模式是如何工作的?
- 抢占模式:当主故障转移后原来的master恢复以后,会抢占VIP地址
- 非抢占模式:当主故障转移后原来的master恢复以后,不会抢占VIP地址
- 如何配置非抢占模式 ?
- 将主备都state都设置成BACKUP,并且下一行添加noproment
- 脑裂现象如何?
自动生成VIP地址,此时主备同时拥有VIP地址
产生脑裂的原因?
- 通信链路中断
- 防火墙没关
- 备收不到主的心跳线信息
- 脑裂的解决方法?
- 关闭启动一个keepalived服务即可
- 脑裂的预防方案?
- 主和备使用双通信链路
- 通过脚本监测链路状况,如果链路中断,自行关闭一个keepalived服务
- 第三方监控软件,是否产生脑裂,如果产生脑裂,则自动关闭一个keepalived服务
- 如何健康检查调度器和节点服务器?
如果调度器用的LVS:那么调度器不需要做检查,LVS基于内核运行。
节点服务器:通过tcp端口 ,URL路径做检查。
🍟
nginx做检查:脚本通过命令做检查,或者killall -o nginx是否正常运行
节点服务器:默认被动方式做健康检