LVS+Keepalived 高可用群集

目录

一、Keepalived 概述

1.1 VRRP协议概念

1.2 VRRP工作原理

1.3 VRRP抢占模式

1.3.1、抢占模式的概念

1.3.2、抢占模式的优先级比较

1.3.3、抢占模式的应用场景

1.4 Keepalived概述

1.4.1 Keepalived作用

1.4 2 Keepalived工作原理

1.5 Keepalived 体系及其模块主要作用

① Core 模块

② VRRP 模块

③ Check 模块

四、部署LVS+Keepalived 高可用集群

4.1 部署Master负载调度服务器

4.2 部署Backup负载调度服务器

4.3 配置节点服务器

4.4 测试

五、Keepalived脑裂以及解决方法

5.1 什么是脑裂

5.2 形成脑裂的原因

5.3 脑裂解决方法


一、Keepalived 概述

1.1 VRRP协议概念

VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)是一种用于提高网络可靠性的协议。它通过在一组路由器之间创建一个虚拟路由器,实现了网关的冗余。这个虚拟路由器拥有一个虚拟IP地址和虚拟MAC地址,主路由器负责处理发送到这个虚拟IP地址的流量,而备份路由器在主路由器失效时自动接管,以确保网络的连续性

在VRRP中,路由器被分为主路由器(Master)和备份路由器(Backup)。主路由器定期发送VRRP通告消息,如果备份路由器检测到一定时间内没有收到通告消息,就会自动接管,成为新的主路由器,并继续提供服务

1.2 VRRP工作原理

VRRP(虚拟路由冗余协议)的工作原理通过协调多台路由器来创建一个虚拟路由器,实现网关的冗余和故障切换。

虚拟路由器的概念

  • 在VRRP中,多个实际的物理路由器被配置成一个虚拟路由器组,这个虚拟路由器拥有一个虚拟IP地址和虚拟MAC地址。
  • 虚拟IP地址通常配置为网络中的网关地址,网络中的主机将其配置为默认网关

角色分配

  • 在一个VRRP组中,路由器被分为两类:主路由器(Master)和备份路由器(Backup)。
  • 主路由器(Master)负责处理发送到虚拟IP地址的所有流量。
  • 备份路由器(Backup)作为冗余设备,当主路由器不可用时接管其工作。

优先级

  • 每个路由器都被分配一个优先级,范围是1到254,数值越高,优先级越高。
  • 默认情况下,优先级最高的路由器会成为主路由器。如果有两个路由器优先级相同,那么拥有更高IP地址的路由器会成为主路由器。

VRRP通告消息

  • 主路由器定期向备份路由器发送VRRP通告消息,默认间隔时间为1秒。
  • 这些通告消息中包含主路由器的优先级和状态信息。

故障检测与切换

  • 如果备份路由器在一定时间(通常为3秒,即3次通告消息间隔)内没有收到主路由器的VRRP通告消息,它会认为主路由器已经失效。
  • 备份路由器会在检测到主路由器失效后,根据优先级顺序选举一个新的主路由器,并开始发送VRRP通告消息。
  • 这个新的主路由器接管虚拟IP地址,继续为网络中的设备提供网关服务,实现无缝切换。

负载均衡

  • 虽然VRRP主要用于冗余和故障切换,但在某些高级配置中,也可以通过设置不同VRRP组的优先级,实现负载均衡。

抢占功能

  • 如果启用了抢占功能(通常为默认设置),当一个优先级较高的路由器恢复工作时,它会自动抢回主路由器的位置。
  • 如果不启用抢占功能,即使优先级更高的路由器恢复,也不会抢回主路由器的角色,除非当前主路由器失效。

1.3 VRRP抢占模式

1.3.1、抢占模式的概念

  • 抢占模式允许一个优先级更高的备份路由器在恢复正常后,主动接管主路由器的角色,即成为新的主路由器。
  • 如果抢占模式被禁用,则无论优先级高低,当前的主路由器将继续保留其主路由器的角色,直到它失效为止。

1.3.2、抢占模式的优先级比较

  • 抢占模式的前提是路由器之间存在优先级差异。路由器优先级越高,越有可能在启用抢占模式时成为主路由器。
  • 当一个优先级较低的主路由器正在运行时,如果优先级更高的路由器恢复并启用了抢占模式,它将抢占主路由器的角色。

1.3.3、抢占模式的应用场景

启用抢占模式:

  • 适用于希望始终由最高优先级路由器作为主路由器的场景。这样可以确保最强大、最可靠的设备始终承担主要的流量处理任务。

