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

C05S08-LVS负载均衡

一、LVS

1. LVS概述

LVS(Linux Virtual Server、Linux虚拟服务)是一种基于Linux系统集群的负载均衡方案,属于四层的负载均衡。

  • 集群:将相同组件部署在不同的服务器上,提供统一的服务,以及同样的功能,各台服务器的性能大致相同。
  • 分布式:把不同组件部署在不同服务器上,组件之间依靠网络通信,实现定制化功能。

2. LVS相关概念

系统性能的扩展方式

  • 单节点扩展:
    • 垂直扩展,向上扩展,提升计算机的性能(硬件性能),性能提升有限。
    • 水平扩展,向外扩展,增加设备的数量提供性能,也就是集群的由来。

集群类型

  • 负载均衡
  • HA(高可用)主要有两种:负载均衡高可用,主备高可用。

系统的可靠性指标

  • MTBF(平均无故障时间)
  • MTTR(平均故障恢复时间)
  • 指标计算方式:MTBF/(MTBF+MTTR)*100%,指标范围越接近1越好。
  • 停机时间通常不会算在故障时间内,计划停机时间不计算在故障范围内,计划外停机时间计算在故障时间内。

LVS常见术语

  • VS(Virtual Server):LVS的逻辑名字,外部访问LVS的IP地址和端口。
  • DS(Director Server):LVS集群的主服务器、调度器,是集群的核心。接受客户端的请求,然后根据负载均衡的算法转发到后端RS。
  • RS(Real Server):LVS集群中的真实服务器,也就是后端服务器,接收调度器转发的请求。
  • CIP(Client IP):客户端的IP地址。
  • VIP(Virtual IP):虚拟IP地址,对外提供服务的IP地址。
  • DIP(Director Server IP):调度器的IP地址。
  • RIP(Real Server IP):后端服务器的IP地址。

LVS负载均衡的模式

  • NAT模式:地址转换模式,是最为常用的模式。
  • DR模式:直连路由模式,性能最佳。
  • TUN模式:隧道模式,通过VPN实现。

3. NAT模式

NAT模式也就是地址转换模式。在这种模式下,LVS中的DS类似一个路由。客户端发出的请求先发送给DS,请求数据包中的目标地址VIP会转换为RIP;RS处理完请求,响应数据包中的源地址RIP会转换成VIP。

这种模式性能较差,后端的真实服务器数量通常在10~30台左右。请求和响应都会经过DS,所以DS的性能会成为整个LVS的性能瓶颈。

4. DR模式

DR模式是直连路由模式,调度器只负责请求的转发,后端服务器的响应会直接返回给客户端。DS和RS属于同一个网络。

5. TUN模式

TUN模式是隧道模式,调度器只负责请求的转发,后端服务器和调度器通过VPN实现互相通信。

6. 三种模式比较

NATDRTUN
优点配置简单性能最好使用VPN
缺点性能低不支持跨网段必须使用VPN
真实服务器配置低要屏蔽ARP响应要配置VPN
支持的网络类型内网内网内网或外网
真实服务器数量10~30100100

7. ipvsadm命令 – 管理Linux虚拟服务器

ipvsadm命令来自英文词组“IPVS administration”的缩写,功能是用于管理Linux虚拟服务器。

ipvsadm [选项] IP地址

常见的选项:

选项功能
-a添加真实服务器
-A添加虚拟服务器
-D删除虚拟服务器
-g设置LVM为DR模式
-i设置LVM为TUN模式
-m设置LVM为NAT模式
-n以数字形式显示IP地址
-r设置真实服务器
-s设置负载均衡算法
-t设置TCP协议的虚拟服务
-w设置权重

二、LVS具体配置

1. LVS NAT模式

1.1 配置DS服务器

  1. 加载系统的LVS内核模块。

    modprobe ip_vs
    
  2. 下载ipvsadm软件包。

    apt -y install ipvsadm
    
  3. 设置虚拟服务器,指定访问端口为TCP/80,负载均衡策略为轮询模式。

    ipvsadm -A -t 12.0.0.10:80 -s rr
    
  4. 设置RS服务器,指定LVM为NAT模式。

    ipvsadm -a -t 12.0.0.10:80 -r 192.168.1.129 -m
    ipvsadm -a -t 12.0.0.10:80 -r 192.168.1.130 -m
    
  5. 查看ipvsadm是否成功设置策略。

    ipvsadm -ln
    
  6. 配置服务器的两个网卡。

    network:ethernets:ens33:dhcp4: noaddresses: [192.168.1.128/24]ens37:dhcp4: noaddresses: [12.0.0.10/24]
    
  7. 保存网卡配置后,应用配置使其生效。

    netplan apply
    
  8. 编辑系统内核文件/etc/sysctl.conf,开启路由转发功能。

    net.ipv4.ip_forward = 1
    
  9. 应用内核配置,使其生效。

    sysctl -p
    
  10. 配置SNAT策略。

    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ens37 -j SNAT --to-source 12.0.0.10
    

