LVS+Keepalived群集

本文详细介绍了如何利用Keepalived和LVS构建高可用集群,解决单点故障问题。首先解释了Keepalived作为健康检查工具的作用和VRRP热备份协议原理。接着,通过具体的配置步骤展示了在master和slave服务器上的配置,包括Web服务的双机热备和NFS服务器的设置。最后,展示了在主调度器(lvs1)和备调度器(lvs2)上的配置,并进行了测试验证,确保在主服务器故障时能自动切换到备用服务器,确保服务不间断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Keepalived案例分析

■ 企业应用中,单台服务器承担应用存在单点故障的危险
■ 单点故障一旦发生,企业服务将发生中断,造成极大的危害

Keepalived工具介绍

■ 专为LVS和HA设计的一款健康检查工具
作用:
● 支持故障自动切换(Failover)
● 支持节点健康状态检查(Health Checking)
● 官方网站: http://www.keepalived.orgl

Keepalived实现原理剖析

■ Keepalived采用VRRP热备份协议
实现Linux服务器的多机热备功能
● 由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
● 每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态
● 若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务

Keepalived案例讲解

■ Keepalived可实现多机热备,每个热备组可有多台服务器
■ 实现基于Web服务的双机热备

Keepalived安装与启动

■ 在LVS群集环境中应用时,也需用到ipvsadm管理工具
■ YUM安装Keepalived
■ 启用Keepalived服务

配置Keepalived master服务器

■ Keepalived配置目录位于letc/keepalivedl
■ keepalived.conf提是主配置文件
● global_defs {…}区段指定全局参数
● vrrp_instance 实例名称{…}区段指定VRRP热备参数
●注释文字以"!"符号开头
● 目录samples,提供了许多配置样例作为参考

配置Keepalived master服务器

■ 常用配置选项
● router id HA_TEST_R1:本路由器(服务器)的名称
● vrrp_instance Vl_1∶定义VRRP热备实例
● state MASTER:热备状态,MASTER表示主服务器
● interface ens33:承载VIP地址的物理接口
● virtual_router_id 1:虚拟路由器的ID号,每个热备组保持一致
● priority 100:优先级,数值越大优先级越高
● advert_int 1:通告间隔秒数(心跳频率)
● auth_type PASS:认证类型
● auth_pass 123456:密码字串
● virtual_ipaddress { vip]}:指定漂移地址(VIP),可以有多个

配置Keepalived slave服务器

■ Keepalived备份服务器的配置与master的配置有三选项不同
● router_id:设为自有名称
● state:设为BACKUP
● priority:值低于主服务器
■ 其他选项与master相同

Keepalived双机热备效果测试

■ 测试双机热备的效果
● 主、备机均启用Web服务,设置不同内容
● 先后禁用、启用主服务器的网卡
■ 执行的测试
● 测试1:使用ping虚拟地址检测连通性
● 测试2:在浏览器上访问虚拟地址,确认可用性及内容变化
● 测试3:查看日志文件/var/log/messages中的变化

部署流程

在这里插入图片描述
NFS服务器配置

[root@nfs ~]# systemctl stop firewalld 
[root@nfs ~]# setenforce 0
[root@nfs ~]# yum -y install nfs-utils
[root@nfs ~]# yum -y install rpcbind
[root@nfs ~]# mkdir /opt/web1
[root@nfs ~]# mkdir /opt/web2
[root@nfs ~]# echo "<h1> this is web1. </h1>" > /opt/web1/index.html
[root@nfs ~]# echo "<h1> this is web2. </h1>" > /opt/web2/index.html
[root@nfs ~]# vi /etc/exports
/opt/web1 192.168.10.30/24 (ro)
/opt/web2 192.168.10.40/24 (ro)
[root@nfs ~]# systemctl restart rpcbind    
[root@nfs ~]# systemctl restart nfs
[root@nfs ~]# showmount -e
Export list for localhost.localdomain:
/opt/web2 192.168.10.40/24
/opt/web1 192.168.10.30/24

在这里插入图片描述
Web1服务器配置

[root@web1 ~]# systemctl stop firewalld
[root@web1 ~]# setenforce 0
[root@web1 ~]# yum -y install httpd
[root@web1 ~]# showmount -e 192.168.10.50

