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

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

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

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

day52 ResNet18 CBAM

在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...