陈奇网络工作室

LVS负载均衡的NAT模式原理和配置详细流程

建设工作站服务器

一.前言

? 上一篇文章阐述了LVS负载均衡的相关理论知识,今天主要针对LVS工作模式之一的NAT模式进行详细的实验部署。

二. NAT模式理论的回顾与简要

详细原理请参考https://blog.51cto.com/14557673/2467243

? 首先,NAT模式的最大特点是什么?

? 总而言之,LVS负载均衡NAT模式( NAT作为网关)基于网络地址转换技术,与通过负载均衡器实现高速并发数据请求,使用调度算法优化服务响应的进出口架构相同

? 其最大的缺点是数据的出入口都位于负载均衡器( NAT服务器)上。 结果,无法满足高并发性的数据请求(数量巨大),数据响应回复过程加剧了这一弊端。 所以之后有了改善。

三.实例环境

? 首先,需要四台服务器:一个负载平衡调度器、一个web (此处为Apache )和一台存储服务器( NFS )。 使用Windows作为外联网的客户端主机进行模拟。

? 体系结构如下。 由4台Centos7和1台windows10构成

? 网段ip地址的分配如下表所示。

设备

ip地址

windows10客户端

10.0.0.10/24

负载调度程序

外部网卡: 10.0.0.1/24内部网卡: 192.168.10.1/24

HTTP服务器1

192.168.10.10/24

HTTP服务器2

192.168.10.20/24

NFS存储服务器

192.168.10.100/24

? 那么,从外网客户端访问网站。 实际访问的是负载平衡器的外部网卡地址,对服务器端客户端一无所知。 如果需要内部网和外部网的互操作性,可以使用NAT方法实现互操作性。 这将服务请求发送到实际服务器,获取所需的资源,然后返回到负载平衡器进行NAT网络地址转换,并将资源返回给客户端。 在生产环境中,后台存储服务器通常有多个备份,并且资源也是一致的。 但是,为了验证调度算法的循环访问机制,需要在两个站点中写入不同的内容,以区别地验证该调度算法。

? 让我们来看看具体的结构。

四.部署程序和详情

? 根据上面的体系结构图和地址分配,要完成本实验,必须按以下步骤进行部署。

4.1NFS存储服务器配置

? 1 .显示相关软件包nfs服务

[root@nfs ~]# rpm -q nfs-utils

NFS-utils-1.3.0-0.48.el7.x86 _ 64

[root@nfs ~]# rpm -q rpcbind

rpcbind-0.2.0-42.el7.x86_64

[ root @ NFS~] # mkdir/opt/ll/opt/cc #创建站点文件存储目录

? 2 .安装并设置两个新磁盘

sdb磁盘配置:

[root@nfs ~]# fdisk /dev/sdb

欢迎使用fdisk(Util-Linux2.23.2 )。

在决定将更改写入磁盘之前,更改将保留在内存中。

在使用写入命令之前请仔细考虑。

dvicedoesnotcontainarecognizedpartitiontable

使用磁盘标识符0x400f42da创建新的DOS磁盘标签。

