LVS负载均衡——NAT模式

集群技术类型概述
无论是那种集群,都至少包括两台节点服务器而对外表现为一个整体,只提供一个访问入口(域名或IP),相当于一个大型计算机。根据 集群所针对的目标差异,可分为一下三种类型。

  1. 负载均衡集群(LB):以提高系统响应力,尽可能处理更多的访问请求,减少延迟为目标、获得高并发、高负载的整体性能。LB 的负载均衡分配依赖于主节点的分流算法,将来自客户端的访问请求分担给多个节点服务器,从而缓解 整个系统的负载压力。

  2. 高可用集群(HA):以提高应用系统的可靠性、尽可能的减少服务、系统中断时间为目的,确保服务的连续性,达到高可用的容错效果。HA的工作方式包括双工和主从模式。双工即所有节点同时在线,主从则只有主节点在线,但出现故障时从节点能自动切换为主节点。

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

不同类型的集群在必要时可以合并,如高可用+负载均衡,(下一章)

负载均衡分层架构
在典型的负载均衡集群中,包括三个层次的组件。大致分为一下内容。

第一层,负载调度层:访问整个集群系统的唯一入口,对外使用所有服务器共有的VIP(虚拟IP),也称为集群地址。通常会配备两个或以上的调度器实现热备份,确保高可用性。

第二层,服务器池:集群所提供的应用服务有服务器承担,其中每个节点具有独立真实的IP地址,只处理调度器分发过来的客户端请求。当某个节点暂时失效时,负载均衡调度器的容错机制会将其隔离,等待错误排除后在重新纳入服务器池。

第三层,共享存储:为服务器池中的所有节点提供稳定、一致的文件存取服务。使其提供一致的资源,确保整个集群的一致性,在Linux环境中,共享存储可以使用NAS或NFS(网络文件系统)在这里插入图片描述

负载均衡工作模式
集群的负载调度技术,可以基于IP、端口、内容进行分发,其中基于IP的负载调度效率是最高的。基于IP的负载均衡模式中,常见的有地址转换NAT、IP隧道TUN、直接路径DR三种工作模式。
**基于IP分发的工作模式:**地址转换NAT、IP隧道TUN、直接路由DR

1. 地址转换NAT:私有网络结构,需要一个公网IP供客户端访问,安全性较好降低成本,调度器与各节点服务器处在同一个物理网络,调度器作为入口和出口负载较大。

2. IP隧道TUN:开放式网络结构,调度器和每个节点服务器都需要一个公网IP地址,成本高,且可以不在同一个网络,调度器只作为访问入口接收和分发客户端访问请求,不作为出口响应客户端,各节点服务器都各自接入互联网,接收来自调度器分发的客户端访问请求后单独相应客户端。

3. 直接路由DR:半开放式网络结构,调度器和每个节点服务器都需要一个公网地址,调度器与各节点服务器位于同一个物理网络,调度器作为访问入口和分发客户端访问请求,但不作为出口响应客户端,各节点服务器各自接入互联网并绑定VIP,接收到来自调度器分发的访问请求后,由节点服务器以自身绑定的VIP地址直接响应客户端。(冒充调度器访问入口的IP回应客户端)。
地址转换:易用、安全性较好,节省资源。
IP隧道:成本高、能力更强大,适用范围广,节点安全性较差。
直接路由:成本高、能力更强大、适用范围广、节点安全性较好。

LVS虚拟服务器
负载均衡调度工具,健康检查能力较弱,实现集群调度、负载均衡的一种软件也是一种反向代理服务器,外网通过调度器访问内网的服务,LVS实际上相当于基于IP地址的虚拟化应用,为基于IP地址请求分发的负载均衡提出了一种高效的解决方法。
IP负载均衡是基于特定的TCP/IP技术实现的负载均衡。如NAT、DR、IP隧道、Turning等,是常用的方式。

IP负载均衡可以使用硬件设备,也可以使用软件实现。硬件产品有F5-BIG-IP-GTM(简称F5),软件主要产品有LVS、Haproxy、Nginx。Haproxy可以工作在4、7层,Nginx工作在7层。

LVS现在已经成为Linux内核的一部分,默认编译为ip_vs模块,必要时能够自动调用。在CentOS7系统中,以下操作可以手动加载ip_vs模块,并查看当前系统中ip_vs模块的版本信息。(默认存在)
modprobe ip_vs //加载ip_vs模块
cat /proc/net/ip_vs //查看ip_vs版本信息

LVS负载均衡调度算法
以下为常用的负载均衡算法

1. 轮询rr:将收到的客户端访问请求,按顺序分发给集群中的各节点服务器均等对待每台服务器,不管服务器的系统负载和实际连接数。
2. 加权轮询wrr:根据服务器的处理能力分配接收到的访问请求,调度器可以自动查询每个节点的负载情况,并动态调整其权重。保证处理能力强的服务器承担更多的流量。
3.最少连接lc:根据服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点。如果所有服务器的性能相近,这种算法可以更好的负载均衡。
4. 加权最少连接wlc:在服务器节点的性能差异较大情况下,可以为真实服务器自动调整权重,权重较高的节点将承担更大比例活动的连接负载。

