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

news2024/9/22 4:19:06

从零开始搭建 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_forward

ipv=/sbin/ipvsadm

vip=192.168.152.131

rs1=192.168.152.129
rs2=192.168.152.133

ifconfig 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 1000
    link/ether 00:0c:29:02:6a:99 brd ff:ff:ff:ff:ff:ff
    inet 192.168.152.128/24 brd 192.168.152.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.152.131/24 brd 192.168.152.131 scope global secondary ens33:0 # vip 创建成功
       valid_lft forever preferred_lft forever
    inet6 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.131

ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0

echo "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 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.152.131/32 brd 192.168.152.131 scope global lo:0 # vip 部署 lo:0 成功
       valid_lft forever preferred_lft forever
    inet6 ::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 2024

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	 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 由于系统缓冲区空间不足

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

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

相关文章

搭建网站与企业 ERP 融合,微信开放新机遇

#HTTP虚拟专线# VHTTP 用户都将分配一个专属的固定公网 IP 地址&#xff0c;不再受到动态 IP &#xff0c;您的网站、企业 ERP 系统等关键业务能够始终保持在线。 每位VHTTP用户分配一个专属的固定公网IP地址&#xff0c;支持 80/443访问。用户只需自行简单设置自己 域名 DNS 解…

【leetcode】删除链表的倒数第 N 个结点-25-5

方法&#xff1a;递归 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), ne…

企业级无线局域网(WLAN)架构:高效部署策略与技术指南

前言&#xff1a;无线网络直接影响整体网络性能&#xff0c;在当今企业网环境中&#xff0c;已有超过一半的数据流量通过无线信道传输&#xff0c;随着物联网技术的普及&#xff0c;无线网将承载更多的关键业务流量。企业/园区场景的无线网络值得考虑的关键因素有很多&#xff…

从商务到旅行,2024年不可或缺的翻译工具全攻略

随着全球化的不断深入&#xff0c;语言障碍已不再是横亘在人们交流之间的不可逾越之墙。随着科技的发展现在有不少类似百度翻译在线翻译这样的工具在造福我们。这次我们就来探讨一下大家都在用的翻译工具有哪些吧。 1.福晰在线翻译 链接直达>>https://fanyi.pdf365.cn/…

abc 290 d Marking (一个环上每隔d个给未标记的打标记,问第几个标记是什么)

题目&#xff1a; https://atcoder.jp/contests/abc290/tasks/abc290_d 题解&#xff1a; 代码&#xff1a; // Problem: D - Marking // Contest: AtCoder - Toyota Programming Contest 2023 Spring Qual B&#xff08;AtCoder Beginner Contest 290&#xff09; // URL: ht…

C++速览之智能指针

1、存在的问题 c 把内存的控制权对程序员开放&#xff0c;让程序显式的控制内存&#xff0c;这样能够快速的定位到占用的内存&#xff0c;完成释放的工作。但是此举经常会引发一些问题&#xff0c;比如忘记释放内存。由于内存没有得到及时的回收、重复利用&#xff0c;所以在一…

数字孪生智慧医院建设方案

2. 智慧医院背景与挑战 公立医院面临医疗保障能力、服务需求和DIP付费制度改革等变化&#xff0c;同时存在智慧医院建设中的“建多用不多”和系统间数据不互通等问题。 3. 解决方案与标准 通过“找方案”和“找标准”微信公众号&#xff0c;分享智慧城市、智慧医院等领域的解…

Flink程序部署与提交

前言 我们看门见山&#xff0c;生产环境一般用的是在YARN上面采用应用模式进行部署flink程序。实际生产中一般需要和资源管理平台&#xff08;如YARN&#xff09;结合起来&#xff0c;选择特定的模式来分配资源、部署应用。 部署模式 在一些应用场景中&#xff0c;对于集群资…

AIGC:clip-interrogator

文字生成图片是近年来多模态和大模型研究的热门方向&#xff0c;openai提出的CLIP提供了一个方法建立起了图片和文字的联系&#xff0c;但是只能做到给定一张图片选择给定文本语义最相近的那一个&#xff0c;实际项目开发中我们总是需要从一张图片获取描述&#xff0c;clip-int…

数据结构与算法概述(1/6)