命令(输入m获取帮助( n

partitiont类型:

(0primary,0 extended,4 free ) )。

已扩展

选择( defaultp ) :

Using default response p

分区编号(1-4,默认值1 ) :

开始扇区( 2048-41943039,默认为2048 ) :

将使用默认值2048

Last扇区,扇区or size{K,m,g}(2048-41943039,默认为41943039 ) :

将使用默认值41943039

分区1已设置为Linux类型,大小设置为20 GiB

命令(输入m获取帮助() w

thepartitiontablehasbeenaltered!

呼叫等待( tore-readpartitiontable )。

正在同步磁盘。

[root@nfs ~]# mkfs.xfs /dev/sdb1

meta-data=/dev/SD B1 isize=512 ag count=4,agsize=1310656 blks

=sectsz=512 attr=2,projid32bit=1

=crc=1 finobt=0,sparse=0

data=bsize=4096 blocks=5242624,imaxpct=25

=sunit=0 swidth=0 blks

naming=version2bsize=4096 ascii-ci=0f type=1

log=internallogbsize=4096 blocks=2560,version=2

=sectsz=512 sunit=0 blks,lazy-count=1

real time=noneextsz=4096 blocks=0,rtextents=0

sdc磁盘配置:

[root@nfs ~]# fdisk /dev/sdc

欢迎使用fdisk(Util-Linux2.23.2 )。

在决定将更改写入磁盘之前,更改将保留在内存中。

在使用写入命令之前请仔细考虑。

dvicedoesnotcontainarecognizedpartitiontable

使用磁盘标识符0x1ef07039创建新的DOS磁盘标签。

命令(输入m获取帮助( n

partitiont类型:

(0primary,0 extended,4 free ) )。

已扩展

选择( defaultp ) :

Using default response p

分区编号(1-4,默认值1 ) :

开始扇区( 2048-41943039,默认为2048 ) :

将使用默认值2048

Last扇区,扇区or size{K,m,g}(2048-41943039,默认为41943039 ) :

将使用默认值41943039

分区1已设置为Linux类型,大小设置为20 GiB

命令(输入m获取帮助() w

thepartitiontablehasbeenaltered!

呼叫等待( tore-readpartitiontable )。

正在同步磁盘。

[root@nfs ~]# mkfs.xfs /dev/sdc1

meta-data=/dev/SD C1 isize=512 ag count=4,agsize=1310656 blks

=sectsz=512 attr=2,projid32bit=1

=crc=1 finobt=0,sparse=0

data=bsize=4096 blocks=5242624,imaxpct=25

=sunit=0 swidth=0 blks

naming=version2bsize=4096 ascii-ci=0f type=1

log=internallogbsize=4096 blocks=2560,version=2

=sectsz=512 sunit=0 blks,lazy-count=1

real time=noneextsz=4096 blocks=0,rtextents=0

? 3.2磁盘装载设置——使用永久装载

[root@nfs ~]# vim /etc/fstab #在此文件的末尾添加装载信息,如下所示

[root@nfs ~]# tail /etc/fstab

#

# Accessible filesystems,by reference,aremaintainedunder\\\& quot; /dev/disk\\\& quot;

#seemanpagesfstab(5)、findfs(8)、mount(8)8) and/or blkid(8)8) for more info

#

uid=3f9b 526 a-3a 51-4f 87-b68a-37292 b4e2e 59/xfs defaults 0

uid=33d 508 C7-a776-4d6a-9c9b-a51bf 3855004/bootxfsdefaults 0

uid=90be 4302-e340-4fe3- 9e D2-3c40e 346979 e/homexfsdefaults 0

uid=09112 ee8-0d 24-4c5e-83 D2-08 C1 F16 BC 738 swapswapdefaults 0

/dev/sdb1 /opt/ll xfs defaults 0 0

/dev/sdc1 /opt/cc xfs defaults 0 0

[root@nfs ~]# mount -a

[root@nfs ~]# df -hT

文件系统类型的容量已经在使用可用的% %u6302承载点

/dev/sda2 xfs 15G 3.7G 12G 25% /

devtmpfsdevtmpfs 898 m 0898 m0 %/dev

tmpfs tmpfs 912M 0 912M 0% /dev/shm

tmpfs tmpfs 912M 9.0M 903M 1% /run

tmpfs tmpfs 912 m 0912 m0%/sys/fs/cgroup

/dev/sda5 xfs 11G 33M 11G 1% /home

/dev/sda1 xfs 30G 174M 30G 1% /boot

tmpfs tmpfs 183 m 4.0k 183 m1 %/run/user/42

tmpfs tmpfs 183 m 16k 183 m1 %/run/user/0

/dev/sdb1 xfs 20G 33M 20G 1% /opt/ll

/dev/sdc1 xfs 20G 33M 20G 1% /opt/cc

#编辑/etc/exports文件

[ root @ NFS network-scripts ] # vim/etc/exports

[ root @ NFS network-scripts ] # cat/etc/exports

/opt/ll192.168.10.0/24(rw,sync,no_root_squash ) )

/opt/cc192.168.10.0/24(rw,sync,no_root_squash ) )

? 4 .关闭防火墙将网卡设置为主机专用模式,并设置静态ip地址

[ root @ NFS~] # systemctlstopfirewalld.service

[root@nfs ~]# setenforce 0

[ root @ NFS~] # CD/etc/sys config/network-scripts /

[ root @ NFS network-scripts ] # vimifcfg-ens 33

[ root @ NFS network-scripts ] # systemctlrestartnetwork

[ root @ NFS network-scripts ] # ifconfig ens 33

ens33: flags=4163UP,BROADCAST,RUNNING,MULTICAST mtu 1500

inet 192.168.10.100 net mask 255.255.255.0 broadcast 192.168.10.255

inet 6fe 80: 9be8: a170:f918:1 F5 prefixlen 64 scope id0x 20 link

ether 00:0c:29:0b:d9:36 txqueuelen 1000 (以太网) ) ) ) ) ) )。

