LVS+Keepalived高可用集群

目录

一、Keepalived

1.Keepalived简介

2.工作原理(两个部分)

3.Keepalived体系及模块

3.1Core模块

3.2VRRP模块

3.3Check模块

3.4总结

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

[1. 配置负载调度器(Master)](#1. 配置负载调度器(Master))

2.配置负载调度器(Backup)

3.配置节点服务器

4.配置虚拟IP

5.测试验证

三、Keepalived脑裂以及解决方法

1.什么是脑裂

2.经典场景

3.常见的问题

4.解决方法


一、Keepalived

1.Keepalived简介

Keepalived是一个高可用性(HA)解决方案,主要用于提高Linux系统中的服务和应用的可用性。它通常与虚拟路由冗余协议(VRRP)一起使用,提供负载均衡和故障转移功能。Keepalived主要用于确保在单个服务器出现故障时,服务能够快速转移到另一台备份服务器,从而保持服务的持续可用性

2.工作原理(两个部分)

虚拟路由冗余协议(VRRP)

VRRP使得多个服务器能够共享一个虚拟IP地址。这个虚拟IP地址是客户端与服务进行通信时使用的地址,而实际的物理IP地址则可以是不同的服务器的地址。Keepalived通过VRRP协议来实现这个功能,确保即使主服务器出现故障,服务仍然可以继续运行。其工作原理如下
主服务器和备份服务器

在VRRP配置中,指定一个主服务器(也称为主路由器)和一个或多个备份服务器。主服务器

会拥有虚拟IP地址,并定期向网络广播它的存在
优先级和竞选

每台服务器都有一个优先级值。主服务器的优先级值较高,而备份服务器的优先级值较低

主服务器会定期发送VRRP广告包,以表明它是当前的主路由器
故障检测和切换

如果主服务器无法发送广告包(例如,发生了故障),备份服务器会检测到主服务器的失效,并启动竞选过程。如果备份服务器的优先级值比其他备份服务器高,它会成为新的主路

由器,并接管虚拟IP地址
虚拟IP迁移

一旦备份服务器成为新的主服务器,它会接管虚拟IP地址,使客户端能够继续连接到服务而

不会察觉到主服务器的故障

健康检查

健康检查功能用于检测和确保后端服务器的健康状态,以便于负载均衡和故障处理。Keepalived通过定期对后端服务器进行健康检查来实现这一功能,具体工作原理如下
健康检查配置

在Keepalived的配置文件中,可以定义对后端服务器的健康检查方式,例如通过TCP

HTTP、脚本等方式进行检查
检测和状态更新

Keepalived定期向后端服务器发送健康检查请求。如果服务器响应正常,则认为服务器健康否则,认为服务器不可用
动态负载均衡

在负载均衡模式下,Keepalived根据健康检查的结果动态调整流量分配。如果一个服务器被

检测为不可用,Keepalived会将流量重新分配到其他健康的服务器上
故障恢复

当一个曾经不可用的服务器恢复健康状态时,Keepalived会将其重新加入负载均衡池中,以

便重新分配流量

**注:**上面内容是VRRP工作原理简版,具体版可参考VRRP工作原理

3.Keepalived体系及模块

3.1Core模块

作用
核心功能:

Core模块是Keepalived的核心部分,负责主进程的启动、维护和管理
配置管理:

该模块负责加载和解析全局配置文件(通常是/etc/keepalived/keepalived.conf),并将配置应用到其他模块中
进程管理:

负责启动和管理Keepalived的各个子进程,包括VRRP和健康检查进程。Core模块确保所有配置和状态在各个模块之间的一致性

3.2VRRP模块

作用
实现VRRP协议:

VRRP(Virtual Router Redundancy Protocol)模块实现了虚拟路由器冗余协议的功能,用于提供高可用性
虚拟IP管理:

通过VRRP模块,Keepalived可以管理一个或多个虚拟IP地址。这些虚拟IP地址可以在主路由器和备份路由器之间进行切换,确保服务在主路由器发生故障时仍能继续运行
主备切换:

VRRP模块负责检测主路由器的状态,并在主路由器发生故障时自动将虚拟IP地址切换到备份路由器上

3.3Check模块

作用
健康检查:

Check模块负责对后端服务器进行健康检查,以确保它们的可用性。健康检查的方式可以包括端口检查和URL检查
端口检查:

通过检查服务器的特定端口是否开放来判断服务器的健康状态。例如,可以检查HTTP服务的80端口是否正常响应
URL检查:

通过发送HTTP请求到特定URL并验证响应内容来判断服务器的健康状态。这种检查可以确保服务器不仅端口开放,而且应用服务正常运行
动态负载均衡:

根据健康检查的结果,Check模块可以动态调整负载均衡配置,将流量分配到健康的服务器上,避免将请求发送到出现故障的服务器

3.4总结

Core模块:负责Keepalived的核心管理和配置处理,确保系统的整体运行
VRRP模块:实现了虚拟路由器冗余协议,提供高可用性和主备切换功能
Check模块:进行健康检查,确保后端服务器的健康状态,支持动态负载均衡

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

实验准备:

4台linux(全部使用NAT模式)

所有服务器全部关闭防火墙以及增强功能
systemctl stop firewalld.service
setenforce 0

1. 配置负载调度器(Master)

Master服务器:172.16.58.10

安装软件
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,备为backup
    interface ens33
    virtual_router_id 10
    priority 100          ##指定优先级,数值越大越优先
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        172.16.58.180
    }
}
 
