高可用和负载均衡架构(LVS DR模式,keepalived高可用,LVS NAT模式,Pacemaker高可用)

📅 2026/7/26 6:55:38 👁️ 阅读次数 📝 编程学习
高可用和负载均衡架构(LVS DR模式,keepalived高可用,LVS NAT模式,Pacemaker高可用)

目录

修改静态网卡配置:

防火墙关闭和禁止开机自启

LVS负载架构

LVS DR模式

VS调度器配置

在vs(server1)安装ipvsadm

创建虚拟IP(VIP)

添加虚拟服务

向虚拟服务添加真实服务器RS

RS真实服务器配置(用server2举例,server3同理)

在server2安装apache服务:

rs也需要添加vip

arptables

测试

keepalived高可用

master配置(server1)

backup配置(server4)

测试

LVS NAT模式

server1配置

双网卡

开启路由机制

加载 nat 模块

加载 lvs规则

RS(真实服务器)配置

测试

Pacemaker高可用

主机配置免密

配置ntp时间同步

安装集群软件

启动pcsd服务

两台机器分别设置 hacluster 相同密码

确认两台服务器 pcsd 服务正常运行

配置corosync

重新执行集群认证(server1 执行)

启动集群

校验集群

创建集群资源

节点失效备援


修改静态网卡配置:

  • vim /etc/sysconfig/network-scripts/ifcfg-eth0

参数修改:

  • BOOTPROTO="static或者none"(dhcp为动态获取)改为静态
  • IPADDR="192.168.239.xxx"
  • NETMASK="255.255.255.0" /NETMASK="24"
  • GATEWAY="192.168.239.2" #默认网关
  • DNS1="192.168.239.2" #首选DNS服务器

重载网卡:

  • ifdown eth0
  • ifup eth0

nmcli 命令行直接修改网络nmcli connection modify),不需要手动改配置文件,改完直接up即可,磁盘文件会自动同步写入

防火墙关闭和禁止开机自启

用firewalld防火墙举例:

systemctl status firewall #查看状态

systemctl stop firewalld #关闭防火墙

systemctl disable firewalld #禁止开机自启

具体可以看我的博客,下面是链接:

iptables和firewalld防火墙简介和操作

LVS负载架构

LVS(Linux Virtual Server)内核四层负载均衡,基于IPVS,工作在传输层(TCP/UDP),核心四种模式:NAT、DR、TUN、FULLNAT

术语约定: VS:调度器(Director)

RS:后端真实服务器(Real Server)

VIP:虚拟 IP(对外访问地址)

RIP:真实服务器内网 IP

DIP:调度器后端内网 IP

准备四台主机,一台VS,两台RS,一台测试

主机名IPVIP角色
server1192.168.239.132192.168.239.100调度器(VS)
server2192.168.239.133192.168.239.100真实服务器(RS)
server3192.168.239.134192.168.239.100真实服务器(RS)
server4192.168.239.135测试机

四台主机间进行域名解析

  • vim /etc/hosts

LVS DR模式

VS调度器配置

ipvsadm 是 Linux 下用于管理 IPVS(IP Virtual Server,IP 虚拟服务器) 的命令行工具,主要用于构建 LVS(Linux Virtual Server)负载均衡集群。它允许管理员配置和管理虚拟服务、真实服务器(后端节点)以及负载均衡策略。

在vs(server1)安装ipvsadm

[root@server1 ~]# yum install -y ipvsadm

创建虚拟IP(VIP)

选用连接不了的IP地址作为VIP,这里使用使用192.168.239.100

可以选用其他IP,但需要ping一下是否成功,若失败则该IP可作为VIP

添加vip

  • [root@server1 ~]# ip addr add 192.168.239.100/24 dev eth0

此时VIP添加成功,用server4 ping 192.168.239.100(VIP)发现可以成功

添加虚拟服务

参数解释:

-A:添加虚拟服务