禁用抢占模式:

  • 适用于希望避免频繁切换主路由器的场景,特别是在恢复时间较短且网络流量相对稳定的情况下。禁用抢占模式可以减少不必要的网络波动和切换。

1.4 Keepalived概述

1.4.1 Keepalived作用

  • Keepalived 是一个基于 VRRP(虚拟路由冗余协议)实现的高可用性解决方案,常用于 LVS(Linux Virtual Server)集群中,以确保服务的高可用性。它能够有效解决静态路由中可能出现的单点故障问题。

专为LVS和HA设计的一款健康检查工具

  • 支持故障自动切换(Failover)
  • 支持节点健康状态检查(Health Checking)

官方网站:http://www.keepalived.org/

1.4 2 Keepalived工作原理

Keepalived 的工作原理基于 VRRP(虚拟路由冗余协议),通过在主备服务器之间协调工作,实现服务的高可用性。以下是 Keepalived 的工作原理详细说明:

基本结构:

  • 主服务器(MASTER):负责处理大部分或全部的实际流量,并定期发送状态通告。
  • 备份服务器(BACKUP):在主服务器正常工作时处于待命状态,持续监听主服务器的状态。

虚拟IP(VIP):

  • 虚拟IP地址:Keepalived 配置的主备服务器共享一个虚拟IP地址,这个地址对外公开,客户端通过该虚拟IP访问服务。
  • VIP 绑定:在正常情况下,VIP 绑定在主服务器上,所有流量都通过主服务器处理。

VRRP 协议:

  • VRRP 通告消息:主服务器定期发送 VRRP 通告消息(默认每秒一次)给备份服务器。这个通告消息包含主服务器的优先级和当前状态。
  • 优先级:每个服务器在 VRRP 中有一个优先级,主服务器通常具有较高的优先级。优先级较高的服务器会成为主服务器。

故障检测与切换:

  • 主服务器故障:如果备份服务器在一定时间内(通常为3秒)没有收到主服务器的 VRRP 通告消息,它会认为主服务器发生了故障。
  • 备份服务器接管:备份服务器将自动接管虚拟IP地址,成为新的主服务器,继续处理流量和请求。
  • 无缝切换:这种切换是无缝的,客户端通常不会察觉到背后的变化,确保服务不中断。

健康检查:

  • 服务检测:Keepalived 还可以配置健康检查模块,定期检查主服务器的健康状态(如服务端口、URL 等)。
  • 动态调整:如果主服务器的某些服务出现异常,但服务器本身未完全失效,Keepalived 可以根据健康检查的结果动态调整服务器状态,如将其暂时从负载均衡池中移除。

抢占机制:

  • 优先级较高的服务器恢复:如果主服务器恢复正常,它会重新发送 VRRP 通告消息。
  • 抢占设置:根据配置,如果启用了抢占机制,优先级更高的服务器会重新夺回主服务器的位置,并重新绑定虚拟IP地址。

1.5 Keepalived 体系及其模块主要作用

① Core 模块

作用:

  • Core 模块是 Keepalived 的核心部分,负责主进程的启动和维护,以及全局配置文件的加载和解析。

功能:

  • 启动 Keepalived 的主要进程。
  • 解析并加载 Keepalived 的配置文件,初始化其他模块。
  • 维护整个 Keepalived 的运行状态和管理流程。

② VRRP 模块

作用:

  • VRRP 模块负责实现 VRRP(虚拟路由冗余协议),确保在主服务器故障时备份服务器能够接管虚拟路由器的角色,提供高可用性。

功能:

  • 实现 VRRP 协议的通信和选举机制。
  • 管理主路由器和备份路由器之间的角色转换,确保网关的高可用性。
  • 发送和接收 VRRP 通告消息,进行故障检测与切换。

③ Check 模块

作用:

  • Check 模块负责对后端服务器的健康状态进行检查,确保只有健康的服务器能够参与负载均衡或接管服务。

功能:

  • 实施健康检查,常见的方式包括端口检查和 URL 检查。
  • 动态监控后端服务器的状态,根据健康检查结果调整服务器在负载均衡池中的状态。
  • 确保在服务器发生故障时,自动将其移除,并在其恢复正常后重新加入。

四、部署LVS+Keepalived 高可用集群

准备:

systemctl stop firewalld.service
setenforce 0

4.1 部署Master负载调度服务器

1、修改主配置文件

yum -y install ipvsadm keepalived
//安装软件
systemctl start keepalived.service
//启动服务
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
//备份文件
vim /etc/keepalived/keepalived.conf
 
 
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_01
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
 
vrrp_instance VI_1 {
    state MASTER          //备服务器设置为 MASTER
    interface ens33
    virtual_router_id 10
    priority 100          //备服务器设置为 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        172.16.88.180
    }
}
 
