LVS理论部分
企业集群应用概述
集群的含义:
Cluster、集群、群集
由多台主机构成,但是对外只表现为一个整体,只提供一个访问入口(域名或者IP地址),相当于一台大型计算机
出现的问题:
互联网应用中,随站点对硬件性能、相应速度、服务稳定性、数据可靠性等要求越来越高,单台服务器已经无法满足负载均衡以及高可用性的要求。
解决方案:通过整合多台服务器,使用LVS来达到服务器的高度可用和负载均衡,并以同一个IP地址对外提供相同的服务。在企业中常用的一种群集技术——LVS(linux虚拟服务器)
根据群集所针对的目标差异,可以分为三种类型:
负载均衡群集
高可用群集
高性能运算群集
负载均衡群集:
提高应用系统的相应能力。尽可能处理更多的访问请求、以减少延迟为目标、获得高并发、高负载的能力
LB的负载均衡分配依赖于主节点的分流算法,将来自客户机的访问请求分担给多个服务器节点,从而缓解整个系统的负载压力。例如,“DNS轮询” “反向代理 ” 等。
高可用群集:
提高系统的可靠性、尽可能的减少中断时间为目标,确保服务的连续性、达到高可用的容错效果。
HA的工作方式包括双工和主从两种模式,双工就是所有节点同时在线;主从则只有主节点在线,但当出现故障的设备从节点能自动切换为主节点。例如:“故障切换” “双机热备份” 等
高性能运算集群:
以提高系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能的运算能力。
高性能依赖于“分布式计算”、“并行计算”,通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备的计算能力。例如:“云计算” “网格计算” 等。
负载均衡的架构
第一层,负载调度器:
访问整个集群系统的唯一入口,对外使用所有服务器共有的VIP地址,称之为群集的IP地址。同城会配置主备2两台调度器实现热备份,当主调度器失效以后能够平滑替换至备份调度器,确保高可用性
第二层:服务器池:
群集所提供的应用服务、由服务器池来承担,其中每个节点具有独立的RIP地址(真实IP),只处理调度器分发过来的客户机请求,当某个节点暂时失效后,负载调度器会将其暂时隔离、等待错误排除后重新纳入服务器池
第三层 共享存储:
为服务器池中的所有节点提供稳定、一致的文件存取服务,确保整个集群的统一性。共享存储可以使用NAS设备。或者提供NFS共享服务的专用服务器。
负载均衡群集工作模式
负载均衡群集是目前企业使用得最多的群集类型
群集的负载均衡调度技术有三种工作摸模式
地址转化
ip隧道
!直接路由
1、NAT模式(地址转换){加粗的是为什么不用NAT模式的理由,对调度器的压力过大,容易成为瓶颈}
类似于防火墙的私有网络架构,负载调度器作为所有服务器节点的网关,就是作为客户机的访问入口。也是各个节点回应客户机的访问出口
服务器节点使用私有IP地址、与负载均衡器位于同一个物理网络,安全性要优于其他两种方式。
IP隧道
简称TUM模式,采用开放式的网络结构、负载调度器仅作为客户机的访问入口,各个节点通过各自的internet连接直接回应客户机,而不再经过负载调度器
服务器节点分散在互联中的不同位置,具有独立的公网ip地址,通过专用IP隧道与负载调度器相互通讯。
DR模式(直接路由)
简称“DR”模式
采用半开放式的网络结构,与TUN模式的结构类似,但是各个节点并不是分散在各地的,而是与调度器位于同一个物理网络。
负载均衡调度器与各个节点服务器通过本地网络连接,不需要建立专用的IP隧道。
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部署:
部署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地址
1、首先是搭载NFS共享服务器 206.100
要安装的东西: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 #对本网段发布
2、下面搭建两个节点服务器 206.101、206.103
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
补充:两台节点服务器的网卡设置 (因为要跨网段访问,所以设置了网关-负载均衡服务器的内网地址ip就是网关)
配置负载调度器 206.102、12.0.0.1
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
验证:去客机12.0.0.2的win7去验证下。http://12.0.0.1,会出现benet界面(如果你没改keepalive的话就是等60s后再刷新一下,就会跳转到kgc界面)
本章总结
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 "^[^.]*" 去匹配模块名