-t:指定 TCP 协议的虚拟服务(格式:VIP:端口)

其他协议:-u(UDP)、-f(防火墙标记,用于复合协议)

-s:指定负载均衡调度算法,常用算法:

rr:轮询(Round Robin)

wrr:加权轮询(Weighted RR)

lc:最少连接(Least Connections)

wlc:加权最少连接(Weighted LC)

sh:源地址哈希(Source Hash,会话保持)

dh:目标地址哈希(Destination Hash)

[root@server1 ~]# ipvsadm -A -t 192.168.239.100:80 -s rr

虚拟服务添加成功

向虚拟服务添加真实服务器RS

参数解释:

-a:添加真实服务器

-t:指定关联的虚拟服务(需与添加虚拟服务时的 -t 一致)

-r:指定真实服务器地址(格式:RIP:端口)

转发模式(必选其一):

-g:DR 模式(Direct Routing,直接路由,性能最优)

-m:NAT 模式(Network Address Translation,网络地址转换)

-i:TUN 模式(IP Tunneling,IP 隧道,跨网段场景)

-w:指定权重(值越大,分配的请求越多,仅用于加权算法)

[root@server1 ~]# ipvsadm -a -t 192.168.239.100:80 -r 192.168.239.133:80 -g

[root@server1 ~]# ipvsadm -a -t 192.168.239.100:80 -r 192.168.239.134:80 -g

保存和恢复配置

# 保存当前配置到文件(默认路径:/etc/sysconfig/ipvsadm)

  • ipvsadm-save > /etc/sysconfig/ipvsadm

# 从文件恢复配置

  • ipvsadm-restore < /etc/sysconfig/ipvsadm

系统重启后配置会丢失,需保存并设置开机自动恢复(通常通过 systemctl enable ipvsadm 实现)

RS真实服务器配置(用server2举例,server3同理)

在server2安装apache服务:
  • yum install -y httpd
  • [root@server2 ~]# echo server2 > /var/www/html/index.html

设置开机自启:

  • systemctl enable --now httpd

rs也需要添加vip
  • [root@server2 ~]# ip a a 192.168.239.100/24 dev eth0
arptables

arptables是 Linux 用户空间工具,用于操作ARP 报文过滤规则,工作在二层 ARP 协议(以太网 ARP)

内核模块:arptables_filter作用:管控ARP 请求 / 应答报文,实现:ARP 防火墙、防 ARP 欺骗、静态 ARP 绑定、屏蔽非法 ARP 广播。

安装arptables

  • [root@server2 ~]# yum install arptables

查看规则

# 查看所有链的规(详细信息)

  • arptables -L -n

添加规则

  • [root@server2 ~]# arptables -A INPUT -d 192.168.239.100 -j DROP

-A INPUT:向INPUT链添加一条规则

-d192.168.239.100匹配目的IP为192.168.239.100的arp包

-j DROP:对匹配的报文执行丢弃操作

  • [root@server2 ~]# arptables -A OUTPUT -s 192.168.239.100 -j mangle --mangle-ip-s 192.168.239.133
  1. AOUTPUT:向 OUTPUT 链(本机发出的 ARP 报文)添加一条规则。
  2. -s 192.168.36.100:匹配源 IP 为 192.168.239.100 的 ARP 报文(即本机以该 IP 发送的 ARP 包)。
  3. -j mangle:对匹配的报文执行 “修改” 操作
  4. --mangle-ip-s 192.168.239.133:试图将 ARP 报文中的源 IP 地址修改为 192.168.239.133。

保存和恢复规则

  • [root@server2 ~]# arptables-save > /etc/sysconfig/arptables
  • [root@server2~]# systemctl enable arptables


测试

  • curl 192.168.239.100 或者 for i in {1..10}; do curl 192.168.239.100; done