virtual_server 172.16.58.180 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP
    real_server 172.16.58.20 80 {     //第一个节点服务器
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
 
    real_server 172.16.58.30 80 {     //第二个节点服务器
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
 
 
//删除后面的其余配置

调整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

2.配置负载调度器(Backup)

Master服务器:172.16.58.40

安装软件
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          ##指定热备状态,主为master,备为backup
    interface ens33
    virtual_router_id 10
    priority 80          ##指定优先级,数值越大越优先
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        172.16.58.180
    }
}

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

3.配置节点服务器

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


节点服务器一:172.16.58.20
echo 'this is kgc web!' > /var/www/html/index.html

节点服务器二:172.16.58.30
echo 'this is benet web!' > /var/www/html/index.html

4.配置虚拟IP

在172.16.58.20和172.16.58.30上进行配置

vim /etc/sysconfig/network-scripts/ifcfg-lo:0

DEVICE=lo:0
ONBOOT=yes
IPADDR=172.16.58.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

调整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

5.测试验证

在客户端访问:http://172.16.58.180/ 确认能够正常访问


模拟故障切换
在主服务器关闭 keepalived 服务后再测试
systemctl stop keepalived

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

三、Keepalived脑裂以及解决方法

1.什么是脑裂

脑裂是指在高可用集群中,由于网络或通信故障,主节点和备节点之间失去了联系,导致备节点错误地认为主节点不可用,并接管主节点的服务或资源。然而,由于主节点实际上仍在运行,主备节点会同时服务同一资源(例如同一个虚拟 IP)。这会造成数据不一致、冲突或其他问题

2.经典场景

主备节点之间的网络故障:

例如由于某些网络设备或配置错误,主备节点之间的心跳通信被中断,备节点错误地认为主节点已经失效,导致它自己提升为主节点,同时主节点仍然在工作
双主状态:

两个节点都认为自己是主节点,导致服务同时在两台机器上运行

3.常见的问题

IP 冲突

当两个节点都试图绑定同一个虚拟 IP 时,会引起 IP 冲突
服务不一致

例如数据库服务的主备节点出现脑裂,可能导致数据不一致或损坏
资源竞争

多个节点对相同的资源同时进行操作,可能导致文件系统或存储崩溃等问题

4.解决方法

(1)使用强制优先级策略

Keepalived中的每个节点都有一个优先级(priority),主节点的优先级较高,备节点的优先级较

低。为了避免脑裂,可以确保:

当主节点恢复正常时,它能够优先成为主节点,而备节点自动退位

(2)增加VRRP心跳检测机制

Keepalived依赖心跳消息在主备节点之间交换状态信息,默认情况下每秒发送一次VRRP消息。如果主节点没有在一定时间内收到备节点的心跳消息,它会认为主节点已经失效,从而进行主备切换

(3)使用双主检测脚本(自定义检测)

可以编写自定义脚本,在检测到脑裂时自动关闭服务或阻止该节点继续提供服务,避免两个节点同时接管资源。可以通过 Keepalived 的 track script 功能来实现

#!/bin/bash
# 检查是否有另一个主节点

if ip addr show | grep -q "172.16.58.10"; then
    echo "VIP is already in use, shutting down keepalived"
    systemctl stop keepalived
fi

在Keepalived配置中插入此脚本

track_script {
    check_vip {
        script "/opt/check_vip.sh"
        interval 2
    }
}
相关推荐
会飞的爱迪生5 天前
centos7之LVS-DR模式传统部署
网络·lvs
会飞的爱迪生6 天前
centos7之LVS-TUNNEL模式
lvs·tunnel
IT-民工211109 天前
LVS Nginx HAProxy的优缺点
运维·nginx·lvs
会飞的爱迪生9 天前
centos7配置keepalive+lvs
lvs·keepalive
打败4049 天前
lvs知识点归纳
负载均衡·lvs
阳排10 天前
Virtuoso使用layout绘制版图、使用Calibre验证DRC和LVS
lvs·layout·版图·virtuoso·drc
mqiqe14 天前
Linux LVS详解
linux·运维·lvs
运维小白。。14 天前
企业级调度器 LVS
运维·服务器·lvs
happy_king_zi14 天前
高并发负载均衡——nginx与lvs
nginx·负载均衡·lvs
abandondyy19 天前
LVS+Keepalived
lvs