一.ipvsadm 工具选项说明:
-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
二. NAT模式 LVS负载均衡群集部署
负载调度器:内网关 ens33:192.168.80.10,外网关 ens36:12.0.0.1
Web节点服务器1:192.168.80.100
Web节点服务器2:192.168.80.101
NFS服务器:192.168.80.13
客户端:12.0.0.12
2.1 部署共享存储(NFS服务器:192.168.80.13)
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
##实用程序集合,nfs-utils
提供了在 Linux 系统上进行 NFS 客户端和服务器配置、管理和维护的工具。
##rpcbind :系统服务,允许程序在不同计算机上通过网络相互调用。
yum install nfs-utils rpcbind -y
systemctl start rpcbind.service
systemctl start nfs.service
systemctl enable nfs.service
systemctl enable rpcbind.service
mkdir /opt/kgc /opt/benet
chmod 777 /opt/kgc /opt/benet
echo 'this is kgc web!' > /opt/kgc/index.html
echo 'this is benet web!' > /opt/benet/index.html
##在 NFS 服务器上,/etc/exports
文件定义了将哪些本地文件系统共享给客户端,并指定了每个共享的访问权限。每一行表示一个共享配置。
##格式:<共享的本地文件系统的路径> <指定被授权访问该共享的客户端主机名、IP 地址或 IP 地址范围> <指定访问权限和其他设置>
## 常用共享选项:
-
rw
:读写权限。 -
ro
:只读权限。 -
sync
:同步写入模式,确保数据同步写入到共享的文件系统。 -
async
:异步写入模式,不会等待数据同步写入完成。
##/usr/share *(ro,sync) 是指定所有用户都可以访问,对/usr/share共享文件同步模式,只读权限。
vim /etc/exports
/usr/share *(ro,sync)
/opt/kgc 192.168.92.0/24(rw,sync)
/opt/benet 192.168.92.0/24(rw,sync)
--发布共享---
##exportfs -rv:重新导出(刷新) NFS 服务器上的共享配置,并显示导出的结果。
exportfs -rv
2.2 配置节点服务器(192.168.80.100、192.168.80.101)
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
##httpd:接收客户端的 HTTP 请求,并返回相应的 HTTP 响应。用于搭建和管理各种类型的网站、应用程序和服务
##showmount -e 192.168.80.13
将查询 IP 地址为 192.168.80.13 的 NFS 服务器,以检索导出的共享列表。
yum install httpd -y
systemctl start httpd.service
systemctl enable httpd.service
yum install nfs-utils rpcbind -y
showmount -e 192.168.80.13
systemctl start rpcbind
systemctl enable rpcbind
--192.168.80.100---
##mount.nfs:挂载远程 NFS(Network File System)共享到本地文件系统。
##mount.nfs <远程主机>:<远程路径> <本地路径>
mount.nfs 192.168.80.13:/opt/kgc /var/www/html
##fstab
文件包含了系统启动时自动挂载文件系统的规则和设置。每一行表示一个文件系统的挂载点配置
##<设备> <挂载点> <文件系统类型> <挂载选项> <备份选项> <文件系统检查顺序>
vim /etc/fstab
192.168.80.13:/opt/kgc /var/www/html nfs defaults,_netdev 0 0
--192.168.80.101---
mount.nfs 192.168.80.13:/opt/benet /var/www/html
echo 'this is benet web!' > /var/www/html/index.html
vim /etc/fstab
192.168.80.13:/opt/benet /var/www/html nfs defaults,_netdev 0 0
2.3 配置负载调度器(内网关 ens33:192.168.80.10,外网关 ens36:12.0.0.1)
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
(1)配置SNAT转发规则
##sysctl.conf:指定系统在启动时加载的内核参数值,以改变系统的行为、性能和安全性
##启用 IP 转发功能,允许 Linux 系统作为路由器或网关,将数据包转发到其他网络
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
##ip_forward
是 Linux 内核中用于控制 IPv4 转发的虚拟文件。
##值为 0 时,表示禁用了 IPv4 转发;当其值为 1 时,表示启用了 IPv4 转发。
或 echo '1' > /proc/sys/net/ipv4/ip_forward
##sysctl -p:加载并应用 /etc/sysctl.conf
文件中的内核参数配置。
sysctl -p
##iptables
是 Linux 上用于配置和管理防火墙规则的工具
##-t 12.0.0.1:80: 指定要删除映射关系的虚拟服务器的目标地址和端口。
##-r 192.168.80.11:80
:指定要删除的映射关系的真实服务器的地址和端口
##ipvsadm -d -t 12.0.0.1:80 -r 192.168.80.11:80
:从 IPVS 配置中删除指定的虚拟服务器与真实服务器之间的映射关系。
##-F
参数表示清除(flush)指定表中的所有规则,包括 NAT 表中的规则
##iptables -t nat -F:用于清除(flush) Linux 系统中 NAT 表规则的命令。
##iptables -F:
是一个用于清除(flush) Linux 系统中所有防火墙规则的命令,允许所有的网络流量通过,相当于关闭了防火墙。
##iptables -t nat -F
只会清除 NAT 表中的规则,而不会影响过滤表中的规则。而 iptables -F
则会清除过滤表中的规则,但不会影响 NAT 表中的规则。
##-A POSTROUTING
:将规则附加到 POSTROUTING 链,该链用于处理数据包在离开路由器之前的最后一步转发。
##-s 192.168.80.0/24
:指定源 IP 地址为 192.168.80.0/24
,即匹配来自该子网的数据包。
##-o ens36
:指定出接口为 ens36
,即匹配从该网络接口流出的数据包。
##-j SNAT
:指定动作为 SNAT,即进行源地址转换。
##--to-source 12.0.0.1
:将源 IP 地址转换为 12.0.0.1
。
##iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens36 -j SNAT --to-source 12.0.0.1:用于实现网络地址转换 (NAT),将私有 IP 地址转换为公共 IP 地址,以实现内部网络与外部网络的通信。
iptables -t nat -F
iptables -F
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens36 -j SNAT --to-source 12.0.0.1
(2)加载LVS内核模块
##ip_vs
模块提供了IP Virtual Server(IPVS)功能。IPVS是一个内核功能,用于为网络服务提供负载均衡和高可用性,
##modprobe ip_vs:将ip_vs
模块加载到内核中,从而使您能够使用IPVS相关功能,如负载均衡算法、连接持久性和健康检查。
modprobe ip_vs #加载 ip_vs模块
cat /proc/net/ip_vs #查看 ip_vs版本信息
##uname -r:获取内核版本号
##grep -o "^[^.]*":仅输出每一行非任意字符开头的文本
##确保所需的IPVS内核模块已加载并可用于使用IPVS功能。
##/sbin/modinfo
:提供一个已加载的内核模块的文件路径作为参数
##/sbin/modinfo -F filename $i:根据指定的模块名称(通过变量 $i
提供)返回该模块的文件路径
##>/dev/null
和 2>&1
是用于重定向输出的命令行操作符,它将标准输出和标准错误输出都重定向到 /dev/null
##
/sbin/modprobe :尝试加载指定名称的内核模块
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done
(3)安装ipvsadm 管理工具
##使用 ipvsadm
,您可以根据需要配置和管理 IPVS,以实现负载均衡和高可用性的网络服务。
yum -y install ipvsadm;IPVS_SAVE_ON_STOP
:当停止IPVS服务时是否自动保存当前的IPVS配置;
--启动服务前须保存负载分配策略---
##/etc/sysconfig/ipvsadm:该文件通常用于指定IPVS的全局配置,包括负载均衡调度算法、超时设置、日志选项等;
##IPVS_SCHEDULER
:负载均衡调度算法的选择;IPVS_TIMEOUT
:与IPVS连接相关的超时设置;IPVS_SAVE_ON_RESTART
:当重启IPVS服务时是否自动保存当前的IPVS配置;IPVS_OPTIONS
:其他IPVS选项的设置
##ipvsadm-save > /etc/sysconfig/ipvsadm
用于将当前的 IPVS 配置保存到 /etc/sysconfig/ipvsadm
文件中。
ipvsadm-save > /etc/sysconfig/ipvsadm
或者 ipvsadm --save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
(4)配置负载分配策略(NAT模式只要在服务器上配置,节点服务器不需要特殊配置)
##-d
:表示删除指定的映射关系。
##-A
:表示添加一个新的IPVS配置项。
##:-t 12.0.0.1:80
:指定虚拟服务器的目标地址和端口
##-s rr
:指定使用的负载均衡调度算法
##-p 10
(可选):指定虚拟服务器的持久性参数。表示会话持久性,这个参数用于确保后续的连接请求会被分发到同一台真实服务器上。
##-a
:表示向虚拟服务器添加一个真实服务器。即添加一条映射关系。
##-t 12.0.0.1:80
:指定要添加真实服务器的虚拟服务器的目标地址和端口
##-m
:指定要添加的真实服务器的入站数据包处理模式为Masquerade模式,使真实服务器的响应数据包的源地址被替换为负载均衡器的地址,以确保数据包正确返回到负载均衡器。
##-w 1
(可选):指定真实服务器的权重值。在这个例子中,权重值设置为1,表示均等分配负载。
##ipvsadm -A -t 12.0.0.1:80 -s rr [-p 10]:将添加一个新的虚拟服务器到IPVS配置中,该虚拟服务器将监听12.0.0.1的80端口,并使用轮询算法将请求分发给后端的真实服务器。如果指定了持久性参数(-p),则会话将被保持,并确保后续的连接请求被分发到同一台真实服务器上
##ipvsadm -a -t 12.0.0.1:80 -r 192.168.80.12:80 -m [-w 1]:用于向IPVS配置中的虚拟服务器添加一个真实服务器(Real Server)。
##ipvsadm: 显示当前系统上的 IPVS 配置信息。
ipvsadm -C #清空(清除)IPVS的配置
ipvsadm -A -t 12.0.0.1:80 -s rr [-p 10]
ipvsadm -a -t 12.0.0.1:80 -r 192.168.80.11:80 -m [-w 1]
ipvsadm -a -t 12.0.0.1:80 -r 192.168.80.12:80 -m [-w 1]
ipvsadm #启用策略
ipvsadm -ln #查看节点状态,Masq代表 NAT模式
ipvsadm-save > /opt/ipvsadm #保存策略
----------------------------------------------------------------------------------------------------------
ipvsadm -d -t 12.0.0.1:80 -r 192.168.80.11:80 #删除群集中某一节点服务器
ipvsadm -D -t 12.0.0.1:80 #删除整个虚拟服务器
systemctl stop ipvsadm #停止服务(清除策略)
systemctl start ipvsadm #启动服务(重建规则)
ipvsadm-restore < /opt/ipvsadm #恢复LVS 策略
----------------------------------------------------------------------------------------------------------
(5).测试效果
在一台IP为12.0.0.12的客户机使用浏览器访问 http://12.0.0.1/ ,不断刷新浏览器测试负载均衡效果,刷新间隔需长点。
三. DR模式 LVS负载均衡群集
3.1 数据包流向分析:
(1)客户端发送请求到 Director Server(负载均衡器),请求的数据报文(源 IP 是 CIP,目标 IP 是 VIP)到达内核空间。
(2)Director Server 和 Real Server 在同一个网络中,数据通过二层数据链路层来传输。
(3)内核空间判断数据包的目标IP是本机VIP,此时IPVS(IP虚拟服务器)比对数据包请求的服务是否是集群服务,是集群服务就重新封装数据包。修改源 MAC 地址为 Director Server 的 MAC地址,修改目标 MAC 地址为 Real Server 的 MAC 地址,源 IP 地址与目标 IP 地址没有改变,然后将数据包发送给 Real Server。
(4)到达 Real Server 的请求报文的 MAC 地址是自身的 MAC 地址,就接收此报文。数据包重新封装报文(源 IP 地址为 VIP,目标 IP 为 CIP),将响应报文通过 lo 接口传送给物理网卡然后向外发出。
(5)Real Server 直接将响应报文传送到客户端。
DR 模式的特点:
(1)Director Server 和 Real Server 必须在同一个物理网络中。
(2)Real Server 可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过互联网对 RIP 进行直接访问。
(3)Director Server作为群集的访问入口,但不作为网关使用。
(4)所有的请求报文经由 Director Server,但回复响应报文不能经过 Director Server。
(5)Real Server 的网关不允许指向 Director Server IP,即Real Server发送的数据包不允许经过 Director Server。
(6)Real Server 上的 lo 接口配置 VIP 的 IP 地址。
3.2 DR模式 LVS负载均衡群集部署
DR 服务器:192.168.80.10
Web 服务器1:192.168.80.12
Web 服务器2:192.168.80.13
vip:192.168.80.188
客户端:192.168.80.200
1.配置DR 服务器(负载调度器)(192.168.80.10)
systemctl stop firewalld.service
setenforce 0
modprobe ip_vs
cat /proc/net/ip_vs
yum -y install ipvsadm
(1)配置虚拟 IP 地址(VIP:192.168.80.188)
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0 #若隧道模式,复制为ifcfg-tunl0
vim ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.80.188
NETMASK=255.255.255.255
ifup ens33:0 ##ifup ens33:0
命令将启用 ens33:0
接口,并根据其相关配置进行初始化和激活
ifconfig ens33:0 ##ifconfig ens33:0
是一个命令,用于查看和配置网络接口 ens33:0
的信息
(2)调整 proc 响应参数
#由于 LVS 负载调度器和各节点需要共用 VIP 地址,需要关闭 icmp 的重定向,不充当路由器。
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
(3)配置负载分配策略
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
ipvsadm -C
ipvsadm -A -t 192.168.80.188:80 -s rr
ipvsadm -a -t 192.168.80.188:80 -r 192.168.80.12:80 -g #若隧道模式,-g替换为-i;-a
:表示添加一条映射关系。
ipvsadm -a -t 192.168.80.188:80 -r 192.168.80.13:80 -g
ipvsadm
ipvsadm -ln #查看节点状态,Route代表 DR模式
2.部署共享存储(NFS服务器:192.168.80.13)
systemctl stop firewalld.service
setenforce 0
yum -y install nfs-utils rpcbind
mkdir /opt/kgc /opt/benet
chmod 777 /opt/kgc /opt/benet
vim /etc/exports
/usr/share *(ro,sync)
/opt/kgc 192.168.80.0/24(rw,sync)
/opt/benet 192.168.80.0/24(rw,sync)
systemctl start rpcbind.service
systemctl start nfs.service
3.配置节点服务器(192.168.80.100、192.168.80.101)
systemctl stop firewalld.service
setenforce 0
(1)配置虚拟 IP 地址(VIP:192.168.80.188)
#此地址仅用作发送 Web响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚接口 lo∶0 来承载 VIP 地址,并为本机添加一条路由记录,将访问 VIP 的数据限制在本地,以避免通信紊乱。
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 #注意:子网掩码必须全为 1
ifup lo:0
ifconfig lo:0
route add -host 192.168.80.188 dev lo:0
##/etc/rc.local
是一个启动脚本文件,用于在 Linux 系统引导过程中自动执行用户自定义的命令或脚本
##/sbin/route add -host 192.168.80.188 dev lo:0:将在系统的路由表中添加一条静态路由。这条路由指定将发送到目标主机 192.168.80.188 的数据包通过虚拟回环接口的子接口 lo:0
发送。
##-host :指定要添加的目标主机的 IP 地址
vim /etc/rc.local
/sbin/route add -host 192.168.80.188 dev lo:0
chmod +x /etc/rc.d/rc.local
(2)调整内核的 ARP 响应参数以阻止更新 VIP 的 MAC 地址,避免发生冲突
vim /etc/sysctl.conf
......
net.ipv4.conf.lo.arp_ignore = 1 #系统只响应目的IP为本地IP的ARP请求
net.ipv4.conf.lo.arp_announce = 2 #系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p
或者
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
sysctl -p
yum -y install nfs-utils rpcbind httpd
systemctl start rpcbind
systemctl start httpd
--192.168.80.100---
mount.nfs 192.168.80.13:/opt/kgc /var/www/html
echo 'this is kgc web!' > /var/www/html/index.html
--192.168.80.101---
mount.nfs 192.168.80.13:/opt/benet /var/www/html
echo 'this is benet web!' > /var/www/html/index.html
4.测试 LVS 群集
在客户端使用浏览器访问 http://192.168.80.188/
四. 注意点:
企业一般采用DR模式的负载均衡
简述LVS三种工作模式,简述他们的区别?
答案:
NAT:通过网络地址转换实现的虚拟服务器,大并发访问时,调度器的性能成为瓶颈
DR:使用路由技术实现虚拟服务器,节点服务器需要配置VIP,注意MAC地址广播
TUN:通过隧道方式实现虚拟服务器。
列举你知道的LVS调度算法?
答案:
轮询(Round Robin);
加权轮询(Weighted Round Robin);
最少连接(Least Connections);
加权最少连接(Weighted Least Connections);
源地址哈希值(source hash)。
LVS调度器常见算法(均衡策略)?
LVS调度器用的调度方法基本分为两类:
固定调度算法:rr,wrr,dh,sh
rr:轮询算法,将请求依次分配给不同的rs节点,即RS节点中均摊分配。适合于RS所有节点处理性能接近的情况。
wrr:加权轮训调度,依据不同RS的权值分配任务。权值较高的RS将优先获得任务,并且分配到的连接数将比权值低的RS更多。相同权值的RS得到相同数目的连接数。
dh:目的地址哈希调度(destination hashing)以目的地址为关键字查找一个静态hash表来获得所需RS。
sh:源地址哈希调度(source hashing)以源地址为关键字查找一个静态hash表来获得需要的RS。
动态调度算法:wlc,lc,lblc
wlc:加权最小连接数调度,假设各台RS的权值依次为Wi,当前tcp连接数依次为Ti,依次去Ti/Wi为最小的RS作为下一个分配的RS。
lc:最小连接数调度(least-connection),IPVS表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS。
lblc:基于地址的最小连接数调度(locality-based least-connection):将来自同一个目的地址的请求分配给同一台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑。
LVS的工作模式及其工作过程:
LVS 有三种负载均衡的模式,分别是VS/NAT(nat 模式)、VS/DR(路由模式)、VS/TUN(隧道模式)。
1、NAT模式(VS-NAT)
原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP)。真实服务器响应完请求后,查看默认路由,把响应后的数据包发送给负载均衡器,负载均衡器在接收到响应包后,把包的源地址改成虚拟地址(VIP)然后发送回给客户端。
优点:集群中的服务器可以使用任何支持TCP/IP的操作系统,只要负载均衡器有一个合法的IP地址。
缺点:扩展性有限,当服务器节点增长过多时,由于所有的请求和应答都需要经过负载均衡器,因此负载均衡器将成为整个系统的瓶颈。
2、直接路由模式(VS-DR)
原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求数据包的目标MAC地址改成后端真实服务器的MAC地址(R-MAC)。真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均衡器。
优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量。文章来源:https://www.toymoban.com/news/detail-425543.html
缺点:需要负载均衡器与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。
3、IP隧道模式(VS-TUN)
原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求报文封装一层IP隧道(T-IP)转发到真实服务器(RS)。真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均衡器。
优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量。
缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持“IP Tunneling”。文章来源地址https://www.toymoban.com/news/detail-425543.html
到了这里,关于LVS负载均衡集群的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!