ipvsadm管理工具、命令
LVS管理工具
ipvsadm是在负载均衡调度器上使用的LVS集群管理工具,通过调用ip_vs模块在添加、删除服务器节点,以及查看集群的运行状态。需要手动安装ipvsadm软件包。

[root@lvs ~]# yum -y install ipvsadm
[root@lvs ~]# ipvsadm -ln                      //-l查看LVS虚拟服务器,-n以数字形式显示地址、端口等信息
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

[root@localhost ~]# systemctl enable ipvsadm

1. 创建虚拟服务器(VIP地址)
对于负载均衡调度器来说VIP必须是本机实际已启用的的地址。

[root@lvs ~]# 
[root@lvs ~]# ipvsadm -A -t 202.0.0.1:80 -s rr
[root@lvs ~]# ipvsadm -D -t 202.0.0.1:80             //示例

-A:添加虚拟服务器 -D:删除虚拟服务器 -t:地址VIP地址及TCP端口
-s:指定负载调度算法 -p:保持时间(单位s) rr:轮询算法
wrr:加权轮询 lc:最少连接 wlc:加权最少连接

2.添加节点服务器

[root@lvs ~]# ipvsadm -a -t 202.0.0.1:80 -r 192.168.8.3:80 -m -w 1
[root@lvs ~]# ipvsadm -a -t 202.0.0.1:80 -r 192.168.8.4:80 -m -w 1

-a:添加节点服务器 -r:指定节点服务器地址及端口 -m:使用NAT集群模式
-w:设置权重1,调度器1:1,分发客户端访问请求,根据服务器性能设置,0表示暂停节点不接受调度器分发的请求。

3.保存负载分配策略
使用导出/导入工具ipvsadm-save / ipvsadm-restore可以保存、恢复LVS策略,也可以快速清除、重建负载分配策略。

