当前位置: 首页 > news >正文

从零开始搭建 LVS 高性能集群 (DR模式)

从零开始搭建 LVS 高性能集群 (DR模式)

架构

lvs-dr

本设计方案采用三台服务器构建集群,使用Linux Virtual Server (LVS) 作为负载均衡器,运行在直接路由 (DR) 模式下。集群中的每一台服务器都将运行相同的服务,以实现 高可用性可扩展性LVS 将作为前端节点,接收所有进入的请求,并将它们分发到后端服务器。

流程

配置三台服务器,安装必要的操作系统和软件。

  • 关闭防火墙: systemctl disable firewalld
  • 系统支持 lvs
  • 安装 ipvsadm
  1. 在一台服务器上安装并配置 LVS,设置为直接路由模式。
  2. 在另外两台服务器上部署相同的应用服务。
  3. 配置 LVS 规则,将流量分发到后端服务器。
  4. 使用 ApacheBench (ab) 作为压测工具,对集群进行性能测试。

各服务功能

  • LVS 节点:作为集群的前端负载均衡器,负责接收客户端请求并分发到后端服务器。
  • 后端服务器:运行应用服务,处理来自 LVS 的请求。
  • ab 工具:用于生成高并发请求,测试集群的性能。

部署

在三台服务器上安装 Linux 操作系统,并确保网络配置正确。

  1. LVS 节点上安装 LVS 软件包。
  2. 在后端服务器上部署应用服务,并确保服务可以正常运行。
  3. 配置 LVS 规则,包括 虚拟IP 地址、后端服务器的IP地址和端口等。
  4. 配置网络,确保 LVS 节点和后端服务器之间可以正常通信。
  5. 使用 ab 工具在客户端机器上对集群进行压力测试。

文件目录

.
├── director-dr.sh
├── director-nat.sh
├── director-tunl.sh
├── README.en.md
├── README.md
└── realsever-dr.sh

Director 节点上运行director-dr.sh

#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forwardipv=/sbin/ipvsadmvip=192.168.152.131rs1=192.168.152.129
rs2=192.168.152.133ifconfig ens33:0 down
ifconfig ens33:0 $vip broadcast $vip netmask 255.255.255.0 up
route add -host $vip dev ens33:0$ipv -C
$ipv -A -t $vip:80 -s rr
$ipv -a -t $vip:80 -r $rs1:80 -w 1 -g
$ipv -a -t $vip:80 -r $rs2:80 -w 1 -g

查看部署结果

# vip ens33:0 是否成功创建成功 
[root@localhost lvs]# ip a
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:02:6a:99 brd ff:ff:ff:ff:ff:ffinet 192.168.152.128/24 brd 192.168.152.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet 192.168.152.131/24 brd 192.168.152.131 scope global secondary ens33:0 # vip 创建成功valid_lft forever preferred_lft foreverinet6 fe80::c4cc:bc59:19a3:dc4c/64 scope link noprefixroute valid_lft forever preferred_lft forever# 查看是否创建 lvs: dr 模式成功
[root@localhost lvs]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.152.131:80 rr-> 192.168.152.129:80           Route   1      0          0         -> 192.168.152.133:80           Route   1      0          0 

RealServer 上分别运行 realserver.sh

#!/bin/bash
vip=192.168.152.131ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

查看部署结果

[root@master lvs]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet 192.168.152.131/32 brd 192.168.152.131 scope global lo:0 # vip 部署 lo:0 成功valid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever# docker创建nginx nginx:1.23.0-alpine 自带netstat 容器统计 负载数
[root@master lvs]# docker run --name nginx -d -p 80:80 nginx:1.23.0-alpine

压测

使用 Jemterab 进行压力测试。

1. 监听Drector lvs负载

# 在 director 上执行
[root@localhost lvs]# watch ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.152.131:80 rr-> 192.168.152.129:80           Route   1      0          0         -> 192.168.152.133:80           Route   1      0          0 

2. ab模拟负载进行连接

# 非 lvs 集群的主机进行执行ab -n 50000 请求数 -c 20000 并发
ab -n 50000 -c 20000 http://192.168.152.131/

3. 统计RealServer负载

# rs1 统计nginx的负载数
[root@master lvs]# docker exec -it openui-nginx netstat -nat|grep :80|wc -l
2
# rs2 统计nginx的负载数
[root@master lvs]# docker exec -it openui-nginx netstat -nat|grep :80|wc -l
2

压测结果

# Director
Every 2.0s: ipvsadm -Ln                                                                                                                                         Fri Aug 16 02:06:02 2024IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.152.131:80 rr-> 192.168.152.129:80           Route   1	 10001          25000-> 192.168.152.133:80           Route   1	 9999           24992# RS 1
[root@master lvs]# docker exec -it openui-nginx netstat -nat|grep :80|wc -l
25002# RS 2
[root@master lvs]# docker exec -it openui-nginx netstat -nat|grep :80|wc -l
25002

