当前位置: 首页 > news >正文

高性能群集部署技术-LVS+Keepalived高可用群集

目录

#1.1Keepalived双机热备基础知识

  1.1.1Keepalived概述及安装

  1.1.2Keepalived的热备方式

  1.1.3Keepalived的安装与服务控制

#2.1使用Keeplived实现双机热备

  2.1.1主服务器的配置

  2.1.2备用服务器的配置

  2.1.3测试双机热备功能

#3.1使用Keeplived实现双机热备的实验案例

  3.1.1基础环境配置

  3.1.2配置主调度器

  3.1.3配置从调度器

  3.1.4配置Web节点服务器

  3.1.5测试LVS+Keepalived高可用群集


1.1Keepalived双机热备基础知识

    Keepalived 起初是专门针对 LVS 设计的一款强大的辅助工具,主要用来提供故障切换(Failover)和健康检查(Health Checking)功能 —— 判断 LVS 负载调度器、节点服务器的可用性,当 master 主机出现故障及时切换到 backup 节点保证业务正常,当 master 故障主机恢复后将其重新加入群集并且业务重新切换回 master 节点。

1.1.1Keepalived概述及安装

    Keepalived 的官方网站位于 Keepalived for Linux,本章将以 YUM 方式讲解 Keepalived 的安装、配置和使用过程。在非 LVS 群集环境中使用时,Keepalived 也可以作为热备软件使用。

1.1.2Keepalived的热备方式

   Keepalived 采用 VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)热备份协议,以软件的方式实现 Linux 服务器的多机热备功能。VRRP 是针对路由器的一种备份解决方案 —— 由多台路由器组成一个热备组,通过共用的虚拟 IP 地址对外提供服务;每个热备组内同一时刻只有一台主路由器提供服务,其他路由器处于冗余状态。若当前在线 的路由器失效,则其他路由器会自动接替(优先级决定接替顺序)虚拟 IP 地址,以继续提供服务,如图 3.1 所示。

    热备组内的每台路由器都可能成为主路由器,虚拟路由器的 IP 地址(VIP)可以在热备组内的路由器之间进行转移,所以也称为漂移 IP 地址。使用 Keepalived 时,漂移地址的实现不需要手动建立虚接口配置文件(如 ens33 :0),而是由 Keepalived 根据配置文件自动管理。

 

 

1.1.3Keepalived的安装与服务控制

(1)安装Keepalived

[root@localhost ~]# yum install -y keepalived ipvsadm

(2)控制Keepalived服务

[root@localhost ~]# systemctl enable keepalived
Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.

2.1使用Keepalived实现双机热备

     基于 VRRP 的热备方式,Keepalived 可以用作服务器的故障切换,每个热备组可以有 多台服务器 —— 当然,最常用的就是双机热备了。在这种双机热备方案中,故障切换主要针对虚拟 IP 地址的漂移来实现,因此能够适用于各种应用服务器(不管是 Web、FTP、Mail,还是 SSH、DNS……)。
     本小节将通过一个简单的案例来说明 Keepalived 双机热备的配置方法。其中,主、备服务器的 IP 地址分别为 192.168.10.101 和 192.168.10.102,基于漂移地址 192.168.10.100 提供 Web 服务,如图 3.2 所示。

   主,备服务器中都安装Keepalived,使用DNF方式安装httpd提供Web服务。

2.1.1主服务器的配置

