建设工作站服务器
一.前言
? 上一篇文章阐述了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