LVS理论部分

企业集群应用概述

集群的含义:

Cluster、集群、群集

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

出现的问题:

互联网应用中,随站点对硬件性能、相应速度、服务稳定性、数据可靠性等要求越来越高,单台服务器已经无法满足负载均衡以及高可用性的要求。

解决方案:通过整合多台服务器,使用LVS来达到服务器的高度可用和负载均衡,并以同一个IP地址对外提供相同的服务。在企业中常用的一种群集技术——LVS(linux虚拟服务器)

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

负载均衡群集

高可用群集

高性能运算群集

负载均衡群集:

提高应用系统的相应能力。尽可能处理更多的访问请求、以减少延迟为目标、获得高并发、高负载的能力

LB的负载均衡分配依赖于主节点的分流算法,将来自客户机的访问请求分担给多个服务器节点,从而缓解整个系统的负载压力。例如,“DNS轮询” “反向代理 ” 等。

高可用群集:

提高系统的可靠性、尽可能的减少中断时间为目标,确保服务的连续性、达到高可用的容错效果。

HA的工作方式包括双工和主从两种模式,双工就是所有节点同时在线;主从则只有主节点在线,但当出现故障的设备从节点能自动切换为主节点。例如:“故障切换” “双机热备份” 等

高性能运算集群:

以提高系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能的运算能力。

高性能依赖于“分布式计算”、“并行计算”,通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备的计算能力。例如:“云计算” “网格计算” 等。

负载均衡的架构

负载均衡架构图.png

第一层,负载调度器:

访问整个集群系统的唯一入口,对外使用所有服务器共有的VIP地址,称之为群集的IP地址。同城会配置主备2两台调度器实现热备份,当主调度器失效以后能够平滑替换至备份调度器,确保高可用性

第二层:服务器池:

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

第三层 共享存储:

为服务器池中的所有节点提供稳定、一致的文件存取服务,确保整个集群的统一性。共享存储可以使用NAS设备。或者提供NFS共享服务的专用服务器。

负载均衡群集工作模式

负载均衡群集是目前企业使用得最多的群集类型

群集的负载均衡调度技术有三种工作摸模式

地址转化

ip隧道

!直接路由

1、NAT模式(地址转换){加粗的是为什么不用NAT模式的理由,对调度器的压力过大,容易成为瓶颈}

类似于防火墙的私有网络架构,负载调度器作为所有服务器节点的网关,就是作为客户机的访问入口。也是各个节点回应客户机的访问出口

服务器节点使用私有IP地址、与负载均衡器位于同一个物理网络,安全性要优于其他两种方式。
NAT模式示意图.png

IP隧道

简称TUM模式,采用开放式的网络结构、负载调度器仅作为客户机的访问入口,各个节点通过各自的internet连接直接回应客户机,而不再经过负载调度器

服务器节点分散在互联中的不同位置,具有独立的公网ip地址,通过专用IP隧道与负载调度器相互通讯。

IP隧道模式.png

DR模式(直接路由)

简称“DR”模式

采用半开放式的网络结构,与TUN模式的结构类似,但是各个节点并不是分散在各地的,而是与调度器位于同一个物理网络。

负载均衡调度器与各个节点服务器通过本地网络连接,不需要建立专用的IP隧道。

DR模式.png

LVS的负载调度算法

轮询

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

加权轮询

根据调度器设置的权重值来分发请求,权重值高的节点优先获得任务,分配的请求数越多

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

最少连接

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

加权最少连接

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

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

LVS调度器常见算法(均衡策略) :

LVS调度器用的调度方法基本分为两类:

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

rr:轮询算法,将请求依次分配给不同的rs节点,即RS节点中均摊分配。适合于RS所有节点处理性能接近的情况。

wrr:加权轮训调度,依据不同RS的权值分配任务。权值较高的RS将优先获得任务,并且分配到的连接数将比权值低的RS更多。相同权值的

RS得到相同数目的连接数。

