一,集群
- 集群指的是由多个计算机(通常称为节点)组成的一个系统,它们通过网络连接在一起,共同协作完成某些任务或提供服务(相当于一个大型计算机)。集群的设计目的是为了提高计算能力、可靠性和可扩展性。集群通常用于需要处理大量数据或需要高可用性和容错性的场景。
- 随着互联网应用的发展,网站对硬件性能、响应速度、服务稳定性和数据可靠性的要求越来越高,单个服务器已经难以应对不断增长的负载和对高可用性的需求。
- 解决办法有两个:
- 1.使用昂贵的小型机或大型机:这是一种直接提升硬件性能的方法,通过高性能的服务器硬件来支持更高的负载和更稳定的服务。
- 2.使用多台相对廉价的普通服务器组成集群:这是一种更为经济且灵活的方案。通过将多台普通服务器整合在一起,构建一个集群,从而实现高可用性和负载均衡。
- 解决办法有两个:
- 在架构中,可以使用LVS(Linux Virtual Server,Linux虚拟服务器)技术来管理服务器集群。LVS通过整合多台服务器,使得它们对外表现为一个统一的服务,使用同一个IP地址提供相同的服务。这种方法不仅提高了系统的整体性能,还增强了服务的可靠性和可扩展性,是企业中常用的一种集群技术。
二,集群的分类
根据群集所针对的目标不同,群集可以分成三种
1. 负载均衡群集(Load Balance Cluster)
- LB的负载分配依赖于主节点的分流算法,将来自客户机的访问请求分担给多个服务器节点,从而缓解整个系统的负载 。比如反向代理,DNS轮询等等
- 提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载(LB)的整体性能 。
2.高可用群集 (High Availability Cluster)
- HA的工作方式包括双工和主从两种模式,双工即所有节点同时在线;主从则只有主节点在线,但当出现故障时从节点能自动切换为主节点。 比如故障切换,双机热备等等 。
- 提高应用系统的可靠性、尽可能地减少中断时间为目标,确保服务的连续性,达到高可用(HA) 的容错效果 。
3.高性能运算群集 (High Performance Computer Cluster)
- 以提高应用系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC)能力 。
三,使用场景
LVS(Linux Virtual Server)负载均衡集群是一种强大且高效的负载均衡解决方案,常用于需要高可用性、高性能和大规模扩展能力的场景。
1.高并发访问的网站:
- 在访问量极大的网站上,如电商平台、社交媒体、大型门户网站等,LVS可以通过分发请求到多个后端服务器来分担负载,确保网站在高流量下依然能保持稳定和快速的响应。
2.数据中心和云计算环境:
- 在数据中心或云计算环境中,LVS可用于管理多个虚拟机或物理服务器之间的负载,保证资源的充分利用和系统的高可用性。它可以帮助提供商分配计算资源,处理大量的用户请求。
3.企业内部应用:
- 企业内部应用,如OA系统、ERP系统、邮件系统等,当有多个服务器节点时,可以使用LVS来实现负载均衡,确保应用的稳定性和高可用性。
4.API网关和微服务架构:
- 在微服务架构中,LVS可以作为API网关的一部分,用于管理服务之间的流量,确保每个服务节点都能均衡地处理请求,防止某些节点因过载而导致服务不可用。
5.文件下载和流媒体服务器:
- 在提供大文件下载或流媒体服务的场景中,LVS可以有效地分配负载,确保文件传输和流媒体播放的速度和稳定性,提升用户体验。
6.数据库读写分离:
- 对于高负载的数据库系统,LVS可以实现读写分离,读操作分发到多个读服务器,写操作集中到主服务器,从而提升数据库的整体性能和可用性。
7.容灾和高可用性:
- 在构建容灾系统时,LVS可以用于实现流量的自动切换,当某个节点故障时,流量会自动转移到其他可用节点,保证系统的持续可用性。
四,负载均衡的集群架构
1. 负载调度器层(Load Balancer or Director)
- 功能:作为整个集群系统的唯一入口,负载调度器负责接收所有来自外部的请求,并将这些请求分配到后端的服务器池中进行处理。对外,负载调度器通过一个虚拟IP地址(VIP)来表现,所有客户端的请求都会通过这个VIP地址进入系统。
- 结构:
- 主调度器和备调度器:为了确保高可用性,通常会配置主、备两台负载调度器。当主调度器出现故障时,备调度器能够无缝接管所有请求,确保系统的连续运行。
- VIP地址:也称为群集IP地址,是集群对外提供服务的统一入口。
2. 服务器池层(Server Pool)
- 功能:服务器池是集群中实际执行应用服务的部分。每个服务器节点负责处理负载调度器分配的请求。服务器池中的每个节点都有独立的真实IP地址(RIP),用于接收调度器的分发请求。
- 结构:
- 服务器节点:每个节点独立运行,处理客户端的请求。如果某个节点出现故障,负载调度器的容错机制会自动将其隔离,防止故障影响整个系统的运行。
- 容错机制:调度器会持续监控每个服务器节点的健康状态,自动剔除故障节点,并在其恢复正常后重新加入服务器池。
3. 共享存储层(Shared Storage)
- 功能:共享存储为服务器池中的所有节点提供统一、一致的文件存取服务,确保整个集群系统的数据一致性和文件共享。共享存储的设计对于那些需要多个服务器节点访问相同数据的应用场景尤为重要。
- 结构:
- 共享存储设备:可以使用网络附加存储(NAS)设备,或者通过网络文件系统(NFS)提供共享存储服务的专用服务器。共享存储的设计要保证高可用性和数据一致性,避免数据冲突或丢失。
- 数据一致性:确保在服务器池中任何一个节点对数据的操作都能被其他节点及时感知,保证系统的一致性。
五,负载均衡的工作模式
负载均衡集群是现代企业中广泛使用的一种技术,主要用于分散和管理大量并发请求,提高系统的可用性和响应速度。下面是负载均衡集群常见的工作模式
1. 地址转换(NAT模式)
概述:
地址转换模式(NAT,Network Address Translation)是负载均衡集群中最常用的模式之一。在这种模式下,负载均衡器接收来自客户端的请求,并将其转发给后端服务器进行处理(类似防火墙私有网络)。请求在通过负载均衡器时,负载均衡器会修改数据包的目标IP地址和端口,以使其指向后端服务器。当后端服务器响应时,负载均衡器还会将响应包的源IP地址和端口修改为负载均衡器的IP地址(同一个物理网络),然后返回给客户端。
优点:
- 简单易用:设置相对简单,适合中小型应用场景。
- 灵活性高:负载均衡器可以轻松控制请求的分发和响应。
- **安全性高:**优于IP隧道(TUN模式),直接路由(DR模式)
缺点:
- 性能瓶颈:所有流量都必须经过负载均衡器,可能成为系统的瓶颈,尤其是在高流量场景下。
- 单点故障:如果负载均衡器出现问题,整个集群可能不可用,除非设计了冗余机制。
2. IP隧道(TUN模式)
概述:
IP隧道模式(TUN,Tunneling)是为了解决NAT模式中性能瓶颈问题而设计的一种模式。在TUN模式下,负载均衡器接收到客户端请求后,将数据包封装到IP隧道中,并将其发送到后端服务器。(服务器节点分散在互联中,有独立公网地址,通过专用的ip隧道与负载均衡器通信)后端服务器在处理请求时会直接将响应返回给客户端,而不经过负载均衡器。
优点:
- 性能更高:由于响应直接从后端服务器返回给客户端,减少了负载均衡器的处理负担,提高了整体性能。
- 适合大规模部署:尤其适合需要处理大量并发请求的场景,如大型网站和应用服务。
缺点:
- 复杂性较高:需要在后端服务器和负载均衡器之间配置IP隧道,增加了部署和管理的复杂性。
- 对网络要求高:要求负载均衡器和后端服务器之间能够建立隧道,并且后端服务器必须具备公网IP址。
3. 直接路由(DR模式)
概述:
直接路由模式(DR,Direct Routing)是另一种高效的负载均衡模式。在DR模式下,负载均衡器将请求直接转发给后端服务器,而不改变数据包的IP地址。后端服务器处理请求后,直接通过自身的网络接口将响应发送给客户端(不需要建立专用IP隧道)。与TUN模式类似,响应不经过负载均衡器。
优点:
- 极高的性能:由于响应数据不经过负载均衡器,DR模式可以处理非常高的请求负载。
- 低延迟:直接路由减少了数据包在网络中的跳数,降低了延迟。
缺点:
- 配置复杂:需要在后端服务器上配置虚拟IP地址(VIP),并要求负载均衡器和所有后端服务器在同一局域网内。
- 对网络拓扑要求高:后端服务器必须与负载均衡器位于同一网络环境中,限制了其应用场景。
六,lvs虚拟服务器
LVS(Linux Virtual Server,Linux虚拟服务器)是一个基于Linux操作系统的负载均衡项目,用于构建高性能、高可用性的服务器集群。LVS通过将客户端请求分发到多个后端真实服务器上,从而提高系统的吞吐量和可靠性。LVS通常用于Web服务器、数据库服务器、邮件服务器等应用的负载均衡和高可用性场景。
1.Linux Virtual Server
- Linux Virtual Server:是一个针对Linux内核的负载均衡解决方案。
- 成立时间:该项目由我国的章文嵩博士于1998年5月创建。
- 官方网址:http://www.linuxvirtualserver.org/
- **检查内核对LVS(Linux Virtual Server)的支持的命令 **:
- modprobe ip_vs:加载ip_vs模块,ip_vs是LVS的核心模块,负责虚拟服务器的实现。
- cat /proc/net/ip_vs:查看/proc/net/ip_vs文件的内容,显示当前LVS的版本信息和配置情况。
2. lvs负载调度算法
2.1轮询(Round Robin)
- 描述:将收到的访问请求按照顺序轮流分配给集群中的各节点(真实服务器),均等地对待每一台服务器,而不管服务器实际的连接数和系统负载。
- 特点:这种方式简单直接,适用于负载较为均衡的场景,但在服务器性能不一致的情况下可能无法达到最佳效果。
- 适用场景:适合服务器性能相近的环境,或当请求处理时间和负载相对均衡时。
2.2加权轮询(Weighted Round Robin)
- 描述:根据调度器设置的权重值来分发请求,权重值高的节点优先获得任务,分配的请求数越多。
- 特点:确保性能强的服务器承担更多的访问流量,从而在服务器性能不均衡的情况下实现更高效的负载分配。
- 适用场景:适用于服务器性能不均的情况,通过调整权重可以优化请求分配,确保高性能服务器承担更多的流量。
2.3 最少连接(Least Connections)
- 描述:根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点。
- 特点:这种方法适用于长连接的场景,能够动态平衡服务器的负载,确保请求分配给当前负载最轻的服务器。
- 适用场景:适用于一般场景,特别是在长连接或请求处理时间不均衡的环境中,可以动态调整请求分配。
2.4加权最少连接(Weighted Least Connections)
- 描述:在服务器节点的性能差异较大时,可以为真实服务器自动调整权重。性能较高的节点将承担更大比例的活动连接负载。
- 特点:这种方法适合在服务器性能不一致的情况下使用,确保高性能服务器承担更多的负载,从而优化整体系统性能。
- 适用场景:特别适用于服务器性能差异明显的集群,能够通过动态调整权重确保整体系统的负载均衡和高效运行。
3. LVS 工作模式区别
工作模式 | NAT模式 | TUN模式 | DR模式 |
---|---|---|---|
节点服务器 | real server | real server | real server |
节点数量 | 低 (10-20) | 高 (100) | 高 (100) |
真实网关 | 负载调度器 | 自由路由器 | 自由路由器 |
IP地址 | 公网 + 私网 | 公网 | 私网 |
优点 | 安全性高 | 安全、速度快 | 性能最好 |
缺点 | 效率低、压力大 | 需要隧道支持 | |
交换机中需配置VXLAN | 不能跨越LAN(局域网) | ||
交换机中需配置VXLAN |
4.ipvsadm工具
4.1使用 ipvsadm工具进行 LVS 群集创建与管理的四个主要步骤:
第一步,创建虚拟服务器:
- 这是LVS负载均衡配置的第一步,使用ipvsadm创建一个虚拟服务器(VIP),该服务器对外提供服务,并将流量分发到后端的真实服务器。
第二步,添加、删除服务器节点:
- 使用ipvsadm可以动态添加或删除真实服务器节点到 LVS 群集,这些节点是实际处理请求的服务器。这个步骤允许管理员根据需要灵活管理服务器资源。
第三步,查看群集及节点情况:
- 通过ipvsadm可以查看当前 LVS 群集的状态,包括虚拟服务器的配置、各个真实服务器节点的连接数和运行状态等信息,以便管理员实时监控和管理群集。
第四步,保存负载分配策略:
- 管理员可以使用ipvsadm保存当前的负载分配策略,确保在系统重启后或发生故障时,配置能够被恢复和使用。这是确保 LVS 配置持久化的重要一步。
3.2ipvsadm工具选项
选项 | 功能描述 |
---|---|
-A | 添加虚拟服务器 |
-D | 删除整个虚拟服务器 |
-s | 指定负载调度算法(如轮询: rr 、加权轮询: wrr 、最少连接: lc 、加权最少连接: wlc ) |
-a | 添加真实服务器(节点服务器) |
-d | 删除某一个节点 |
-t | 指定 VIP 地址及 TCP 端口 |
-r | 指定 RIP 地址及 TCP 端口 |
-m | 使用 NAT 群集模式 |
-g | 使用 DR 模式 |
-i | 使用 TUN 模式 |
-w | 设置权重(权重为 0 时表示暂停节点) |
-p 60 | 设置长连接保持时间为 60 秒 |
-l | 列表查看 LVS 虚拟服务器(默认为查看所有) |
-n | 以数字形式显示地址、端口等信息,常与 -l 选项组合使用,如 ipvsadm -ln |
七,安装 lvs nat
准备虚拟机如下
LVS负载调度器:ens33:192.168.88.60 ens37:10.0.0.1(vmnet3)
Web1 节点服务器1:192.168.88.70,网关为 192.168.88.60
Web2 节点服务器2:192.168.88.80,网关为 192.168.88.60
NFS服务器:192.168.88.90
客户端(win10):10.0.0.12 (Vmnet3),网关为10.0.0.1
1.nfs服务器配置
更改主机名为nfs
hostnamectl set-hostname nfs
bash
关闭防火墙,强制功能
systemctl stop NetworkManager
systemctl disable NetworkManager
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
下载nfs,rpcbind
yum install -y nfs-utils rpcbind
启动nfs rpcbind,开机自启nfs rpcbind,确认nfs rpcbind状态
systemctl start nfs.service
systemctl enable nfs.service
systemctl status nfs.service
systemctl start rpcbind.service
systemctl enable rpcbind.service
systemctl status rpcbind.service
创建xxx,yyy目录
mkdir /opt/xxx /opt/yyy
给xxx,yyy授权777
chmod 777 /opt/xxx /opt/yyy
编辑共享目录的访问权限
vim /etc/exports
/usr/share *(ro,sync)
/opt/xxx 192.168.88.0/24(rw,sync)
/opt/yyy 192.168.88.0/24(rw,sync)
发布共享
exportfs -rv
showmount -e
2.web1配置
更改主机名为web1
hostnamectl set-hostname web1
bash
关闭防火墙,强制功能
systemctl stop NetworkManager
systemctl disable NetworkManager
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
编辑网卡
vim /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=ens33
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.88.70
NETMASK=255.255.255.0
GATEWAY=192.168.88.90
DNS1=8.8.8.8
systemctl restart network.service
查询 NFS 服务器的挂载信息
showmount -e 192.168.88.90
yum下载httpd
yum install -y httpd
启动httpd
systemctl start httpd.service
挂载
临时挂载
mount.nfs 192.168.88.90:/opt/yyy /var/www/html/
echo 'this is xxx' > /var/www/html/index.html
或
永久挂载
vim /etc/fstab
192.168.88.90:/opt/yyy /var/www/html nfs defaults,_netdev 0 0
mount -a
设置Apache网页页面
echo 'this is xxx' > /var/www/html/index.html
3.web2配置
更改主机名为web2
hostnamectl set-hostname web2
bash
关闭防火墙,强制功能
systemctl stop NetworkManager
systemctl disable NetworkManager
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
编辑网卡
vim /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=ens33
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.88.80
NETMASK=255.255.255.0
GATEWAY=192.168.88.90
DNS1=8.8.8.8
systemctl restart network.service
查询 NFS 服务器的挂载信息
showmount -e 192.168.88.90
yum下载httpd
yum install -y httpd
启动httpd,检查httpd开启进程情况
systemctl start httpd.service
netstat -antulp|grep :80
挂载
临时挂载
mount.nfs 192.168.88.90:/opt/yyy /var/www/html/
echo 'this is yyy' > /var/www/html/index.html
或
永久挂载
vim /etc/fstab
192.168.88.90:/opt/yyy /var/www/html nfs defaults,_netdev 0 0
mount -a
设置Apache网页页面
echo 'this is yyy' > /var/www/html/index.html
4.lvs服务器配置
更改主机名为lvs
hostnamectl set-hostname lvs
bash
关闭防火墙,强制功能
systemctl stop NetworkManager
systemctl disable NetworkManager
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
yum下载nfs rpcbind
yum install -y nfs-utils rpcbind
启动,开启rpcbind
systemctl start rpcbind.service
systemctl enable rpcbind.service
添加物理网络并配置
ip a
cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens35
vim /etc/sysconfig/network-scripts/ifcfg-ens35
DEVICE=ens35
BOOTPROTO=none
ONBOOT=yes
IPADDR=10.0.0.1
NETMASK=255.255.255.0
#GATEWAY=192.168.88.2
#DNS1=8.8.8.8
配置SNAT转发规则
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
或
echo '1' > /proc/sys/net/ipv4/ip_forward
sysctl -p
yum安装iptables
yum install -y iptables*
启动iptables
systemctl start iptables
查看当前系统中 nat 表中所有规则的命令,并清空
iptables -t nat -nL
清空 nat 表中的所有规则
iptables -t nat -F
或
清空 filter 表中的规则
iptables -F
添加80端口匹配通过
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
添加路由后转发,查看设置
iptables -t nat -A POSTROUTING -s 192.168.88.0/24 -o ens35 -j SNAT --to-source 10.0.0.1
iptables -t nat -nL
保存
iptables-save > /etc/sysconfig/iptables
yum下载ipvsadm
yum install -y ipvsadm
加载LVS内核模块
modprobe ip_vs
查看ip_vs版本信息
cat /proc/net/ip_vs
保存当前 IPVS(IP Virtual Server)配置
ipvsadm-save > /etc/sysconfig/ipvsadm
或
ipvsadm --save > /etc/sysconfig/ipvsadm
或
touch /etc/sysconfig/ipvsadm
启动 iptables
systemctl start iptables.service
清除原有策略
ipvsadm -C
添加一个虚拟服务器,使用轮询调度算法
ipvsadm -A -t 10.0.0.1:80 -s rr
向虚拟服务器添加真实服务器使用nat模式权重为1
ipvsadm -a -t 10.0.0.1:80 -r 192.168.88.70 -m -w 1
ipvsadm -a -t 10.0.0.1:80 -r 192.168.88.80 -m -w 1
ipvsadm
或
ipvsadm -ln