rx packets 1151 bytes 685357 ( 669.2 kib ) ) ) ) ) ) ) ) )。

rxerrors0dropped0over runs0frame 0

tx packets 444字节39849 ( 38.9 kib ) )。

txerrors0dropped0over runs0carrier0collisions 0

? 5 .开始服务

[ root @ NFS network-scripts ] # systemctlstartnfs

[ root @ NFS network-scripts ] # systemctlstartrpcbind

root @ NFS network-scripts # showmount-e #显示装载信息

Export list for nfs :

/opt/cc 192.168.10.0/24

/opt/ll 192.168.10.0/24

4 .两台web服务器配置

? 1 .在两台Centos7虚拟机上安装httpd站点服务

[ root @ localhost~] # hostnamectlset-hostname web 1

[root@localhost ~]# su

[root@web1 ~]# yum install -y httpd

//省略一部分内容

[ root @ localhost~] # hostnamectlset-hostname web 2

[root@localhost ~]# su

[root@web2 ~]# yum install -y httpd

//省略一部分内容

? 2 .关闭两个web服务器防火墙

[ root @ web1~] # systemctlstopfirewalld.service

[root@web1 ~]# setenforce 0

[ root @ web2~ ] # systemctlstopfirewalld.service

[root@web2 ~]# setenforce 0

? 3 .配置网卡

#web1配置

[ root @ web1~ ] # CD/etc/sys config/network-scripts /

[ root @ web1 network-scripts ] # vimifcfg-ens 33

[ root @ web1 network-scripts ] # systemctlrestartnetwork

[ root @ web1 network-scripts ] # ifconfig ens 33

ens33: flags=4163UP,BROADCAST,RUNNING,MULTICAST mtu 1500

inet 192.168.10.10 net mask 255.255.255.0 broadcast 192.168.10.255

inet 6fe 80: bdab:b59b:d041:d8b0prefixlen 64 scope id0x 20 link

ether 00:0c:29:E6:6d:ebtxqueuelen 1000 ( Ethernet ) ) ) ) ) ) ) ) ) ether 00:0c:29:E6:6d:ebtxqueueuelen 1000 (以太网) ) ) )

rx packets 726004 bytes 1067841474 ( 1018.3 MIB )。

rxerrors0dropped0over runs0frame 0

tx packets 345476字节21387015 ( 20.3 MIB )

txerrors0dropped0over runs0carrier0collisions 0

#web2配置

[ root @ web2~ ] # CD/etc/sys config/network-scripts /

[ root @ web2network-scripts ] # vimifcfg-ens 33

[ root @ web2network-scripts ] # systemctlrestartnetwork

[ root @ web2network-scripts ] # ifconfig ens 33

ens33: flags=4163UP,BROADCAST,RUNNING,MULTICAST mtu 1500

inet 192.168.10.20 net mask 255.255.255.0 broadcast 192.168.10.255

inet 6fe 80: bdab:b59b:d041:d8b0prefixlen 64 scope id0x 20 link

ether 00:0c:29:E6:6d:ebtxqueuelen 1000 ( Ethernet ) ) ) ) ) ) ) ) ) ether 00:0c:29:E6:6d:ebtxqueueuelen 1000 (以太网) ) ) )

