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

Linux:lvs集群技术

一.集群和分布式

1.1 集群

集群是为了解决某个特定问题将多台计算机组合起来形成的单个系统。即当单独一台主机无法承载现有的用户请求量;或者一台主机因为单一故障导致业务中断的时候,就可以增加服务主机数,这些主机在一起提供服务,就叫集群。

类型:

LB(负载均衡);HA(高可用);HPC(高性能计算)

1.2 分布式

一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式 中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起 来,才是完整的业务。

1.3 集群与分布式的区别

集群:同一个业务系统,部署在多台服务器上,集群中,每一台服务器实现的功能没有差别,数据和代码都是一样的,即通过提高单位时间内执行的任务数来提升效率,不会因个别主机无法响应而无法进行业务访问。

分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式 中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起 来,才是完整的业务 分布式是以缩短单个任务的执行时间来提升效率的,若个别主机无法响应则会导致无法完成完整的业务,导致无法完成服务。

二.lvs运行原理

2.1 LVS概念

VS:调度器

RS:服务器

CIP:用户 IP

VIP: 调度器链接外网的IP

DIP: 调度器链接内网的IP

RIP: 服务器 IP

访问流程:CIP VIP == DIP RIP

2.2 lvs集群的类型

lvs-nat: 修改请求报文的目标IP,多目标IP的DNAT

lvs-dr: 操纵封装新的MAC地址

lvs-tun: 在原请求IP报文之外新加一个IP首部

lvs-fullnat: 修改请求报文的源和目标IP

2.2.1 nat模式

本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和

PORT实现转发。

工作原理

1.客户端发送访问请求,请求数据包中含有请求来源(cip),访问目标地址(VIP)访问目标端口 (9000port)

2.VS服务器接收到访问请求做DNAT把请求数据包中的目的地由VIP换成RS的RIP和相应端口

3.RS1相应请求,发送响应数据包,包中的相应保温为数据来源(RIP1)响应目标(CIP)相应端口 (9000port)

4.VS服务器接收到响应数据包,改变包中的数据来源(RIP1-->VIP),响应目标端口(9000-->80)

5.VS服务器把修改过报文的响应数据包回传给客户端

缺点:lvs的NAT模式接收和返回客户端数据包时都要经过lvs的调度机,所以lvs的调度机容易阻塞。

部署NAT模式集群案例
实验环境
主机名ip角色
clienteth0:172.25.254.111/24用户主机
lvs

eth0:172.25.254.100/24(VIP)

eth1:192.168.0.100/24(DIP)仅主机

调度器

rs1

eth0:192.168.0.10(RIP1)web服务器1
rs2eth0:192.168.0.20(RIP2)web服务器2

配置命令

client:

1.设置路由

 

dr-lvs:

1.安装ipvsadm(下图为主机已安装的图片)

 2.设置内核路由功能

 3.添加和查看调度策略

 ipvsadm:

(1)管理集群服务中的增删改

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

-A :添加

-E:修改

-Z:清空计数器

-C:清空lvs策略

-L:查看lvs策略

-t:tcp服务

-u:udp服务

-s:指定调度算法,默认为WLC -p #设置持久连接超时,持久连接可以理解为在同一个时间段同一个来源的请求调度到同一Realserver -f #firewall mask 火墙标记,是一个数字

(2)管理集群中RealServer的增删改

ipvsadm -a|e -t|u|f service-address -r realserver-address [-g|i|m] [-w weight]

-a:添加realserver

-e:更改realserver

-t:tcp协议

-u:udp协议

-f:火墙 标签

-r:realserver地址

-g:直连路由模式

-i:ip隧道模式

-m:nat模式

-w:设定权重

--rate :输出速率信息

 4.关闭火墙

rs1/rs2:

1.设置路由(以rs1为例):

2.关闭rs的防火墙/允许http服务通过火墙

效果 :

2.2.2 dr模式

工作原理

1.客户端发送数据帧给vs调度主机帧中内容为客户端IP+客户端的MAC+VIP+VIP的MAC

2.VS调度主机接收到数据帧后把帧中的VIP的MAC该为RS1的MAC,此时帧中的数据为客户端IP+客户端的MAC+VIP+RS1的MAC

3.RS1得到2中的数据包做出响应回传数据包,数据包中的内容为VIP+RS1的MAC+客户端IP+客户端IP的MAC

特点:

(1)Director和各RS都配置有VIP

(2)确保前端路由器将目标IP为VIP的请求报文发往Director

(3)在前端网关做静态绑定VIP和Director的MAC地址

部署DR模式集群案例
实验环境
主机名IP角色
clienteth0:172.25.254.111/24(CIP)客户端主机
route

