LVS-NAT 负载均衡群集

目录

简介

一、LVS 与群集技术基础

1.1 群集技术概述

1.2 负载均衡群集的分层结构

1.3 负载均衡工作模式

二、LVS 虚拟服务器核心组件与配置

2.1 LVS 内核模块与管理工具

2.2 负载调度算法解析

2.3 ipvsadm 管理工具实战

三、NFS 共享存储服务配置

3.1 NFS 服务基础配置

3.2 客户端访问 NFS 共享

四、案例:LVS-NAT 负载均衡群集

4.1 案例环境准备

4.2 配置负载调度器

4.3 配置真实服务器节点

4.4 测试 LVS 群集效果

五、总结


简介

在当今互联网应用场景中,单台服务器早已无法满足高并发、高可用的服务需求。LVS(Linux Virtual Server)作为 Linux 平台下的高性能负载均衡解决方案,通过整合多台服务器资源,以统一入口提供服务,成为企业构建高可用集群的核心技术之一。

一、LVS 与群集技术基础

1.1 群集技术概述

群集(Cluster)是一组服务器的集合体,对外表现为一个整体服务单元。根据目标不同,群集主要分为三类:

  • 负载均衡群集:提升系统响应能力,处理高并发请求(如 DNS 轮询、反向代理)
  • 高可用群集:确保服务连续性,减少中断时间(如双机热备、故障切换)
  • 高性能运算群集:整合计算资源,实现分布式运算(如云计算、网格计算)

1.2 负载均衡群集的分层结构

典型的负载均衡群集包含三个层次:

  1. 负载调度器:唯一入口,使用群集 IP(VIP),支持主备热备
  2. 服务器池:真实服务器(RIP)组成,处理调度器分发的请求
  3. 共享存储:确保各节点数据一致性,常用 NFS 或 NAS

1.3 负载均衡工作模式

LVS 支持三种核心工作模式:

  • NAT 模式(地址转换):调度器作为网关,服务器使用私有 IP,安全性高
  • TUN 模式(IP 隧道):服务器分散在公网,通过隧道与调度器通信
  • DR 模式(直接路由):服务器与调度器同网络,性能更高

二、LVS 虚拟服务器核心组件与配置

2.1 LVS 内核模块与管理工具

LVS 作为 Linux 内核模块(ip_vs),默认已编译。可通过以下命令加载并查看版本:

modprobe ip_vs  # 手动加载ip_vs模块
cat /proc/net/ip_vs  # 查看LVS模块版本信息

2.2 负载调度算法解析

LVS 提供多种调度算法,常用四种:

  • 轮询(RR):顺序分配请求,不考虑服务器负载
  • 加权轮询(WRR):按权重分配,性能高的节点承担更多请求
  • 最少连接(LC):将请求分配给连接数最少的节点
  • 加权最少连接(WLC):结合权重与连接数,动态调整分配

2.3 ipvsadm 管理工具实战

(1)安装 ipvsadm 工具

dnf install ipvsadm  # 在OpenEuler系统中安装ipvsadm管理工具
ipvsadm -v  # 查看ipvsadm版本信息

(2)创建虚拟服务器

ipvsadm -A -t 172.16.16.172:80 -s rr  # -A添加虚拟服务器,-t指定VIP和端口,-s指定轮询算法

(3)添加真实服务器节点

ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.21:80 -m -w 1  # -a添加真实服务器,-r指定RIP和端口,-m指定NAT模式,-w设置权重为1

(4)查看群集状态

ipvsadm -ln  # -l列表显示,-n以数字形式显示IP和端口,避免DNS解析

(5)保存与恢复策略

ipvsadm-save > /etc/sysconfig/ipvsadm  # 保存当前LVS策略到配置文件
systemctl start ipvsadm  # 启动ipvsadm服务,应用保存的策略

三、NFS 共享存储服务配置

3.1 NFS 服务基础配置

NFS(网络文件系统)用于群集节点间数据共享,基于 RPC 机制实现:

(1)安装 NFS 服务组件

yum -y install nfs-utils rpcbind  # 安装NFS服务和RPC支持组件
systemctl enable nfs-server rpcbind  # 设置服务开机自启动

(2)配置共享目录

