[Linux] LVS负载均衡群集+NAT部署

一、LVS负载均衡群集知识

1.1 群集的的定义及意义

Cluster,集群(也称群集)由多台主机构成,但对外只表现为一一个整体,只提供一-个访问入口(域名或IP地址), 相当于一台大型计算机。

群集的作用:

对于企业服务的的性能提升一般会有两种方式:

纵向扩展 :  对服务器的CPU 内存 硬盘 等硬件进行升级或者扩容来实现的     性能上限会有瓶颈,成本昂贵,收效比不高等问题

横向扩展 :  通过增加服务器主机数量来应该高并发的场景

群集的目的 :

        提高性能:计算密集应用。如天气预报,核试验模拟

        降低成本:相对百万美元的超级计算机,价格便宜

        提高可扩展性:只要增加集群节点即可

        增强可靠性:多个节点完成相同功能,避免单点失败

企业级群集的类型 :

负载均衡(LB):提高应用系统的响应效率,处理更多的访问请求,减少延迟,提高并发和负载能力。 同时也是如今企业运用最多的群集类型。
高可用(HA): 提高应用系统的可靠性,减少服务中断时间,确保服务的连续性
高性能运算(HPC):将多台主机的硬件计算资源整合到一起实现分布式运用,比如 云计算 

二、LVS负载均衡的三种模式

群集的负载调度技术有三种工作模式:地址转换(NAT模式) ,直接路由(DR模式),IP隧道(IP-TUN)。对于商用来说,最常用是NAT模式和DR模式。

NAT(地址转换) 

缺点:调度器作为所有节点服务器的网关,既作客户端的访问入口,也作节点服务器响应的访问出口,也就意味着调度器将成为整个集群系统的瓶颈。

优点:由于再转发过程中做了地址转发,对于节点服务器的安全性比其它模式较好。

调度器至少要有2个网卡,一个承载VIP用于接收客户端的请求,另一个用于使用私有IP在同一个局域网中与节点服务器相互通信。

工作原理:

(1)用户通过Internet DNS服务器在我们的负载均衡设备上解析为外网地址。 相对于真实的服务器,LVS外网IP也被称为VIP(虚拟IP地址)。 通过访问VIP,用户可以连接到后端的真实服务器,所有这些对用户都是透明的。 用户认为他正在访问真正的服务器,但不知道访问的VIP只是一个dispatcher.It目前尚不清楚后端真正的服务器在哪里以及其中有多少是真实的。

(2)用户向LVS负载均衡调度器(也是网关服务器)的外部网卡发送请求。 此时LVS根据预先配置的算法选择后端的真实服务器(内网实际处理数据的web服务器),并将数据请求包转发给真实服务器。转发前,LVS改变数据报文的目的地址和目的端口,并将目的地址和目的端口改变为所选择的真实服务器的IP地址和对应端口。

(3)真实服务器向LVS调度器返回响应数据包。 调度员收到响应数据包后,将源地址和源端口更改为VIP和调度员对应的端口。 当更改完成时,调度器将响应数据包发送回终端用户。 此外,由于LVS调度程序有一个连接哈希表,连接请求和传输信息都记录在该表中。 当同一连接的下一个数据包发送到调度器时,可以直接从哈希表中查找到上一个连接记录,并将记录的信息发送到调度器。 

 DR(直接路由)

特点:调度器只根据调度算法接收客户端的请求,并将其转发给节点服务器。节点服务器处理完请求后直接向客户端响应,已经响应的数据包不经过dispatcher.In DR模式下,调度器和后端服务器必须在同一个局域网中,并且VIP地址必须在调度器和所有后端服务器之间共享。 性能高于NAT模式 调度器和节点服务器使用私有IP与同一局域网中的节点服务器进行通信。

工作原理:

(1)用户向Director服务器(负载均衡器)发送请求,请求的数据包(源IP为CIP,目标IP为VIP)到达内核空间。

