LVS负载均衡集群

一.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/null2>&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将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量。

缺点:需要负载均衡器与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。


3、IP隧道模式(VS-TUN)

原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求报文封装一层IP隧道(T-IP)转发到真实服务器(RS)。真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均衡器。

优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量。

缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持“IP Tunneling”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值