vi /etc/exports  # 编辑NFS配置文件
# 添加以下内容(示例):
/opt/wwwroot 192.168.10.0/24(rw,sync,no_root_squash)  # 共享/opt/wwwroot目录给192.168.10.0/24网段,允许读写

(3)启动 NFS 服务

systemctl start rpcbind  # 先启动RPC服务
systemctl start nfs-server  # 再启动NFS服务
netstat -anpt | grep rpc  # 检查RPC相关端口是否正常监听

(4)查看共享目录

showmount -e  # 查看本机发布的NFS共享目录

3.2 客户端访问 NFS 共享

(1)客户端环境准备

yum -y install rpcbind nfs-utils  # 安装客户端所需组件
systemctl enable rpcbind  # 启用RPC服务并设置自启动
systemctl start rpcbind

(2)手动挂载 NFS 共享

mount 192.168.10.104:/opt/wwwroot /var/www/html  # 挂载NFS共享目录到本地路径
tail -1 /etc/mtab  # 确认挂载结果

(3)设置自动挂载

vi /etc/fstab  # 编辑fstab文件
# 添加以下内容:
192.168.10.104:/opt/wwwroot /var/www/html nfs defaults,_netdev 0 0  # _netdev参数表示设备依赖网络

四、案例:LVS-NAT 负载均衡群集

4.1 案例环境准备

主机

操作系统

IP 地址

应用

lvs

OpenEuler 24.03

192.168.10.101

ipvsadm(调度器)

web1

OpenEuler 24.03

192.168.10.102

Apache(真实服务器)

web2

OpenEuler 24.03

192.168.10.103

Apache(真实服务器)

nfs

OpenEuler 24.03

192.168.10.104

NFS(共享存储)

4.2 配置负载调度器

(1)开启路由转发

vi /etc/sysctl.conf  # 编辑系统参数配置文件
# 添加:
net.ipv4.ip_forward=1  # 启用IP转发功能
sysctl -p  # 立即生效配置

(2)配置 VIP 地址

ifconfig ens36 inet 192.168.74.129 netmask 255.255.255.0  # 为ens36网卡配置VIP地址
# 若网卡配置文件不存在,创建并编辑:
vi /etc/sysconfig/network-scripts/ifcfg-ens36
# 内容示例:
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
NAME=ens36
DEVICE=ens36
ONBOOT=yes
IPADDR=192.168.74.129
NETMASK=255.255.255.0

(3)配置 LVS 负载策略

ipvsadm -C  # 清除原有LVS策略
ipvsadm -A -t 192.168.74.129:80 -s rr  # 创建虚拟服务器,使用轮询算法
ipvsadm -a -t 192.168.74.129:80 -r 192.168.10.102:80 -m -w 1  # 添加真实服务器1,NAT模式,权重1
ipvsadm -a -t 192.168.74.129:80 -r 192.168.10.103:80 -m -w 1  # 添加真实服务器2,NAT模式,权重1
ipvsadm --save  # 保存LVS策略
systemctl enable ipvsadm  # 设置ipvsadm服务开机自启动

4.3 配置真实服务器节点

(1)设置网关指向调度器

route del default gw 192.168.10.254  # 删除原有默认网关
route add default gw 192.168.10.101  # 设置LVS调度器为新网关

(2)安装 Web 服务并配置

yum -y install httpd  # 安装Apache服务
mount 192.168.10.104:/opt/wwwroot /var/www/html  # 挂载NFS共享目录
vi /var/www/html/index.html  # 创建测试网页(不同节点可设置不同内容用于测试)
# 示例内容:
<h1>LVS负载均衡群集--节点1测试网页</h1>
systemctl start httpd  # 启动Apache服务
systemctl enable httpd  # 设置开机自启动

4.4 测试 LVS 群集效果

(1)查看 LVS 节点状态

ipvsadm -ln  # 查看LVS群集配置和节点状态
# 输出示例:
TCP 192.168.74.129:80 rr
->192.168.10.102:80 Masq 1 0 0
->192.168.10.103:80 Masq 1 0 0

(2)查看连接记录

ipvsadm -lnc  # 查看客户端连接详细信息

(3)浏览器访问测试

通过浏览器多次访问​​http://192.168.74.129​​,观察网页内容是否在不同节点间切换,验证负载均衡效果。

