LVS负载均衡---NAT工作模式的部署

一,LVS群集概述

1,群集(Cluster)的含义

由多台主机构成,但对外只表现为一个整体, 群集技术则可以使你免于整个系统的瘫痪以及操作系统和应用层次的故障。一台[服务器集群包含多台拥有共享[数据存储空间的服务器,各服务器之间通过内部局域网进行互相连接;当其中一台服务器发生故障时,它所运行的应用程序将被与之相连的服务器自动接管;在大多数情况下,集群中所有的计算机都拥有一个共同的名称,集群系统内任意一台服务器都可被所有的网络用户所使用。

2,群集分类

根据群集所针对的目标差异,可分为三种类型:

(1)负载均衡群集 (Load Balance Cluster)

负载均衡群集是目前企业用得最多的群集类型,是以提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载(LB)的整体性能。例如,“DNS轮询”、“应用层交换”、“反向代理”等都可用作负载均衡群集。LB的负载分配依赖于主节点的分流算法,将来自客户机的访问请求分担给多个服务器节点,从而降低整个系统的负载压力。

(2)高可用群集 (High Availability Cluster)

是以提高应用系统的可靠性、尽可能地减少中断时间为目标,确保服务的连续性,达到高可用(HA) 的容错效果。例如,“故障切换”、“双机热备”、“多机热备”等都属于高可用群集技术。HA的工作方式包括双工和主从两种模式
双工:两个是平级状态,所有节点同时在线,一个挂了,另一个还可以运作,去中心化机制,如redis。主从则只有主节点在线,但当出现故障时从节点能自动切换为主节点。

(3)高性能运算群集 (High Performance Computer Cluster)

是以提高应用系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC) 能力。例如,“云计算”、“网络计算”。高性能运算群集的高性能依赖于“分布式运算”、"并行计算” ,通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起, 实现只有大型、超级计算机才具备的计算能力。

4,负载均衡的分层结构

第一层:负载调度器(Load Balancer或Director)
这是访问整个群集系统的唯一入口,对外使用所有服 务器共有的VIP(Virtual IP,虚拟IP)地址,也称为群集IP地址。通常会配 置主、备两台调度器实现热备份,当主调度器失效以后平滑替换至备用调度 器,确保高可用性。
第二层:服务器池(Server Pool)
群集所提供的应用服务(如HTTP、FTP)由服务器池承 担,其中的每个节点具有独立的RIP(Real IP,真实IP)地址,只处理调度 器分发过来的客户机请求。当某个节点暂时失效时,负载调度器的容错机制会将其隔离,等待错误排除以后再重新纳入服务器池。
第三层:共享存储(Share Storage)
为服务器池中的所有节点提供稳定、一致的文件存取服务, 确保整个群集的统一性。在LinuxAJNIX环境中,共享存储可以使用NAS设备, 或者提供NFS (Network File System,网络文件系统)共享服务的专用服务器。
在这里插入图片描述

3,负载均衡的工作模式

关于群集的负载调度技术,可以基于IP、端口、内容等进行分发,其中基于IP的负载调度效率最高。基于IP的负载均衡模式中的三种工作模式:

(1)地址转换 (Network Address Translation)

即通过网络地址转换的虚拟服务器技术。在这种负载转发方案中,当用户的请求到达调度器时,调度器自动将请求报文的目标IP地址(VIP)替换成LVS选中的后端RealServer地址,同时报文的目标端口也替换为选中的RealServer对应端口,最后将报文请求发送给选中的RealServer进行处理。当Real Server处理完请求并将结果数据返回给用户时,需要再次经过负载调度器,此时调度器进行相反的地址替换操作,即将报文的源地址和源端口改成VIP地址和相应端口,然后把数据发送给用户,完成整个负载调度过程。可以看出,在这种方式下,用户请求和响应报文都必须经过Director Server进行地址转换,请求时进行目的地址转换(Destination Network Address Translation,DNAT),响应时进行源地址转换(Source NetworkAddress Translation, SNAT)。在这种情况下,如果用户请求越来越多,调度器的处理能力就会成为集群服务快速响应的瓶颈。

(2)IP隧道 (IP Tunnel)

VSTUN与VSNAT技术的报文转发方法不同,在VSTUN方式中,调度器采用IP隧道技术将用户请求转发到某个选中的Real Server上,而这个Real Server将直接响应用户的请求,不再经过前端调度器。此外,IPTUN技术对Real Server的地域位置没有要求,其既可以与Director Server位于同一个网段,也可位于独立网络中。因此,在VSTUN方式中,调度器将只处理用户的报文请求,而无需进行转发,故集群系统的响应速率相对而言得到极大提高。

(3)直接路由 (Direct Routing)

即直接路由技术实现的虚拟服务器。这种技术在调度连接和管理上与VSNAT和VSTUN技术是一样的,不过它的报文转发方式与前两种均不同,VSDR通过改写请求报文的MAC地址,将请求直接发送到选中的Real Server,而Real Server则将响应直接返回给客户端。因此,这种技术不仅避免了VSNAT中的IP地址转换,同时也避免了VSTUN中的IP隧道开销,所以VSDR是三种负载调度机制中性能最高的实现方案。但是,在这种方案下,DirectorServer与Real Server必须在同一物理网段上存在互联。

以上三种工作模式中,NAT方式只需要一个公网IP地址,从而成为最易用的一 种负载均衡模式,安全性也比较好,许多硬件负载均衡设备就是采用这种方式;相比较而言,DR模式和TUN模式的负载能力更加强大、适用范围更广,但节点的安全性 要稍差一些。

5,LVS的负载调度算法

(1) 轮询 (Round Robin )

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

(2) 加权轮询 (Weighted Round Robin)

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

(3)最少连接 (Least Connections)

根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点。如果所有的服务器节点性能相近,采用这种方式可以更好地均衡负载。

(4)加权最少连接 (Weighted Least Connections)

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

6,ipvsadm的常用操作命令

ipvsadm是在负载调度器上使用的LVS群集管理工具,通过调用ip_vs模块来添加、删除服务器节点,以及查看群集的运行状态。LVS群集的管理工作主要包括创建虚拟服务器、添加服务器节点、查看群集的节点状态、删除服务器节点和保存负载分配策略。

(1)创建虚拟服务器

若群集的VIP地址为172.16.16.172,针对TCP 80端口提供负载分流服务,使用的调度算法为轮询。

[root@localhost ~]# ipvsadm -A -t 172.16.16.172 -s -rr

上述操作中,选项 -A 表示添加虚拟服务器,-t 用来指定VIP地址及TCP端口,-s 用来指定负载调度算法~~轮询(rr)、加权轮询(wrr)、最少连接(lc)、加权最少连接(wlc) 。

(2)添加服务器节点

为虚拟服务器172.16.16.172添加2个服务器节点,IP地址依次为192.168.7.21〜 22,对应的ipvsadm命令操作如下所示。若希望使用保持连接,还应添加"-P 60”选项, 其中60为保持时间(秒)。

[root@localhost -]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.21:80 -m -w l
[root@localhost -]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.22:80 -m -w l

上述操作中,选项 -a 表示添加真实服务器,-t 用来指定VIP地址及TCP端口,-r 用来指定RIP地址及TCP端口,-m表示使用NAT群集模式(-g DR模式和-i TUN模式),-w用来设置权重(权重为0时表示暂停节点)。

(3)查看群集节点状态

结合选项-l可以列表查看LVS虚拟服务器,可以指定只查看某一个VIP地址(默认为查看所有),结合选项 -n 将以数字形式显示地址、端口等信息。

[root@localhost -]# ipvsadm -In    查看节点状态
IP Virtual Server version 1.2.1 (size=4096)  
Prot LocalAddress:Port Scheduler Flags  
-> Remote Address :Port      Forward   Weight   ActiveConn   InActConn
TCP 172.16.16.172:80 rr   
-> 192.168.7.21:80			 Masq  		 1  		 2   		7
-> 192.168.7.22:80			 Masq   	 1 		     3 		    9

上述输出结果中,Forward列下的Masq对应Masquerade (地址伪装),表示釆用的群集模式为NAT;如果是Route,则表示釆用的群集模式为DR。

(4) 删除服务器节点

需要从服务器池中删除某一个节点时,使用选项-d。执行删除操作必须指定目标对象,包括节点地址、虚拟IP地址。例妬 以下操作将会删除LVS群集172.16.16.172 中的节点 192.168.7.22。

[root@localhost -]# ipvsadm -d -r 192.168.7.22:80 -t 172.16.16.172:80

需要删除整个虚拟服务器时,使用选项-D并指定虚拟ip地址即可,无需指定节点。
例如,若执行ipvsadm-D -t 172.16.16.172:80 ,则删除此虚拟服务器。

(5) 保存负载分配策略

使用导出/导入工具ipvsadm-save/ipvsadm-restore可以保存、恢复LVS策略,操 作方法类似于iptables规则的导出、导入。通过系统服务ipvsadm也可以保存策略,如可执行“service ipvsadm save” ;当然也可以快速清除、重建负载分配策略。

[root@localhost ~]# ipvsadm-save > /etc/sysconfig/ipvsadm   // 保存策略

[root@localhost ~]# cat /etc/sysconfig/ipvsadm        // 确认保存结果
-A -t 172.16.16.172:http-s rr
-a -t 172.16.16.172:http -r 192.168.7.21:http -m -w 1
-a -t 172.16.16.172:http -r 192.168.7.22:http -m -w 1

[root@localhost ~]# service ipvsadm stop  〃停止服务(清除策略)
ipvsadm: Clearing the current IP VS table: [确定]
ipvsadm: Unloading modules: [确定]

[root@localhost ~]# service ipvsadm start 〃启动服务(重建规则)
ipvsadm: Clearing the current IPVS table: [确定]
ipvsadm: Applying IPVS configuration: [确定]

[root@localhost ~]# modprobe ip_vs    确认内核对LVS的支持

[root@localhost ~]# cat /proc/net/ip_vs  查看ip_vs版本信息

二,LVS-NAT的部署

案例环境
LVS调度器作为Web服务器池的网关,LVS两块网卡,分别连接内外网,使用轮询(rr)调度算法

在这里插入图片描述

(1)负载调度器负责响应并分发来自客户机的访问请求
(2)后端由大量真实服务器构成服务器池,提供实际的应用服务。 整个群集的伸缩性通过增加、删除服务器节点来完成,而这些过程对客户机是透明的;
(3)为了保持服务的一致性,所有节点使用共享存储设备。

1,LVS 配置

LVS既是负载调度器,请求访问的唯一入口,又是防火墙,也是内外网的网关。想要互连互通,必须做地址映射,设置防火墙规则。


[root@lvs ~]# yum install ipvsadm -y   下载ipvsadm工具包
[root@lvs ~]# systemctl stop firewalld  关闭防火墙
[root@lvs ~]# setenforce 0
[root@lvs ~]# cd /etc/sysconfig/network-scripts/    添加网卡,设置内网关,外网关
[root@lvs network-scripts]# cp -p ifcfg-ens33 ifcfg-ens36  设置双网卡
[root@lvs network-scripts]# vim ifcfg-ens33  配置静态IP
BOOTPROTO="static"
IPADDR=192.168.100.1
NETMASK=255.255.255.0
[root@lvs network-scripts]# vim ifcfg-ens36   配置静态IP
把ens33改为ens36
UUID一行删掉
BOOTPROTO="static"
IPADDR=12.0.0.1
NETMASK=255.255.255.0

[root@lvs network-scripts]# service network restart  重启网卡
[root@lvs network-scripts]# vim /etc/sysctl.conf    开启路由转发功能(永久设置)
大G末行添加:
net.ipv4.ip_forward=1
[root@lvs ~]# iptables -F   清空转发表
[root@lvs ~]# iptables -t nat -F 清空地址转换表
[root@lvs ~]# iptables -t nat -A POSTROUTING -o ens36 -s 192.168.100.0/24 -j SNAT --to-source 12.0.0.1    设置地址映射

-t 指定表,-A末尾插入链, -o对外输出端口, -s指定源地址, -j做操作, 做的是SNAT的转换 ,--to-source 转换成12.0.0.1
oot@lvs ~]# modprobe ip_vs     确认内核对LVS的支持
[root@lvs ~]# cat /proc/net/ip_vs      查看ip_vs版本信息
[root@lvs ~]# ipvsadm --save > /etc/sysconfig/ipvsadm  保存配置
[root@lvs ~]# systemctl start ipvsadm.service 
[root@lvs ~]# vim nat.sh
添加:
ipvsadm -C
ipvsadm -A -t 12.0.0.1:80 -s rr
ipvsadm -a -t 12.0.0.1:80 -r 192.168.100.110:80 -m
ipvsadm -a -t 12.0.0.1:80 -r 192.168.100.111:80 -m
ipvsadm

