文章目录
LVS负载均衡群集
群集与分布式
一、群集(集群、Cluster)
群集(集群)是由多台主机组成的集合体,这些主机共同协作以完成相同的任务,并对外提供一个统一的访问入口,从而形成一个整体。群集技术通过整合多台主机的资源,提高了系统的可扩展性、可用性、容量和性能。
群集的类型
- 负载均衡群集(LB)
- 目标:提高系统的响应效率,处理更多的访问请求,减少延迟,实现高并发、高负载的能力。
- 实现:通过负载均衡算法将访问请求分担给多个主机处理。负载均衡器会根据一定的策略(如轮询、加权轮询、最少连接等)将请求分发到不同的服务器上,从而均衡服务器的负载。
- 典型代表:软件类包括LVS、Nginx、HAProxy、SLB等;硬件类包括F5、绿盟等。
- 高可用群集(HA)
- 目标:提高系统的可靠性,减少服务中断时间,确保服务的连续性。高可用群集通常通过主备或多主的方式实现,当主节点出现故障时,备节点或另一个主节点会接管服务,从而保证服务的连续性。
- 实现:主备模式和多主模式。在主备模式下,一个节点作为主节点提供服务,另一个节点作为备节点处于待机状态。当主节点出现故障时,备节点会接管服务。在多主模式下,多个节点都可以提供服务,并且它们之间会进行负载均衡和故障转移。
- 典型代表:keepalived、heartbeat等。
- 高性能计算群集(HPC)
- 目标:将多台服务器的硬件资源整合成资源池,以获取高性能的CPU、内存等资源,从而提高整体运行能力。高性能计算群集通常用于处理大规模的数据密集型计算任务,如仿真、建模和渲染等。
- 实现:通过云计算、网格计算等技术将多台服务器的计算能力进行整合。在高性能计算群集中,数据和运算会相应地分布到多个单元中,从而实现并行计算。
- 典型代表:公有云、私有云(如OpenStack)、混合云等。这些云平台提供了高性能计算和存储资源,可以满足各种复杂计算任务的需求。
二、分布式
分布式系统也是由多台主机组成的,但每台主机都各司其职,共同完成同一个目标。分布式系统通过将任务分解到多个节点上并行处理,提高了系统的处理能力和容错性。分布式系统通常用于处理大规模的数据存储和处理任务,如大数据分析、分布式数据库等。
三、总结
群集(集群)和分布式都是提高系统性能和处理能力的重要手段。群集技术通过整合多台主机的资源来提高系统的可扩展性、可用性、容量和性能;
而分布式系统则通过将任务分解到多个节点上并行处理来提高系统的处理能力和容错性。
在实际应用中,可以根据具体的需求和场景选择合适的群集或分布式技术来构建系统。
LVS(Linux Virtual Server)负载均衡技术提供了三种主要的工作模式,以满足不同场景下的需求。以下是这三种模式的详细介绍:
LVS负载均衡的三种模式
一、NAT 地址转换模式
- 工作原理:
- 调度器(负载均衡器)作为所有真实服务器的默认网关,即客户端的访问入口和真实服务器返回响应消息的出口。
- 当客户端发送请求时,调度器会接收并处理这些请求,然后根据负载均衡算法选择一台真实服务器进行处理。
- 真实服务器处理完请求后,将响应消息发送回调度器,由调度器再转发给客户端。
- 特点:
- 调度器会承载双向流量的负载压力,可能成为性能瓶颈。
- 真实服务器处于内网环境并使用私网IP,具有一定的安全性。
- 所有主机共享VIP地址,但响应消息不原路返回调度器。
二、TUN IP隧道模式
- 工作原理:
- 调度器仅作为客户端的访问入口。
- 真实服务器的响应消息直接返回给客户端,不需要经过调度器。
- 调度器与真实服务器之间通过专用的IP隧道相互通信。
- 特点:
- 真实服务器需要部署在互联网环境中,具有独立的公网IP。
- 隧道模式的成本较高,网络安全要求也高。
- 数据在IP隧道传输过程中需要额外的封包和解包过程,可能影响传输性能。
三、DR 直接路由模式
- 工作原理:
- 调度器仅作为客户端的访问入口。
- 真实服务器的响应消息直接返回给客户端,不需要经过调度器。
- 真实服务器与调度器部署在同一个物理网络里,可以直接通过交换机通信。
- 特点:
- 减少了调度器的负载压力,因为响应消息不经过调度器。
- 真实服务器和调度器必须在同一个物理网络中。
- 真实服务器可以使用私有地址或公网地址。如果使用公网地址,可以通过互联网直接访问。
- 是企业的首选LVS模式,因为性能优越且配置相对简单。
LVS负载均衡的算法
LVS支持多种负载均衡算法,以满足不同场景下的需求。常用的算法包括:
- rr(轮询):将收到的访问请求按顺序轮流分配给群集中的各节点(真实服务器)。
- wrr(加权轮询):根据真实服务器的权值分配任务,权值较高的服务器将优先获得任务。
- lc(最少连接):将收到的访问请求优先分配给连接数最少的节点。
- wlc(加权最少连接):假设各台真实服务器的权值依次为Wi,当前TCP连接数依次为Ti,依次取Ti/Wi为最小的服务器作为下一个分配的服务器。
- sh(源地址哈希):以源地址为关键字查找一个静态hash表来获得需要的真实服务器。
- dh(目的地址哈希):以目的地址为关键字查找一个静态hash表来获得所需的真实服务器。
部署实例
LVS-NAT模式部署实例
涵盖NFS共享存储、Nginx节点服务器和LVS调度器的配置:
一、环境准备
- 四台主机:一台作为NFS服务器,两台作为Nginx节点服务器,一台作为LVS调度器。
- 所有主机的基础配置已完成,包括主机名、IP地址、网络连接等。
二、部署NFS共享存储
- NFS服务器配置
- 安装NFS服务:
yum install nfs-utils rpcbind -y
- 新建共享目录,并创建测试文件:
mkdir -p /opt/shared echo "This is the NFS shared directory" > /opt/shared/index.html
- 配置NFS导出目录:编辑
/etc/exports
文件,添加以下内容:/opt/shared 192.168.1.0/24(rw,sync,no_root_squash)
- 启动NFS服务:
systemctl start rpcbind && systemctl start nfs
- 确保NFS服务开机自启:
systemctl enable rpcbind && systemctl enable nfs
- 安装NFS服务:
- Nginx节点服务器配置
- 安装NFS客户端:
yum install nfs-utils -y
- 挂载NFS共享目录到Nginx的根目录:
注意:将mkdir -p /usr/share/nginx/html/shared mount 192.168.1.xxx:/opt/shared /usr/share/nginx/html/shared
192.168.1.xxx
替换为NFS服务器的实际IP地址。 - 确保挂载开机自启:编辑
/etc/fstab
文件,添加以下内容:192.168.1.xxx:/opt/shared /usr/share/nginx/html/shared nfs defaults,_netdev 0 0
- 安装NFS客户端:
三、部署Nginx节点服务器
- 安装Nginx
- 在两台Nginx节点服务器上分别安装Nginx:
yum install nginx -y
- 启动Nginx服务:
systemctl start nginx
- 确保Nginx服务开机自启:
systemctl enable nginx
- 在两台Nginx节点服务器上分别安装Nginx:
- 配置Nginx
- 确保Nginx的根目录指向NFS共享目录的挂载点:编辑
/etc/nginx/nginx.conf
文件,修改root
指令为/usr/share/nginx/html/shared
。 - 检查Nginx配置是否正确:
nginx -t
- 重新加载Nginx配置:
systemctl reload nginx
- 确保Nginx的根目录指向NFS共享目录的挂载点:编辑
- 设置默认网关
- 将Nginx节点服务器的默认网关指向LVS调度器的内网卡地址。编辑网络配置文件(如
/etc/sysconfig/network-scripts/ifcfg-eth0
),添加或修改GATEWAY
指令为LVS调度器的内网卡IP地址。 - 重启网络服务:
systemctl restart network
- 将Nginx节点服务器的默认网关指向LVS调度器的内网卡地址。编辑网络配置文件(如
- 关闭长连接(可选)
- 为了测试方便,可以关闭Nginx的长连接设置。编辑Nginx配置文件,修改
keepalive_timeout
指令为较低的值(如5s
)或注释掉该指令。 - 重新加载Nginx配置:
systemctl reload nginx
- 为了测试方便,可以关闭Nginx的长连接设置。编辑Nginx配置文件,修改
四、部署LVS调度器
- 配置双网卡
- 确保LVS调度器有两张网卡:一张用于连接外网(客户端),一张用于连接内网(Nginx节点服务器)。
- 配置网卡IP地址和网关。
- 启用IP路由转发
- 编辑
/etc/sysctl.conf
文件,添加以下内容:net.ipv4.ip_forward = 1
- 使配置生效:
sysctl -p
- 编辑
- 配置SNAT规则(可选)
- 如果内网主机有访问互联网的需求,需要在LVS调度器上配置SNAT规则。使用
iptables
命令进行配置。
- 如果内网主机有访问互联网的需求,需要在LVS调度器上配置SNAT规则。使用
- 安装ipvsadm工具
- 在LVS调度器上安装
ipvsadm
工具:yum install ipvsadm -y
- 在LVS调度器上安装
- 添加虚拟服务器和真实服务器的调度策略配置
- 使用
ipvsadm
命令添加虚拟服务器和真实服务器的配置。假设VIP为192.168.1.100
,后端Nginx节点服务器的IP地址为192.168.2.10
和192.168.2.20
。 - 添加虚拟服务器:
ipvsadm -A -t 192.168.1.100:80 -s rr
- 添加真实服务器:
ipvsadm -a -t 192.168.1.100:80 -r 192.168.2.10:80 -m ipvsadm -a -t 192.168.1.100:80 -r 192.168.2.20:80 -m
- 使用
-m
选项选择NAT模式。
- 使用
- 检查LVS配置
- 使用
ipvsadm -L -n
命令检查LVS的配置是否正确。
- 使用
五、测试
- 客户端配置
- 将客户端的默认网关指向LVS调度器的外网卡地址(如果客户端和LVS调度器在同一个网络中,则不需要配置默认网关)。
- 在客户端上访问VIP(如
http://192.168.1.100
),验证是否能够正确访问NFS共享目录中的文件。
- 负载均衡测试
- 使用多个客户端或浏览器窗口同时访问VIP,验证请求是否被正确分发到不同的Nginx节点服务器上。
LVS-DR模式部署实例
1. 配置负载调度器(192.168.80.10)
1.1 停止防火墙并设置SELinux为宽容模式
systemctl stop firewalld.service
setenforce 0
1.2 加载IP虚拟服务器模块并验证
modprobe ip_vs
cat /proc/net/ip_vs
1.3 安装IPVS管理工具
yum -y install ipvsadm
1.4 配置虚拟IP地址(VIP:192.168.80.188)
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0 # 假设ens33是网络接口名
vim ifcfg-ens33:0
# 添加以下内容
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.80.188
NETMASK=255.255.255.255
ifup ens33:0
ifconfig ens33:0
1.5 调整proc响应参数
vim /etc/sysctl.conf
# 添加或修改以下内容
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p
1.6 配置负载分配策略
ipvsadm-save > /etc/sysconfig/ipvsadm # 保存当前配置(如果为空则无需担心)
systemctl start ipvsadm
ipvsadm -C # 清除所有规则
ipvsadm -A -t 192.168.80.188:80 -s rr # 添加虚拟服务,使用轮询(RR)调度算法
ipvsadm -a -t 192.168.80.188:80 -r 192.168.80.12:80 -g # 添加真实服务器1,使用直接路由(-g)模式
ipvsadm -a -t 192.168.80.188:80 -r 192.168.80.13:80 -g # 添加真实服务器2,使用直接路由(-g)模式
ipvsadm # 查看当前规则
ipvsadm -ln # 查看节点状态,确认Route代表DR模式
2. 部署共享存储(NFS服务器:192.168.80.13)
2.1 停止防火墙并设置SELinux为宽容模式
systemctl stop firewalld.service
setenforce 0
2.2 安装NFS和RPCBIND
yum -y install nfs-utils rpcbind
2.3 创建共享目录并设置权限
mkdir /opt/xy101 /opt/xy102
chmod 777 /opt/xy101 /opt/xy102
2.4 配置NFS导出
vim /etc/exports
# 添加以下内容
/opt/xy101 192.168.80.0/24(rw,sync)
/opt/xy102 192.168.80.0/24(rw,sync)
# 注意:/usr/share *(ro,sync) 这行可能不需要,除非有特定用途
2.5 启动RPCBIND和NFS服务
systemctl start rpcbind.service
systemctl start nfs.service
3. 配置节点服务器(192.168.80.12 和 192.168.80.13)
3.1 停止防火墙并设置SELinux为宽容模式
systemctl stop firewalld.service
setenforce 0
3.2 配置虚拟IP地址(VIP:192.168.80.188)
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
# 添加以下内容
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.80.188
NETMASK=255.255.255.255
ifup lo:0
ifconfig lo:0
# 添加路由规则,将VIP的流量限制在本地
route add -host 192.168.80.188 dev lo:0
# 确保在系统启动时应用路由规则(CentOS 7及更高版本可能需要使用systemd服务)
vim /etc/rc.local
# 添加以下内容(如果文件不存在或内容被注释,请取消注释并添加)
/sbin/route add -host 192.168.80.188 dev lo:0
chmod +x /etc/rc.d/rc.local # 确保rc.local文件可执行(CentOS 7可能需要)
3.3 调整内核的ARP响应参数
vim /etc/sysctl.conf
# 添加或修改以下内容
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p
或者使用echo
命令直接设置(临时生效,重启后失效):
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 "2" >/proc/sys/net/ipv4/conf/all/arp_announce
3.4 安装NFS客户端、RPCBIND和HTTPD
yum -y install nfs-utils rpcbind httpd
3.5 启动RPCBIND和HTTPD服务
systemctl start rpcbind
systemctl start httpd
3.6 挂载NFS共享并配置Web内容
- 对于192.168.80.12:
mount.nfs 192.168.80.13:/opt/xy101 /var/www/html echo 'this is xy101 web!' > /var/www/html/index.html
- 对于192.168.80.13(注意:通常不会将NFS服务器同时作为Web服务器,除非有特殊需求):
注意:在实际部署中,通常不会将NFS服务器(192.168.80.13)同时配置为Web服务器之一,因为这会引起潜在的冲突和安全问题。如果确实需要,请确保仔细配置和测试。# 如果确实需要,可以挂载另一个共享或创建不同的内容 mount.nfs 192.168.80.13:/opt/xy102 /some/other/directory # 假设不覆盖/var/www/html # 或者,如果确实要使用/var/www/html,则确保不会与NFS服务冲突 # 但通常建议将NFS服务器和Web服务器分开
4. 测试LVS群集
在客户端(192.168.80.200)上使用浏览器访问http://192.168.80.188/
。应该能够看到轮询的Web内容,即依次显示来自192.168.80.12和192.168.80.13(如果正确配置了另一台Web服务器)的Web页面内容。
请确保所有配置都正确无误,并且网络服务(如防火墙、SELinux等)没有阻止LVS和Web服务的正常运行。如果遇到问题,请检查日志文件(如/var/log/messages
、/var/log/httpd/error_log
等)获取更多信息。