[root@localhost ~]# systemctl stop firewalld // 关闭防火墙
[root@localhost ~]# setenforce 0
[root@localhost ~]# cd /etc/keepalived/
[root@localhost keepalived]# cp keepalived.conf.sample keepalived.conf
[root@localhost keepalived]# vi keepalived.conf
global_defs {
router_id HA_TEST_R1 // 本路由器 (服务器) 的名称
}
vrrp_instance VI_1 { // 定义 VRRP 热备实例
state MASTER // 热备状态,MASTER 表示主服务器
interface ens33 // 承载 VIP 地址的物理接口
virtual_router_id 1 // 虚拟路由器的 ID 号,每个热备组保持一致
priority 100 // 优先级,数值越大优先级越高
advert_int 1 // 通告间隔秒数 (心跳频率)
authentication { // 认证信息,每个热备组保持一致
auth_type PASS // 认证类型
auth_pass 123456 // 密码字串
}
virtual_ipaddress { // 指定漂移地址 (VIP), 可以有多个
192.168.10.100
}
}
[root@localhost keepalived]# systemctl start keepalived
[root@localhost keepalived]# ip addr show dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:93:80:fb brd ff:ff:ff:ff:ff:ff
inet 192.168.10.101/24 brd 172.16.16.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.10.100/32 scope global ens33 // 自动设置的 VIP 地址
valid_lft forever preferred_lft forever
inet6 fe80::56be:f27:2b9b:823e/64 scope link
valid_lft forever preferred_lft forever

2.1.2备用服务器的配置

[root@localhost ~]# systemctl stop firewalld // 关闭防火墙
[root@localhost ~]# setenforce 0
[root@localhost ~]# cd /etc/keepalived/
[root@localhost keepalived]# cp keepalived.conf.sample keepalived.conf
[root@localhost keepalived]# vi keepalived.conf
global_defs {
router_id HA_TEST_R2 // 本路由器 (服务器) 的名称
}
vrrp_instance VI_1 {
state BACKUP // 热备状态,BACKUP 表示备用服务器
priority 99 // 优先级,数值应低于主服务器
…… // 省略部分内容
}
[root@localhost keepalived]# systemctl start keepalived
[root@localhost keepalived]# ip addr show dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:d1:f0:b5 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.102/24 brd 172.16.16.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::1f08:ab66:736f:72eb/64 scope link
valid_lft forever preferred_lft forever

2.1.3测试双机热备功能

    Keepalived 的日志消息保存在 /var/log/messages 文件中,在测试主、备故障自动切换功能时,可以跟踪此日志文件来观察热备状态的变化。以针对连通性和 Web 服务的测试为例,主要操作如下。

(1)连通性测试
     在客户机中执行 “ping -t 192.168.10.100” 命令,能够正常、持续 ping 通,根据以下操作继续观察测试结果。
     ① 停止启用主服务器的 Keepalived 服务,发现 ping 测试只中断了 1 或 2 个包即恢复正常,说明已有其他服务器接替 VIP 地址,并及时响应客户机请求。
     ② 重新启用主服务器的 Keepalived 服务,发现 ping 测试再次中断 1 或 2 个包即恢复正常,说明主服务器已恢复正常,并夺回 VIP 地址的控制权。

(2)Web 访问测试
     在 keepalived 运行的主机上启动 nginx 服务并写入不通的测试页面内容
Keepalived01

[root@localhost ~]# systemctl start nginx
[root@localhost ~]# echo “web01” >/usr/share/nginx/html/index.html

Keepalived02

[root@localhost ~]# systemctl start nginx
[root@localhost ~]# echo “web02” >/usr/share/nginx/html/index.html

   在客户机中访问 http://192.168.10.100/,将看到由主服务器 192.168.10.101 提供的网页文档。
① 停止启用主服务器的 Keepalived 服务,再次访问上述 Web 服务,将看到由备用服务
器 192.168.10.102 提供的网页文档,说明 VIP 地址已切换至备用服务器。
② 重新启用主服务器的 Keepalived 服务,再次访问上述 Web 服务,将看到重新由主服
务器 192.168.10.101 提供的网页文档,说明主服务器已重新夺取 VIP 地址。

(3)查看日志记录
在执行主、备服务器故障切换的过程中,分别观察各自的 /var/log/messages 日志文件,可以看到 MASTER、SLAVE 状态的迁移记录。
① 主服务器中,Keepalived 服务状态先变为 “stop”,移除 VIP 地址,恢复后重新变为 MASTER。

