LVS+Keepalived

一、概念与原理

1.Keepalived

基于 VRRP 协议实现高可用(HA)。初衷是为 LVS 负载均衡提供高可用方案,后来支持其他服务(如 Nginx、MySQL 等)。

功能:

LVS 集群管理

节点健康检查(Health Check)

Keepalive可以通过在自身的Keepalive.conf文件里配置LVS的节点IP和相关参数实现对LVS 的直接管理;除此之外,当LVS集群中的某一个甚至是几个节点服务器同时发生故障无法提供服务 时,Keepalive服务会自动将失效的节点服务器从LVS的正常转发队列中清除出去,并将请求调度 到别的正常节点服务器上,从而保证最终用户的访问不受影响;当故障的节点服务器被修复以后, Keepalive服务又会自动地把它们加入到正常转发队列中,对客户提供服务。

故障自动切换(Failover)

Keepalive可以实现任意两台主机之间,例如Master和Backup主机之间的故障转移和自动切换, 这个主机可以是普通的不能停机的业务服务器,也可以是LVS负载均衡,Nginx反向代理这样的服 务器。

Keepalive高可用功能实现的简单原理为,两台主机同时安装好Keepalive软件并启动服务,开 始正常工作时,由角色为Master的主机获得所有资源并对用户提供服务,角色为Backup的主机作 为Master主机的热备;当角色为Master的主机失效或出现故障时,角色为Backup的主机将自动 接管Master主机的所有工作,包括接管VIP资源及相应资源服务;而当角色为Master的主机故障 修复后,又会自动接管回它原来处理的工作,角色为Backup的主机则同时释放Master主机失效时 它接管的工作,此时,两台主机将恢复到最初启动时各自的原始角色及工作状态。

高可用 VIP(虚拟 IP)接管

2.VRRP 工作原理

MASTER 节点发送心跳(通告)给 BACKUP 节点。BACKUP 节点收不到心跳时,接管 VIP。MASTER 恢复时,可抢回 VIP(抢占模式)或不抢回(非抢占模式)。默认多播地址:224.0.0.18

优先级决定 MASTER 节点(数值越大优先)。

3.Keepalived 主要模块

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

二、脑裂问题与防护

1. 脑裂(Split Brain)

1.脑裂(Split Brain)

两个节点失去心跳连接,均认为对方挂掉。

后果:共享资源冲突。 数据损坏(如数据库)

在高可用(HA)系统中,当联系2个节点的"心跳线"断开时,本来为一整体、动作协调的HA系统,就分裂成为 2个独立的个体。由于相互失去了联系,都以为是对方出了故障。两个节点上的HA软件像"裂脑人"一样,争抢 "共享资源"、争起"应用服务",就会发生严重后果------或者共享资源被瓜分、2边"服务"都起不来了;或者2边 "服务"都起来了,但同时读写"共享存储",导致数据损坏(常见如数据库轮询着的联机日志出错)。

2. 原因:

1.心跳线故障(断线、老化)。高可用服务器对之间心跳线链路发生故障,导致无法正常通信。如心跳线坏了(包括断开,老化)。

2.网卡/驱动故障

​ 因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)

3.心跳网络设备故障

​ 因心跳线间连接的设备故障(网卡及交换机)。

4.仲裁机器异常

​ 因仲裁的机器出问题导致仲裁机器异常。

5.防火墙阻挡 VRRP

​ 高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输。

6.配置不一致(virtual_router_id、优先级、实例名)

​ Keepalive配置里同一 VRRP实例如果 virtual_router_id两端参数配置不一致也会导致裂脑问题发 生。

7.vrrp实例名字不一致、优先级一致

3. 防护策略

双心跳线冗余

添加冗余的心跳线,例如:双线条线(心跳线也HA),尽量减少"裂脑"发生几率。

磁盘锁(锁定共享资源)

