Keepalived+LVS(高可用集群部署)

本文详细介绍了Keepalived的工作原理,及其作为LVS高可用集群的工具作用。通过VRRP协议实现服务器热备,确保服务不间断。文章还详细阐述了项目环境、配置步骤,包括主LVS、备LVS的配置,以及NFS共享目录、Web服务器的配置,并提供了测试验证方法。

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

Keepalived原理

在这里插入图片描述

1、Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能

2、VRRP(虚拟路由冗余协议)是针对路由器的一种备份解决方案 由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态
若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务

3、Keepalived案例讲解 Keepalived可实现多机热备,每个热备组可有多台服务器
双机热备的故障切换是由虚拟IP地址的漂移来实现,适用于各种应用服务器

Keepalived工具介绍(作用)

1.专为LVS和HA设计的一款健康检查工具
2.支持故障自动切换(Failover)
3.支持节点健康状态检查(Health Checking)

LVS+Keepalived高可用群集

1、Keepalived的设计目标是构建高可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器、管理服务器池,而不仅仅用做双击热备

2、使用Keepalived构建LVS群集更加简便易用

3、主要优势
对LVS负载调度器实现热备切换,提高可用性
对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再重新加入

项目环境

在这里插入图片描述

配置步骤

主LVS

[root@lvs1 ~]# modprobe ip_vs ###加载ip_vs模块
[root@lvs1 ~]# yum -y install ipvsadm-1.27-7.el7.x86_64  ###安装管理软件ipvsadm 
[root@lvs1 ~]# yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel
[root@lvs1 ~]# tar zxf keepalived-2.0.13.tar.gz
[root@lvs1 ~]# cd keepalived-2.0.13/
[root@lvs1 keepalived-2.0.13]# ./configure --prefix=/
[root@lvs1 keepalived-2.0.13]# make && make install
[root@lvs1 keepalived-2.0.13]# cp keepalived/etc/init.d/keepalived /etc/init.d ###加入系统管理服务
[root@lvs1 keepalived-2.0.13]# systemctl enable keepalived.service ###设置开机自启动
[root@lvs1 ~]# vi /etc/keepalived/keepalived.conf ###编辑配置文件


删除原有配置,重新添加:

! Configuration File for keepalived
global_defs {                   #全局参数
  router_id LVS_01              #指定名称,各个服务器名称要不一样
}
vrrp_instance VI_1 {            #指定vrrp热备参数
  state MASTER                  #服务器角色是master,备份服务器设置为BACKUP
  interface ens33               #修改物理网卡名称,默认是centos6的eth0 
  virtual_router_id 10          #组号相同
  priority 110                  #优先级,主服务器设置要大于备服务器
  advert_int 1
  authentication {
   auth_type PASS               #验证类型和密码,不建议修改
   auth_pass 123
}
virtual_ipaddress {
  192.168.100.100               #漂移地址(VIP)地址,可以有多个
 }
}
virtual_server 192.168.100.100 80 {        #配置虚拟服务器
  delay_loop 6
  lb_algo rr                               #调度算法为轮询
  lb_kind DR                              #LVS的工作模式为DR(直连路由)
  persistence_timeout 6
  protocol TCP                            #健康检查用的是TCP还是UDP
real_server 192.168.100.20 80 {
  weight 1
  TCP_CHECK {                              #健康检查参数
  connect_port 80                           #检查80端口连接是否正常
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
 }
}
real_server 192.168.100.30 80 {
  weight 1
  TCP_CHECK {
  connect_port 80
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  }
 }
}

[root@lvs1 ~]# systemctl start keepalived
[root@lvs1 ~]# ip addr

在这里插入图片描述

备LVS

[root@lvs2 ~]# modprobe ip_vs ###加载ip_vs模块
[root@lvs2 ~]# yum -y install ipvsadm-1.27-7.el7.x86_64 ###安装管理软件ipvsadm

[root@lvs2 ~]# yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel
[root@lvs2 ~]# tar zxf keepalived-2.0.13.tar.gz
[root@lvs2 ~]# cd keepalived-2.0.13/
[root@lvs2 keepalived-2.0.13]# ./configure --prefix=/
[root@lvs2 keepalived-2.0.13]# make && make install
[root@lvs2 keepalived-2.0.13]# cp keepalived/etc/init.d/keepalived /etc/init.d ###加入系统管理服务
[root@lvs2 keepalived-2.0.13]# systemctl enable keepalived.service ###设置开机自启动
[root@lvs2 ~]# vi /etc/keepalived/keepalived.conf ###编辑配置文件


删除原有配置,重新添加:

