LVS做集群四层负载均衡的简单理解

背景:业务中主要是TCP/SSL连接,要做四层负载均衡。
之前做负载均衡,调研了nginx(见之前的nginx实现后端服务负载均衡和nginx负载均衡监测后台服务状态)。
nginx作为一个应用,做四层负载均衡效率低。lvs是linux内核的,非应用,用它做四层负载均衡效率更高更合适。所以会见到lvs+nginx做四层七层负载均衡这种组合。

一、集群

一般我们遇到的:
负载均衡集群
高可用集群

和分布式的区别:
集群是一群机器做同样的事情,分布式是不同的机器负责不同的事情

二、负载均衡

常用的软件负载均衡:
lvs 四层
nginx(tengine)七层
haproxy

硬件也有,不展开了。

三、LVS

1 应用方式

类似于nginx的应用方式。客户请求流量先到达lvs,再由lvs做负载均衡。
举例:一台linux服务器启用lvs实现负载均衡的作用,其他的是业务服务器(RS)。
我们主要在lvs服务器上面做配置。业务服务器可能会有额外的配置(除了ip,如何配置取决于lvs的负载均衡方式,比如,下面会介绍):
在lvs上开启ipvs,配置ip、RS地址、负载均衡方式。
业务服务器:配置ip

2 负载均衡模式

为了描述,定义:

名称简写
客户的ipCIP
lvs服务器对外的IPVIP
lvs服务器真实的IPDIP
业务服务器的IPRIP
lvs服务器DS

请求Request流量都要经过DS:数据包的源地址一定是CIP;
响应Response流量根据经过和不经过DS分为两类:

响应流量经过DS的两种模式:

都是lvs做nat转换,区别在于究竟NAT了什么部分:
NAT
请求包数据包源地址不变,NAT目的地址;响应包NAT请求地址
请求:
DS接收的数据包:源地址:CIP 目的地址:VIP
发送给RS的数据包:源地址:CIP 目的地址:RIP
响应:
DS接收的数据包:源地址:RIP 目的地址:CIP
发送给客户的数据包:源地址:VIP 目的地址:CIP

Full-NAT(不常用)
请求包和相应包数据包源地址、目的地址都NAT
请求:
DS接收的数据包:源地址:CIP 目的地址:VIP
发送给RS的数据包:源地址:DIP 目的地址:RIP
响应:
DS接收的数据包:源地址:RIP 目的地址:DIP
发送给客户的数据包:源地址:VIP 目的地址:CIP

响应流量不经过DS的两种模式:

需要改变业务服务器的配置!
业务服务器也都配置虚拟IP为VIP。

直接路由DR
业务服务器要关闭对arp请求的响应。

有两种做法(分别见参考1和2)
1.绑定vip之后,配置忽略arp广播
ip addr add dev lo 192.168.246.160/32 #在lo接口上绑定VIP
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #忽略arp广播
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #匹配精确ip地址回包
2.创建一个dummy网卡
ip addr add dev dummy0 192.168.0.222/32

DS通过改变数据包的mac地址,将流量发给RS。
请求:
DS接收的数据包:源地址:CIP 目的地址:VIP
数据帧:目的MAC地址:DS的MAC地址
发送给RS的数据包:源地址:CIP 目的地址:VIP
数据帧:目的MAC地址:RS的MAC地址

响应:RS直接发给客户!
RS发送的数据包:源地址:VIP 目的地址:CIP

IP隧道 IP tunnel(不常用)
RS需要支持ipip协议,必须加载ipip模块,解封装数据包来获得原始包。
集群服务器如果是虚拟机,那么其物理机器上不能有ipip隧道设备

DS通过将原请求数据包在封装一层,发给RS。RS解封装得原数据包,直接回复响应给客户。

请求:
DS接收的数据包:源地址:CIP 目的地址:VIP
发送给RS的数据包:源地址:DIP 目的地址:RIP 载荷内容:接收的数据包

响应:RS直接发给客户!
RS发送的数据包:源地址:VIP 目的地址:CIP

特性比较

负载
响应过lvs可能是瓶颈,所以大流量的情况下考虑响应不过lvs的两种。
服务器结点数目
NAT 10-20
IP tunnel 100
DR >100