正在服务一方锁住共享磁盘,"裂脑"发生时,让对方完全"抢不走"共享磁盘资源。但使用锁磁盘也 会有一个不小的问题,如果占用共享盘的一方不主动"解锁",另一方就永远得不到共享磁盘。现实 中假如服务节点突然死机或崩溃,就不可能执行解锁命令。后备节点也就接管不了共享资源和应用 服务。于是有人在HA中设计了"智能"锁。即:正在服务的一方只在发现心跳线全部断开(察觉不到 对端)时才启用磁盘锁。平时就不上锁了。仲裁机制(Ping 参考 IP)

仲裁机制(Ping 参考 IP)

例如设置参考IP(如网关IP),当心跳线完全断开时,2个节点都各自ping一下参考IP,不通则表明 断点就出在本端。不仅"心跳"、还兼对外"服务"的本端网络链路断了,即使启动(或继续)应用服 务也没有用了,那就主动放弃竞争,让能够ping通参考IP的一端去起服务。更保险一些,ping不通 参考IP的一方干脆就自我重启,以彻底释放有可能还占用着的那些共享资源。

脚本监控报警

三、部署步骤

1.环境准备

主 DR:192.168.10.80(MASTER)

备 DR:192.168.10.23(BACKUP)

VIP:192.168.10.180

Web 节点: 192.168.10.16 & 192.168.10.17

客户端:192.168.10.100

2.安装与配置 LVS + Keepalived

DR 服务器操作

systemctl stop firewalld

setenforce 0

yum -y install ipvsadm keepalived

modprobe ip_vs

cat /proc/net/ip_vs # 检查模块

配置 Keepalived

文件: /etc/keepalived/keepalived.conf

关键配置:

global_defs {

router_id LVS_01

smtp_server 127.0.0.1

}

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

}

}

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.16 80 {

weight 1

TCP_CHECK {

connect_port 80

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

real_server 192.168.10.17 80 {

weight 1

TCP_CHECK {

connect_port 80

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

}

VIP 配置:

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

DEVICE=ens33:0

ONBOOT=yes

IPADDR=192.168.10.180

NETMASK=255.255.255.255

重启网络

systemctl restart network

ifup ens33:0

启动服务

systemctl start keepalived

ip addr # 查看 VIP 是否生效

ipvsadm-save > /etc/sysconfig/ipvsadm

systemctl start ipvsadm

ipvsadm -ln # 查看 LVS 配置

内核参数优化

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

配置web节点

systemctl stop firewalld

setenforce 0

yum -y install httpd

systemctl start httpd

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

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

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

DEVICE=lo:0

ONBOOT=yes

IPADDR=192.168.10.180

NETMASK=255.255.255.255

service network restart

ifup lo:0

route add -host 192.168.10.180 dev lo:0

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

测试

客户端访问 VIP http://192.168.10.180/

停掉 MASTER Keepalived

systemctl stop keepalived

观察 BACKUP 节点接管 VIP 是否成功,再启动 MASTER,观察 VIP 是否回归(抢占或非抢占模式)。

相关推荐
可可苏饼干3 天前
LVS服务器
linux·运维·笔记·学习·lvs
zz-zjx3 天前
LVS NAT/DR 模式 负载均衡Keepalive 高可用+DR
网络协议·tcp/ip·lvs
ttthe_MOon3 天前
LVS-NAT 模式负载均衡集群部署与配置指南
运维·负载均衡·lvs
xingyue_S3 天前
LVS负载均衡群集(二)-- DR模式
运维·负载均衡·lvs
weixin_537765805 天前
【负载均衡】LVS DR模式详解
服务器·负载均衡·lvs
weixin_537765805 天前
【LVS高可用】Keepalived配置详解
lvs
邪恶喵喵5 天前
集群和LVS-NAT模式
lvs
xingyue_S7 天前
LVS负载均衡群集(一) -- NAT模式
运维·负载均衡·lvs
zz-zjx8 天前
LVS三种模式及调度算法解析
网络·lvs