dh:目的地址哈希调度(destinationhashing)以目的地址为关键字查找--个静态hash表来获得所需RS。

sh:源地址哈希调度(sourcehashing)以源地址为关键字查找--个静态hash表来获得需要的RS。

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

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

lc: 最小连接数调度( least-connection) ,IPVS表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS。

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

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

LVS-NAT部署:

NAT模式下的部署示意图.png

部署LVS-NAT的思路
加载ip_vs模块,安装ipvsadm工具

开启路由转发

新建LVS虚拟服务器并添加节点服务器

配置节点服务器

1;建立测试网站

2;挂载NFS内存

3;建立测试网页

保存规则并测试

ipvsadm工具选项说明:

-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

实验 搭建LVS-NAT的负载均衡集群工作模式

环境:
1、12.0.0.0/24、192.168.206.0/24 进行负载均衡NAT模式
2、2台节点,1台NFS共享服务器、1台负载均衡调度器、1台12网段的客机win7验证
3、采用centos7 ,默认全部关闭防火墙和增强防护,且都配置好本地yum仓库

大致示意图如下:但是不采用图上的IP地址
NAT模式下的部署示意图.png

1、首先是搭载NFS共享服务器 206.100
```html/xml
要安装的东西:rpcbind nfs-utils

yum install -y rpcbind nfs-utils #安装yum

systemctl enable --now rpcbind #开机启动和启动

systemctl enable --now nfs #开机启动和启动

mkdir /opt/kgc /opt/benet #创建分享目录两个

chmod -R 777 /opt/kgc /opt/benet #给目录递归赋权可读可写(取决于自己)

echo 'kgc 122222!' > /opt/kgc/index.html #给这两个目录里创建一个静态网页文件

echo 'benet 122222!' > /opt/benet/index.html #给这两个目录里创建一个静态网页文件

vim /etc/exports #进去配置NFS的配置文件

........................................
/opt/kgc 192.168.206.0/24(rw,sync) #分享kgc(相关设定)
/opt/benet 192.168.206.0/24(rw,sync) #分享benet(相关设定)
...............................................

exportfs -rv #对本网段发布


![1.png](https://s2.51cto.com/images/20220118/1642496648146834.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

![2.png](https://s2.51cto.com/images/20220118/1642496651175899.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

![2.1.png](https://s2.51cto.com/images/20220118/1642496691266556.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

![3.png](https://s2.51cto.com/images/20220118/1642496657227450.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

2、下面搭建两个节点服务器 206.101、206.103
```html/xml
yum install httpd -y            #安装web服务

systemctl enable --now httpd              #开机启动和启动

yum install -y nfs-utils rpcbind              #安装rpcbind服务器用于接收NFS
systemctl enable --now rpcbind                 #开机启动和启动

showmount -e 192.168.206.100            #获取NFS服务器发布的信息

mount 192.168.206.100:/opt/kgc /var/www/html    #1号节点选他,一人一个,我就放在一起了,实际请两个服务器单独做
mount 192.168.206.100:/opt/benet /var/www/html   #2号节点选他,一人一个。我就放在一起了,实际请两个服务器单独做

#可选(自动挂载,上面是临时挂载)
vim /etc/fstab
..........................................
192.168.206.100:/opt/kgc            /var/www/html           nfs     defaults_netdev 0 0            #1号节点选他,我就放在一起了,实际请两个服务器单独做
192.168.206.100:/opt/benet            /var/www/html           nfs     defaults_netdev 0 0             #2号节点选他,我就放在一起了,实际请两个服务器单独做
..............................................

mount -a

1.png

2.png

3.png

4.png
5.png

6.png
6.1.png

补充:两台节点服务器的网卡设置
(因为要跨网段访问,所以设置了网关-负载均衡服务器的内网地址ip就是网关)

1.png

2.png