网络配置要求
NAT 模式 和 Full-NAT模式:只需要DS一个有公网ip作为VIP,RS和DS三层可达。
DR模式:只需要一个有公网ip作为VIP,要求负载均衡器的网卡必须与物理网卡在一个物理段上
IP tunnel模式:只需要一个有公网ip作为VIP,RS需要支持IPTUNNEL协议

网关
NAT : DS
DR和IP tunnel:自己的路由器

RS网络和DS的关系:
NAT:局域网与外部网络
DR:DS和RS在同一个子网,RS也配置VIP
IP tunnel:DS和RS可以不在一个子网

DS和RS的端口对应关系
NAT模式下,这两个端口可以不相同,DS会做好转换
DR模式下,因为不会对传输层做修改,所以这两个端口必须相同

3 原理

ipvs

工作在内核,处理请求转发。
how:
“IPVS通过在Netfilter框架中的不同位置注册自己的处理函数来捕获数据包,并根据与IPVS相关的信息表对数据包进行处理,按照IPVS规则中定义的不同的包转发模式,对数据包进行不同的转发处理。”

IPVS相关的信息表:用户维护
包转发模式:负载均衡模式

八种负载均衡算法

管理工具ipvsadm

命令行工具,用户空间
向IPVS中写入规则

一些命令:

// 添加vip
ip addr add dev ens33 192.168.1.10/32
// 添加一个虚拟服务器
ipvsadm -A -t 192.168.1.10:80 -s rr

-A:append:添加一个虚拟服务器
-t:tcp-service:对tcp协议作转发
-s:schduler:均衡算法
rr:round robin:将工作平均分配给可用的真实服务器的算法

// 添加后端服务器
ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.101:80 -g -w 1

-a:append:添加一个后端真实服务器
-t:tcp-service:转发tcp协议
-r:real-server:后端真实服务器地址
-w:weight:权重
-g:Direct Routing,默认模式,也成网关模式(gatewaying);
-m:NAT,也称作伪装模式(masquerading)。
-i:IP Tunneling,也称作 ipip 封包模式(ipip encapsulation);

四、其他

LVS双机热备方案,如 LVS + Keepalived

参考:

  1. 负载均衡(四层) LVS(看完就能去上班)
  2. 《一篇搞懂》系列之二——IPVS
  3. LVS负载均衡高可用解决方案

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

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

相关文章

非同质化权益(NFR):重塑数字资产权益的生态系统

每天五分钟讲解一个互联网知识,大家好我是啊浩 随着区块链技术的深入发展和普及,数字资产已经逐渐渗透到我们生活的方方面面。在这一背景下,非同质化权益(NFR)作为一种新型的数字资产形式,不仅为数字资产权…

eBPF实践篇之环境搭建

文章目录 前言实验环境前置知识配置开发环境最后 前言 你好,我是醉墨居士,本次我们学习一下eBPF,我们基于libbpf-bootstrap来进行我们的eBPF程序开发🤗 实验环境 一台Debian12操作系统的计算机,我使用的是Debian12.…

什么是索引?它们在MySQL中是如何工作的?什么是视图(View)?它们有什么用?

什么是索引?它们在MySQL中是如何工作的? 索引在MySQL中是一个数据结构,它帮助快速查询数据库中的数据。没有索引,查询可能需要遍历整个数据库表,这称为全表扫描,对于大型表来说非常慢。 索引的工作原理是创…

SpringBoot案例(黑马学习笔记)

这个案例呢,就是Tlias智能学习辅助系统。 参考接口文档完成后端功能的开 发,然后结合前端工程进行联调测试即可。 完成后的成品效果展示: 准备工作 需求&环境搭建 需求说明 部门管理 部门管理功能开发包括: ● 查询部门列…

亚信安慧AntDB数据库与流式处理的有机融合

流式处理的概念 2001年9月11日,美国世贸大楼被袭击,美国国防部第一次将“主动预警”纳入国防的宏观战略规划。而IBM作为当时全球最大的IT公司,承担了大量基础支撑软件研发的任务。其中2009年正式发布的IBM InfoSphere Streams,就是…

杰理-按键多次按下识别多击

杰理-按键多次按下识别多击 #define ALL_KEY_EVENT_CLICK_ONLY 0 //是否全部按键只响应单击事件

自动化测试高效学习路线指导,提高你百倍自学效率

