千家信息网

LVS负载均衡群集——NAT地址转换模式实战(可跟做!)

发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,负载均衡群集(Load Balance Cluster)以提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载(LB)的整体性能LB的负载分配依赖于主节点的分流算法群集
千家信息网最后更新 2025年01月22日LVS负载均衡群集——NAT地址转换模式实战(可跟做!)

负载均衡群集(Load Balance Cluster)

以提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载(LB)的整体性能LB的负载分配依赖于主节点的分流算法

群集的负载调度技术有三种工作模式

  1. 地址转换(本文只介绍NAT模式)
  2. IP隧道
  3. 直接路由

NAT模式

地址转换 (Network AddressTranslation)

  • 简称NAT模式,类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机的访问入口,也是各节点回应客户机的访问出口
  • 服务器节点使用私有IP地址,与负载调度器位于同一一个物理网络,安全性要优于其他两种方式

负载均衡群集架构

负载均衡的结构

  • 第一层,负载调度器(Load Balancer或Director)
  • 第二层,服务器池(Server Pool)
  • 第三层,共享存储(Share Storage)

LVS的负载调度算法

轮询(Round Robin)

将收到的访问请求按照顺序轮流分配给群集中的各节点(真实服务器)均等地对待每一台服务器,而不管服务器实际的连接数和系统负载

加权轮询(Weighted Round Robin)

  • 根据真实服务器的处理能力轮流分配收到的访问请求,调度器可以自动查询各节点的负载情况,并动态调整其权重
  • 保证处理能力强的服务器承担更多的访问流量

最少连接(Least Connections)

根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点

加权最少连接(Weighted Least Connections)

  • 在服务器节点的性能差异较大的情况下,可以为真实服务器自动调整权重
  • 权重较高的节点将承担更大比例的活动连接负载

实验操作

实验环境

调度服务器(centos7):        外(ens36):12.0.0.1      内(ens33):192.168.200.1web服务器1(centos7):192.168.200.110web服务器2(centos7):192.168.200.120存储服务器(centos7):192.168.200.130client客户端(win10):12.0.0.12

1、验证存储服务器是否安装相关服务

[root@localhost ~]# rpm -q nfs-utilsnfs-utils-1.3.0-0.48.el7.x86_64   #已安装[root@localhost ~]# rpm -q rpcbindrpcbind-0.2.0-42.el7.x86_64   #已安装[root@localhost ~]# 

2、分别验证两台web服务器是否安装httpd服务,若没有,则安装

第一台:[root@localhost ~]# rpm -q httpd未安装软件包 httpd [root@localhost ~]# yum install httpd -y.................//省略安装过程[root@localhost ~]#第二台:[root@localhost ~]# rpm -q httpd未安装软件包 httpd [root@localhost ~]# yum install httpd -y.................//省略安装过程[root@localhost ~]#

3、验证调度服务器是否有管理工具,若没有,则安装

[root@localhost ~]# rpm -q ipvsadm未安装软件包 ipvsadm [root@localhost ~]# yum install ipvsadm -y.................//省略安装过程[root@localhost ~]#

一、配置调度服务器

1、将配置服务器的网络模式改为仅主机

2、配置存储服务器,固定IP地址

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=noBOOTPROTO=static   #dhcp改为staticDEFROUTE=yesIPV4_FAILURE_FATAL=noIPV6INIT=yesIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_FAILURE_FATAL=noIPV6_ADDR_GEN_MODE=stable-privacyNAME=ens33UUID=09073596-a7cf-404c-a098-28c3ff58c44bDEVICE=ens33ONBOOT=yesIPADDR=192.168.200.130   #IP地址NETMASK=255.255.255.0   #子网掩码GATEWAY=192.168.200.1   #网关[root@localhost ~]# systemctl restart network   #重启网络服务[root@localhost ~]# ifconfig    #查看网卡信息,ip设置成功ens33: flags=4163  mtu 1500        inet 192.168.200.130  netmask 255.255.255.0  broadcast 192.168.200.255        inet6 fe80::5134:22f5:842b:5201  prefixlen 64  scopeid 0x20        ether 00:0c:29:0d:f1:75  txqueuelen 1000  (Ethernet)        RX packets 818  bytes 69866 (68.2 KiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 319  bytes 44103 (43.0 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

3、关闭防火墙,开启存储共享服务

[root@localhost ~]# systemctl stop firewalld.service    #关闭防火墙[root@localhost ~]# setenforce 0   #关闭增强性安全功能[root@localhost ~]# [root@localhost ~]# systemctl start nfs.service   #开启nfs服务[root@localhost ~]# systemctl start rpcbind   #开启rpcbind服务[root@localhost ~]# 