[root@localhost ~]# less /var/log/messages
…… // 省略部分信息
Sep 11 13:32:24 localhost Keepalived[18259]: Stopping Keepalived v1.2.13 (11/05,201
6)
Sep 11 13:32:24 localhost systemd: Stopping LVS and VRRP High Availability Monito
r...
Sep 11 13:32:24 localhost Keepalived_vrrp[18261]: VRRP_Instance(VI_1) sending 0 prio
rity
Sep 11 13:32:24 localhost Keepalived_vrrp [18261]: VRRP_Instance (VI_1) removing proto
col VIPs.
…… // 省略部分信息
Sep 11 13:36:42 localhost Keepalived_vrrp[18280]: VRRP_Instance(VI_1) Transition to
MASTER STATE
Sep 11 13:36:42 localhost Keepalived_vrrp[18280]: VRRP_Instance(VI_1) Received lower
prio advert, forcing new election
Sep 11 13:36:43 localhost Keepalived_vrrp[18280]: VRRP_Instance(VI_1) Entering MASTE
R STATE
Sep 11 13:36:43 localhost Keepalived_vrrp [18280]: VRRP_Instance (VI_1) setting protoc
ol VIPs.
…… // 省略部分信息

② 备用服务器中,状态先切换为 MASTER,待主服务器恢复后再交回控制权。

[root@localhost ~]# less /var/log/messages
…… // 省略部分信息
Sep 11 13:12:43 localhost Keepalived_vrrp[25338]: VRRP_Instance(VI_1) Transition to
MASTER STATE
Sep 11 13:12:44 localhost Keepalived_vrrp[25338]: VRRP_Instance(VI_1) Entering MASTE
R STATE
Sep 11 13:12:44 localhost Keepalived_vrrp [25338]: VRRP_Instance (VI_1) setting protoc
ol VIPs.
…… // 省略部分信息
Sep 11 13:14:23 localhost Keepalived_vrrp[25338]: VRRP_Instance(VI_1) Received highe
r prio advert
Sep 11 13:14:23 localhost Keepalived_vrrp[25338]: VRRP_Instance(VI_1) Entering BACKU
P STATE
Sep 11 13:14:23 localhost Keepalived_vrrp [25338]: VRRP_Instance (VI_1) removing proto
col VIPs.
…… // 省略部分信息

   通过上述测试过程,可以发现双机热备已经正常。客户机只要通过 VIP 地址就可以访问服务器所提供的 Web 等应用。其中,任何一台服务器失效,另一台服务器将会立即接替服务,从而实现高可用性。实际应用时,注意主、备服务器所提供的 Web 服务内容要保持一致。

3.1使用Keepalived实现双机热备的实验案例

    Keepalived 的设计目标是构建高可用的 LVS 负载均衡群集,可以调用 ipvsadm 工具来创建虚拟服务器、管理服务器池,而不仅仅用作双机热备。使用 Keepalived 构建 LVS 群集更加简便易用,主要优势体现在:对 LVS 负载调度器实现热备切换,提高可用性;对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再重新加入。

    在基于 LVS+Keepalived 实现的 LVS 群集结构中,至少包括两台热备的负载调度器,三台以上的节点服务器。本节将以 DR 模式的 LVS 群集为基础,增加一台从负载调度器,使用 Keepalived 来实现主、从调度器的热备,从而构建兼有负载均衡、高可用两种能力的 LVS 网站群集平台,如图 3.3 所示。

   使用 Keepalived 构建 LVS 群集时,也需要用到 ipvsadm 管理工具。但大部分工作会由 Keepalived 自动完成,不需要手动执行 ipvsadm(除了查看和监控群集以外)。下面主要讲解 Keepalived 的服务器池设置,关于 NFS 共享服务的配置、Keepalived 的热备配置等在此不再详细阐述。

操作系统配置主机名IP服务
OpenEuler242C4Glb01192.168.10.101Keepalived/ipvsadm
OpenEuler242C4Glb01192.168.10.102Keepalived/ipvsadm
OpenEuler242C4Gweb01192.168.10.103Nginx
OpenEuler242C4Gweb02192.168.10.104Nginx
OpenEuler242C4Gnfs-server192.168.10.105nfs-utils/rpcbind

 3.1.1基础环境配置

