一、集群的基本理论
**(一)什么是集群
人群或事物聚集:**在日常用语中,群集指的是一大群人或事物密集地聚在一起。例如,"人们群集在广场上",这里的"群集"是指大量人群聚集的现象。
**计算机技术中的集群:**在计算机科学和信息技术领域,群集(Cluster)通常指的是多个独立的计算机系统通过网络连接起来协同工作,共同提供服务或者执行计算任务的一种技术架构。
这种群集可以实现负载均衡、高可用性、高性能计算等功能。
(二)集群的分类
负载均衡集群(LB Cluster):负载均衡是一种分布式计算技术,旨在通过一个或多个负载均衡器将网络流量和计算任务分配到后端的一组服务器上。这样,每个服务器只需处理一部分请求,避免了单个服务器过载,并且能够实现服务的水平扩展。在LVS集群中,Director节点就承担了负载均衡的角色。
**高可用性集群(HA Cluster):**高可用性是指系统设计的一种目标,即确保在正常运行期间尽可能减少服务中断时间,并在发生故障时快速恢复服务的能力。通过冗余硬件、软件和网络配置以及故障转移策略(如主备切换),可以消除SPOF(Single Point Of Failure,单点故障),提高系统的整体可用性。在LVS集群中,使用Heartbeat或keepalived等工具可以实现Director节点之间的高可用切换。
**高性能计算集群(HPC Cluster):**高性能计算指的是利用并行计算技术和超级计算机系统,解决科学、工程、商业等领域中的大规模复杂问题。HPC系统通常包括大量处理器核心、高速互连网络、高效存储系统以及针对特定应用优化的软件栈。虽然LVS主要用于负载均衡和服务分发,但它也可以作为构建HPC环境的一部分,例如在某些情况下用于管理和调度分散在网络中的计算资源。然而,LVS本身并不直接提供高性能计算功能,而是为高性能计算环境提供了更好的基础设施支持。
(三)LB Cluster 负载均衡集群
1.按实现方式划分
硬件:F5 Big-IP(F5服务器负载均衡模块)
软件:
lvs:Linux Virtual Server
nginx:支持七层调度
haproxy:支持七层调度
ats:Apache Traffic Server
2.按协议层划分
传输层(通用):DNAT 和 DPORT
LVS:
nginx:stream
haproxy:mode tcp
应用层(专用):针对特定协议,常称为 proxy server
http:nginx, httpd, haproxy(mode http), ...
fastcgi:nginx, httpd, ...
mysql:mysql-proxy, mycat...
(四)HA 高可用集群实现
keepalived:vrrp协议
Ais:应用接口规范
heartbeat
cman+rgmanager(RHCS)
coresync_pacemaker
二、LVS简介
(一)什么是LVS
LVS群集(Linux Virtual Server Cluster)是一种基于Linux操作系统内核的高性能、高可用网络服务负载均衡解决方案。它利用Linux内核的IP虚拟服务器(IPVS)模块,将一组物理服务器构成一个逻辑上的、单一且透明的高性能虚拟服务器集群。
(二)LVS工作原理
Linux Virtual Server(LVS)工作原理基于网络层(四层,传输层)的负载均衡技术,它通过内核级别的IP虚拟服务器(IPVS)模块实现透明的流量分发
架构组成
**Director(负载均衡器/调度器):**作为集群的前端入口节点,接收所有来自客户端的请求,并根据预设的策略将请求转发至后端服务器。
**Real Server(真实服务器):**一组实际提供服务的服务器,负责处理从Director转发过来的请求,并将响应数据返回给客户端。
(三)LVS集群类型中的术语
VS
'虚拟(代理)服务器。在LVS(Linux Virtual Server)负载均衡技术中,虚拟(代理)服务器是指
通过集群系统对外提供服务的逻辑实体,其IP地址通常被称为VIP(Virtual IP)'
RS
'真实服务器,是指参与LVS集群提供服务的一组物理或虚拟服务器。它们负责处理由Director转发
过来的客户端请求,并将响应数据返回给客户端'
CIP
'客户端IP地址,指请求LVS服务的客户端设备的网络IP地址。在某些情况下,可能需要在调度策略
或会话保持中考虑客户端IP以实现特定的功能需求。'
VIP
'虚拟IP地址,它是LVS集群对外提供的统一服务地址。客户端通过访问VIP来请求服务,而实际的请
求会被透明地分发到后端的Real Server上'
DIP
'Director IP地址,即负载均衡器的IP地址。在LVS架构中,Director节点也被称为负载均衡器,
它接收并根据预设策略分发客户端请求至后端的Real Server。'
RIP
'真实服务器IP地址,是指集群内各个Real Server各自的实际网络IP地址,这些服务器将直接处
理从Director节点转发过来的客户端请求。'
访问流程大体为
CIP访问VIP---->VIP进行调用转换发送给DIP----->DIP将请求交给真实服务器DIP----->DIP返还数据包交给DIP---->DIP将数据包交给客户端
根据不同的工作模式,访问的具体流程也不一样
三、LVS工作模式及相关命令
(一)工作模式
1.NAT 模式
在NAT(Network Address Translation) 模式下,客户端请求首先到达Director(负载均衡器,即LVS),Director将请求的目标IP地址修改为选定的Real Server的IP地址,并转发给Real Server。当Real Server处理完请求并返回响应时,响应包会发回给Director,Director再将其源IP地址更改为VIP(虚拟IP地址),然后将响应发送给客户端。这种方式下,Director节点承担了所有网络地址转换的工作,但其自身的网络性能可能会成为瓶颈。
NAT模式访问过程基本为
①客户端请求
客户端发起请求至服务集群的VIP(Virtual IP)
②Director处理
请求首先到达负载均衡器(Director),Director节点内核中的IPVS模块根据预设的调度算法选择一个后端Real Server。
③修改包信息转发
Director将客户端请求的目标IP地址从VIP更改为所选Real Server的实际IP地址,并且源IP地址也由客户端IP变为Director自己的IP地址(DNAT)。
④Real Server响应
请求被转发给选定的Real Server进行处理,Real Server处理完成后直接将响应发回给Director。
⑤再次修改包信息返回客户端
当Director接收到Real Server的响应时,它会重新更改响应报文的源IP地址为VIP,目标IP地址恢复为客户端IP地址(SNAT),然后将响应发送给客户端。
2.DR直接路由模式
在DR (Direct Routing) 模式中,Director并不修改数据包的内容,而是更改数据包的MAC地址信息,使得请求能够直接被送到指定的Real Server。这样,Real Server可以直接响应客户端,而无需经过Director再次转发。这种模式下,Director和Real Server必须在同一物理网络中,并且Director需要通过ARP代理来管理VIP在局域网中的MAC地址映射关系。
①客户端请求
客户端发起请求至服务集群的VIP(Virtual IP)
②Director节点处理
请求首先到达前端的Director节点,Director节点上的内核模块IPVS根据预设的调度算法选择一个合适的后端真实服务器(Real Server)。
③MAC地址修改转发
在DR模式下,Director不改变数据包的目标IP地址(仍为VIP),而是修改其MAC地址,将数据包的MAC地址更改为所选Real Server的MAC地址。这样,当数据包在网络中传播时,会直接被送到指定的Real Server,而不是再次经过Director。
④Real Server响应
Real Server收到请求后进行正常的业务处理,并将响应直接返回给客户端,响应报文中的源IP仍然是VIP,目标IP是客户端的IP地址。
⑤网络层透明传输
因为在整个过程中,客户端始终认为它是在与VIP通信,所以对于客户端而言,整个过程是完全透明的,从而实现了负载均衡的效果。
在DR模式下,Director和Real Server需要位于同一物理网络中,通常还需要启用ARP代理或者IP伪装功能来确保网络设备正确地将VIP的MAC地址映射到Director节点上,以便能将请求定向到正确的Real Server。
其特点为:
Director和各RS都配置有VIP
确保前端路由器将目标IP为VIP的请求报文发往Director
RS和Director要在同一个物理网络
请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
不支持端口映射(端口不能修改)
客户端获取Director(LVS)的MAC地址
由于Director与真实服务器都设置了相同的VIP地址,为防止IP冲突,需要关闭服务端的ARP响应
路由器发起ARP广播,只有Director回复,从而获取Director的MAC地址
优点
负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量。
缺点
需要负载均衡器与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。
3.TUN隧道模式
原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求报文封装一层IP隧道(T-IP)转发到真实服务器(RS)。真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均衡器。
**优点:**负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量。
**缺点:**隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持"IP Tunneling"。
|---------|-------------|------------------|----------------|
| | NFS | TUN | DR |
| 优点 | 端口转换 | WAN | 性能最好 |
| 缺点 | 性能瓶颈 | 服务器支持隧道模式 | 不支持跨网段 |
| 真实服务器要求 | any | Tunneling | NON-arp device |
| 支持网络 | private | LAN/WAN | LAN |
| 真实服务器数量 | low(10~20) | High(100) | High(100) |
| 真实服务器网关 | lvs内网地址 | Own router(网工定义) | Own router |
(二)调试算法
ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态
分为两种:静态方法和动态方法
仅根据算法本身进行调度
静态
RR:roundrobin,轮询,较常用
WRR:Weighted RR,加权轮询,较常用
SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如: Web缓存
动态
主要根据每RS当前的负载状态及调度算法进行调度Overhead=value 较小的RS将被调度
LC:least connections 适用于长连接应用
算法为:Overhead=activeconns*256+inactiveconns
WLC:Weighted LC,默认调度方法,较常用
算法为:Overhead=(activeconns*256+inactiveconns)/weight
SED:Shortest Expection Delay,初始连接高权重优先,只检查活动连接,而不考虑非活动连接
算法为:Overhead=(activeconns+1)*256/weight
**NQ:**Never Queue,第一轮均匀分配,后续SED
**LBLC:**Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理,实现Web Cache等
LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS,,实现Web Cache等
(三)ipvsadm 工具
ipvsadm工具 是Linux中用于管理IPVS(IP Virtual Server)负载均衡服务的核心工具。IPVS是Linux内核中的一种虚拟服务器实现,它允许将一组物理服务器集群作为单一的、逻辑上的高性能和高可用虚拟服务器对外提供服务。
ipvsadm工具的主要功能包括:
1.添加和删除服务
-A 参数用于在内核中添加新的虚拟服务器。
-D 参数用于删除已存在的虚拟服务器配置。
2.设置调度算法
使用 -s 参数可以指定虚拟服务器使用的负载均衡调度算法,如轮询(rr)、加权轮询(wrr)、最少连接(lc)、加权最少连接(wlc)等。
-w: 设置权重(权重为0时表示暂停节点)
3.添加和删除后端真实服务器
-a 参数用于向现有虚拟服务器添加真实服务器。
-d 参数用于从虚拟服务器中删除指定的真实服务器。
4.查看当前配置
-L 或 --list 参数用于显示当前所有的IPVS规则和服务定义。
5.持久化保存和恢复规则
-S 用于保存当前所有IPVS规则到标准输出或文件。
-R 则可以从之前保存的规则文件中恢复IPVS规则。
6.LVS伪装类型
-m 表示使用NAT群集模式
-g 表示使用DR模式
-i 表示使用TUN模式
7.指定端口
-t: 指定VIP地址及TCP端口
-r: 指定RIP地址及TCP端口
通过ipvsadm工具,管理员可以方便地创建、修改和监控基于LVS的负载均衡系统,并根据业务需求调整流量分发策略,从而确保整个集群系统的稳定性和高效运行。
四、NAT模式 LVS负载均衡部署
|---------|-------------------------|
| 外网客户端 | 12.0.0.1 |
| web服务器1 | 192.168.83.20 |
| web服务器2 | 192.168.83.30 |
| 网关服务器 | 192.168.83.40 12.0.0.10 |
| NFS服务器 | 192.168.83.50 |
(一)配置NFS服务器
1.建立共享文件
首先在NFS服务器上建议共享文件与目录
如果没有安装nfs、rpcbind。执行下面这条命令进行安装
yum install nfs-utils rpcbind -y
安装完毕之后,构建挂载目录与访问数据
2.共享目录
编辑/etc/exports文件,语法格式为:共享目录路径 可以访问的IP地址(权限)
例如指定一个地址对共享目录有读写权限,文件内容可编辑为:/nfs 192.168.83.30(rw)
编写完文件后开启服务
systemctl start nfs
systemctl start rpcbind
如果服务已经开启,执行:exportfs -r 刷新文件
(二)配置网关服务器
1.下载ipvsadm服务
首先安装ipvsadm服务:yum install ipvsadm.x86_64 -y
安装完之后直接启动服务会报错,因为找不到/etc/sysconfig/ipvsadm文件
这是一个配置信息文件,需要手动生成,使用ipvsadm-save命令
2.添加网卡
网关服务器准备两块网卡,分别设置一个公网IP地址与私网IP地址,并将网关设置为自己
重启网卡后,使用route -n命令查看网关是否生效
3.开启路由转发
在/etc/sysctl.conf文件中添加net.ipv4.ip_forward = 1
4.设置ipvsadm策略
首先清空ipvsadm策略:ipvsadm -C,使用ipvsadm -ln查看策略
添加策略
css
ipvsadm -A -t 12.0.0.10:80 -s rr
'这条命令用于添加一个新的虚拟服务器(VIP),即在LVS中创建一个服务入口点。
-A 参数表示添加新的虚拟服务器,
-t 12.0.0.10:80 表示VIP地址和端口是12.0.0.10上的TCP 80端口。
-s rr 表示使用轮询(Round Robin)调度算法进行负载均衡,即请求会按顺序依次分发到后端服务器。'
ipvsadm -a -t 12.0.0.10:80 -r 192.168.83.20:80 -m
'这条命令用于将一个真实服务器添加到已有的虚拟服务器上。
-a 参数表示向已有虚拟服务器添加真实服务器记录,
-t 12.0.0.10:80 是指向已经创建好的VIP地址和端口,
-r 192.168.83.20:80 表示要添加的真实服务器地址和端口也是TCP 80端口。
-m 参数表示采用NAT模式进行转发,这意味着来自客户端的请求将会被改写目标地址为真实的服务器地址'
ipvsadm -a -t 12.0.0.10:80 -r 192.168.83.30:80 -m
'同上一个'
(三)配置服务器
1.服务器1
首先使用showmount -e命令查看NFS服务器共享情况
使用mount命令将共享目录挂载到web服务的站点目录下
将本机的网关设置为网关服务器的私网地址,并重启网卡生效
2.服务器2
查看NFS服务器共享目录
开启web服务并进行挂载
将本机的网关设置为网关服务器的私网地址,并重启网卡生效
(四)配置公网客户端
配置好模拟公网的IP地址及网关
在实际环境中基本上是无法设置公网的网关的,只能通过路由一次次转发到达
访问网关服务器
css
#LVS的负载调度算法有四种最常用的:轮询算法(rr)、加权轮询(wrr)、最少轮询(lc)、
#加权最少轮询(wlc)
#创建虚拟服务器(注意:NAT模式要两块网卡,调度器的地址是外网口地址)
#群集的VIP地址为12.0.0.10,针对TCP 80端口提供负载分流服务,使用的轮询调度算法。
#对于负载均衡调度器来说,VIP必须是本机实际已启用的IP地址
ipvsadm -A -t 12.0.0.10:80 -s rr
#选项
'"-A"表示添加虚拟服务器,
"-t"用来指定VIP地址及TCP端口,
"-s"用来指定负载调度算法------rr、wrr、lc、wlc'
#添加服务器节点
ipvsadm -a -t 12.0.0.10:80 -r 192.168.83.20:80 -m
ipvsadm -a -t 12.0.0.10:80 -r 192.168.83.20:80 -m
'选项
"-a"表示添加真实服务器
"-t"用来指定VIP地址及TCP端口
"-r"用来指定RIP地址及TCP端口
"-m"表示使用NAT群集模式("-g"是DR模式,"-i"是TUN模式)
{ -m参数后面还可以跟-w的参数,这里没有做的"-w"用来设置权重(权重为0时表示暂停节点)}'
#删除服务器节点
ipvsadm -d -r 192.168.83.20:80 -t 12.0.0.10:80
'需要从服务器池中删除某一个节点时,使用选项"-d"。
执行删除操作必须指定目标对象,包括节点地址、虚拟IP地址。
如上所示的操作将会删除LVS群集12.0.0.10:80中的节点192.168.83.20:80
若需要删除整个虚拟服务器时,使用选项-D并指定虚拟IP地址即可,无需要指定节点。
例如:"ipvsadm -D -t 12.0.0.10:80",则删除此虚拟服务器。'
ipvsadm -l #查看节点状态,加个"-n"将以数字形式显示地址、端口信息
ipvsadm-save > /etc/sysconfig/ipvsadm #保存策略
#使用导出/导入工具ipvsadm-save/ipvsadm-restore可以保存、恢复LVS策略,
#方法类似于iptables的规则的导出、导入
五、DR模式部署
环境部署
|-------------|---------------------------------------|-------------------------------------------------------------------------|
| C/S | IP地址 | 安装软件 |
| DR服务器 | 192.168.83.40;VIP:192.168.83.200 | |---------------------------------| | |-------------| | ipvsadm | | |
| web服务器 | 192.168.83.60;VIP:192.168.83.200 | httpd |
| web服务器2 | 192.168.83.100;VIP:192.168.83.200 | httpd |
| 客户端 | 192.168.83.30 | |
1.客户端发起请求,直接访问虚拟IP(VIP)
2.路由器发起ARP广播,获取调度服务器的MAC地址
3.LVS的调度器接受请求之后,根据算法选择一台后端的真实服务器,请求转发到后端真实服务器,把请求报文的目的MAC地址,修改成后端真实服务器的MAC地址,然后转发
4.后端真实F服务器接受请求,处理完成之后。由后端服务器直接把响应结果转发给客户端,响应报文中的目的MAC地址修改成客户端的MAC地址,直接把响应报文转发到客户端
VIP的作用:(设置相同的VIP地址)
1、标识后端的真实服务器
2、保证调度器和后端服务器之间的通信,保证请求可以正确的转发到后端服务器
3、实现高可用和故障转移
解决IP地址冲突问题
在真实服务器上修改内核参数,使真实服务器只对自己服务器上的真实IP地址响应ARP解析。
(二)配置DR服务器
下载ipvsdam工具:yum install ipvsadm.x86_64 -y
1.配置虚拟VIP
想要永久保存VIP,可以添加网卡,或写一个ens33:0的配置文件保存
添加虚拟网卡,注意子网掩码为32,表示该地址为一个固定地址
2.调整/proc响应参数
net.ipv4.ip_forward = 0
'这个参数用于控制IP转发功能。当其值为0时,表示关闭IP层的路由转发功能。这意味着系统不
会接受来自其他子网的流量并将其转发到另一个子网,通常在主机仅作为终端节点而不是路由器
或网关时设置。'
net.ipv4.conf.all.send_redirects = 0
'这个参数控制是否发送ICMP重定向消息。当其值为0时,禁止所有接口(包括以后可能新增的)
发送ICMP重定向消息。ICMP重定向消息通常用于通知主机其发送数据包的目标路由可以直接到达
,无需通过当前网关。禁用此功能可以防止潜在的安全攻击,并且在某些网络架构中避免不必要的
重定向'
net.ipv4.conf.default.send_redirects = 0
'类似于上一个参数,但作用于未来新建的接口。它将默认设置新创建的网络接口不发送ICMP重定向消息'
net.ipv4.conf.ens33.send_redirects = 0
'此参数针对具体的网络接口"ens33",确保该接口也不发送ICMP重定向消息'
3.配置ipvsadm规则
ipvsadm-save >/etc/sysconfig/ipvsadm #生成配置信息文件
systemctl start ipvsadm.service #启动服务
ipvsadm -A -t 192.168.83.200:80 -s rr
'这条命令创建了一个新的虚拟服务器(VIP),IP地址为192.168.83.200,监听端口为80并设置调度算
法为 rr(轮询),这意味着所有到这个VIP和端口的请求将按照轮询的方式被分发到后端的real Server'
ipvsadm -a -t 192.168.83.200:80 -r 192.168.83.60:80 -g
'这条命令向刚才创建的虚拟服务器添加了一个真实服务器(real Server),其IP地址为
192.168.83.60,监听的端口也是 80。参数 -g 表示使用 DR 模式,即直接路由模式,意味着请求
通过Director节点时不改变目标IP地址,仅修改MAC地址指向实际处理请求的真实服务器'
ipvsadm -a -t 192.168.83.200:80 -r 192.168.83.100:80 -g
'类似地,这条命令添加了另一个真实服务器,IP地址为 192.168.83.100,同样以 DR 模式运行在端
口 80 上。这样,在此配置下,来自客户端对 VIP (192.168.83.200:80) 的请求将会被轮流分配给两
个真实服务器进行处理。'
(三)配置web服务
配置web服务器1
1.启用web服务
首先安装web服务:yum install httpd -y
启动服务并建立数据文件
2.添加虚拟IP
添加虚拟网卡,为回环口,与LVS调度服务器建立连接
3.调整内核参数
net.ipv4.conf.all.arp_ignore 和 net.ipv4.conf.default.arp_ignore
'设置为1表示节点将更严格地处理ARP请求。在某些情况下,系统不会响应非本地IP地址的ARP请求
这有助于防止IP地址冲突,并且可以用于LVS DR模式下的Director节点,以避免对外直接响应ARP请求'
net.ipv4.conf.all.arp_announce 和 net.ipv4.conf.default.arp_announce
'设置为2表示节点在发送ARP应答时总是使用其主接口上的最具体的地址(即,优先级最高的源IP地址)
这同样对LVS DR模式很有用,确保Director节点在回应ARP请求时只使用VIP,而不是实际的物理接
口地址。'