走进lvs的世界 探索负载均衡与高可用的奥秘

目录

一 集群简介

二 集群和分布式

三 lvs 运行原理

3.1 lvs简介及其相关命令

3.2 lvs集群类型和常见类型部署方式

3.2.1 部署nat模式集群

3.2.2 部署dr模式集群

四 lvs的调度算法

4.1 lvs静态调度算法

4.2 lvs动态调度算法

4.3 防火墙标记解决轮询调度问题


一 集群简介

1.1 什么是集群

集群(Cluster) 是指一组相互连接的计算机或其他设备,它们协同工作以实现共同的目标或提供更高性能、可用性和可扩展性的服务,通俗的来说就是为了解决某个特定的问题,将多台计算机组合形成一个单个的系统。

1.2 集群的类型

  1. LB(负载均衡类):由多个主机组成,每个主机只负责一部分访问,提高系统的响应能力,尽可能快的处理访问,以低延迟为目的,做到高并发,高负载。
  2. HA(高可用类):提高系统的可靠性,尽可能避免服务中断,一般采用主备的方式,在出现问题能自动快速进行切换,以可靠性为目标。
  3. HPC(高性能类):提高cpu运算效率,扩展硬件资源,一般指超级计算机这一类,例如云计算。

二 集群和分布式

都涉及多个计算节点的配合工作,并且都是为了提高系统的性能;

集群侧重于多个节点共同完成相同的任务,通过并行处理来提高处理能力;

分布式系统则是将一个大任务分解为多个小任务,由不同的节点分别处理,最终共同完成整个任务。

三 lvs 运行原理

3.1 lvs简介及其相关命令

3.1.1 相关概念

lvs:Linux Virtual Server,负载调度器,集成于内核中;

VS代理服务器
RS后端服务器
CIP客户机ip
VIP代理服务器的外网ip
DIP代理服务器的内网ip
RIP真实服务器ip

3.1.2 lvs集群的类型

nat模式

大致访问流程:

客户端a1访问服务器,客户端cip先到vs的左边vip,然后经过内部路由,将a网段ip转换成b网段的,然后由vs将访问丢到后端rip真实服务器上,然后在返回到vs上,经过转换丢给客户端,这种模式呢,重点就在vs上,所以容易遇到瓶颈问题

DR模式

调度器和客户端处于同一个物理网络中,所以当请求到达调度器上时,调度器根据要求指定将自己vip的mac更换为真实主机的mac,然后请求到达相应的真实服务器上,服务器再根据默认路由,将包通过vip返回,这时就不再需要经过调度器,回到请求端上。

TUN模式

调度器不修改报文,到源报文头部加上一个原报文为dip目标报文为rip,到达真实服务器之后,直接相应客户端,源IP是vip目标ip是cip

特点:dip vip rip都应该是公网地址;rs的网关一般不能指向dip;请求报文要经过直连而响应报文不用经过直连;不支持端口映射;rs的os必须支持隧道模式

3.1.3 lvs相关信息和命令介绍

程序包ipvsadm
Unit File ipvsadm.service
主程序/usr/sbin/ipvsadm
规则保存工具/usr/sbin/ipvsadm-save
规则重载工具/usr/sbin/ipvsadm-restore
配置文件/etc/sysconfig/ipvsadm-config
ipvs调度规则文件/etc/sysconfig/ipvsadm

3.1.4 ipvsadm相关命令

集群中的增删改

-A #添加
-E #修改
-t #tcp服务
-u #udp服务
-s #指定调度算法,默认为WLC
-p#设置持久连接超时,持久连接可以理解为在同一个时间段同一个来源的请求调度到同一Realserver
-f#firewall mask 火墙标记,是一个数字

举例:[root@DR-server ~]# ipvsadm -A -t  ip:80  -s rr 

realserver的增删改

-a #添加realserver
-e #更改realserver
-t #tcp协议
-u #udp协议
-f #火墙 标签
-r #realserver地址
-g #直连路由模式
-i #ipip隧道模式
-m #nat模式
-w #设定权重
-Z #清空计数器
-C#清空lvs策略
-L #查看lvs策略
-n #不做解析
--rate :输出速率信息

举例:[root@DR-server ~]# ipvsadm -a -t ip:80    -r 192.168.0.30 -m

3.2 lvs集群类型和常见类型部署方式

3.2.1 部署nat模式集群

前期准备:四台虚拟机

lvs:(网卡1:nat       网卡2:仅主机)

vip:172.25.254.100   网卡一

dip:192.168.0.100     网卡二

webserver1:192.168.0.10(仅主机)

webserver2:192.168.0.20(仅主机)

测试:172.25.254.200