eth0:172.25.254.100/24

eth1:192.168.0.100/24(仅主机)

路由器
lvs

eth0:192.168.0.220/24(VIP)(仅主机)

eth0:192.168.0.200/24(DIP)(仅主机)

调度器
rs1

lo:127.0.0.1/8

lo:192.168.0.220/32(VIP)

eth0:192.168.0.10(RIP)(仅主机)

web服务器1

rs2

lo:127.0.0.1/8

lo:192.168.0.220/32(VIP)

eth0:192.168.0.20(RIP)(仅主机)

web服务器2
配置命令

client:

1.如nat模式设置

route:

2.设置内核路由功能

lvs:

1.添加和查看调度策略

2.若未关闭火墙则将其关闭

 rs(以rs1为例):

解决rs的响应问题,使其不对外响应

效果:

2.2.3 tun模式

工作原理

1.客户端发送请求数据包,包内有源IP+vip+dport

2.到达vs调度器后对客户端发送过来的数据包重新封装添加IP报文头,新添加的IP报文头中包含TUNSRCIP(DIP)+TUNDESTIP(RSIP1)并发送到RS1

3.RS收到VS调度器发送过来的数据包做出响应,生成的响应报文中包含SRCIP(VIP)+DSTIP(CIP)+port,响应数据包通过网络直接回传给client

2.2.4 fullnet模式

特点:

fullnat:通过同时修改请求报文的源IP地址和目标IP地址进行转发

CIP --> DIP VIP --> RIP

1.VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP

2.RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client

3.请求和响应报文都经由Director

4.支持端口映射

2.3 lvs持久链接

在我们客户上网过程中有很多情况下需要和服务器进行交互,客户需要提交响应信息给服务器,如果单 纯的进行调度会导致客户填写的表单丢失,为了解决这个问题我们可以用sh算法,但是sh算法比较简单 粗暴,可能会导致调度失衡

解决方案

在进行调度时,不管用什么算法,只要相同源过来的数据包我们就把他的访问记录在内存中,也就是把 这个源的主机调度到了那个RS上 如果在短期(默认360S)内同源再来访问我仍然按照内存中记录的调度信息,把这个源的访问还调度到 同一台RS上。 如果过了比较长的时间(默认最长时间360s)同源访问再次来访,那么就会被调度到其他的RS上

 效果:

三.防火墙标签解决轮询错误

以http和https为例,当我们在RS中同时开放80和443端口,那么默认控制是分开轮询的,这样我们就出现了一个轮询错乱的问题

当我第一次访问80被轮询到RS1后下次访问443仍然可能会被轮询到RS1上

问题呈现:

RS1和RS2中安装mod_ssl并重启apache(以rs1为例)

 问题解决:

效果 :

http://www.xdnf.cn/news/15872.html

相关文章:

  • LVS四种工作模式深度解析
  • 千线万网,电路之行——LVS检查的内核逻辑
  • Python day18
  • 统计EfficientNet-B7的参数个数。
  • 华为擎云L420安装LocalSend
  • 单元测试学习+AI辅助单测
  • 【图像处理基石】什么是小波变换?
  • 美国VPS服务器Linux内核参数调优的实践与验证
  • iOS 通知机制及底层原理
  • 突破 MySQL 性能瓶颈:死锁分析 + 慢查询诊断 + 海量数据比对实战
  • 【设计模式C#】状态模式(用于解决解耦多种状态之间的交互)
  • 中间件安全攻防全解:从Tomcat到Weblogic反序列化漏洞介绍
  • 使用DataGrip连接安装在Linux上的Redis
  • FreeRTOS—列表和列表项
  • 相机参数的格式与作用
  • Vue3 学习教程,从入门到精通,Vue 3 声明式渲染语法指南(10)
  • 快速上手AI整合包!GPT-SoVITS-v2打包教程,解锁AIStarter应用市场潜力
  • DC-DC降压转换5.5V/3A高效率低静态同步降压转换具有自适应关断功能
  • Bicep入门篇
  • 小谈相机的学习过程
  • Linux_基础指令(一)
  • windows docker-02-docker 最常用的命令汇总
  • JMeter 元件使用详解
  • 统计学习方法的三要素
  • 深入了解 find_element 方法:Web 自动化定位元素的核心​
  • Codeforces Round 1037 (Div. 3)(补题)
  • 前端面试专栏-工程化:27.工程化实践(CI/CD、代码规范)
  • 六种经典排序算法:从原理到 Java 实现
  • Linux系统之kbdrate 命令详解
  • Linux:多线程---深入生产消费模型环形队列生产消费模型