4、修改配置文件/etc/exports

[root@localhost ~]# vim /etc/exports/usr/share *(ro,sync)   #共享目录给所有用户,权限制度/opt/abc/ 192.168.200.0/24(rw,sync)   #共享目录到固定网段用户,权限读写/opt/xyz/ 192.168.200.0/24(rw,sync)   #共享目录到固定网段用户,权限读写

5、创建共享目录,并授予权限

[root@localhost ~]# cd /opt/[root@localhost opt]# lsrh[root@localhost opt]# mkdir abc xyz   #创建目录[root@localhost opt]# ll总用量 0drwxr-xr-x. 2 root root 6 11月 26 17:33 abcdrwxr-xr-x. 2 root root 6 3月  26 2015 rhdrwxr-xr-x. 2 root root 6 11月 26 17:33 xyz[root@localhost opt]# chmod 777 abc xyz   #授权[root@localhost opt]# ll总用量 0drwxrwxrwx. 2 root root 6 11月 26 17:33 abcdrwxr-xr-x. 2 root root 6 3月  26 2015 rhdrwxrwxrwx. 2 root root 6 11月 26 17:33 xyz[root@localhost opt]# 

6、重新加载配置

[root@localhost opt]# exportfs -rvexporting 192.168.200.0/24:/opt/xyzexporting 192.168.200.0/24:/opt/abcexporting *:/usr/share[root@localhost opt]# 

二、web服务器1的配置

1、修改web服务器1的网络模式为仅主机

2、配置固定IP地址

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=noBOOTPROTO=static   #dhcp改为staticDEFROUTE=yesIPV4_FAILURE_FATAL=noIPV6INIT=yesIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_FAILURE_FATAL=noIPV6_ADDR_GEN_MODE=stable-privacyNAME=ens33UUID=3ceed540-b04c-48d6-a4f7-79951f09ea1dDEVICE=ens33ONBOOT=yesIPADDR=192.168.200.110   #IP地址NETMASK=255.255.255.0   #子网掩码GATEWAY=192.168.200.1   #网关[root@localhost ~]# systemctl restart network   #重启网络服务[root@localhost ~]# ifconfig    #查看网卡信息,ip设置成功ens33: flags=4163  mtu 1500        inet 192.168.200.110  netmask 255.255.255.0  broadcast 192.168.200.255        inet6 fe80::3e1d:31ba:f66a:6f80  prefixlen 64  scopeid 0x20        ether 00:0c:29:27:1c:3f  txqueuelen 1000  (Ethernet)        RX packets 12581  bytes 15759224 (15.0 MiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 6118  bytes 501343 (489.5 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

3、关闭防火墙,并开启http服务

[root@localhost ~]# systemctl stop firewalld.service    #关闭防火墙[root@localhost ~]# setenforce 0   #关闭增强性安全功能 [root@localhost ~]# systemctl start httpd.service    #开启http服务[root@localhost ~]# netstat -ntap | grep 80   #查看端口tcp6       0      0 :::80                   :::*                    LISTEN      50076/httpd         [root@localhost ~]# 

4、查看NFS服务共享信息

[root@localhost ~]# showmount -e 192.168.200.130Export list for 192.168.200.130:/usr/share */opt/xyz   192.168.200.0/24/opt/abc   192.168.200.0/24[root@localhost ~]# 

5、挂载NFS的共享目录,并查看是否挂载成功

[root@localhost ~]# mount.nfs 192.168.200.130:/opt/abc /var/www/html/   #挂载[root@localhost ~]# df -h   #查看挂载信息文件系统                  容量  已用  可用 已用% 挂载点/dev/sda2                  20G  3.4G   17G   17% /devtmpfs                  898M     0  898M    0% /devtmpfs                     912M     0  912M    0% /dev/shmtmpfs                     912M   18M  895M    2% /runtmpfs                     912M     0  912M    0% /sys/fs/cgroup/dev/sda5                  10G   37M   10G    1% /home/dev/sda1                 6.0G  174M  5.9G    3% /boottmpfs                     183M  4.0K  183M    1% /run/user/42tmpfs                     183M   40K  183M    1% /run/user/0192.168.200.130:/opt/abc   20G  3.3G   17G   17% /var/www/html   #挂载成功[root@localhost ~]# 

6、在挂载目录创建首页文件,并在存储服务器,查看是否创建文件成功

