枣庄市网站建设_网站建设公司_后端工程师_seo优化
2025/12/27 17:48:29 网站建设 项目流程

文章目录

  • 前言
  • 一、keepalived概念和原理
    • 1、keepalived介绍
    • 2、vrrp工作原理
    • 3、keepalived主要模块
  • 二、脑裂问题和解决方案
    • 1、什么是脑裂
    • 2、原因
    • 解决策略
  • 三、LVS+keepalived部署
    • 1、环境准备
    • 2、通用操作(所有节点)
      • 2.1、关闭防火墙和selinux
      • 2.2、安装依赖包
    • 3、配置节点(DR)-keepalived
      • 3.1、配置主节点-keepalived
      • 3.2、配置备用节点-keepalived
      • 3.3、主备节点参数优化
    • 4、节点配置
      • 4.1、配置 VIP 到 lo 接口
      • 4.2、ARP 参数调整,避免MAC冲突
    • 5、启动服务
    • 6、测试
    • 7、小结
  • 总结


前言

上一章节介绍了LVS的部署,本文主要介绍keepalived和部署keepalived在LVS上的内容。
本文围绕 LVS+Keepalived 高可用负载均衡集群展开,先解析核心概念与 VRRP 原理,再阐述脑裂问题解决方案,最后提供从环境配置到测试验证的完整部署实操指南。


一、keepalived概念和原理

1、keepalived介绍

  • 基于 VRRP 协议实现高可用(HA)
  • 初衷是为 LVS 负载均衡提供高可用方案,后来支持其他服务(如 Nginx、MySQL 等)
  • 具体实现功能:
    1、LVS集群管理
    2、节点健康检查
    3、故障自动切换
    4、高可用vip接管

2、vrrp工作原理

3、keepalived主要模块

core : 核心进程、配置文件加载解析
vrrp : VRRP 协议实现,高可用
check : 健康检查,支持 TCP/HTTP/脚本检查

二、脑裂问题和解决方案

1、什么是脑裂

两个节点失去心跳连接,均认为对方挂掉
结果:
1、共享资源冲突
2、数据损坏(如数据库)

2、原因

  1. 心跳线故障(断线、老化)
    高可用服务器对之间心跳线链路发生故障,导致无法正常通信。如心跳线坏了(包括断了,老化)。
  2. 网卡/驱动故障
    因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)。
  3. 心跳网络设备故障
    因心跳线间连接的设备故障(网卡及交换机)。
  4. 仲裁机器异常
    因仲裁的机器出问题
  5. 防火墙阻挡 VRRP
    高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输。
  6. 配置不一致(virtual_router_id、优先级、实例名)
    Keepalive配置里同一 VRRP实例如果 virtual_router_id两端参数配置不一致也会导致裂脑问题发生。
  7. vrrp实例名字不一致、优先级一致。

解决策略

1、双心跳线冗余
添加冗余的心跳线,例如:双线条线(心跳线也HA),尽量减少“裂脑”发生几率。
2、磁盘锁(锁定共享资源)
正在服务一方锁住共享磁盘,“裂脑”发生时,让对方完全“抢不走”共享磁盘资源。但使用锁磁盘也会有一个不小的问题,如果占用共享盘的一方不主动“解锁”,另一方就永远得不到共享磁盘。现实中假如服务节点突然死机或崩溃,就不可能执行解锁命令。后备节点也就接管不了共享资源和应用服务。于是有人在HA中设计了“智能”锁。即:正在服务的一方只在发现心跳线全部断开(察觉不到对端)时才启用磁盘锁。平时就不上锁了。
3、仲裁机制(Ping 参考 IP)
例如设置参考IP(如网关IP),当心跳线完全断开时,2个节点都各自ping一下参考IP,不通则表明断点就出在本端。不仅“心跳”、还兼对外“服务”的本端网络链路断了,即使启动(或继续)应用服务也没有用了,那就主动放弃竞争,让能够ping通参考IP的一端去起服务。更保险一些,ping不通参考IP的一方干脆就自我重启,以彻底释放有可能还占用着的那些共享资源。
4、脚本监控报警