keepalived高可用

  • LVS VIP:192.168.239.100
  • LVS 主节点:server1(MASTER)
  • LVS 备节点:新增一台调度器(BACKUP,示例 IP 假设192.168.239.135
  • RealServer:
    • server2:192.168.239.133
    • server3:192.168.239.134

Keepalived 主配置文件默认路径为 /etc/keepalived/keepalived.conf,主、备节点配置差异主要在 state(角色)和 priority(优先级,数值越高越优先成为主节点)。

master配置(server1)

server1:

清除资源

[root@server1 ~]# ip a d 192.168.239.100/24 dev eth0

[root@server1 ~]# ipvsadm -C

安装高可用软件

[root@server1 ~]# yum install -y keepalived

  • vim /etc/keepalived/keepalived.conf

  • systemctl enable --now keepalived

设置开机重启并立即重启

查看资源是否就绪

测试keepalived对后端RS的健康检测

[root@server2 ~]# systemctl stop httpd

故障的RS会自动从调度列表中被摘除

192.168.239.133被摘除

再次启动服务

[root@server2 ~]# systemctl start httpd

backup配置(server4)

server4:

安装高可用软件

[root@server4 ~]# yum install -y keepalived

从server1拷贝配置文件,此时在server1操作:

[root@server1 ~]# scp /etc/keepalived/keepalived.conf server4:/etc/keepalived/

配置server4文件

server1 和 server4 是主备调度器,不能两台都是 MASTER

server4:需要改为state BACKUP同时检查priority(优先级),这里改为50,保证主节点优先级(100)数字更大

重启并设置开机自启

[root@server4 ~]# systemctl enable --now keepalived

测试

停止server1上服务

[root@server1 ~]# systemctl stopkeepalived.service

查看资源是否自动迁移到server4

测试成功

LVS NAT模式

NAT(Network Address Translation,网络地址转换)核心:调度器修改数据包 IP 地址实现转发。

  1. 客户端请求 → 目标 IP:VIP(调度器虚拟 IP)
  2. LVS 调度器接收报文,修改目标 IP 为后端 RS 真实 IP,转发给 RealServer
  3. RealServer 收到请求,回包必须经过调度器,RS 网关指向调度器内网 IP
  4. 调度器收到 RS 响应,修改源 IP 为 VIP,返回给客户端

调度器Director(双网卡)

eth0(对内内网):192.168.239.132 DIP

eth1(对外外网):192.168.10.132 VIP(公网虚拟IP)

默认网关写在 eth1 配置文件 GATEWAY=192.168.10.100

RealServer网关:192.168.239.132(调度器内网IP,NAT强制要求!)

RS1:192.168.239.133

RS2:192.168.36.134

server1配置

双网卡

调度器是双网卡:

  1. eth0(内网:192.168.239.132) ❌配置文件里不要写 GATEWAY
  2. eth1(外网:192.168.10.132) ✅唯一默认网关写在 eth1 配置文件内

绝对禁止 eth0、eth1 同时配置 GATEWAY,避免生成两条默认路由引发路由紊乱。

开启路由机制

vim/etc/sysctl.conf

net.ipv4.ip_forward = 1

执行命令生效

sysctl ­--p

加载 nat 模块

modprobe iptable_nat

注:如果不加载此模块,也可以在第一次访问时成功,但是会在再次访问时出现延迟过长,或访问超时现象

加载 lvs规则
  • ipvsadm -C ipvsadm -A -t 192.168.10.132:80 -s rr
  • ipvsadm -a -t 192.168.10.132:80 -r 192.168.239.133:80 -m
  • ipvsadm -a -t 192.168.10.132:80 -r 192.168.239.134:80 -m

RS(真实服务器)配置

RS(真实服务器)配置

在 LVS NAT 模式下,真实服务器(RS)的网关必须指向调度器的内网 IP(DIP)。这是 NAT 模式的核心要求。因为客户端请求经过调度器的 NAT 转换后,源 IP 会变成调度器的内网 IP。RS 处理完请求后,响应报文必须返回给调度器,由调度器将源 IP 改回 VIP,然后再返回给客户端。

配置步骤

  1. 1. 修改网卡配置文件:
    在两台 RS 服务器(server2: 192.168.239.133 和 server3: 192.168.239.134)上,编辑网卡配置文件,确保网关指向调度器的内网 IP(192.168.239.132)。

  1. 重启网络服务:
    修改配置后,重启网络服务使更改生效
systemctl restart network service network restart
  1. 验证网关配置:
    使用ip routeroute -n命令检查默认路由是否指向调度器。
# View the routing table ip route show # or route -n The expected output should contain a line similar to: default via 192.168.239.132 dev eth0

配置完成后,需要进行连通性测试:

  1. 从 RS 上 ping 调度器的内网 IP(192.168.239.132),确保网络连通。
  2. 从客户端访问 VIP(192.168.10.132:80),观察请求是否被正确转发到 RS。
  3. 在调度器上检查连接状态:使用ipvsadm -ln查看连接分发情况。

测试

访问地址: curl 192.168.10.132
观测现象
多次刷新页面,轮流出现 RS1 / RS2 页面(rr 轮询生效)

Pacemaker高可用

Pacemaker 是 Linux 环境下主流的 开源高可用集群管理工具,核心作用是通过监控集群节点和服务状态,实现 “故障自动检测与切换”,确保业务服务持续运行(即服务不中断)。它通常与 Corosync(负责集群通信与成员管理)配合使用,组成完整的高可用集群解决方案。

主机配置免密

下面是免密如何设置

SSH服务,SSH免密访问,scp和rsync命令(远程文件同步),systemd-journald服务(查找日志),systemd-journald 日志持久化-CSDN博客

配置ntp时间同步

配置时间同步(使用阿里云时间)
修改 Chrony 时间同步服务,使用阿里云时间服务器
vim /etc/chrony.conf
注释原有默认服务器,添加阿里云时间源:server ntp1.aliyun.com ibursh


timedatectl 命令的作用:
查看系统当前时间、时区
确认 NTP service: active,表示时间同步服务已启用

安装集群软件

[root@server1 ~]# yum install -y pacemaker pcs psmisc policycoreutils-python

[root@server4 ~]# yum install -y pacemaker pcs psmisc policycoreutils-python

启动pcsd服务

[root@server1 ~]#systemctl enable --now pcsd.service

[root@server4 ~]#systemctl enable --now pcsd.service

[root@server1 ~]#echoredhat| passwd --stdin hacluster

[root@server4 ~]#echoredhat| passwd --stdin hacluster

两台机器分别设置 hacluster 相同密码
echo "redhat" | passwd --stdin hacluster
确认两台服务器 pcsd 服务正常运行

两边都执行:

systemctl restart pcsd systemctl status pcsd

状态必须显示active (running)

配置corosync

重新执行集群认证(server1 执行)
pcs cluster auth server1 server4

输入用户名:hacluster密码:redhat

server1: Authorized server4: Authorized

[root@server1 ~]# pcs cluster setup --name mycluster server1 server4

启动集群

[root@server1 ~]# pcs cluster start --all

[root@server1 ~]# pcs cluster enable --all

校验集群

[root@server1 ~]# crm_verify -L -V

[root@server1 ~]# pcs property set stonith-enabled=false

[root@server1 ~]# pcs status

创建集群资源

[root@server1 ~]# pcs resource create vip ocf:heartbeat:IPaddr2 ip=192.168.239.100 op monitor interval=30s

手动移除server1上的vip后,集群会自动检测并修复

[root@server1 ~]# ip a d 192.168.239.100/24 dev eth0

节点失效备援

[root@server1 ~]# pcs node standby

server1失效后资源自动迁移至server4

恢复server1

[root@server1 ~]# pcs node unstandby