web服务器1:[root@localhost ~]# echo "this is abc web" > /var/www/html/index.html   #创建首页文件[root@localhost ~]# 存储服务器:[root@localhost opt]# cd abc/[root@localhost abc]# lsindex.html    #创建成功[root@localhost abc]#

三、web服务器2的配置

1、修改web服务器2的网络模式为仅主机

2、配置固定IP地址

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=noBOOTPROTO=static   #将dhcp改为staticDEFROUTE=yesIPV4_FAILURE_FATAL=noIPV6INIT=yesIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_FAILURE_FATAL=noIPV6_ADDR_GEN_MODE=stable-privacyNAME=ens33UUID=8ecd53ce-afdb-46f8-b7ff-b2f428a3bc8fDEVICE=ens33ONBOOT=yesIPADDR=192.168.200.120   #IP地址NETMASK=255.255.255.0   #子网掩码GATEWAY=192.168.200.1   #网关[root@localhost ~]# systemctl restart network   #重启网络服务[root@localhost ~]# ifconfig    #查看网卡信息,ip设置成功ens33: flags=4163  mtu 1500        inet 192.168.200.120  netmask 255.255.255.0  broadcast 192.168.200.255        inet6 fe80::c776:9d00:618:88f2  prefixlen 64  scopeid 0x20        ether 00:0c:29:eb:34:07  txqueuelen 1000  (Ethernet)        RX packets 13713  bytes 15997026 (15.2 MiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 5590  bytes 452930 (442.3 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

3、关闭防火墙,并开启http服务

[root@localhost ~]# systemctl stop firewalld.service    #关闭防火墙[root@localhost ~]# setenforce 0   #关闭增强性安全功能 [root@localhost ~]# systemctl start httpd.service    #开启http服务[root@localhost ~]# netstat -ntap | grep 80   #查看端口tcp6       0      0 :::80                   :::*                    LISTEN      50572/httpd      [root@localhost ~]# 

4、查看NFS服务共享信息

[root@localhost ~]# showmount -e 192.168.200.130Export list for 192.168.200.130:/usr/share */opt/xyz   192.168.200.0/24/opt/abc   192.168.200.0/24[root@localhost ~]# 

5、挂载NFS的共享目录,并查看是否挂载成功

[root@localhost ~]# mount.nfs 192.168.200.130:/opt/xyz /var/www/html/   #挂载[root@localhost ~]# df -h   #查看挂载信息文件系统                  容量  已用  可用 已用% 挂载点/dev/sda2                  20G  3.4G   17G   17% /devtmpfs                  898M     0  898M    0% /devtmpfs                     912M     0  912M    0% /dev/shmtmpfs                     912M   18M  895M    2% /runtmpfs                     912M     0  912M    0% /sys/fs/cgroup/dev/sda5                  10G   37M   10G    1% /home/dev/sda1                 6.0G  174M  5.9G    3% /boottmpfs                     183M  4.0K  183M    1% /run/user/42tmpfs                     183M   40K  183M    1% /run/user/0192.168.200.130:/opt/xyz   20G  3.3G   17G   17% /var/www/html   #挂载成功[root@localhost ~]# 

6、在挂载目录创建首页文件,并在存储服务器,查看是否创建文件成功

web服务器2:[root@localhost ~]# echo "this is xyz web" > /var/www/html/index.html   #创建首页文件[root@localhost ~]# 存储服务器:[root@localhost abc]# cd ../xyz/[root@localhost xyz]# lsindex.html    #创建成功[root@localhost xyz]#

四、调度服务器的配置

1、给调度服务器添加一块网卡,把两个网卡的网络模式都改为仅主机

2、修改ens33网卡配置文件,设置固定IP

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=noBOOTPROTO=static   #将dhcp改为staticDEFROUTE=yesIPV4_FAILURE_FATAL=noIPV6INIT=yesIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_FAILURE_FATAL=noIPV6_ADDR_GEN_MODE=stable-privacyNAME=ens33UUID=c96bc909-188e-ec64-3a96-6a90982b08adDEVICE=ens33ONBOOT=yesIPADDR=192.168.200.1   #IP地址NETMASK=255.255.255.0   #子网掩码

3、修改ens36网卡配置文件,设置固定IP

[root@localhost ~]# cd /etc/sysconfig/network-scripts/[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens36   #复制一份ens33的配置文件作为ens36配置文件[root@localhost network-scripts]# vim ifcfg-ens36TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=noBOOTPROTO=static   #将dhcp改为staticDEFROUTE=yesIPV4_FAILURE_FATAL=noIPV6INIT=yesIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_FAILURE_FATAL=noIPV6_ADDR_GEN_MODE=stable-privacyNAME=ens36   #ens33改为ens36,并删除UUIDDEVICE=ens36   #ens33改为ens36ONBOOT=yesIPADDR=12.0.0.1   #IP地址NETMASK=255.255.255.0   #子网掩码