[root@lvs ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm
[root@lvs ~]# cat /etc/sysconfig/ipvsadm
-A -t 202.0.0.1:80 -s rr
-a -t 202.0.0.1:80 -r 192.168.8.3:80 -m -w 1
-a -t 202.0.0.1:80 -r 192.168.8.4:80 -m -w 1

[root@lvs ~]# systemctl stop ipvsadm
[root@lvs ~]# systemctl start ipvsadm
[root@lvs ~]# 
[root@lvs ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  202.0.0.1:80 rr
  -> 192.168.8.3:80               Masq    1      0          0         
  -> 192.168.8.4:80               Masq    1      0          0  

4. 删除节点服务器和VIP

[root@lvs ~]# ipvsadm -d -t 202.0.0.1:80 -r 192.168.8.3:80
[root@lvs ~]# ipvsadm -d -t 202.0.0.1:80 -r 192.168.8.4:80
[root@lvs ~]# ipvsadm -D -t 202.0.0.1:80

案例:地址转换模式(LVS+NAT)
架构环境,在NAT模式的集群中,LVS负载调度器192.168.8.2作为整个集群的网关,其外网地址202.0.0.1作为整个集群的访问入口也是整个集群的VIP地址。LVS调度器为双网卡。
LVS调度器作为Web服务器池的网关。
使用轮询(rr)调度算法。
LVS+NAT简易架构图

1. 环境规划

OSIP地址主机名
CentOS7.5192.168.8.2lvs
CentOS7.5192.168.8.3node-01
CentOS7.5192.168.8.4node-02
CentOS7.5192.168.8.5nfs

2. 基本环境配置

systemctl stop firewalld
setenforce 0

[root@localhost ~]# hostname lvs
[root@localhost ~]# bash
[root@lvs ~]# 

[root@localhost ~]# hostname node-01
[root@localhost ~]# bash
[root@node-01 ~]

[root@localhost ~]# hostname node-02
[root@localhost ~]# bash
[root@node-02 ~]#

[root@localhost ~]# hostname nfs
[root@localhost ~]# bash
[root@nfs ~]#

3. 配置NFS网络共享

创建共享资源
[root@nfs ~]# yum -y install nfs-utils rpcbind
[root@nfs ~]# mkdir -p /var/www/html
[root@nfs ~]# echo "<h1>Welcome to LVS+NAT</h1>" > /var/www/html/index.html

发布共享
[root@nfs ~]# vim /etc/exports
/var/www/html 192.168.8.0/24(rw,sync,no_root_squash)

启动NFS服务
[root@nfs ~]# systemctl start rpcbind
[root@nfs ~]# systemctl start nfs
[root@nfs ~]# systemctl enable --now rpcbind nfs

验证共享发布,查看本机发布的NFS共享资源
[root@nfs ~]# showmount -e
Export list for nfs:
/var/www/html 192.168.8.0/24

格式:共享目录位置 客户端地址(权限选项)
客户端:地址可以是主机名、IP地址、网段地址、允许使用*、?通配符。
权限:rw:允许读写 ro:只读 sync:同步写入(自动同步远程服务器数据)
no_root_squash:表示当客户端以root身份访问时赋予本地root权限。默认是(root_squash,将作为nfsnobody用户降权对待)

4. 配置节点服务器

所有节点服务器8.3-8.4安装httpd服务并挂载NFS共享资源
[root@node-01 ~]# yum -y install httpd nfs-utils
[root@node-01 ~]# mount 192.168.8.5:/var/www/html/ /var/www/html/
[root@node-01 ~]# cat /var/www/html/index.html 
<h1>Welcome to LVS+NAT</h1>
[root@node-01 ~]# systemctl start httpd

[root@node-02 ~]# yum -y install httpd nfs-utils
[root@node-02 ~]# mount 192.168.8.5:/var/www/html/ /var/www/html/
[root@node-02 ~]# cat /var/www/html/index.html 
<h1>Welcome to LVS+NAT</h1>
[root@node-02 ~]# systemctl start httpd


配置节点服务器网关指向负载均衡调度器,8.2主机
```powershell
[root@node-01 ~]# sed -i 's/GATEWAY="192.168.8.1"/GATEWAY="192.168.8.2"/' /etc/sysconfig/network-scripts/ifcfg-ens33
[root@node-01 ~]# systemctl restart network
[root@node-01 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.8.2     0.0.0.0         UG    100    0        0 ens33
192.168.8.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33

[root@node-02 ~]# sed -i 's/GATEWAY="192.168.8.1"/GATEWAY="192.168.8.2"/' /etc/sysconfig/network-scripts/ifcfg-ens33
[root@node-02 html]# systemctl restart network
[root@node-02 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.8.2     0.0.0.0         UG    100    0        0 ens33
192.168.8.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33

5. 配置负载均衡服务器

配置双网卡
ens33(NAT):192.168.8.2
ens36(vmnet2):202.0.0.1

[root@lvs ~]# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.8.2  netmask 255.255.255.0  broadcast 192.168.8.255
        inet6 fe80::5ed0:2434:21c1:dad6  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:a3:3e:f3  txqueuelen 1000  (Ethernet)
        RX packets 873  bytes 76195 (74.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 710  bytes 81016 (79.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens36: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 202.0.0.1  netmask 255.255.255.0  broadcast 202.0.0.255
        inet6 fe80::20c:29ff:fea3:3efd  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:a3:3e:fd  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 37  bytes 4962 (4.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


安装ipvsadm
[root@lvs ~]# yum -y install ipvsadm 

开启路由转发规则
[root@lvs ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1 
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1


配置负载均衡策略
[root@lvs ~]# ipvsadm -A -t 202.0.0.1:80 -s rr
[root@lvs ~]# ipvsadm -a -t 202.0.0.1:80 -r 192.168.8.3:80 -m -w 1
[root@lvs ~]# ipvsadm -a -t 202.0.0.1:80 -r 192.168.8.4:80 -m -w 1
[root@lvs ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  202.0.0.1:80 rr
  -> 192.168.8.3:80               Masq    1      0          0         
  -> 192.168.8.4:80               Masq    1      0          0


测试LVS集群
[root@lvs ~]# curl --head http://202.0.0.1
HTTP/1.1 200 OK
Date: Tue, 22 Jun 2021 03:28:36 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Tue, 22 Jun 2021 02:23:56 GMT
ETag: "1c-5c5517b5c1026"
Accept-Ranges: bytes
Content-Length: 28
Content-Type: text/html; charset=UTF-8

在这里插入图片描述

6.查看节点服务器日志
这里202.0.0.2是我本地的windows机器

[root@node-01 ~]# tail  -3 /etc/httpd/logs/access_log 
202.0.0.2 - - [22/Jun/2021:11:28:21 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
202.0.0.2 - - [22/Jun/2021:11:28:55 +0800] "GET / HTTP/1.1" 200 28 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0"
202.0.0.2 - - [22/Jun/2021:11:29:56 +0800] "-" 408 - "-" "-"

[root@node-02 ~]# tail -3 /etc/httpd/logs/access_log 
202.0.0.2 - - [21/Jun/2021:23:28:47 -0400] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
202.0.0.2 - - [21/Jun/2021:23:28:55 -0400] "GET /favicon.ico HTTP/1.1" 404 209 "http://202.0.0.1/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0"
202.0.0.2 - - [21/Jun/2021:23:29:05 -0400] "GET / HTTP/1.1" 200 28 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"

7.查看负载均衡状态

[root@lvs ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  202.0.0.1:80 rr
  -> 192.168.8.3:80               Masq    1      1          2         
  -> 192.168.8.4:80               Masq    1      2          0  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

打开台灯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值