在这里插入图片描述

[root@web1 ~]# mount 192.168.10.50:/opt/web1 /var/www/html/
[root@web1 ~]# df -Th  

在这里插入图片描述

[root@web1 ~]# systemctl start httpd   
[root@web1 ~]# netstat -anpt | grep 80

在这里插入图片描述

[root@web1 ~]# curl http://localhost 

在这里插入图片描述

[root@web1 ~]# vi web1.sh
#!/bin/bash              
ifconfig lo:0 192.168.10.100 broadcast 192.168.10.100 netmask 255.255.255.255 up    
route add -host 192.168.10.100 dev lo:0       
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p &> /dev/null                            

[root@web1 ~]# sh web1.sh  
[root@web1 ~]# ifconfig 

在这里插入图片描述

[root@web1 ~]# route -n    

在这里插入图片描述
Web2服务器配置

[root@web2 ~]# systemctl stop firewalld
[root@web2 ~]# setenforce 0
[root@web2 ~]# yum -y install httpd
[root@web2 ~]# mount 192.168.10.50:/opt/web2 /var/www/html
[root@web2 ~]# df -Th

在这里插入图片描述

[root@web2 ~]# systemctl start httpd
[root@web2 ~]# curl http://localhost

在这里插入图片描述

[root@web2 ~]# vi web2.sh
#!/bin/bash              
ifconfig lo:0 192.168.10.100 broadcast 192.168.10.100 netmask 255.255.255.255 up    
route add -host 192.168.10.100 dev lo:0       
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p &> /dev/null                            

[root@web2 ~]# sh web2.sh 
[root@web2 ~]# ifconfig 

在这里插入图片描述

[root@web2 ~]# route -n

在这里插入图片描述
lvs1主调度器配置
在这里插入图片描述

[root@lvs01 ~]# systemctl stop firewalld
[root@lvs01 ~]# setenforce 0
[root@lvs01 ~]# modprobe ip_vs 
[root@lvs01 ~]# cat /proc/net/ip_vs

在这里插入图片描述

[root@lvs01 ~]# yum -y install ipvsadm   
[root@lvs01 ~]# vi dr1.sh     #编写调度脚本

#!/bin/bash
ifconfig ens33:0 192.168.10.100 broadcast 192.168.10.100 netmask 255.255.255.255 up      #生成ens33:0端口为VIP地址,广播地址255.255.255.255,为了能让调度器发消息可接收
route add -host 192.168.10.100 dev ens33:0                         #给ens33:0添加路由
ipvsadm -C                                                                               #清除虚拟服务器表中所有记录
ipvsadm -A -t 192.168.10.100:80 -s rr                                   #创建虚拟服务器
ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.30:80 -g    #添加服务器节点,虚拟地址映射真实web1地址
ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.40:80 -g    #添加服务器节点,虚拟地址映射真实web2地址
ipvsadm -Ln                        
[root@lvs01 ~]# sh dr1.sh

在这里插入图片描述