进行实验时,为了避免麻烦首先确保防火墙,和selinux的关闭,然后再webserver1/2上安装好web服务,并且制作好访问页面,确保正常在进行下面实验

例如:

然后lvs实验操作步骤

1 ip配置情况

2 开启路由转发功能:

3 在webserver2 测试路由功能是否正常

4 安装lvs软件

5 配置服务

6 客户端测试

webserver1/2操作步骤

提前配置好web服务

1 配置ip和网关,并且指向192.168.0.100

webserver1

webserver2

测试:

3.2.2 部署dr模式集群

基于上一个nat实验,我们需要再加一块路由设备,打开他的转发功能类似于上次实验的lvs配置

router配置

配置ip,和路由转发

所以两台web的网关也为192.168.0.100

webserver1

webserver2

因为时基于mac,所以我们需要抑制服务器的arp应答,并且添加vip

webserver1/2

lvs只添加vip和配置ip地址

lvs上编写策略

测试:

四 lvs的调度算法

4.1 lvs静态调度算法

1. 轮询(Round Robin)算法
这是一种最简单的调度策略。它将接收到的请求依次轮流分配给后端的真实服务器。每个服务器在一个循环周期内都会被平等地分配到请求,从而实现负载的平均分配。例如,假设有服务器 A、B、C,第一个请求分配给 A,第二个请求分配给 B,第三个请求分配给 C,然后第四个请求又回到 A,以此类推。

 

优点:实现简单,公平地分配负载。
缺点:没有考虑服务器的性能差异,可能导致性能较低的服务器无法及时处理请求。

 

2. 加权轮询(Weighted Round Robin)算法
为了解决轮询算法中未考虑服务器性能差异的问题,加权轮询算法为每台服务器分配一个权重值。权重越高的服务器,被分配到的请求数量就越多。例如,服务器 A 的权重为 2,服务器 B 的权重为 3,服务器 C 的权重为 5,那么在一个周期内,服务器 A 会分配到 2 个请求,服务器 B 会分配到 3 个请求,服务器 C 会分配到 5 个请求。

 

优点:能够根据服务器的性能差异进行合理的负载分配。
缺点:需要事先准确评估服务器的性能并设置合适的权重。

 

3. 源地址哈希(Source Hash)算法
根据请求的源 IP 地址进行哈希计算,将具有相同源 IP 地址的请求始终分配到同一台后端服务器。这样可以保证来自相同源地址的请求被定向到同一台服务器,从而提高会话的一致性和缓存的命中率。比如,源 IP 地址为 10.0.0.1 的请求计算出的哈希值对应服务器 X,那么后续来自 10.0.0.1 的请求都会被分配到服务器 X。

 

优点:保证同一源地址的请求被分配到同一服务器,有利于会话保持和缓存利用。
缺点:当某一服务器故障时,可能会影响到相关源地址的请求处理。

4. 目标地址哈希(Destination Hash)算法

 

目标地址哈希算法是根据请求的目标 IP 地址进行哈希运算,然后将请求分配到对应的后端服务器有服务器 S1、S2、S3,对请求的目标 IP 地址进行哈希计算,得到的结果决定将请求分配到某一台特定的服务器。如果多个请求的目标 IP 地址相同,它们会被分配到同一台服务器。

优点:可以将对相同目标地址的请求定向到同一台服务器,对于某些特定场景,如需要根据目标地址进行特定处理或优化的情况,能够提高处理效率。

 

缺点:对服务器的选择完全依赖于目标地址的哈希结果,如果某些目标地址的请求量过大,可能导致对应的服务器负载过高,而其他服务器负载较低,造成负载不均衡。

当服务器数量发生变化时,可能会导致哈希结果的重新分布,从而影响请求的分配。

4.2 lvs动态调度算法

1、LC:least connections(最少链接发) 适用于长连接应用Overhead(负载值)=activeconns(活动链接数) x 256+inactiveconns(非活 动链接数)

2、WLC:Weighted LC(权重最少链接) 默认调度方法Overhead=(activeconns x 256+inactiveconns)/weight

3、SED:Shortest Expection Delay, 初始连接高权重优先Overhead=(activeconns+1+inactiveconns) x 256/weight 但是,当node1的权重为1,node2的权重为10,经过运算前几次的调度都会被node2承接

4、NQ:Never Queue,第一轮均匀分配,后续SED

5、LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理

6、LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制 到负载轻的RS

4.3 防火墙标记解决轮询调度问题

因为我们同时开启http和https两个端口,他就会出现访问紊乱的问题,想让他们分开访问,就需要一定的配置

webserver1/2

下载mod_ssl,并且重启httpd

未配置前访问和配置的界面都是一下访问同一个页面,配置之后就开始分开访问

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值