IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux学习:四层负载均衡2 -> 正文阅读

[系统运维]Linux学习:四层负载均衡2

目录

一、LVS负载均衡四种工作模式

1、LVS NET模式

1.1 LVS NET模式介绍

1.2 LVS NET模式工作流程

2、DR工作模式

2.1 LVS DR模式介绍

2.2 LVS DR模式工作原理

2.3 LVS DR模式工作流程

2.4 LVS DR模式特点

2.5 LVS DR模式图解

3、LVS TUN工作模式

3.1 LVS TUN模式介绍

3.2 LVS TUN模式工作流程

3.3 LVS TUN模式图解

4、LVS full-nat 工作模式

5、 四种模式的区别

二、LVS ipvsadm命令的使用

1、 LVS-server 安装lvs管理工具

2、命令选项

三、实现lvs的持久连接

1、定义

2、lvs调度算法

2.1 静态算法(4种)

2.2 动态算法

四、LVS DR模式搭建

4.1 A:load balancer

(1)创建LVS的DR脚本

(2)给脚本设权

(3)执行脚本

(4)查看路由上的VIP

(5)查看网卡net上的VIP

4.2? B:real server

(1)创建转发脚本

(2)给脚本设权

(3)执行脚本

(4)查看路由上的vip

(5)查看网卡lo上的vip

4.3? C:real server

(1)由于rs1和rs2的配置相同,可以把rs1的配置复制到rs2

(2)然后复制到相应的文件下

(3)执行脚本

(4)查看路由上的vip

(5)查看网卡lo上的vip

4.4 测试

(1)用ipvsadm命令查看转发规则


一、LVS负载均衡四种工作模式

1、LVS NET模式

1.1 LVS NET模式介绍

Virtual Server via NAT(LVS-NAT):用地址转换实现虚拟服务器。分发器有能被外部访问到的合法IP地址,他修改来自专有网络的流出包的地址。外界看起来包是来自分发器本身,当外界包送到转换器时,他能判断出应该将包送到内部网的哪个节点。

优点:节省IP地址,能对内部进行伪装;

缺点:效率低

1.2 LVS NET模式工作流程

  • 当用户请求到Director Server ,此时请求的数据报文会先到内核空间的PREROUTING链。此时报文的源IP为CIP,目标IP为VIP。

  • PREROUTING检查发现数据包的目的IP是本机,将数据包送到INPUT链。

  • IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP。然后将数据包发送至POSTROUTING链。此时报文的源IP为CIP,目标IP为RIP。

  • POSTROUTING链通过选路,将数据包发送给Real Server。

  • Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。此时报文的源IP为RIP,目标IP为CIP。

  • Director Server把RS来到响应包,通过FORWORD转发给client在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。此时报文的源IP为VIP,目标IP为CIP。

LVS NET模式图解

2、DR工作模式

2.1 LVS DR模式介绍

Virtual Server via Direct Routing(VS-DR):用直接路由技术实现虚拟服务器。当参与集群的计算机和作为控制管理的计算机在同一网段时,可以用此方法,控制管理的计算机收到请求包时直接送到参与集群的节点。

2.2 LVS DR模式工作原理

DR和REAL SERVER都使用同一个IP对外服务。但只有DR对ARP请求进行响应,所有REAL SERVER对本身这个IP的ARP请求保持静默。也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的REAL SERVER,把目的MAC地址改为REAL SERVER的MAC并发给这台REAL SERVER。这时real server收到这个数据包,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。由于DR要对二层包头进行改换,所以DR和real server之间必须要在一个广播域,也可以理解为在同一台交换机上。

2.3 LVS DR模式工作流程

  • 当用户请求到到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。此时报文的源IP是CIP,目标IP为VIP。

  • PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链。

  • IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的的源MAC地址修改为DIP的MAC地址后,将目标MAC地址修改为RIP的MAC地址,然后将数据包发至POSTROUTING链。此时的源IP和目标均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址。

  • 由于DS和RS在同一个网络中,所以是通过二层,数据链路层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发到Real Server。

  • RS发现请求报文的MAC地址是自己的MAC地址,就会接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡,然后向外发出。此时的源IP地址为VIP,目标IP为CIP。

  • 响应报文最终送达到客户端。

2.4 LVS DR模式特点

  1. 保证前端路由将目标地址为VIP保文系统发送给Director Server,而不是RS。

  2. RS可以使用私有地址,也可以是公网地址,如果使用公网地址,此时可以通过互联网对RIP进行直接访问。

  3. RS跟Director Server必须在同一物理网络中;

  4. 所有的请求报文经由Director Server,但响应报文不能进过Director;

  5. 不支持地址转换,也不支持端口映射;

  6. RS可以是大多数常见的操作系统;

  7. RS的网关绝不允许指向DIP(因为我们不允许他经过director);

  8. RS上的lo接口配置VIP的IP地址。