优劣势

优势:

  • 高可用性:通过 LVS 实现的负载均衡可以提高系统的可用性。
  • 可扩展性:可以轻松添加更多的后端服务器来扩展集群。
  • 性能LVSDR 模式提供了高性能的负载均衡能力。
  • 成本效益:使用开源软件,减少了成本。

劣势:

  • 复杂性:配置 LVS 和后端服务器可能相对复杂。
  • 单点故障LVS 节点作为单点,如果出现故障,可能会影响整个集群。
  • 资源消耗LVS 节点需要足够的资源来处理负载均衡任务。
  • 性能测试:使用 ab 工具可以模拟大量并发请求,帮助评估集群的性能。

监控和日志:集成监控系统来监控集群状态,并记录日志以便于问题排查。

通过综合考虑这些因素,可以设计并实现一个高效、可靠且易于维护的基于 LVS 的集群系统。通过使用 DR 模式,我们能够实现高性能的负载均衡,同时通过 ab 工具进行性能测试,确保系统满足预期的性能要求。

ISSUE

  1. Director 节点端口连接数不足
    永久修改端口范围 net.ipv4.ip_local_port_range = 1024 65535

  2. windows 执行ab,报错: 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作
    修改windows 端口范围

netsh int ipv4 set dynamicport tcp start=5001 num=60535 reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "TcpTimedWaitDelay" /t REG_DWORD /d 30 /f

项目地址

gitee

参考博客

Jmeter性能测试
linux如何查看系统端口范围
Linux添加虚拟网卡的多种方法
LVS原理详解以及部署
就是要你懂负载均衡–lvs和转发模式
connect failed error 10055 由于系统缓冲区空间不足

相关文章:

从零开始搭建 LVS 高性能集群 (DR模式)

从零开始搭建 LVS 高性能集群 &#xff08;DR模式&#xff09; 架构 本设计方案采用三台服务器构建集群&#xff0c;使用Linux Virtual Server (LVS) 作为负载均衡器&#xff0c;运行在直接路由 (DR) 模式下。集群中的每一台服务器都将运行相同的服务&#xff0c;以实现 高可用…...

Linux环境开发工具【yum与vim】

&#x1f308;个人主页&#xff1a;Yui_ &#x1f308;Linux专栏&#xff1a;Linux &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;数据结构专栏&#xff1a;数据结构 文章目录 1.Linux软件包管理器yum1.1 快速使用yum 2. Linux编辑器-vim的使用2.1 vim的基本…...

laravel GuzzleHttp Client 无法获取返回的错误信息

Client发送一些请求&#xff0c;当返回状态不是200的时候&#xff0c;无法获取完整错误信息 $client new Client([base_uri > $this->getUri()./order/aaaaaa,timeout > 30,verify > false]);try {$response $client->request(POST, , [headers > [Lang&g…...

XMOS 多路音频解码器

当谈及高性能音频解码器&#xff0c;XMOS 是一个不容忽视的名字。作为音频解决方案领域的领军者&#xff0c;XMOS 的多路音频解码器在音频处理技术中扮演着至关重要的角色。下面我们一起深入探讨 XMOS 多路音频解码器去了解这一技术的魅力。 设计背景&#xff1a;追求音频极致…...

XSS小游戏(题目+解析)

xss题目练习地址&#xff1a; xss小游戏 游戏界面 一、Ma Spaghet! 我将题目要求进行翻译: 题目的主要要求就是&#xff1a;弹出一个&#xff08;1337&#xff09;的弹窗 开始解题&#xff1a; Let’s Go! 首先&#xff0c;传个参数看看 发现参数直接显示在了 < h2 >…...

《Redis核心技术与实战》学习笔记4——AOF日志:宕机了,Redis如何避免数据丢失?

文章目录 AOF 日志是如何实现的&#xff1f;三种写回策略 日志文件太大了怎么办&#xff1f;AOF 重写会阻塞吗?小结 大家好&#xff0c;我是大白。 如果有人问你&#xff1a;“你会把 Redis 用在什么业务场景下&#xff1f;”我想你大概率会说&#xff1a;“我会把它当作缓存使…...

NextJs - 服务端/客户端组件之架构多样性设计

NextJs - 服务端/客户端组件之架构多样性设计 前言一. 架构设计1.1 SSR流式渲染常见错误设计之 - 根页面同步阻塞1.2 架构设计之 - 客户端组件依赖于服务端组件数据① 使用 Redux 完成数据共享 1.3 架构设计之 - 单页内的分步骤跳转① 如何做到服务端组件和客户端组件之间的切换…...

使用 Python 进行 PDF 文件加密