配置负载调度器 206.102、12.0.0.1
```html/xml
yum install -y iptables #安装iptables

vim /etc/sysctl.conf
.................
net.ipv4.ip_forward = 1
.......................
sysctl -p
#开启iptables的端口转发

iptables -t nat -F
iptables -F
iptables -t nat -A POSTROUTING -s 192.168.206.0/24 -o ens37 -j SNAT --to-source 12.0.0.1
#清理iptables的规则和nat规则,添加SNAT规则,让外网服务器可以访问内网节点服务器,出站网卡是ens37(我的12.0.0.0/24网卡)

modprobe ip_vs #加载LVS内核模块(单个模块)
cat /proc/net/ip_vs #查看ip_vs的信息版本
yum install -y ipvsadm 安装ipvsadm的管理工具
ipvsadm-save > /etc/sysconfig/ipvsadm #保存负载分配策略
systemctl enable --now ipvsadm #开机启动和启动

#配置负载分配策略
ipvsadm -C #清除原有策略

ipvsadm -A -t 12.0.0.1:80 -s rr

ipvsadm -a -t 12.0.0.1:80 -r 192.168.206.101:80 -m #指向节点服务器1号

ipvsadm -a -t 12.0.0.1:80 -r 192.168.206.103:80 -m #指向节点服务器2号

ipvsadm #启用策略

ipvsadm-save > /etc/sysconfig/ipvsadm

注释:
ipvsadm -d -t 12.0.0.1:80 -r 192.168.206.101:80 #删除群集中某--节点服务器
ipvsadm -D -t 12.0.0.1:80 #删除整个虛拟服务器
systemctl stop ipvsadm #停止服务(清除策略)
systemctl start ipvsadm #启动服务(重建规则)
ipvsadm-restore < /etc/sysconfig/ipvsadm #恢复LVS策略
ipvsadm -ln #查看当前负载均衡的配置!!!

ipvsadm工具选项说明:
-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



![1.png](https://s2.51cto.com/images/20220118/1642497453486292.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
![2.png](https://s2.51cto.com/images/20220118/1642497455278149.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
![2.1.png](https://s2.51cto.com/images/20220118/1642497457198373.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
![3.png](https://s2.51cto.com/images/20220118/1642497461959116.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
![4.png](https://s2.51cto.com/images/20220118/1642497467537996.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
![5.png](https://s2.51cto.com/images/20220118/1642497470868447.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
![6.png](https://s2.51cto.com/images/20220118/1642497472751764.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

验证:去客机12.0.0.2的win7去验证下。http://12.0.0.1,会出现benet界面(如果你没改keepalive的话就是等60s后再刷新一下,就会跳转到kgc界面)
![验证1.png](https://s2.51cto.com/images/20220118/1642497508418294.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
![验证2.png](https://s2.51cto.com/images/20220118/1642497512485669.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

## 本章总结
ipvs iptables  底层都是用的nat转换技术,都是属于内核态netfilter
ipvs转发性能更好一些。
相对iptables管理的策略更少,iptables读取策略是按照规则表从上往下依次读取,而ipvs是直接根据分发策略转发LVS 3种模式NAT DR IP- TUNNEL。
NAT模式会把调度器当做客户端访问的入口,也把调度器当做服务器回应客户端的访问出口,调度器将会成为整个负载均衡群集的瓶颈DR IP-TUNNEL会把调度器当做客户端访问的入口,调度器会把请求转发给节点服务器,节点服务器回应是直接发送给客户端而不经过调度器LVS的转发是属于4层转发。就是说是基于IP+端口的转发,而且负载均衡性能是最好的LVS调度算法(策略) : rr轮询 wrr加权轮询 1c最少连接 wlc加权最少连接sh源地址哈希 dh目的地址哈希 lblc要支持LVS的使用得加载ip_ vs模块。 modprobe ip_ vsipvs所有模块在/usr/lib/modules/3.10.0-693.el7.x86_ 64/kernel/net/netfilter/ipvs/ 目录中可以用ls 1 grep -o "^[^.]*" 去匹配模块名