LVS负载均衡群集——NAT地址转换模式实战(可跟做!)
负载均衡群集(Load Balance Cluster)
以提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载(LB)的整体性能LB的负载分配依赖于主节点的分流算法
创新互联专注于网站建设,为客户提供网站建设、成都做网站、网页设计开发服务,多年建网站服务经验,各类网站都可以开发,品牌网站制作,公司官网,公司展示网站,网站设计,建网站费用,建网站多少钱,价格优惠,收费合理。
群集的负载调度技术有三种工作模式
- 地址转换(本文只介绍NAT模式)
- IP隧道
- 直接路由
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.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、将配置服务器的网络模式改为仅主机
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 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]# 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的网络模式为仅主机
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 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.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的网络模式为仅主机
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 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.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、给调度服务器添加一块网卡,把两个网卡的网络模式都改为仅主机
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 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 0
ens36: 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/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主机网络模式为仅主机
2、修改win10主机IP地址
3、关闭win10主机防火墙
4、用win10主机访问IP地址:12.0.0.1
5、再次刷新浏览器,由于采用轮询算法,页面转到另一个主页
网页标题:LVS负载均衡群集——NAT地址转换模式实战(可跟做!)
网址分享:http://pwwzsj.com/article/ppchds.html