(2)由于Director服务器和real服务器在同一网络中,通过二层的数据链路层进行传输。 内核空间确定所述数据包的目标IP为本地IP。 此时,IPVS比较数据包请求的业务是否为集群业务。 在那种情况下,重新打包数据包并将源MAC地址更改为DIP的MAC地址,将目标MAC地址更改为RIP的MAC地址。 如果源和目的IP地址没有改变,则将数据包发送到真实服务器。

(3)当真实服务器检测到请求报文的MAC地址为自己的MAC地址时,接收报文,重新打包报文(源IP地址为VIP,目标IP为CIP),通过lo接口将响应报文发送到物理网卡, 真实服务器直接向客户端发送响应消息。 

TUN(IP隧道) 

TUN(IP隧道) 架构类似于DR,但节点服务器分散在Internet上的不同地方,都具有独立的公共IP,并通过专用IP隧道与调度器通信。

采用开放的网络结构,负载调度器只作为客户端访问入口,每个节点通过负载调度器传输压力小于NAT。

服务器节点分散在Internet上的不同位置,具有独立的公共IP地址,并通过专用IP隧道和负载调度器相互通信。

缺点:成本很高。

该模型常用于特殊场景,如在全国范围内分布节点服务器,以防止物理攻击(地震、战争等)。).为灾难做好准备。 

(1)当用户请求到达Director服务器时,请求的数据包首先被移动到内核空间优先路由链。 此时源IP为CIP,目标IP为VIP。

(2)PREROUTING确认数据包的目标IP为本机,并将数据包转发到输入链。

(3)IPVS比较数据包请求的服务是否足以为集群服务。 在这种情况下,ip数据包在请求数据包的头部被封装一次,并且封装的数据包的源IP是DIP和目标IP是RIP.それをPOSTROUTINGに送信しますCHAIN.At 本次源IP为DIP,目标IP为RIP

(4)POSTROUTING chain根据最新封装的IP报文向RS发送数据报文(由于在外部封装中多了一层IP头,此时可以理解为是通过隧道发送的)。

(5)RS收到数据包后,RS检测到是自己的IP地址。 执行完解封装操作后,去掉最外层的IP后,可以看到里面还有一层IP头,目标是自己的LO接口VIP,此时RS会处理这个请求。 程完成后,通过lo接口发送到eth0网卡,并通过出线。源IP地址为VIP,目标IP为CIP。

(6)响应消息到达客户端。 

2.2 LVS的负载调度算法 

 固定调度算法:rr, wrr, dh,sh

 rr:轮询算法(Round Robin)

请求分配给不同的RS节点在turn.distributed.It 它适用于所有RS节点的处理性能接近的情况。

将接收到的访问请求的安装顺序依次分配给集群中的每个节点(真实服务器),并平等对待每个服务器,而不考虑实际连接数和服务器上的系统负载。 

wrr:加权轮询调度(Weighted Round Robin) 

        依据不同RS的权重值分配任务。权重值较高的RS将优先获得任务,并且分配到的连接数将比权值低的RS更多。相同权值的RS得到相同数目的连接数。

        保证性能强的服务器承担更多的访问流量。

dh:目的地址哈希调度(destination hashing) 

        以目的地址为关键字查找一个静态hash表来获得所需RS。

sh:源地址哈希调度(source hashing)

        源地址为关键字查找--个静态hash表来获得需要的RS

 动态调度算法: wlc,lc,lblc 

lc:最小连接数调度( Least Connections) 

        ipvs表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS。

        根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点。

wlc:加权最小连接数调度(Weighted Least Connections)

        假设各台RS的权值依次为Wi,当前tcp连接数依次为Ti,依次取Ti/Wi为最小的RS作为下一个分配的RS。

        在服务器节点的性能差异较大时,可以为真实服务器自动调整权重。

        性能较高的节点将承担更大比例的活动连接负载。

lblc:基于地址的最小连接数调度(locality-based least-connection)

将来自同一个目的地址的请求分配给同一-台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑。

三、LVS部署前

3.1 ipvsadm 工具选项说明 