五、总结

LVS-NAT 模式作为最基础的负载均衡方案,通过地址转换实现请求分发,具有配置简单、安全性高的特点,适合中小规模应用场景。在实际生产环境中,可根据需求进一步扩展:

  1. 性能优化:切换至 DR 模式或 TUN 模式,提升吞吐量
  2. 高可用增强:结合 Keepalived 实现调度器热备
  3. 复杂场景:与 Docker、Kubernetes 等容器技术结合,构建弹性集群
  4. 监控体系:集成 Prometheus、Grafana 等工具,实时监控集群状态

LVS 作为 Linux 内核级的负载均衡方案,凭借其高效性和稳定性,在金融、电商、云计算等领域广泛应用。掌握 LVS 核心原理与配置,是构建高可用、可扩展服务架构的重要基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/85054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLaMaFactory - 支持的模型和模板 常用命令

一、 环境准备 激活LLaMaFactory环境&#xff0c;进入LLaMaFactory目录 cd LLaMA-Factoryconda activate llamafactory 下载模型 #模型下载 from modelscope import snapshot_download model_dir snapshot_download(Qwen/Qwen2.5-0.5B-Instruct) 二、启动一个 Qwen3-0.6B…

EDW2025|数据治理的神话破除——从误区到现实

在当今数据驱动的世界中&#xff0c;数据治理已成为企业成功的关键因素。然而&#xff0c;许多组织在实施数据治理时&#xff0c;常常被一些常见的误区所困扰。本文将逐一破除这些误区&#xff0c;揭示数据治理的真实面貌。 误区一&#xff1a;你需要一个大的预算&#xff01;…

AIGC与影视制作:技术革命、产业重构与未来图景

文章目录 一、AIGC技术全景&#xff1a;从算法突破到产业赋能1. **技术底座&#xff1a;多模态大模型的进化路径**2. **核心算法&#xff1a;从生成对抗网络到扩散模型的迭代** 二、AIGC在影视制作全流程中的深度应用1. **剧本创作&#xff1a;从“灵感枯竭”到“创意井喷”**2…

ReactJS 中的 JSX工作原理

文章目录 前言✅ 1. JSX 是什么&#xff1f;&#x1f527; 2. 编译后的样子&#xff08;核心机制&#xff09;&#x1f9f1; 3. React.createElement 做了什么&#xff1f;&#x1f9e0; 4. JSX 与组件的关系&#x1f504; 5. JSX 到真实 DOM 的过程&#x1f4d8; 6. JSX 与 Fr…

Spring Advisor增强规则实现原理介绍

Spring Advisor增强规则实现原理介绍 一、什么是 Advisor&#xff1f;1. Advisor 的定义与本质接口定义&#xff1a; 2. Advisor 的核心作用统一封装切点与通知构建拦截器链的基础实现增强逻辑的灵活组合 二. Sprin当中的实现逻辑1 Advisor 接口定义2 PointcutAdvisor 接口定义…

小程序32-简易双向数据绑定

在WXML中&#xff0c;普通属性的绑定是单向的&#xff0c;例如:<input value"{{value}}" /> 如果希望用户输入数据的同时改变data中的数据&#xff0c;可以借助简易双向绑定机制。在对应属性之前添加model:前缀即可: 例如<input model:value"{{value}…

Nginx网站服务:从入门到LNMP架构实战

&#x1f3e1;作者主页&#xff1a;点击&#xff01; Nginx-从零开始的服务器之旅专栏&#xff1a;点击&#xff01; &#x1f427;Linux高级管理防护和群集专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2025年5月30日14点22分 前言 说起Web服务器&#xff0c…

【maker-pdf 文档文字识别(包含ocr),安装使用完整教程】