1.2 配置RS服务器

  1. 配置两台RS服务器的网卡,设置网关为DS服务器的内网IP(ens33网卡)。

    # 第一台RS服务器
    network:ethernets:ens33:dhcp4: noaddresses: [192.168.1.129/24]gateway4: 192.168.1.128# 第二台RS服务器
    network:ethernets:ens33:dhcp4: noaddresses: [192.168.1.130/24]gateway4: 192.168.1.128
    
  2. 保存网卡配置后,应用配置使其生效。

    netplan apply
    
  3. 开启两台RS服务器的Nginx服务。

    systemctl start nginx
    

1.3 客户端访问测试

  1. 配置客户端网卡。

    network:ethernets:ens33:dhcp4: noaddresses: [12.0.0.11/24]gateway4: 12.0.0.10
    
  2. 保存网卡配置后,应用配置使其生效。

    netplan apply
    
  3. 访问VIP地址。

    curl 12.0.0.10
    

2. LVS DR模式

2.1 配置DS服务器

  1. 加载系统的LVS内核模块。

    modprobe ip_vs
    
  2. 下载ipvsadm软件包。

    apt -y install ipvsadm
    
  3. 设置虚拟服务器,指定访问端口为TCP/80,负载均衡策略为轮询模式。

    ipvsadm -A -t 192.168.1.200:80 -s rr
    
  4. 设置RS服务器,指定LVM为DR模式。

    ipvsadm -a -t 192.168.1.200:80 -r 192.168.1.129 -g
    ipvsadm -a -t 192.168.1.200:80 -r 192.168.1.130 -g
    
  5. 查看ipvsadm是否成功设置策略。

    ipvsadm -ln
    
  6. 配置服务器的两个网卡。

    network:ethernets:ens33:dhcp4: noaddresses: [192.168.1.128/24]gateway4: 192.168.1.254ens37:dhcp4: noaddresses: [192.168.1.200/32]gateway4: 192.168.1.254
    
  7. 保存网卡配置后,应用配置使其生效。

    netplan apply
    
  8. 编辑系统内核文件/etc/sysctl.conf,关闭路由转发相关功能,也就是不将DS服务器作为路由器。

    net.ipv4.ip_forward = 0
    net.ipv4.conf.all.send_redirects = 0
    net.ipv4.conf.default.send_redirects = 0
    net.ipv4.conf.ens37.send_redirects = 0
    
  9. 应用内核配置,使其生效。

    sysctl -p
    

2.2 配置RS服务器

  1. 配置两台RS服务器的网卡。

    # 第一台RS服务器
    network:ethernets:ens33:dhcp4: noaddresses: [192.168.1.129/24]gateway4: 192.168.1.254ens37:dhcp4: noaddresses: [192.168.1.200/32]# 第二台RS服务器
    network:ethernets:ens33:dhcp4: noaddresses: [192.168.1.130/24]gateway4: 192.168.1.254ens37:dhcp4: noaddresses: [192.168.1.200/32]
    
  2. 保存网卡配置后,应用配置使其生效。

    netplan apply
    
  3. 配置两台RS服务器的静态路由。

    route add -host 192.168.1.200 dev ens37
    
  4. 编辑系统内核文件/etc/sysctl.conf,配置ARP响应相关参数。

    net.ipv4.conf.ens37.arp_ignore = 1  
    net.ipv4.conf.ens37.arp_announce = 2
    
  5. 应用内核配置,使其生效。

    sysctl -p
    
  6. 开启两台RS服务器的Nginx服务。

    systemctl start nginx
    

2.3 客户端访问测试

  1. 配置客户端网卡。

    network:ethernets:ens33:dhcp4: noaddresses: [192.168.1.5/24]gateway4: 192.168.1.254
    
  2. 保存网卡配置后,应用配置使其生效。

    netplan apply
    
  3. 访问VIP地址。

    curl 192.168.1.200
    

相关文章:

C05S08-LVS负载均衡

一、LVS 1. LVS概述 LVS(Linux Virtual Server、Linux虚拟服务)是一种基于Linux系统集群的负载均衡方案,属于四层的负载均衡。 集群:将相同组件部署在不同的服务器上,提供统一的服务,以及同样的功能&…...

C 语言代码诗韵:数字功能的雅集华章

函数基本操作练习 主要内容: 本任务主要练习函数的申请、定义、调用等,主要包含以下功能: 1)编写函数,输入一个整数,求各个数字之和; 2)编写函数,计算1!2&…...

ps案例制作

宣传海报 暖色调海报商品展示图...

【C++】列表初始化、声明、范围for、array容器

列表初始化、声明、范围for、array容器 一、统一的列表初始化1.1 使用{ }初始化1.2 initializer_list容器 二、声明2.1 auto关键字2.2 decltype关键字2.3 nullptr关键字 三、范围for四、array容器和forward_list容器 一、统一的列表初始化 1.1 使用{ }初始化 在C98中&#xf…...

C++智能指针详解

一、智能指针简介 智能指针是一个类似于指针的类,将指针交给这个类对象进行管理,我们就可以像使用指针一样使用这个类,并且它会自动释放资源。 智能指针运用了 RAII 的思想(资源获得即初始化)。RAII 是指,用对象的生命周期来管理资…...