pvsadm的选项 作用
-A 添加虚拟服务器
-D 删除整个虚拟服务器
-s 指定负载调度算法(轮询:rr、加权轮询:wrr、最少连接:lc、加权最少连接:wlc)
-a 表示添加真实服务器(节点服务器)
-d 删除某一个节点
-t 指定 VIP地址及 TCP端口
-r 指定 RIP地址及 TCP端口
-m 表示使用 NAT群集模式
-g 表示使用 DR模式
-i 表示使用 TUN模式
-w 设置权重(权重为 0 时表示暂停节点)
-p 60 表示保持长连接60秒(默认关闭连接保持)
-l 列表查看 LVS 虚拟服务器(默认为查看所有)
-n 以数字形式显示地址、端口等信息,常与“-l”选项组合使用。ipvsadm -ln 

 3.2 ip_vs通用模块 

ls /usr/lib/modules/3.10.0-693.el7.x86_64/kernel/net/netfilter/ipvs

 modprobe ip_vs     //手动加载 ip_vs 模块
 ​
 cat /proc/net/ip_vs    //查看当前系统中ip_vs模块的版本信息

[Linux] LVS负载均衡群集+NAT部署_第1张图片

for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done

四、 LVS负载均衡-NAT模式的部署

4.1 NAT模式实验部署操作前的准备设计以及需求 

实验需求

通过NAT模式使外网客户机能够访问到相关的web服务,并且LVS调度器使内网中的web服务器达到负载均衡的效果。此外NFS共享存储为web服务提供更大的存储空间 

实验设备准备

需要五台虚拟机(一台web1服务器,一台web2服务器,一台负载均衡调度器,一台NFS共享存储机,一台外网客户机做测试作用)

 各设备的IP设置如下:

负载调度器:内网关 ens33:192.168.136.100,外网关 ens36:12.0.0.100
Web节点服务器1:192.168.136.120
Web节点服务器2:192.168.136.130
NFS服务器:192.168.136.110
客户端:12.0.0.66

 4.2 NAT模式实验部署操作步骤

第一步:部署共享服务(主机IP:192.168.136.110)
 95  systemctl stop firewalld.service
   96  systemctl disable firewalld.service
   97  setenforce 0
   98  yum install nfs-utils rpcbind -y
   99  systemctl start rpcbind.service
  100  systemctl start nfs.service
  101  systemctl enable nfs.service
  102  systemctl enable rpcbind.service
  103  mkdir -p /var/www/html/{cxk,xhz}
  104  cd /var/www/html/
  105  ls
  106  echo 'this is cxk_web01!' >cxk/test.html
  107  echo 'this is xhz_web02!' >xhz/test.html
  108  cat cxk/test.html 
  109  cat xhz/test.html 
  110  vim /etc/exports
  111  systemctl enable --now rpcbind nfs
  112  showmount -e
  113  systemctl stop firewalld
  114  setenforce 0
  115  showmount -e
  116  systemctl enable --now rpcbind nfs
  117  showmount -e
  118  vim /etc/exports
  119  systemctl status rpcbind.service 
  120  systemctl status nfs
  121  showmount -e
  122  exportfs -a
  123  showmount -e

[Linux] LVS负载均衡群集+NAT部署_第2张图片

[Linux] LVS负载均衡群集+NAT部署_第3张图片
第二步:配置节点服务器(192.168.136.120 192.168.136.130) 

两台web节点服务器相同的操作:

77  systemctl restart network.service
   78  systemctl disable --now firewalld
   79  setenforce 0
   80  showmount -e 192.168.136.110
   81  cd /etc/yum.repos.d/
   82  ls
   83  mkdir bak
   84  mv *.repo bak
   85  rz -E
   86  ls
   87  yum -y install nginx
   88  vim /etc/fstab 
   89  mount -a
   90  df -h
   91  ls
   92  ls /usr/share/nginx/html/
   93  cat te
   94  ls /usr/share/nginx/html/
   95  cat /usr/share/nginx/html/test.html 
   96  vim /etc/nginx/nginx.conf 
   97  systemctl restart nginx
   98  vim /etc/sysconfig/network-scripts/ifcfg-ens33
   99  systemctl restart network nginx

 web1节点服务器的后续操作:

[Linux] LVS负载均衡群集+NAT部署_第4张图片

  web2节点服务器的后续操作:

[Linux] LVS负载均衡群集+NAT部署_第5张图片

 

第三步:配置负载调度器(内网关 ens33:192.168.136.100,外网关 ens36:12.0.0.100)  
101  cd /etc/sysconfig/network-scripts/
  102  ls
  103  ip a
  104  cp ifcfg-ens33 ifcfg-ens34
  105  ls
  106  vim ifcfg-ens34
  107  vim ifcfg-ens33
  108  ls
  109  systemctl restart network
  110  ip a
  111  vim /etc/sysctl.d/
  112  vim /etc/sysctl.d
  113  vim /etc/sysctl.conf 
  114  sysctl -p
  115  modprobe ip_vs
  116  cat /proc/net/ip_vs
  117  yum -y install ipvsadm.x86_64 
  118  cd /etc/yum.repos.d/
  119  ls
  120  vim /etc/sysconfig/network-scripts/ifcfg-ens33
  121  cd /etc/sysconfig/
  122  vim /etc/sysconfig/network-scripts/ifcfg-ens33
  123  systemctl restart network
  124  yum -y install ipvsadm.x86_64 
  125  vim /etc/sysconfig/network-scripts/ifcfg-ens33
  126  systemctl restart network
  127  ip a
  128  systemctl start ipvsadm.service 
  129  systemctl status ipvsadm.service 
  130  ipvsadm-save /etc/sysconfig/ipvsadm
  131  systemctl start ipvsadm.service 
  132  ipvsadm-save > /etc/sysconfig/ipvsadm
  133  systemctl start ipvsadm.service 
  134  ipvsadm -C
  135  ipvsadm -ln
  136  ipvsadm -A -t 12.0.0.100 -s rr
  137  ipvsadm -A -t 12.0.0.100:80 -s rr
  138  ipvsadm -ln
  139  ipvsadm -a -t 12.0.0.100:80 -r 192.168.136.120:80 -m
  140  ipvsadm -a -t 12.0.0.100:80 -r 192.168.136.130:80 -m
  141  ipvsadm -ln
  142  ipvsadm
  143  ipvsadm -ln
  144  ls /usr/lib/modules/3.10.0-693.el7.x86_64/kernel/net/netfilter/ipvs
  145  cat /proc/net/ip_vs

[Linux] LVS负载均衡群集+NAT部署_第6张图片

保存LVS的配置策略以及删除策略的方法: 

ipvsadm-save > /opt/ipvsadm						#保存策略
ipvsadm-save > /etc/sysconfig/ipvsadm
----------------------------------------------------------------------------------------------------------
ipvsadm -d -t 12.0.0.100:80 -r 192.168.136.120:80				#删除群集中某一节点服务器
ipvsadm -D -t 12.0.0.100:80									#删除整个虚拟服务器
systemctl stop ipvsadm										#停止服务(清空策略)
systemctl start ipvsadm										#启动服务(根据/etc/sysconfig/ipvsadm重建配置)
ipvsadm-restore < /opt/ipvsadm					            #恢复LVS 策略




 134  ipvsadm -C
  135  ipvsadm -ln
  136  ipvsadm -A -t 12.0.0.100 -s rr
  137  ipvsadm -A -t 12.0.0.100:80 -s rr
  138  ipvsadm -ln
  139  ipvsadm -a -t 12.0.0.100:80 -r 192.168.136.120:80 -m
  140  ipvsadm -a -t 12.0.0.100:80 -r 192.168.136.130:80 -m
  141  ipvsadm -ln
  142  ipvsadm
  143  ipvsadm -ln

[Linux] LVS负载均衡群集+NAT部署_第7张图片

 第四步:进行客户机测试

[Linux] LVS负载均衡群集+NAT部署_第8张图片

[Linux] LVS负载均衡群集+NAT部署_第9张图片 [Linux] LVS负载均衡群集+NAT部署_第10张图片

你可能感兴趣的:(负载均衡,linux,lvs,负载均衡)