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负载均衡群集——NAT地址转化方法实战(可跟做!)

LVS的负载调度算法

轮询(Round Robin)

将收到的拜访央求依照次序轮番分配给群会集的各节点(实在服务器)均等地对待每一台服务器,而不论服务器实践的联接数和体系负载

加权轮询(Weighted Round Robin)

  • 依据实在服务器的处理才华轮番分配收到的拜访央求,调度器能够主动查询各节点的负载状况,并动态调整其权重
  • 确保处理才华强的服务器承当更多的拜访流量

最少联接(Least Connections)

依据实在服务器已树立的联接数进行分配,将收到的拜访央求优先分配给联接数最少的节点

加权最少联接(Weighted Least Connections)

  • 在服务器节点的功用差异较大的状况下,能够为实在服务器主动调整权重
  • 权重较高的节点将承当更大份额的活动联接负载

试验操作

试验环境

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

1、验证存储服务器是否设备相关服务

[root@localhost ~]# rpm -q nfs-utils
nfs-utils-1.3.0-0.48.el7.x86_64   #已设备
[root@localhost ~]# rpm -q rpcbind
rpcbind-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、将装备服务器的网络方法改为仅主机

LVS负载均衡群集——NAT地址转化方法实战(可跟做!)

2、装备存储服务器,固定IP地址

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static   #dhcp改为static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=09073596-a7cf-404c-a098-28c3ff58c44b
DEVICE=ens33
ONBOOT=yes
IPADDR=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<UP,BROADCAST,RUNNING,MULTICAST>  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<link>
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]# ls
rh
[root@localhost opt]# mkdir abc xyz   #创立目录
[root@localhost opt]# ll
总用量 0
drwxr-xr-x. 2 root root 6 11月 26 17:33 abc
drwxr-xr-x. 2 root root 6 3月  26 2015 rh
drwxr-xr-x. 2 root root 6 11月 26 17:33 xyz
[root@localhost opt]# chmod 777 abc xyz   #授权
[root@localhost opt]# ll
总用量 0
drwxrwxrwx. 2 root root 6 11月 26 17:33 abc
drwxr-xr-x. 2 root root 6 3月  26 2015 rh
drwxrwxrwx. 2 root root 6 11月 26 17:33 xyz
[root@localhost opt]# 

6、从头加载装备

[root@localhost opt]# exportfs -rv
exporting 192.168.200.0/24:/opt/xyz
exporting 192.168.200.0/24:/opt/abc
exporting *:/usr/share
[root@localhost opt]# 

二、web服务器1的装备

1、修改web服务器1的网络方法为仅主机

LVS负载均衡群集——NAT地址转化方法实战(可跟做!)

2、装备固定IP地址

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static   #dhcp改为static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=3ceed540-b04c-48d6-a4f7-79951f09ea1d
DEVICE=ens33
ONBOOT=yes
IPADDR=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<UP,BROADCAST,RUNNING,MULTICAST>  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<link>
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.130
Export 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% /dev
tmpfs                     912M     0  912M    0% /dev/shm
tmpfs                     912M   18M  895M    2% /run
tmpfs                     912M     0  912M    0% /sys/fs/cgroup
/dev/sda5                  10G   37M   10G    1% /home
/dev/sda1                 6.0G  174M  5.9G    3% /boot
tmpfs                     183M  4.0K  183M    1% /run/user/42
tmpfs                     183M   40K  183M    1% /run/user/0
192.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]# ls
index.html    #创立成功
[root@localhost abc]#

三、web服务器2的装备

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

LVS负载均衡群集——NAT地址转化方法实战(可跟做!)

2、装备固定IP地址

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static   #将dhcp改为static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=8ecd53ce-afdb-46f8-b7ff-b2f428a3bc8f
DEVICE=ens33
ONBOOT=yes
IPADDR=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<UP,BROADCAST,RUNNING,MULTICAST>  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<link>
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.130
Export 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% /dev
tmpfs                     912M     0  912M    0% /dev/shm
tmpfs                     912M   18M  895M    2% /run
tmpfs                     912M     0  912M    0% /sys/fs/cgroup
/dev/sda5                  10G   37M   10G    1% /home
/dev/sda1                 6.0G  174M  5.9G    3% /boot
tmpfs                     183M  4.0K  183M    1% /run/user/42
tmpfs                     183M   40K  183M    1% /run/user/0
192.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]# ls
index.html    #创立成功
[root@localhost xyz]#

四、调度服务器的装备

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

LVS负载均衡群集——NAT地址转化方法实战(可跟做!)

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

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static   #将dhcp改为static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=c96bc909-188e-ec64-3a96-6a90982b08ad
DEVICE=ens33
ONBOOT=yes
IPADDR=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-ens36
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static   #将dhcp改为static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens36   #ens33改为ens36,并删去UUID
DEVICE=ens36   #ens33改为ens36
ONBOOT=yes
IPADDR=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<UP,BROADCAST,RUNNING,MULTICAST>  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<link>
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 0
ens36: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  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<link>
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/bash
ipvsadm -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 InActConn
TCP  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主机网络方法为仅主机

LVS负载均衡群集——NAT地址转化方法实战(可跟做!)

2、修改win10主机IP地址

LVS负载均衡群集——NAT地址转化方法实战(可跟做!)

3、封闭win10主机防火墙

LVS负载均衡群集——NAT地址转化方法实战(可跟做!)

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

LVS负载均衡群集——NAT地址转化方法实战(可跟做!)

5、再次改写浏览器,因为选用轮询算法,页面转到另一个主页

LVS负载均衡群集——NAT地址转化方法实战(可跟做!)