2.5 LVS DR模式图解

3、LVS TUN工作模式

3.1 LVS TUN模式介绍

用IP隧道技术实现虚拟服务器。在集群的节点不在同一网段时可用的转发机制,是将IP包封装在其他网络流量中的方法。为了安全,应该使用隧道技术中的VPN,也可使用租用专线。

TUN模式:采用NAT技术时,由于请求和相应的报文必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。所以调度器把请求报文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。采用VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。

3.2 LVS TUN模式工作流程

客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址是VIP。

负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。

RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端。

3.3 LVS TUN模式图解

4、LVS full-nat 工作模式

lvs-fullnat(双向转换)

5、 四种模式的区别

lvs-nat与lvs-fullnat:请求和响应报文都经由Director

lvs-nat:RIP的网关要指向DIP;

lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信

lvs-dr与lvs-tun:请求报文要经由Director,但响应报文由RS直接发往client

lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发

lvs-tun:通过在原IP报文外封装新的IP头实现转发,支持远距离通信

二、LVS ipvsadm命令的使用

1、 LVS-server 安装lvs管理工具

下载程序包:yum -y install ipvsadm

Unit file:ipvsadm.service

主程序:/usr/sbin/ipvsadm

规则保存工具:/usr/sbin/ipvsadm-save

规则重载工具:/usr/sbin/ipvsadm-restore

配置文件:/usr/sbin/ipvsadm-config

2、命令选项

-A:在服务器列表中添加一条新的虚拟服务器记录

-t:表示tcp服务

-u:表示udp服务

-s:表示使用的调度算法

-a:在服务器表中添加一条新的真实主机记录

三、实现lvs的持久连接

1、定义

由于HTTP是一种无状态协议,每次请求完就立即断开了。所以就需要一种持久连接机制,来把同一用户的HTTP请求在超时时间内都重定向到同一台realserver,超时时间可以自己定义。

2、lvs调度算法

lvs调度算法分为静态和动态两种

2.1 静态算法(4种)

只根据算法进行调度,而不考虑后端服务器的实际连接情况和负载情况

1、RR:轮叫调度(Round Robin)

调度器通过“轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等的对待每一台服务器,而不管服务器上实际的连接数和系统负载。

2、WRR加权轮叫(Weight RR)

根据真实服务器的不同处理能力来调度访问请求。可以保证处理能力强的服务器处理更多的访问流量。

3、DH:目标地址散列调度(Destination Hash)

根据请求的目标IP地址,作为散列键从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将该请求发送到该服务器,否则返回空