关闭防火墙

systemctl stop firewalld

systemctl disable firewalld

关闭内核安全机制

setenforce 0

安装Keepalived以及ipvsadm

dnf -y install keepalived ipvsadm

3.1.2配置主调度器

(1)全局配置,热备配置

[root@localhost ~]# vi /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_HA_R1 // 主调度器的名称
}
vrrp_instance VI_1 {
state MASTER // 主调度器的热备状态
interface ens33
virtual_router_id 1
priority 100 // 主调度器的优先级
advert_int 1
authentication { // 主、从热备认证信息
auth_type PASS
auth_pass 123456
}
virtual_ipaddress { // 指定群集 VIP 地址
192.168.10.100
}
}

(2)Web服务器池配置

[root@localhost ~]# vi /etc/keepalived/keepalived.conf
…… #省略部分信息
virtual_server 192.168.10.100 80 {#虚拟服务器地址 (VIP)、端口
delay_loop 15 #健康检查的间隔时间 (秒)
lb_algo rr #轮询 (rr) 调度算法
lb_kind DR #直接路由 (DR) 群集工作模式
! persistence 60 #连接保持时间 (秒), 若启用请去掉!号
protocol TCP #应用服务采用的是 TCP 协议
real_server 192.168.10.103 80 { #第一个 Web 节点的地址、端口
weight 1 #节点的权重
TCP_CHECK { #健康检查方式
connect_port 80 #检查的目标端口
connect_timeout 3 #连接超时 (秒)
nb_get_retry 3 #重试次数
delay_before_retry 4 // 重试间隔 (秒)
}
}
}
real_server 192.168.10.104 80 { #第二个 Web 节点的地址、端口
…… #省略部分信息
}
}
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER # 两个 DS,一个为 MASTER 一个为 BACKUP
interface ens33 # 当前 IP 对应的网络接口,通过 ifconfig 查询
virtual_router_id 62# 虚拟路由 ID (0 - 255),在一个 VRRP 实例中主备服务器 ID 必须一样
priority 100 # 优先级值设定:MASTER 要比 BACKUP 的值大
advert_int 1 # 通告时间间隔:单位秒,主备要一致
authentication { # 认证机制,主从节点保持一致即可
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.100 # VIP,可配置多个
}
}
vim keepalived
virtual_server 192.168.10.100 80 {
delay_loop 3 # 设置健康状态检查时间
lb_algo rr # 调度算法,这里用了 rr 轮询算法
lb_kind DR # 这里测试用了 Direct Route 模式
persistence_timeout 50 # 持久连接超时时间,注意添加此项配置客户端连续请求时,请求到同一节点
protocol TCP
real_server 192.168.10.103 80 {
weight 1
TCP_CHECK {
connect_timeout 10
retry 3 # 旧版本为 nb_get_retry
delay_before_retry 3# 重试间隔 3 秒
connect_port 80
}
}
real_server 192.168.10.104 80 {
weight 1
TCP_CHECK {
connect_timeout 10
retry 3
delay_before_retry 3
connect_port 80
}
}
}

(3)重新启动Keepalived服务

   systemctl  restart keepalived

3.1.3配置从调度器

[root@localhost ~]# vi /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_HA_R2
// 从调度器的名称
}
vrrp_instance VI_1 {
state BACKUP // 从调度器的热备状态
priority 90 // 从调度器的优先级
…… // 省略部分信息
}
virtual_server 192.168.10.100 80 {
…… // 省略部分信息
}
[root@localhost ~]# systemctl restart keepalived

3.1.4配置Web节点服务器