rx packets 726004 bytes 1067841474 ( 1018.3 MIB )。

rxerrors0dropped0over runs0frame 0

tx packets 345476字节21387015 ( 20.3 MIB )

txerrors0dropped0over runs0carrier0collisions 0

? 4 .启动两个网站服务,查看装载情况

#web1

[ root @ web 1网络- scripts ] # systemctlstarthttpd

[ root @ web1network-scripts ] # netstat-natp|grep 80

TCP60(:80 ):) Listen59242/httpd

[ root @ web1 network-scripts ] # showmount-e 192.168.10.100

导出列表for 192.168.10.100 :

/opt/cc 192.168.10.0/24

/opt/ll 192.168.10.0/24

#web2

[ root @ web2network-scripts ] # netstat-natp|grep 80

[ root @ web2network-scripts ] # systemctlstarthttpd.service

[ root @ web2network-scripts ] # netstat-natp|grep 80

TCP60(:80 ):) Listen54271/httpd

[ root @ web2network-scripts ] # showmount-e 192.168.10.100

导出列表for 192.168.10.100 :

/opt/cc 192.168.10.0/24

/opt/ll 192.168.10.0/24

5 .分别向两台服务器提供网站,写入测试信息

#web1

[ root @ web1 network-scripts ] # vim/etc/fstab

192.168.10.100:/opt/ll/var/www/htmlnfsdefaults._ netdev 0

[ root @ web1 network-scripts ] # CD/var/www/html /

[root@web1 html]# ls

[root@web1 html]# vim index.html

[root@web1 html]# cat index.html

头儿this is ll web /头儿

#web2

[ root @ web2network-scripts ] # vim/etc/fstab

192.168.10.100:/opt/cc/var/www/htmlnfsdefaults._ netdev 0

[ root @ web2network-scripts ] # CD/var/www/html /

[root@web2 html]# ls

[root@web2 html]# vim index.html

[root@web2 html]# cat index.html

头儿this is cc web /头儿

4.3配置LVS负载均衡调度服务器

1 .设置环境包

[ root @ localhost~] # hostnamectlset-hostname LVS

[root@localhost ~]# su

[ root @ LVS~] # yum install-yipvsadm

已加载的插件: fastestmirror,langpacks

loadingmirrorspeedsfromcachedhostfile

* base: mirrors.aliyun.com

* extras: mirrors.163.com

* updates:mirrors.tuna.Tsinghua.edu.cn

正在解决依赖关系

-正在检查事务

---将安装软件包ipvsadm.x86_64.0.1.27-7.el7

-依存关系解析完成

解决依赖关系

=========================================================================================

Package架构版本的源大小

=========================================================================================

正在安装:

ipvsadm x86_64 1.27-7.el7 base 45 k

事务处理概览

=========================================================================================

1安装软件包

总下载量: 45 k

设置尺寸: 75 k

下载包:

警告:/var/cache/yum/x86 _ 64/7/base/packages/ipvsadm-1.27-7.el7.x86 _ 64.rpm :头v3rsa/sha 256 SIG Nate

ipvsadm-1.27-7.el7.x86_64.rpm的公钥尚未安装

ipvsadm-1.27-7.el7.x86 _ 64.rpm|45kb 00:00:00

从file://etc/PKI/rpm-gpg/rpm-gpg-key-centos-7获取密钥

导入GPG key0xF4A80EB5:

用户id:centos-7 key ( centos7officialsigningkey ) security@centos.org

指纹: 6341 ab 2753 d 78 a 78 a 7c 27bb 124 c 6a 8f 4a 80e b 5

包: centos-release-7-4.1708.el7.centos.x86 _ 64 ( @ anaconda ) ) ) ) ) ) ) )。

/etc/PKI/rpm-gpg/rpm-gpg-key-centos-7至

运行转移检查

运行传输测试

传输测试种子

运行转移

正在安装: ipvsadm-1.27-7.el7.x86_64 1/1

正在验证: ipvsadm-1.27-7.el7.x86_64 1/1

已安装:

ipvsadm.x86_64 0:1.27-7.el7

结束了!