前言 从各方来的朋友,能够相聚这篇文章是大家的缘分,也是我的荣幸。 接下来,我要开始和大家讲讲如何从0开始学Python自动化测试。 不论是转行自动化测试还是功能测试进阶自动化还是开发转自动化测试的伙伴,这篇自动化测试工程师…

Zookeeper客户端命令、JAVA API、监听原理、写数据原理以及案例

1. Zookeeper节点信息 指定服务端,启动客户端命令: bin/zkCli.sh -server 服务端主机名:端口号 1)ls / 查看根节点下面的子节点 ls -s / 查看根节点下面的子节点以及根节点详细信息 其中,cZxid是创建节点的事务id&#xff0c…

Rocky Linux 运维工具 firewall-cmd

一、firewall-cmd​的简介 ​​firewall-cmd​是基于firewalld的防火墙管理工具。用户可以使用它来配置、监控和管理防火墙规则,包括开放端口、设置服务规则等。 二、firewall-cmd​​的参数说明 序号参数描述1​​–zone指定防火墙区域2–add-portxxx/tcp允许特定…

tkinterFrame框架+标签框架LabelFrame+Toplevel窗口的使用

1.在tkinter中,Frame是一个容器小部件用于组织和管理其他小部件。它可以作为一个独立的可见区域,也可以作为其他小部件的父容器。 import tkinter as tk import tkinter.ttk as ttk import tkinter.messagebox as mbm tk.Tk() m.title("tkinter L…

MSSQL渗透测试

目录 mssql数据库连接提权至服务器权限 拿到目标的IP地址,我们先对IP地址进行信息收集,收集信息资产,同时使用nmap对IP地址进行扫描 nmap -sC -sV IP从扫描的结果中,我们能知道目标服务器是windows操作系统,使用的是m…

DAY10-内容安全过滤技术概述

文件过滤技术流程: 应用行为控制技术具体:

W-TinyLFU 算法实现

前言 不同于常见的 LRU 或 LFU,Window TinyLFU 是一种非常高效的缓存设计方案。先来看下 LRU 和 LFU 算法的缺点: LFU 缺点: 需要为每个记录项维护频率信息,这将消耗大量的内存空间可能存在旧数据长期不被淘汰(一开…

快速卷积介绍

快速卷积是一种使用快速傅里叶变换(FFT)来有效计算两个序列(信号、函数等)卷积的方法。快速卷积对于数字信号处理、图像处理、音频处理等领域至关重要,因为它大大提高了计算卷积的效率。 卷积的概念 卷积是一种数学运…

让AI给你写代码,初体验(二)-写一个flask应用

这里我们准备让AI做一个稍微复杂一点任务,写一个前后应用,具体: 前台用html输入股票代码,后台通过akshare的接口程序获取该股票的实时价格,然后返回显示在html 我们先用AI对话看一下,AI会给我们什么编码建…

Flink Catalog

1.Flink侧创建 按照SQL的解析处理流程在Parse解析SQL以后,进入执行流程——executeInternal。   其中有个分支专门处理创建Catalog的SQL命令 } else if (operation instanceof CreateCatalogOperation) {return createCatalog((CreateCatalogOperation) operatio…

[多进程] 进程间通信-笔记

文章目录 创建进程的方法Linuxforkexecsystem Windowscreateprocessshellexecutesystem 进程间通信方法管道(Pipe)管道的种类特点 通过文件通信内存映射(文件映射)匿名映射 共享内存 信号量(或者锁)消息队列Windows消息队列Linux…

finedance 测试笔记

目录 依赖库: 预测流程: 音乐wav切割120帧 general_all.py改进 smplx 学习笔记: 依赖库: import pickle5 as picklepypi尚pickle5最高python版本3.7: pickle5 PyPI 解决方法,改为 import pickle …

cpp基础学习笔记01

C和C的区别 1.语言类型:C 是一种过程性编程语言,着重于以函数为基础的结构化编程;而 C 是一种多范式编程语言,支持面向对象编程(OOP)和泛型编程等多种编程范式。 2.对象模型:C 支持类和对象的概…

switch其他知识点

1.default的位置在整体输出语句中,放哪都可以; 省略的话结果会不显示; 2.case穿透,还是比较好理解的,因为缺少break导致会把下面的也打印,结果是输出多个 3.switch新特性:是用->减号和大于…