4、SH:源地址hash(Source Hash0

源地址散列调度算法根据请求的源IP地址,作为散列键从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将该请求发送到该服务器,否则返回空

2.2 动态算法

前端的调度器会根据后端真实服务器的实际连接情况来分配请求

1、LC:最少连接

调度器通过“最少连接”调度算法动态的将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,“最小连接”可以较好的均衡负载。

2、WLC:加权最少连接

在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少连接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。

3、SED:最短期望延迟调度

在WLC基础上改进,Overhead=(ACTIVE+1)*256/加权。不再考虑非活动状态,把当前处于活动状态的数目+1来实现,数目最小的,接受下次请求,+1的目的是为了考虑加权的时候,非活动连接过多

缺陷:当权限过大的时候,会倒置空闲服务器一直处于无连接状态。

4、NQ:永不排队/最少队列调度

无需队列。如果有台realserver的连接数=0就直接分配过去,不需要在进行sed运算,保证不会有一个主机空间。在SED基础上无论+几,第二次一定给下一个,保证不会有一个主机不会很空闲着,不考虑非活动连接,才用NQ,SED要考虑活动状态连接,对于DNS的UDP不需要考虑非活动连接,而httpd的处于保持状态的服务就需要考虑非活动连接给服务器的压力。

5、LBLC:基于局部性的最少链接

6、LBLCR:带复制的基于局部性最少连接

四、LVS DR模式搭建

三台服务器A、B、C

4.1 A:load balancer

调度器dir ,分发器

systemctl stop firewalld && systemctl disable firewalld关闭三台服务器的防火墙

关闭selinux :setenforce 0

安装iptables-services:yum -y install iptables-services

添加iptables服务:systemctl enable iptables

启动iptables服务:systemctl start iptables.service

清空iptables规则:iptables -F

保存空规则:service iptables save

安装ipvsadm和net-tools:yum -y install ipvsadm net-tools

(1)创建LVS的DR脚本

vim /usr/local/sbin/lvs_dr.sh 打开配置文件写下如下内容

  • echo 1 > /proc/sys/net/ipv4/ip_forward 打开路由转发

  • ipv=/usr/sbin/ipvsadm 设置ipvsadm变量

  • vip=192.168.142.200 设置公网ip 的变量

  • rs1=192.168.142.2 设置real server1ip 的变量

  • rs2=192.168.142.134 设置real server2ip 的变量

  • net="ens33" 定义网卡

  • ifdown $net 关闭网卡

  • ifup $net 启动网卡,目的是清空临时设定的IP,避免重复设定。

  • ifconfig $net:2 $vip broadcast $vip netmask 255.255.255.255 up 绑定VIP到虚拟网卡$net:2上

  • route add -host $vip dev $(net):2 为$net:2网卡添加网关

  • $ipv -C 清空规则

  • $ipv -A -t $vip:80 -s wrr -A指定转发模式,-t指定director ip ,-s指定调度算法 ,wrr加权轮询调度

  • $ipv -a -t $vip:80 -r $rs1:80 -g -nw 1

    指定转发规则,-a:指定转发规则,-t指定调度器(director)ip, -r指定real server ip,-g指定转发模式为DR(gateway)-w指定权重

  • $ipv -a -t $vip:80 -r $rs2:80 -g -w 2

    指定转发规则,-a:指定转发规则,-t指定调度器(director)ip, -r指定real server ip,-g指定转发模式为DR(gateway)-w指定权重

(2)给脚本设权

chmod 755 /usr/local/sbin/lvs_dr.sh

(3)执行脚本

sh /usr/local/sbin/lvs_dr.sh

(4)查看路由上的VIP

route -n

(5)查看网卡net上的VIP

ip addr

4.2? B:real server

(web服务器)内网网卡

(1)创建转发脚本

yum -y install net-tools 安装net-tools软件包

vim /usr/local/sbin/lvs_rs.sh 编写配置脚本

#/bin/bash

  • vip=192.168.142.200 设置公网,把vip绑在lo上,是为了实现rs直接把结果返回给客户端

  • ifdown lo 关闭网卡

  • ifup lo 开启网卡

  • ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up 绑定vip 到虚拟网卡lo:0上

  • route add -host $vip lo:0 为Lo:0网卡添加网关

以下为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端

  • 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 "1" >/proc/sys/net/ipv4/conf/all/arp_annouce

arp_ignore:定义对目标地址为本机IP的ARP询问不同的应答模式0

0-(默认值):回应任何网络接口上对任何本地ip地址的arp查询请求;

1-只回答目标IP地址是来访网络接口本地地址的ARP查询请求;

2-只回答目标IP地址是来访网络接口本地地址的ARP请求,且来访Ip必须是在该网络接口的子网段内

3-不回应该网段界面的arp请求,而只对设置唯一和连接地址做出回应

4-7-保留未使用

8-不回应所有的(本地地址0arp查询

(2)给脚本设权

chmod 755 /usr/local/sbin/lvs_rs.sh

(3)执行脚本

sh /usr/local/sbin/lvs_rs.sh

(4)查看路由上的vip

route -n

(5)查看网卡lo上的vip

ip addr

4.3? C:real server

(web服务器)也可以用和rs1一样的配置方法一一配置。

(1)由于rs1和rs2的配置相同,可以把rs1的配置复制到rs2

scp /usr/local/sbin/lvs_rs.sh 192.168.142.134:/root

(2)然后复制到相应的文件下

cp lvs_rs.sh /usr/local/sbin/

(3)执行脚本

sh /usr/local/sbin/lvs_rs.sh

(4)查看路由上的vip

(5)查看网卡lo上的vip

4.4 测试

在rs1和rs2分别安装nginx:yum -y install nginx

给nginx的一个页面,重新定义,让rs1和rs2有区别,首先cd /usr/share/nginx/html/进入文件中

用vim index.html命令进入,然后按shift+:,输入set ic;

然后再shift+:,输入%s/centos/rs1/g,回车enter;

最后保存并退出。

在rs1和rs2进行相同的操作,要注意在rs2操作时,将%s/centos/rs1/g换成%s/centos/rs2/g

进行上述操作后,进行重启nginx :systemctl start nginx

在浏览器中分别输入192.168.142.2和192.168.142.136查看

(1)用ipvsadm命令查看转发规则

rs1权重为1,rs2权重为2,也就是rs2刷新两次,rs1会刷新一次,但刷新页面只会出现一个页面,并不会跳转,这是由于nginx的一个配置

我们重新配置一下rs1的nginx,打开vim /etc/nginx/nginx.conf,搜索keepalive,将keepalive_timeout 后面的65改为0,然后重新启动即可。rs2的nginx相同做法。

最终实现结果:在浏览器输入公网ip192.168.142.200,刷新两次rs2页面,再次刷新会跳转到rs1页面。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 11:16:52  更:2022-08-06 11:16:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 1:04:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码