使用 Python 解密加密的 PDF 文件-CSDN博客定义一个名为的函数&#xff0c;该函数接受三个参数&#xff1a;输入的加密 PDF 文件路径input_pdf、输出的解密 PDF 文件路径output_pdf和密码password。https://blog.csdn.net/qq_45519030/article/details/141256661 在数字化时代…...

Spring Boot集成RabbitMQ

目录 1.RabbitMQ简介2.添加依赖3.配置RabbitMQ连接4.DirectExchange4.1 消费者4.2 生产者4.3 测试4.4 一个交换机对多个队列4.5 一个队列对多个消费者 5.FanoutExchange5.1 消费者5.2 生产者5.3 测试 6.TopicExchange6.1 消费者6.2 生产者 1.RabbitMQ简介 RabbitMQ是一个由Erl…...

OLED屏幕制造工艺流程

OLED屏幕制造工艺流程是一个复杂且精细的过程&#xff0c;涉及多个关键步骤以确保最终的显示效果和性能。以下是OLED屏幕制造工艺流程的主要步骤&#xff1a; 1. 衬底制作与准备 材料选择&#xff1a;OLED器件需要一个透明的导电衬底&#xff0c;通常使用玻璃或塑料材料。 清…...

knowLedge-VueCLI项目中环境变量的定义与使用

1. env 1.1简介 在 Vue CLI 创建的项目中&#xff0c;你可以通过 .env 文件来定义环境变量。Vue CLI 支持多种 .env 文件&#xff0c;它们根据文件名中的前缀来决定何时加载和使用这些环境变量。 以下是一些常见的 .env 文件及其用途&#xff1a; .env&#xff1a;在任何环境…...

【C#】 接口 继承

简介 继承是面向对象编程的核心特性之一&#xff0c;它允许我们创建一个类&#xff08;称为子类&#xff09;来继承另一个类&#xff08;称为基类&#xff09;的属性和方法。 作用 这样&#xff0c;我们可以重用代码&#xff0c;减少重复&#xff0c;并使我们的代码更加模块…...

Self-Supervised Learning(李宏毅老师系列)

自学参考&#xff1a; BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding BERT 论文逐段精读 视频课 课件资料 笔记 一、概述 自监督学习模型与芝麻街~ 参数量 ELMO&#xff1a;94MBERT&#xff1a;340MGPT-2&#xff1a;1542MMegatron&…...

8月16日笔记

只有DNS协议出网场景 DNS 协议是一种请求、应答协议&#xff0c;也是一种可用于应用层的隧道技术。DNS 隧道的工作原理很简单&#xff0c;在进行 DNS 查询时&#xff0c;如果查询的域名不在 DNS 服务器本机缓存中&#xff0c;就会访问互联网进行查询&#xff0c;然后返回结果。…...

苹果Mac电脑——装macOS和Windows双系统的方法

一、实验环境 在Windows系统电脑上制作MacOS启动U盘。准备一个大于16G的U盘。 二、实验步骤 2.1 在Windows系统电脑上制作MacOS启动U盘 MacOS镜像下载 在Windows系统电脑上制作MacOS启动U盘的方法 2.2 U盘插上苹果电脑&#xff0c;安装macOS系统 U盘插上苹果电脑&#xf…...

【C++ 面试 - 基础题】每日 3 题(十五)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…...

数学建模学习笔记

数学建模学习笔记 现学现卖&#xff0c;随缘更新QwQ 主要根据b站大师兄的视频整理而成&#xff0c;有不懂的可以去看原视频 List 数学建模学习笔记一、 层次分析法1.1 矩阵的一致性及其检验1.2 权重计算1.3 具体流程 二、模糊综合评测2.1 隶属函数2.2 隶属函数的确定方法2.3 模…...

个人可识别信息(PII) AI 去除 API 数据接口

个人可识别信息(PII) AI 去除 API 数据接口 ai / 隐私保护 基于 AI 模型自动去除个人识别信息&#xff08;PII&#xff09; 个人信息保护 / AI 模型 。 1. 产品功能 基于自有专业模型进行 PII 自动去除高效处理敏感信息全接口支持 HTTPS&#xff08;TLS v1.0 / v1.1 / v1.2 /…...

【Python-办公自动化】1秒提取PPT文本内容形成目录保存至WORD

欢迎来到"花花 Show Python",一名热爱编程和分享知识的技术博主。在这里,我将与您一同探索Python的奥秘,分享编程技巧、项目实践和学习心得。无论您是编程新手还是资深开发者,都能在这里找到有价值的信息和灵感。 自我介绍: 我热衷于将复杂的技术概念以简单易懂…...

maven介绍与安装

一. maven概述 1. 关于项目依赖的jar包管理 问题描述&#xff1a; 直接在每个项目的lib文件夹中复制jar包会导致多个问题&#xff0c;包括jar包的重复存放、版本冲突以及手动管理带来的不便和错误。 问题分析&#xff1a; 重复存放&#xff1a;每个项目都保存一份相同的jar…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...