三、LVS+keepalived部署

1、环境准备

主 DR:192.168.10.103(MASTER)
备 DR:192.168.10.104(BACKUP)
VIP:192.168.10.180
Web 节点:
192.168.10.101
192.168.10.102
客户端:192.168.10.2

2、通用操作(所有节点)

2.1、关闭防火墙和selinux

# 关闭防火墙和增强服务
systemctl stop firewalld
setenforce 0
# 永久关闭SELinux(需重启)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

2.2、安装依赖包

主 / 备 LVS 节点:安装 keepalived、ipvsadm和加载ip_vs

# 下载安装keepalived
yum -y install ipvsadm keepalived
# 加载lvs模块
modprobe ip_vs
cat /proc/net/ip_vs # 检查模块

后端 RealServer:安装 httpd或nginx(用于测试负载均衡)

yum install -y httpd && systemctl enable httpd

如果需要使用nginx可以看之前的nginx编译安装流程。当然也可以yum install -y nginx(不推荐,更新、模块、安装路径无法控制)

3、配置节点(DR)-keepalived

3.1、配置主节点-keepalived

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
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
interface ens33
virtual_router_id 10
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass abc123
}
virtual_ipaddress {
192.168.10.180/32
}
}
virtual_server 192.168.10.180 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.10.101 80 {
weight 1 # 服务器的权重
# 对后端服务器的TCP 层健康检查.(检测 80 端口是否存活)
TCP_CHECK {
connect_port 80 # 检查的端口(后端 HTTP 服务端口)
connect_timeout 3 # 连接超时时间(3 秒)
nb_get_retry 3 # 连接失败时的重试次数(3 次)
delay_before_retry 3 # 重试间隔(3 秒)
}
}
real_server 192.168.10.102 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}

3.2、配置备用节点-keepalived

vim /etc/keepalived/keepalived.conf

global_defs {
router_id LVS_02 # MASTER 为 LVS_01,BACKUP 为 LVS_02
smtp_server 127.0.0.1
}
vrrp_instance VI_1 {
state BACKUP # BACKUP 节点写 BACKUP
interface ens33
virtual_router_id 10
priority 90 # MASTER 高于 BACKUP
advert_int 1
authentication {
auth_type PASS
auth_pass abc123
}
virtual_ipaddress {
192.168.10.180/32
}
}
virtual_server 192.168.10.180 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.10.101 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.10.102 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}

3.3、主备节点参数优化

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、节点配置

4.1、配置 VIP 到 lo 接口

cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
# 内容
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255
ifup lo:0
ifconfig lo:0
route add -host 192.168.10.180 dev lo:0

4.2、ARP 参数调整,避免MAC冲突

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、启动服务

测试页面写入内容

# 192.168.10.101
echo 'this is 192.168.10.101 web01!' > /var/www/html/index.html
# 192.168.10.102
echo 'this is 192.168.10.102 web02!' > /var/www/html/index.html

启动服务

systemctl restart httpd # rs节点
systemctl restart nginx # rs节点
systemctl restart keepalived # 主备节点

6、测试

主节点启动keepalived正常显示如下:
在这里插入图片描述
备节点启动keepalived正常显示如下:
在这里插入图片描述

7、小结

1、VIP
DR 节点配置 VIP 网卡 ens33:0,Web 节点配置 lo:0
2、抢占模式
MASTER 恢复会抢回 VIP,非抢占模式需配置 nopreempt
3、健康检查
Keepalived 支持 TCP/HTTP 检查,可防止故障节点被调度
4、防火墙
Firewalld 需关闭,确保 VRRP 心跳消息畅通
5、脑裂防护
双心跳线、磁盘锁、仲裁 IP、脚本监控


总结

本文通过标准化部署流程与参数优化,实现了 LVS+Keepalived 集群的负载均衡与故障自动切换,规避脑裂风险,为业务高可用提供可靠实操方案。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询