2 .配置双网卡

添加网卡并进行设置

[ root @ LVS~] # CD/etc/sys config/network-scripts /

[root@lvs network-scripts]# ls

if CFG-ens 33 ifdown-isdnifupifup-plip ifup-tunnel

if CFG-lo ifdown-post ifup-aliases ifup-plusbifup -无线

ifdown ifdown-PPP ifup-bnep ifup-postinit.IPv6-global

ifdown-bnep ifdown-routes ifup-eth ifup-PPP network-functions

ifdown-eth ifdown-sit ifup-IB ifup-routes network-functions-IPv6

ifdown-IB ifdown-team ifup-ipppifup-sit

ifdown-IPP ifdown-teamportifup-IPv6 ifup-team

ifdown-IPv6 ifdown-tunnel ifup-isdn ifup-team port

[ root @ LVS network-scripts ] # vimifcfg-ens 33

[ root @ LVS network-scripts ] # CP-pif CFG-ens 33 if CFG-ens 36

#配置网卡后,重新启动网络

[ root @ LVS network-scripts ] # systemctlrestartnetwork

两个网卡的信息如下。

[ root @ LVS network-scripts ] # ifconfig

ens33: flags=4163UP,BROADCAST,RUNNING,MULTICAST mtu 1500

inet 10.0.0.1 net mask 255.255.255.0 broadcast 10.0.0.255

inet 6fe 80: 7e B1:2d de:8a 54:6927 prefixlen 64 scope id0x 20 link

ether 00:0c:29:56:D3:4a txqueuelen 1000 (以太网) ) ) ) ) ) ) ) ) ) )0)0)0)0)0)0) 0

rx packets 397693 bytes 574961333 ( 548.3 MIB ) ) ) ) )。

rxerrors0dropped0over runs0frame 0

tx packets 92656 bytes 5683776 ( 5.4 MIB )。

txerrors0dropped0over runs0carrier0collisions 0

ens36: flags=4163UP,BROADCAST,RUNNING,MULTICAST mtu 1500

inet 192.168.10.1 net mask 255.255.255.0 broadcast 192.168.10.255

inet6Fe 80: e638:fc7c:8a5b:dc5d prefixlen 64 scope id0x 20 link

ether 00:0c:29:56:D3:54以太网1000 ) )。

rx数据包s51字节6809 ( 6.6 kib ) )。

rxerrors0dropped0over runs0frame 0

txpackets83bytes13712(13.3kib ) )。

txerrors0dropped0over runs0carrier0collisions 0

3 .测试互操作性

root @ LVS network-scripts ] # ping 192.168.10.10

萍192.168.10.10 ( 192.168.10.10 ) 56 ) 84 ) bytes of data。

64 bytes from 192.168.10.10:icmp _ seq=1TTL=64 time=0.552 ms

64 bytes from 192.168.10.10:icmp _ seq=2TTL=64 time=0.299 ms

64 bytes from 192.168.10.10:icmp _ seq=3TTL=64 time=0.255 ms

^C

----192.168.10.10 ping statistics-- -

3 packets transmitted,3 received,0% packet loss,time 2001ms

RTT min/avg/max/mdev=0.255/0.368/0.552/0.132 ms

[ root @ LVS network-scripts ] # ping 192.168.10.20

萍192.168.10.20 ( 192.168.10.20 ) 56 ) 84 ) bytes of data。

64 bytes from 192.168.10.20:icmp _ seq=1TTL=64 time=0.536 ms

64 bytes from 192.168.10.20:icmp _ seq=2TTL=64 time=0.340 ms

^C

----192.168.10.20 ping statistics-- -

2 packets transmitted,2 received,0% packet loss,time 1000ms

RTT min/avg/max/mdev=0.340/0.438/0.536/0.098 ms

4 .打开路由转发功能

[ root @ LVS network-scripts ] # vim/etc/sysctl.conf #在末尾

root @ LVS network-scripts ] # cat/etc/sysctl.conf

# sysctlsettingsaredefinedthroughfilesin

# /usr/lib/sysctl.d/,/run/sysctl.d/,and /etc/sysctl.d/。