安装环境 conda create -n maker-pdf python3.12 conda activate marker-pdf pip install modelscope pip install marker-pdf -U下载模型 from modelscope import snapshot_downloadmodel_root "models" snapshot_download("Lixiang/marker-pdf", loca…

C# 类和继承(所有类都派生自object类)

所有类都派生自object类 除了特殊的类object&#xff0c;所有的类都是派生类&#xff0c;即使它们没有基类规格说明。类object是唯 一的非派生类&#xff0c;因为它是继承层次结构的基础。 没有基类规格说明的类隐式地直接派生自类object。不加基类规格说明只是指定object为 基…

尚硅谷redis7 90-92 redis集群分片之集群扩容

90 redis集群分片之集群扩容 三主三从不够用了&#xff0c;进行扩容变为4主4从 问题&#xff1a;1.新建两个redis实例&#xff0c;怎么加入原有集群&#xff1f;2.原有的槽位分3段&#xff0c;又加进来一个槽位怎么算&#xff1f; 新建6387、6388两个服务实例配置文件新建后启…

尚硅谷-尚庭公寓部署文档

文章目录 整合版部署文档部署架构图1. 项目目录结构增加注释的 Dockerfile 配置(1) 后端服务1 Dockerfile (backend/service1/Dockerfile)(2) 后端服务2 Dockerfile (backend/service2/Dockerfile) Dockerfile 配置说明重要注意事项3. Nginx 配置(1) 主配置文件 (nginx/nginx.c…

Android Studio 介绍

如何关闭或彻底删除一个工程 基于Android Studio的android入门——如何关闭或彻底删除一个工程 搜索内容 Android Studio高效指南&#xff1a;快速查找技巧大揭秘 build命令&#xff1a;gradle app:assembleDebug 命令解析 1. 命令结构与作用 核心功能&#xff1a;该命令…

JAVA与C语言之间的差异(一)

一、代码习惯以及主函数 JAVA中{在使用的时候不要换行 public static void main(String[] args) {int[] array {1, 2, 3};for(int i 0; i < array.length; i){System.out.println(array[i] " ");}} 其次&#xff0c;以main函数为主函数&#xff1a; public …

华为OD机试真题——开放日活动/取出尽量少的球(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 200分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 本文收录于专栏:《2025华为OD真题目录+全流程解析/备考攻略/经验分享》 华为OD机试真题《开放…

我的3种AI写作节奏搭配模型,适合不同类型写作者

—不用内耗地高效写完一篇内容&#xff0c;原来可以这样搭配AI ✍️ 开场&#xff1a;为什么要“搭配节奏”写作&#xff1f; 很多人以为用AI写作&#xff0c;就是丢一句提示词&#xff0c;然后“等它写完”。 但你有没有遇到这些情况&#xff1a; AI写得很快&#xff0c;学境…

【知识点】第1章:程序设计基本方法

文章目录 知识点整理计算机的概念程序设计语言Python 语言概述Python 语言开发环境配置程序的基本编写方法 练习题简答题判断题 知识点整理 计算机的概念 计算机的定义&#xff1a;计算机是根据指令操作数据的设备。 计算机的两个基本特性&#xff1a; 功能性&#xff1a;计…

const ‘不可变’到底是值不变还是地址不变

const的基础规则 声明时必须初始化​ const a; // ❌ 报错&#xff1a;Missing initializer in const declaration const b 10; // ✅ 正确块级作用域​&#xff08;const 的作用域仅限于声明它的代码块&#xff09; if (true) {const x 100; } console.log(x); // ❌ 报错…

Netty 实战篇:为自研 RPC 框架加入异步调用与 Future 支持

我们在上篇实现了一个轻量级 RPC 框架&#xff0c;现在要进一步优化 —— 加入异步响应支持&#xff0c;让 RPC 通信变得真正高效、非阻塞、支持并发。 一、为什么需要异步调用&#xff1f; 上篇的 RPC 框架是“同步阻塞”的&#xff1a; 每次发送请求后&#xff0c;必须等待服…

for(auto a:b)和for(auto a:b)的区别

#include<iostream> using namespace std; int main() {string s( "hello world" );for (auto c:s)c t ;cout<<s<<endl; //结果为hello worldfor (auto &c:s)c t ;cout<<s<<endl; //结果为ttttttttttt }for(auto a:b)中b为一…

超级对话2:大跨界且大综合的学问融智学应用场景述评(不同第三方的回应)之二

摘要&#xff1a;《人机协同文明升维行动框架》提出以HIAICI/W公式推动认知革命&#xff0c;构建三大落地场景&#xff1a;1&#xff09;低成本认知增强神经接口实现300%学习效率提升&#xff1b;2&#xff09;全球学科活动化闪电战快速转化知识体系&#xff1b;3&#xff09;人…