[root@lvs ~]# chmod +x nat.sh
[root@lvs ~]# ./nat.sh

在这里插入图片描述

2, NFS配置

添加两块磁盘,重启
Network File System ,网络文件系统,使用NFS发布共享资源
依赖于RPC (远端过程调用)
需安装nfs-utils、 rpcbind软件包
修改共享配置文件: /etc/exports ,设置共享目录

[root@lvs ~]# hostnamectl set-hostname nfs  更改主机名
[root@lvs ~]# su
[root@nfs ~]# fdisk -l    查看磁盘
[root@nfs ~]# fdisk /dev/sdb   对sdb进行磁盘分区
[root@nfs ~]# mkfs.xfs /dev/sdb1  格式化磁盘
[root@nfs ~]# fdisk /dev/sdc   对sdc进行磁盘分区
[root@nfs ~]# mkfs.xfs /dev/sdc1   格式化磁盘
[root@nfs ~]# mkdir /opt/kgc /opt/accp   创建两个目录作为挂载点
[root@nfs ~]# vim /etc/fstab    修改挂载配置文件(永久设置)
大G末行添加挂载点:
/dev/sdb1       /opt/kgc        xfs     defaults        0 0
/dev/sdc1       /opt/accp       xfs     defaults        0 0

[root@nfs ~]# mount -a   挂载
[root@nfs ~]# df -hT   查看挂载目录
[root@nfs ~]# systemctl stop firewalld  关闭防火墙
[root@nfs ~]# setenforce 0
[root@nfs ~]# rpm -q nfs-utils   查看是否下载NFS工具包
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 ~]# vim /etc/exports  修改共享配置文件
添加:
目录站点      哪个网段可以访问我(可读可写,,root不降级)  
/opt/kgc        192.168.100.0/24(rw,sync,no_root_squash)
/opt/accp       192.168.100.0/24(rw,sync,no_root_squash)