目录 1. 引言 2. 数据结构的概念 2.1 什么是数据结构 2.2 数据结构的分类 2.3 数据存储结构 3. 算法的概念 3.1 什么是算法 3.2 算法的基本特性 3.3 算法的评价标准 3.4 算法的描述方法 4. 算法性能分析 4.1 时间复杂度的概念与分析 4.2 空间复杂度的概念与分析 4…

萨科微半导体入驻得捷

2024年8月1日&#xff0c;萨科微半导体公司宣布其高性能半导体产品成功入驻全球知名电子元器件采购平台得捷&#xff0c;这一合作不仅丰富了得捷的产品线&#xff0c;也标志着萨科微产品将借助得捷的广泛影响力加速出海&#xff0c;共同推动电子行业创新与发展&#xff0c;为全…

查看一个exe\dll文件的依赖项

方法 使用一个Dependencies工具&#xff0c;检测exe文件的所有依赖项 工具使用 下载压缩包之后解压&#xff0c;解压后如下图所示 在命令行中运行Dependencies.exe程序会得到帮助菜单 查询某exe的所有依赖项&#xff0c;使用命令 Dependencies.exe -chain <查询文件> …

uniapp app中使用柱状图 折线图 圆环图和饼图

实现思路 借助echarts.min.js 搭配l-echart进行配置 废话不多说上代码后自己百度了解配置项的意思就好 下面代码是折线图的 &#xff0c;柱状图和它一摸一样&#xff0c;只需要把line换成bar就好 <template><l-echart ref"chart"></l-echart> …

网络协议八 网络安全相关

网络通讯中的4种 安全问题 网络层- ARP欺骗 ARP欺骗的防护原理 DoS&#xff0c;DDoS 攻击 应用层 DNS 劫持 HTTP 协议的安全问题 单向散列函数&#xff0c;不可逆 MD4,MD5,SHA全家桶 可逆&#xff0c;对称加密 DES,3DES,AES DES,已经被破解&#xff0c;不建议使用 3DES AES 目前…

2024新型数字政府综合解决方案(三)

新型数字政府综合解决方案通过融合人工智能、大数据和云计算技术&#xff0c;建立了一个智能化、互联互通的政府服务平台&#xff0c;旨在提升政府服务效率与透明度。该方案通过全面数字化政务流程&#xff0c;实现数据的实时共享和自动化处理&#xff0c;使公众能够便捷地访问…

Qt作业合集

8.14作业 设置窗口&#xff0c;按钮&#xff0c;标签&#xff0c;行编辑器&#xff0c;实现快递速运登录页面 #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//窗口//设置窗口的标题this->setWindowTitle("邮递系统")…

Flink on yarn 开发过程中遇到的问题

1. 任务启动报错Trying to access closed classloader. Exception in thread "Thread-5" java.lang.IllegalStateException: Trying to access closed classloader. Please check if you store classloaders directly or indirectly in static fields. If the st…

Qt QLabel标签制作弹框效果,3s后缓慢自动消失

效果图 初始化说明 void InitStatusTips() {if (NULL statusTips_) {return;}statusTips_->setFixedSize(300, 80);//固定大小statusTips_->move((width() - statusTips_->width()) / 2, height() - 30 - statusTips_->height());//移动位置statusTips_->setA…

汽车IVI中控OS Linux driver开发实操(二十四):I2C设备驱动的编写

在Linux驱动中I2C系统中主要包含以下几个成员: I2C adapter(即I2C适配器,用来控制各种I2C从设备,其驱动需要完成对适配器的完整描述,最主要的工作是需要完成i2c_algorithm结构体。这个结构体包含了此I2C控制器的数据传输具体实现,以及对外上报此设备所支持的功能类型。具…

钉钉虚拟位置打卡神器2024免费试用版下载-钉钉虚拟位置打卡神器

钉钉虚拟位置打卡神器是一款能够快速帮助用户修改定位的辅助&#xff0c;钉钉虚拟位置打卡免费版能够一键切换手机上班的打开地点&#xff0c;帮助打工人更好的应对公司&#xff0c;收获奖金&#xff01;软件不需要root就可以安装使用&#xff0c;并且体积也比较小&#xff0c;…