virtual_server 172.16.88.180 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP
    real_server 172.16.88.44 80 {     //第一个节点服务器
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
 
    real_server 172.16.88.55 80 {     //第二个节点服务器
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
 
 
//删除后面的其余配置

2、调整/proc响应参数

vim /etc/sysctl.conf
 
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
 
sysctl -p

4.2 部署Backup负载调度服务器

1、修改主配置文件

yum -y install ipvsadm keepalived
//安装软件
systemctl start keepalived.service
//启动服务
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
//备份文件
vim keepalived.conf
 
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_02
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
 
vrrp_instance VI_1 {
    state BACKUP          //备服务器设置为 BACKUP
    interface ens33
    virtual_router_id 10
    priority 80          //备服务器设置为 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        172.16.88.180
    }
}

2、调整/proc响应参数

vim /etc/sysctl.conf
 
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
 
sysctl -p

4.3 配置节点服务器

yum -y install httpd    //安装服务
systemctl start httpd     //开启服务

配置节点服务器:172.16.88.44

echo 'this is kgc web!' > /var/www/html/index.html

配置节点服务器:172.16.88.55

echo 'this is benet web!' > /var/www/html/index.html

1、配置虚拟IP

编辑网卡配置文件 /etc/sysconfig/network-scripts/ifcfg-lo:0

DEVICE=lo:0
ONBOOT=yes
IPADDR=172.16.88.180
NETMASK=255.255.255.255

重启网络服务:

service network restart 或 systemctl restart network
ifup lo:0
ifconfig lo:0
route add -host 172.16.88.180 dev lo:0

2、调整/proc响应参数

vim /etc/sysctl.conf
 
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
 
sysctl -p

4.4 测试

客户端访问测试:

在客户端浏览器中访问以下URL,确认能够正常访问负载均衡后的Web服务

http://172.16.88.180/

主服务器故障切换测v

在主服务器上停止 keepalived 服务,以模拟主服务器故障

systemctl stop keepalived

客户端重新访问测试 

再次在客户端浏览器中访问 http://172.16.88.180/,确认备份服务器是否能够接管并正常提供服务。如果服务正常,则说明故障切换功能正常,备份服务器成功接管虚拟IP。

五、Keepalived脑裂以及解决方法

5.1 什么是脑裂

在 Keepalived 的上下文中,“脑裂”(Split-Brain)指的是高可用集群系统中的一个问题,发生在主节点和备份节点之间的状态不一致或通信中断时。这种情况可能导致系统中的两个节点都认为自己是主节点,从而导致虚拟 IP 地址或服务的重复运行,造成系统的不稳定性。

脑裂的表现

  • 服务重复:两个节点同时持有虚拟 IP 地址,导致服务的重复实例。
  • 数据不一致:由于两个节点同时处理请求或提供服务,可能会导致数据不一致或冲突。
  • 系统混乱:用户请求可能被路由到错误的节点,导致服务不可用或异常。

5.2 形成脑裂的原因

原因:

① 心跳之间发生故障:主备服务器间的心跳通信中断,导致双方无法确认对方的状态,可能引发脑裂。

② 网卡驱动故障:网卡驱动异常或故障,导致网络连接中断或不稳定,无法正常传输心跳消息。

③ IP 地址冲突问题:虚拟 IP 地址与实际 IP 地址发生冲突,导致网络混乱,可能引发脑裂。

④ 仲裁服务器故障:仲裁服务器出现问题,导致无法正确判断主备节点状态,引发脑裂。

⑤ 防火墙阻挡心跳消息传输:防火墙配置不当,阻挡了 Keepalived 的心跳消息传输,导致主备节点之间通信中断。

⑥ Keepalived 配置不一致

  • VRID 不一致:虚拟路由器 ID(VRID)配置不一致,可能导致主备节点无法正确识别对方。
  • 优先级一致:主备节点优先级配置相同,导致主备节点无法正确确定主节点,可能引发竞争状态。

5.3 脑裂解决方法

  • 双心跳连接:同时使用串行电缆和以太网电缆进行心跳通信。这种冗余设计确保即使一条连接断开,另一条仍能传递心跳消息,保持集群的完整性。
  • 强制节点关闭:在检测到脑裂时,可以使用专用的硬件设备(如STONITH或Fencing设备)强制关闭其中一个节点的电源,避免两个节点同时作为主节点运行,从而解决脑裂问题。
  • 完善的监控系统:建立一个全面的监控系统,实时监测集群的状态和健康状况。该系统应能及早发现潜在问题,并及时采取相应措施,预防脑裂的发生。
  • 27
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值