基础库正则表达式

我们已经可以用requests 库来获取网页的源代码,得到 HTML 代码。但我们真正想要的数据是包含在 HTML代码之中的,要怎样才能从 HTML,代码中获取想要的信息呢?正则表达式就是其中一个有效的方法。 本篇博客我们将了解一下正则表达式的相关用法。正则表达…...

【spring专题】spring如何解析配置类和扫描包路径

文章目录 目标重要的组件加载配置类启动解析组件定位配置类解析配置类 扫描过程总结 目标 这是我们使用注解方式启动spring容器的核心代码 AnnotationConfigApplicationContext applicationContext new AnnotationConfigApplicationContext(MyConfig.class); User user (Us…...

MyBatis框架的入门

目录 MyBatis第一章:框架的概述1. MyBatis框架的概述 第二章:MyBatis的入门程序1. 创建数据库和表结构2. MyBatis的入门步骤 MyBatis 第一章:框架的概述 1. MyBatis框架的概述 MyBatis是一个优秀的基于Java的持久层框架,内部对…...

代码随想录D22-23 回溯算法01-02 Python

理论回顾 回溯法也可以叫做回溯搜索法,它是一种搜索的方式。回溯是递归的副产品,只要有递归就会有回溯。 回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,如果想让回溯法高效一些,可以加一些剪枝…...

【网络云计算】2024第50周-每日【2024/12/13】小测-理论-写10个Bash Shell脚本-解析

文章目录 1. 计算1到100的和2. 列出当前目录下所有文件和文件夹3. 检查文件是否存在4. 备份文件到指定目录(简单示例)5. 打印系统当前日期和时间6. 统计文件中的行数7. 批量重命名文件(将.txt后缀改为.bak)8. 查找进程并杀死&…...

MATLAB转换C语言--问题(一)FFT 和 IFFT 的缩放因子

1. MATLAB 中的 FFT 和 IFFT 在 MATLAB 中,fft 和 ifft 函数具有以下缩放行为: fft:执行快速傅里叶变换(FFT),不进行缩放。ifft:执行逆快速傅里叶变换(IFFT),…...

轻松上手:使用 Vercel 部署 HTML 页面教程

😀 在学习前端的过程中,部署项目往往是一个令人头疼的问题。然而,Vercel 为我们提供了一个便捷且免费的解决方案。 Vercel 是一个强大的云平台,专门用于前端项目的部署和托管。它不仅支持多种前端框架和静态网站生成器&#xff0…...

如何运用 HTM?

一、HTM 概述 HTM(Hierarchical Temporal Memory,分层时序记忆)是一种基于神经科学原理构建的计算模型,旨在模拟大脑的学习和记忆机制,以处理复杂的时间序列数据和模式识别任务。它具有独特的架构和算法,能…...

12.16【net】【study】

路由表是路由器或者其他互联网网络设备上存储的一张表,它记录了到达特定网络目的地的路径。路由表中的每一行(即一个路由条目)包含了目的地网络地址、子网掩码、下一跳地址、出接口等信息。 Destinations(目的地)和 R…...

2023和2024历年美赛数学建模赛题,算法模型分析!

文末获取历年优秀论文解析,可交流解答 2023年题目分析 MCM(Mathematical Contest in Modeling) 问题 A:遭受旱灾的植物群落 概述:要求建立预测模型,模拟植物群落在干旱和降水充裕条件下随时间的变化。类…...

Node.js内置模块

1.内置模块 Node.js的中文网参考手册:https://nodejs.cn//api 帮助文档 API文档:查看对应的模块,左边是模块,右边是模块的成员 源码:https://github.com/nodejs/node/tree/main/lib 查看 例如: http.js 创建web服务器的模块 -->进入源码中,搜索…...

测评|携程集团25年社招在线测评北森题库、真题分析、考试攻略

携程集团社招入职测评北森题库主要考察以下几个方面: 1. **言语理解**:这部分主要测试应聘者运用语言文字进行思考和交流、迅速准确地理解和把握文段要旨的能力。 2. **资料分析**:包括文字题和图表题,考察应聘者快速找出关键信息…...

快速启动Go-Admin(Gin + Vue3 + Element UI)脚手架管理系统

Go-Admin 是一个基于 Gin Vue Element UI & Arco Design & Ant Design 的前后端分离权限管理系统脚手架。它包含了多租户支持、基础用户管理功能、JWT 鉴权、代码生成器、RBAC 资源控制、表单构建、定时任务等功能。该项目的主要编程语言是 Go 和 JavaScript。 ps&a…...

数据分流:优化数据处理流程的关键策略

引言 在大数据时代,企业面临着数据量的激增和数据类型的多样化。为了有效地管理和分析这些数据,数据分流成为了一个重要的策略。数据分流指的是将数据按照特定的规则和流程分配到不同的处理路径,以优化数据处理效率和准确性。本文将探讨数据…...

RabbitMQ如何构建集群?

大家好,我是锋哥。今天分享关于【RabbitMQ如何构建集群?】面试题。希望对大家有帮助; RabbitMQ如何构建集群? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在RabbitMQ中,集群(Cluster&#x…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...