LVS负载均衡群集
文章目录
LVS负载均衡群集
群集与分布式
群集(集群、Cluster)
群集(集群)是由多台主机组成的集合体,这些主机共同协作以完成相同的任务,并对外提供一个统一的访问入口,从而形成一个整体。群集技术通过整合多台主机的资源,提高了系统的可扩展性、可用性、容量和性能。
群集的类型
- 负载均衡群集(LB)
- 目标:提高系统的响应效率,处理更多的访问请求,减少延迟,实现高并发、高负载的能力。
- 实现:通过负载均衡算法将访问请求分担给多个主机处理。负载均衡器会根据一定的策略(如轮询、加权轮询、最少连接等)将请求分发到不同的服务器上,从而均衡服务器的负载。
- 典型代表:软件类包括LVS、Nginx、HAProxy、SLB等;硬件类包括F5、绿盟等。
- 高可用群集(HA)
- 目标:提高系统的可靠性,减少服务中断时间,确保服务的连续性。高可用群集通常通过主备或多主的方式实现,当主节点出现故障时,备节点或另一个主节点会接管服务,从而保证服务的连续性。
- 实现:主备模式和多主模式。在主备模式下,一个节点作为主节点提供服务,另一个节点作为备节点处于待机状态。当主节点出现故障时,备节点会接管服务。在多主模式下,多个节点都可以提供服务,并且它们之间会进行负载均衡和故障转移。
- 典型代表:keepalived、heartbeat等。
- 高性能计算群集(HPC)
- 目标:将多台服务器的硬件资源整合成资源池,以获取高性能的CPU、内存等资源,从而提高整体运行能力。高性能计算群集通常用于处理大规模的数据密集型计算任务,如仿真、建模和渲染等。
- 实现:通过云计算、网格计算等技术将多台服务器的计算能力进行整合。在高性能计算群集中,数据和运算会相应地分布到多个单元中,从而实现并行计算。
- 典型代表:公有云、私有云(如OpenStack)、混合云等。这些云平台提供了高性能计算和存储资源,可以满足各种复杂计算任务的需求。
三种模式
一、NAT 地址转换模式
- 工作原理:
- 调度器(负载均衡器)作为所有真实服务器的默认网关,即客户端的访问入口和真实服务器返回响应消息的出口。
- 当客户端发送请求时,调度器会接收并处理这些请求,然后根据负载均衡算法选择一台真实服务器进行处理。
- 真实服务器处理完请求后,将响应消息发送回调度器,由调度器再转发给客户端。
- 特点:
- 调度器会承载双向流量的负载压力,可能成为性能瓶颈。
- 真实服务器处于内网环境并使用私网IP,具有一定的安全性。
- 所有主机共享VIP地址,但响应消息不原路返回调度器。
二、TUN IP隧道模式
- 工作原理:
- 调度器仅作为客户端的访问入口。
- 真实服务器的响应消息直接返回给客户端,不需要经过调度器。
- 调度器与真实服务器之间通过专用的IP隧道相互通信。
- 特点:
- 真实服务器需要部署在互联网环境中,具有独立的公网IP。
- 隧道模式的成本较高,网络安全要求也高。
- 数据在IP隧道传输过程中需要额外的封包和解包过程,可能影响传输性能。
三、DR 直接路由模式
- 工作原理:
- 调度器仅作为客户端的访问入口。
- 真实服务器的响应消息直接返回给客户端,不需要经过调度器。
- 真实服务器与调度器部署在同一个物理网络里,可以直接通过交换机通信。
- 特点:
- 减少了调度器的负载压力,因为响应消息不经过调度器。
- 真实服务器和调度器必须在同一个物理网络中。
- 真实服务器可以使用私有地址或公网地址。如果使用公网地址,可以通过互联网直接访问。
- 是企业的首选LVS模式,因为性能优越且配置相对简单。
- 调度器仅作为客户端的访问入口,真实服务器的响应消息是直接返回给客户端的,不需要经过调度器。(与NAT模式的区别)
真实服务器与调度器是部署在同一个物理网络里,可以直接通过交换机通信,不需要专用的IP隧道传输。(与TUN模式的区别)
LVS负载均衡的算法
- rr(轮询)
- wrr(加权轮询)
- lc(最少连接)
- wlc(加权最少连接)
- sh(源地址哈希)
- dh(目的地址哈希)
- lblc(基于地址的最少连接)
- sed(最短预期延迟)
- nq(永不排队)
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
等)获取更多信息。
原文地址:https://blog.csdn.net/qq_64887224/article/details/142911165
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!