4、重启网络服务,检查IP配置是否成功

[root@localhost network-scripts]# systemctl restart network   #重启网络服务[root@localhost network-scripts]# ifconfig    #查看网卡信息ens33: flags=4163  mtu 1500        inet 192.168.200.1  netmask 255.255.255.0  broadcast 192.168.200.255        inet6 fe80::28ad:c7f1:25e8:8708  prefixlen 64  scopeid 0x20        ether 00:0c:29:95:9b:1b  txqueuelen 1000  (Ethernet)        RX packets 11757  bytes 12899133 (12.3 MiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 4731  bytes 325771 (318.1 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0ens36: flags=4163  mtu 1500        inet 12.0.0.1  netmask 255.255.255.0  broadcast 12.0.0.255        inet6 fe80::10ce:358b:94ed:c4e9  prefixlen 64  scopeid 0x20        ether 00:0c:29:95:9b:25  txqueuelen 1000  (Ethernet)        RX packets 130  bytes 10117 (9.8 KiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 178  bytes 30232 (29.5 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

5、修改配置文件/etc/sysctl.conf

[root@localhost ~]# vim /etc/sysctl.conf net.ipv4.ip_forward=1   #开启路由功能[root@localhost ~]# sysctl -p   #重新加载/etc/sysctl.conf中配置net.ipv4.ip_forward = 1[root@localhost ~]# 

6、配置NAT转换

[root@localhost ~]# iptables -t nat -F   #清除nat缓存[root@localhost ~]# iptables -F   #清除规则[root@localhost ~]# iptables -t nat -A POSTROUTING -o ens36 -s 192.168.200.0/24 -j SNAT --to-source 12.0.0.1#配置NAT转换[root@localhost ~]# 

7、开启ipvsadm服务

[root@localhost ~]# modprobe ip_vs   #启动模块[root@localhost ~]# cat /proc/net/ip_vs   #查看服务信息IP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags  -> RemoteAddress:Port Forward Weight ActiveConn InActConn[root@localhost ~]# ipvsadm --save > /etc/sysconfig/ipvsadm   #保存服务配置[root@localhost ~]# systemctl start ipvsadm.service    #开启服务[root@localhost ~]#

8、添加ipvsadm服务脚本,并执行

[root@localhost ~]# cd /opt/   #切换目录[root@localhost opt]# vim nat.sh   #编辑脚本#!/bin/bashipvsadm -C   #清除内核虚拟服务器表中的所有记录ipvsadm -A -t 12.0.0.1:80 -s rr   #增加一台新的虚拟服务器ipvsadm -a -t 12.0.0.1:80 -r 192.168.200.110:80 -m   #在虚拟服务器中增加一台新的真实服务器。ipvsadm -a -t 12.0.0.1:80 -r 192.168.200.120:80 -m   #在虚拟服务器中增加一台新的真实服务器。ipvsadm   #开启服务[root@localhost opt]# source nat.sh    #执行脚本IP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags  -> RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  localhost.localdomain:http rr  -> 192.168.200.110:http         Masq    1      0          0           -> 192.168.200.120:http         Masq    1      0          0         [root@localhost opt]# ipvsadm相关可选项含义:-A:在内核的虚拟服务器列表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。虚拟服务器地址由三元组唯一定义:IP地址,端口号和协议。虚拟服务器也可以由防火墙标记定义。-C:清除内核虚拟服务器表中的所有记录。-a:在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器。-t:说明虚拟服务器提供的是tcp 的服务。-s:将TCP连接和UDP数据报分配给真实服务器的算法。-m:使用伪装(网络访问转换或NAT)。rr:轮询,调度器通过"轮询"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。wrr:加权轮询,调度器通过"加权轮询"调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。lc:最少连接,当有新的作业到达时,调度器选择一个当前作业量较少的真实服务器,并把新到达的作业分配给它。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。wlc:加权最小连接,将更多的作业分配给作业较少且相对于权重较高(Ci / Wi)的服务器。这是默认值。

五、测试负载均衡群集NAT模式

1、修改win10主机网络模式为仅主机

2、修改win10主机IP地址

3、关闭win10主机防火墙

4、用win10主机访问IP地址:12.0.0.1

5、再次刷新浏览器,由于采用轮询算法,页面转到另一个主页

0