网络模式选仅主机模式
[root@nfs ~]# systemctl start nfs  开启NFS
[root@nfs ~]# systemctl start rpcbind  开启远程过程调用
[root@nfs ~]# showmount -e   查看是否共享出去
[root@nfs ~]# cd /etc/sysconfig/network-scripts/
[root@nfs network-scripts]# vim ifcfg-ens33   绑定静态IP
把dhcp改为static
添加ip地址,子网掩码,网关
BOOTPROTO="static"
IPADDR=192.168.100.120
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
[root@nfs network-scripts]# service network restart  重启网络

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

3,web1配置

[root@localhost ~]# hostnamectl set-hostname web1
[root@localhost ~]# su
[root@web1 ~]# yum install httpd -y
选仅主机模式
[root@web1 ~]# systemctl stop firewalld
[root@web1 ~]# setenforce 0
[root@web1 ~]# cd /etc/sysconfig/network-scripts/
[root@web1 network-scripts]# vim ifcfg-ens33 
BOOTPROTO="static"
IPADDR=192.168.100.110
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
[root@web1 network-scripts]# service network restart
[root@web1 network-scripts]# showmount -e 192.168.100.120
root@web1 ~]# vim /etc/fstab
大G末行添加挂载:
nfs共享出的存储空间                挂载点         nfs网络文件系统     网络设备
192.168.100.120:/opt/kgc        /var/www/html   nfs     defaults,_netdev 0 0
[root@web1 ~]# mount -a
[root@web1 ~]# df -hT
[root@web1 ~]# cd /var/www/html
[root@web1 html]# vim index.html   创建kgc默认首页
<h1>this is kgc web</h1>
[root@web1 html]# systemctl start httpd

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4,web2配置