bash
# 修改为自己的 VIP
vip=192.168.207.200
case $1 in
start)# 设置 ARP 参数echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" > /proc/sys/net/ipv4/conf/all/arp_announceecho "1" > /proc/sys/net/ipv4/conf/default/arp_ignoreecho "2" > /proc/sys/net/ipv4/conf/default/arp_announceecho "1" > /proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" > /proc/sys/net/ipv4/conf/lo/arp_announce# 临时添加 VIP(重启失效)sudo ip addr add ${vip}/32 dev lo label lo:0# 临时添加路由(重启失效)sudo ip route add local ${vip}/32 dev lo# 永久生效(通过 rc.local 或 NetworkManager 脚本)echo "ip addr add ${vip}/32 dev lo label lo:0" | sudo tee -a /etc/rc.localecho "ip route add local ${vip}/32 dev lo" | sudo tee -a /etc/rc.localsudo chmod +x /etc/rc.local;;
stop)# 恢复 ARP 参数echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignoreecho "0" > /proc/sys/net/ipv4/conf/all/arp_announceecho "0" > /proc/sys/net/ipv4/conf/default/arp_ignoreecho "0" > /proc/sys/net/ipv4/conf/default/arp_announceecho "0" > /proc/sys/net/ipv4/conf/lo/arp_ignoreecho "0" > /proc/sys/net/ipv4/conf/lo/arp_announce# 移除临时添加的 VIPsudo ip addr del ${vip}/32 dev lo label lo:0# 移除临时添加的路由sudo ip route del local ${vip}/32 dev lo# 从 rc.local 中移除永久设置sudo sed -i "/ip addr add ${vip}\/32 dev lo label lo:0/d" /etc/rc.localsudo sed -i "/ip route add local ${vip}\/32 dev lo/d" /etc/rc.local;;
*)echo "Usage: $0 {start|stop}"exit 1
esac
exit 0

3.1.5测试LVS+Keepalived高可用群集   

       在客户机的浏览器中,能够通过 LVS+Keepalived 群集的 VIP 地址(192.168.10.100)正常访问 Web 页面内容。当主调度器任何一个失效时,Web 站点仍然可以访问(可能需要 刷新或者重新打开);只要服务器池有两台以上的实服务器可用,就可以实现故障的切换过程;通过主、从调度器的 /var/log/messages 日志文件,可以跟踪监视热备的迁移。若要查看负载情况,可以执行 “ipvsadm -ln”“ipvsadm -lnc” 等操作命令。最终可以验证 LVS+Keepalived 高可用负载均衡群集的健壮性。

   哇酷哇酷,今天的文章就分享到这了,感谢大家的支持~~~

相关文章:

  • vue3+elementPlus实现无缝滚动表格封装
  • springboot 接口参数接收,body和param什么区别,分别怎么使用
  • SpringCloud+Vue汽车、单车充电桩源码实现:从架构设计到核心模块解析
  • Prufer序列 学习笔记
  • SNMPv3 的安全命名空间详解
  • 需要做一款小程序,用来发券,后端如何进行设计能够保证足够安全?
  • MySQL 多表查询、事务
  • 交叉熵损失函数的优势
  • Java常见异常详解及解决方案(九)
  • 【Git】关于项目开发分支的使用规范
  • 分库分表之优缺点分析
  • 结合 STM32CubeMX 使用 FreeRTOS 实时操作系统
  • XXE(XML外部实体注入)详解
  • 基于集体智能长尾识别的超声乳腺病变亚型分类|文献速递-深度学习医疗AI最新文献
  • [Jenkins在线安装]
  • 关于机器学习中迁移学习与深度学习的思考
  • CMake基础:常用内部变量和环境变量的引用
  • ntfs!CcGetDirtyPages函数分析之DirtyPages=0x1和TargetAttribute=0xe0的一个例子
  • 借助AI学习编程,走向架构师之路
  • AntV F2入门教程
  • 点胶喷嘴技术支持东莞网站建设/sem运营
  • 哪个网站做加盟的比较靠谱/企业网站推广方法实验报告
  • 网络维护员是干什么的/电商seo是什么
  • 开发者选项在哪里打开oppo/免费seo在线优化
  • 徐州网站建设公司/如何做seo搜索优化
  • 4399电脑版网页链接/厦门seo外包公司