#

# vendorssettingslivein/usr/lib/sysctl.d /。

# To override a whole file,create a new file with the same in

#/etc/sysctl.d/andputnewsettingsthere.to override

# only specific settings,add a file with a lexically later

# namein/etc/sysctl.d/andputnewsettingsthere。

#

# For more information,seesysctl.conf(5) and sysctl.d(5) 5

net.ipv4.ip_forward=1

5 .防火墙及其规则设置

[ root @ LVS network-scripts ] # systemctlstatusfirewalld.service

firewall d.service-firewall d-dynamicfirewalldaemon

loaded:loaded (/usr/lib/systemd/system/firewall d.service; 已启用vendor preset :已启用)

活动:活动(运行) since四2020-02-20 09:34:20 CST; 8min ago

DOCS:man:firewalld(1) )。

此时防火墙已打开,不需要关闭。 可以使用iptables进行设置

#完成传输公告

[ root @ LVS network-scripts ] # iptables-f

通关后发表nat地址

[ root @ LVS network-scripts ] # iptables-tnat-f

#传输规则的构成(四表五链) ) ) ) ) ) ) ) ) ) ) ) )。

[ root @ LVS network-scripts ] # iptables-tnat-a postrouting-oens 33-s 192.168.10.0/24-js NAT-to-source 10

#加载路由转发功能

[ root @ LVS network-scripts ] # sysctl-p

net.ipv4.ip_forward=1

6 .加载LVS内核模块

[ root @ LVS network-scripts ] # modprobe IP _ vs #加载命令

[ root @ LVS network-scripts ] # cat/proc/net/IP _ vs #查看

ipvirtualserverversion1.2.1( size=4096 ) )

prot local address:portschedulerflags

- remote address:portforwardweightactiveconninactconn

[ root @ LVS network-scripts ] # systemctlstartipvsadm

jobforipvsadm.servicefailedbecausethecontrolprocessexitedwitherrorcode.seesystemctlstatusipvsadm.serviceandjournalctl

#Centos7系统必须保存为--save

[ root @ LVS network-scripts ] # ipvsadm-- save/etc/sys config/ipvsadm

[ root @ LVS network-scripts ] # systemctlstartipvsadm

7 .定义脚本

[ root @ LVS network-scripts ] # CD/opt /

[root@lvs opt]# vim nat.sh

[root@lvs opt]# chmod 777 nat.sh

[root@lvs opt]# ./nat.sh

ipvirtualserverversion1.2.1( size=4096 ) )

prot local address:portschedulerflags

- remote address:portforwardweightactiveconninactconn

TCP lvs:http rr

- 192.168.10.10:http Masq 1 0 0

- 192.168.10.20:http Masq 1 0 0

nat.sh的脚本如下所示。

#! /bin/bash

# echo1/proc/sys/net/IP v4/IP _ forward这里是之前设置的,所以进行了注释

ipvsadm -C #初始化

ipvsadm -A -t 10.0.0.1:80 -s rr #指定接入入口,rr指定循环

ipvsadm-a-t 10.0.0.1:80-r 192.168.10.10:80-m # IP地址映射关系

ipvsadm-a-t 10.0.0.1:80-r 192.168.10.20:80-m

ipvsadm #开

4.4使用外联网客户端进行测试验证

可以在windows10虚拟机或Centos7客户端上测试

但是,都需要设定网卡,仅主机模式且ip地址为10.0.0.10(10.0.0.0网段即可),网关为lvs负载平衡器外的端口ip地址测试结果的图示如下。

1 .网卡和网络测试

2 .测试网站服务和循环机制

对lvs外部网网关的访问,lvs充当中间件或桥接器,实际上是对网站和存储服务器的访问

更新接入交换机服务器

在这个在线网站上,实际上两个保存的页面的内容是一致的,但是这里主要是为了测试轮转效果而需要注意的。

至此是lvs负载均衡NAT模式的配置流程和测试方法。 谢谢您的阅读。

详情请访问云服务器、域名注册、虚拟主机的问题,请访问西部数码代理商官方网站: www.chenqinet.cn

相关推荐

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3