[root@localhost ~]# hostnamectl set-hostname web2
[root@localhost ~]# su
[root@web2 ~]# yum install httpd -y
选仅主机模式
[root@web2 ~]# systemctl stop firewalld
[root@web2 ~]# setenforce 0
[root@web2 ~]# cd /etc/sysconfig/network-scripts/
[root@web2 network-scripts]# vim ifcfg-ens33 
BOOTPROTO="static"
IPADDR=192.168.100.111
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
[root@web2 network-scripts]# service network restart
[root@web2 network-scripts]# showmount -e 192.168.100.120
root@web2 ~]# vim /etc/fstab
大G末行添加挂载:
nfs共享出的存储空间                挂载点         nfs网络文件系统     网络设备
192.168.100.120:/opt/accp        /var/www/html   nfs     defaults,_netdev 0 0
[root@web2 ~]# mount -a
[root@web2 ~]# df -hT
[root@web2 ~]# cd /var/www/html
[root@web2 html]# vim index.html   创建accp默认首页
<h1>this is accp web</h1>
[root@web2 html]# systemctl start httpd

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5,win10外网客户端

(1)选仅主机模式,win10作为外网客户端,绑定外网客户端 ip12.0.012。

(2)测验网络是否互通,ping 192.168.100.120内网 能ping通,之后,访问网页,输入12.0.0.1,之后显示accp首页内容,清空缓存之后,再次访问12.0.01 会显示kgc的首页内容,说明是以轮询的方式查看的。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发布了56 篇原创文章 · 获赞 6 · 访问量 1865

猜你喜欢

转载自blog.csdn.net/weixin_45691464/article/details/103997415