目录
一 集群简介
1.1 什么是集群
集群(Cluster) 是指一组相互连接的计算机或其他设备,它们协同工作以实现共同的目标或提供更高性能、可用性和可扩展性的服务,通俗的来说就是为了解决某个特定的问题,将多台计算机组合形成一个单个的系统。
1.2 集群的类型
- LB(负载均衡类):由多个主机组成,每个主机只负责一部分访问,提高系统的响应能力,尽可能快的处理访问,以低延迟为目的,做到高并发,高负载。
- HA(高可用类):提高系统的可靠性,尽可能避免服务中断,一般采用主备的方式,在出现问题能自动快速进行切换,以可靠性为目标。
- 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
未配置前访问和配置的界面都是一下访问同一个页面,配置之后就开始分开访问