当前位置: 首页 > 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…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

算法打卡第18天

从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7…...

高防服务器价格高原因分析

高防服务器的价格较高&#xff0c;主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因&#xff1a; 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器&#xff0c;因此…...

rm视觉学习1-自瞄部分

首先先感谢中南大学的开源&#xff0c;提供了很全面的思路&#xff0c;减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接&#xff1a;https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架&#xff1a; 代码框架结构&#xff1a;readme有…...

命令行关闭Windows防火墙

命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)​方法二:CMD命令…...

qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001

qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类&#xff0c;直接把源文件拖进VS的项目里&#xff0c;然后VS卡住十秒&#xff0c;然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分&#xff0c;导致编译的时候找不到了。因…...

鸿蒙Navigation路由导航-基本使用介绍

1. Navigation介绍 Navigation组件是路由导航的根视图容器&#xff0c;一般作为Page页面的根容器使用&#xff0c;其内部默认包含了标题栏、内容区和工具栏&#xff0c;其中内容区默认首页显示导航内容&#xff08;Navigation的子组件&#xff09;或非首页显示&#xff08;Nav…...