[root@lvs01 ~]# yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel
[root@lvs01 ~]# tar zxvf keepalived-2.0.13.tar.gz 
[root@lvs01 ~]# cd keepalived-2.0.13/  
[root@lvs01 keepalived-2.0.13]# ./configure --prefix=/      #配置文件
[root@lvs01 keepalived-2.0.13]# make && make install  
[root@lvs01 keepalived-2.0.13]# cp keepalived/etc/init.d/keepalived /etc/init.d          #把keepalived加入系统管理服务
[root@lvs01keepalived-2.0.13]# cd
[root@lvs01 ~]# systemctl enable keepalived.service      #开机自启
[root@lvs01 ~]# vi /etc/keepalived/keepalived.conf
global_defs {
      router_id lvs_01      #本服务器名称
}
vrrp_instance vi_1 {        #定义VRRP热备实例
      state MASTER          #热备状态,MASTER表示主服务器,BACKUP表示从服务器
      interface ens33       #承载VIP地址的物理接口
      virtual_router_id 51  #虚拟路由器的ID号,每个热备组保持一致
      priority 110          #优先级,数值越大越优先级越高,默认100
      advert_int 1          #通告间隔秒数(心跳频率)
      authentication {     # 热备认证信息,每个热备组保持一致
           auth_type PASS   #认证类型(密码认证)
           auth_pass 6666   #密码字符串
 }
virtual_ipaddress {        # 指定漂移地址(VIP),虚拟地址,可以有多个
      192.168.10.100
}
}
virtual_server 192.168.10.100 80 {   #虚拟服务器地址(VIP),端口
      lb_algo rr                 #轮询(rr)调度算法
      lb_kind DR                 #直接路由(DR)群集工作模式
      persistence_timeout 6      #连接保持时间6秒
      protocol TCP               #应用服务器采用的是TCP协议
real_server 192.168.10.30 80 {       #第一个Web服务器节点的地址,端口(真实地址)
      weight 1                   #节点的权重
      TCP_CHECK {               # 健康检查方式
          connect_port 80        #检查的目标端口
          connect_timeout 3      #连接超时(秒)
          nb_get_retry 3         #重试次数
          delay_before_retry 3   #重试间隔
   }
}
real_server 192.168.10.40 80 {       #第二个Web服务器节点的地址,端口(真实地址)
      weight 1
      TCP_CHECK {
          connect_port 80
          connect_timeout 3
          nb_get_retry 3
          delay_before_retry 3
   }
}
} 
[root@lvs01 ~]# systemctl start keepalived.service  #启动服务
[root@lvs01 ~]# ip addr  #查看虚拟地址,存在主调度器上

在这里插入图片描述
[root@lvs01 ~]# tail -100 /var/log/messages #查看调度情况
在这里插入图片描述
[root@lvs01 ~]# ipvsadm -Ln
在这里插入图片描述
lvs2备调度器配置

[root@lvs02 ~]# systemctl stop firewalld
[root@lvs2 ~]# setenforce 0
[root@lvs02 ~]# modprobe ip_vs 
[root@lvs02 ~]# cat /proc/net/ip_vs
[root@lvs02 ~]# yum -y install ipvsadm   
[root@lvs02 ~]# yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel
[root@lvs02 ~]# tar zxvf keepalived-2.0.13.tar.gz 
[root@lvs02 ~]# cd keepalived-2.0.13/  
[root@lvs02 keepalived-2.0.13]# ./configure --prefix=/      #配置文件
[root@lvs02 keepalived-2.0.13]# make && make install  
[root@lvs02 keepalived-2.0.13]# cp keepalived/etc/init.d/keepalived /etc/init.d          #把keepalived加入系统管理服务
[root@lvs02 keepalived-2.0.13]# cd
[root@lvs02 ~]# systemctl enable keepalived.service
[root@lvs02 ~]# vi dr2.sh     #编写调度脚本

#!/bin/bash
ifconfig ens33:0 192.168.10.100 broadcast 192.168.10.100 netmask 255.255.255.255 up      #生成ens33:0端口为VIP地址,广播地址255.255.255.255,为了能让调度器发消息可接收
route add -host 192.168.10.100 dev ens33:0                         #给ens33:0添加路由
ipvsadm -C                                                                               #清除虚拟服务器表中所有记录
ipvsadm -A -t 192.168.10.100:80 -s rr                                   #创建虚拟服务器
ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.30:80 -g    #添加服务器节点,虚拟地址映射真实web1地址
ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.40:80 -g    #添加服务器节点,虚拟地址映射真实web2地址
ipvsadm -Ln       

lvs01设置免密登录
[root@lvs01 ~]# ssh-keygen -t rsa
在这里插入图片描述

[root@lvs01 ~]# ssh-copy-id 192.168.10.20
[root@lvs01 ~]# scp /etc/keepalived/keepalived.conf root@192.168.10.20:/etc/keepalived/

在这里插入图片描述
在lvs2 服务器上编辑配置文件

[root@lvs02 ~]# vi /etc/keepalived/keepalived.conf 
router_id lvs_02                      #服务器名称
state BACKUP                        #热备状态,从服务器
priority 105                              # 优先级
[root@lvs02 ~]# systemctl start keepalived.service   启动服务
[root@lvs02 ~]# systemctl status keepalived.service   查看服务状态

在这里插入图片描述
验证效果
关闭主调度器查看效果
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值