! Configuration File for keepalived
global_defs {                   #全局参数
  router_id LVS_02              #指定名称,各个服务器名称要不一样
}
vrrp_instance VI_1 {            #指定vrrp热备参数
  state BACKUP                  #服务器角色是master,备份服务器设置为BACKUP
  interface ens33               #修改物理网卡名称,默认是centos6的eth0 
  virtual_router_id 10          #组号相同
  priority 105                  #优先级,主服务器设置要大于备服务器
  advert_int 1
  authentication {
   auth_type PASS               #验证类型和密码,不建议修改
   auth_pass 123
}
virtual_ipaddress {
  192.168.100.100               #漂移地址(VIP)地址,可以有多个
 }
}
virtual_server 192.168.100.100 80 {        #配置虚拟服务器
  delay_loop 6
  lb_algo rr                               #调度算法为轮询
  lb_kind DR                              #LVS的工作模式为DR(直连路由)
  persistence_timeout 6
  protocol TCP                            #健康检查用的是TCP还是UDP
real_server 192.168.100.20 80 {
  weight 1
  TCP_CHECK {                              #健康检查参数
  connect_port 80                           #检查80端口连接是否正常
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
 }
}
real_server 192.168.100.30 80 {
  weight 1
  TCP_CHECK {
  connect_port 80
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  }
 }
}

[root@lvs1 ~]# systemctl start keepalived
[root@lvs1 ~]# ip addr

在这里插入图片描述

主LVS和备LVS配置文件区别

以主服务器为例,先修改keepalived master服务器配置文件,备服务器只需在keepalived master服务器配置文件的基础上修改router_id、state、priority三个参数即可
在这里插入图片描述

NFS共享目录配置

[root@nfs ~]# systemctl stop firewalld              ###关闭防火墙
[root@nfs ~]# setenforce 0
[root@nfs ~]# yum -y install rpcbind nfs-utils      ###安装rpcbind和nfs-utils软件包(默认安装)

[root@nfs ~]# mkdir /opt/web1 /opt/web2             ###创建共享目录
[root@nfs ~]# vi /opt/web1/index.html
添加:<h1>Hello</h1>

[root@nfs ~]# vi /opt/web2/index.html
添加:<h1>Word</h1>

[root@nfs ~]# vi /etc/exports
添加:
/opt/web1 192.168.100.20/24(ro)
/opt/web2 192.168.100.30/24(ro)

[root@nfs ~]# systemctl restart nfs                 ###重启服务
[root@nfs ~]# systemctl restart rpcbind
[root@nfs ~]# showmount -e
Export list for nfs:
/opt/web2 192.168.100.30/24
/opt/web1 192.168.100.20/24



Web1 配置

[root@web1 ~]# systemctl stop firewalld 
[root@web1 ~]# setenforce 0
[root@web1 ~]# vi web1.sh

添加:
#!/bin/bash
ifconfig lo:0 192.168.100.100 broadcast 192.168.100.100 netmask 255.255.255.255 up
route add -host 192.168.100.100 dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p &> /dev/null

[root@web1 ~]# sh web.sh
[root@web1 ~]# ifconfig                 ###查看是否有虚拟路由生成    
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.100.20  netmask 255.255.255.0  broadcast 192.168.100.255
        inet6 fe80::e98d:5e18:5e52:25ca  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ae:cb:b0  txqueuelen 1000  (Ethernet)
        RX packets 6599  bytes 1664134 (1.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2671  bytes 333575 (325.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 264  bytes 29384 (28.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 264  bytes 29384 (28.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.100.100  netmask 255.255.255.255
        loop  txqueuelen 1  (Local Loopback)

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:a5:8f:c7  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@web1 ~]# yum -y install httpd
[root@web1 ~]# showmount -e 192.168.100.40
Export list for 192.168.100.40:
/opt/web2 192.168.100.30/24
/opt/web1 192.168.100.20/24
[root@web1 ~]# mount 192.168.100.40:/opt/web1 /var/www/html
[root@web1 ~]# systemctl start httpd



Web2 配置

[root@web2 ~]# systemctl stop firewalld
[root@web2 ~]# setenforce 0
[root@web2 ~]# vi web2.sh

添加:
#!/bin/bash
ifconfig lo:0 192.168.100.100 broadcast 192.168.100.100 netmask 255.255.255.255 up
route add -host 192.168.100.100 dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p &> /dev/null

[root@web2 ~]# sh web2.sh
[root@web2 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.100.30  netmask 255.255.255.0  broadcast 192.168.100.255
        inet6 fe80::a84d:dfac:ebd3:131a  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:c9:b5:bf  txqueuelen 1000  (Ethernet)
        RX packets 3601  bytes 1432053 (1.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2553  bytes 307718 (300.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 336  bytes 36680 (35.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 336  bytes 36680 (35.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.100.100  netmask 255.255.255.255
        loop  txqeuelen 1  (Local Loopback)

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:02:2f:b3  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@web2 ~]# yum -y install httpd
[root@web2 ~]# showmount -e 192.168.100.40
Export list for 192.168.100.40:
/opt/web2 192.168.100.30/24
/opt/web1 192.168.100.20/24
[root@web2 ~]# mount 192.168.100.40:/opt/web2 /var/www/html
[root@web2 ~]# systemctl start httpd


测试验证

浏览器输入:http://192.168.100.100
在这里插入图片描述

在这里插入图片描述

关闭主LVS后

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值