企业群集应用概述
1.群集的含义
- Cluster、集群、群集
- 由多台主机构成,但对外只表现为一个整体,只提供一个访问入口(域名或IP地址),相当于一台大型计算机
2.问题及解决方法
问题
互联网应用中,随着站点对硬件性能,响应速度、服务稳定性、数据可靠性等要求越来越高,单台服务器已经无法满足负载均衡及高可用的要求
解决方法:
使用价格昂贵的小型机、大型机(纵向扩展)
使用多台相对廉价的普通服务器构建服务群集(横向扩展)
纵向扩展:
对服务器的CPU 内存 硬盘等硬件进行升级或者扩容来实现的
性能上线会有瓶颈,成本昂贵,收效比不高等问题
横向扩展:
通过增加服务器主机数量来应对高并发的场景
LVS群集技术
在企业中常用的一种群集技术——LVS(Linux Virtual Server,Linux虚拟服务器)
提供整合多台服务器,使用LVS来达到服务器的高可用和负载均衡,并以同一个IP地址对外提供相同的服务
3.群集的目的
提供性能:计算密集应用 如:天气预报
降低成本: 相对百万美元的超级计算机来说,价格便宜
提高可扩展性:只要增加集群节点即可
增强可靠性:多个节点完成相同功能,避免单点失败
企业群集分类
根据群集所针对的目标差异,可分为三种类型:
负载均衡群集
高可用群集
高性能运算群集
负载均衡群集(Load Balance Cluster)
提高应用系统的响应能力、尽可能处理更多的访问请求,减少延迟为目标,获得高并发、负载(LB)的整体性能
LB的负载分配依赖于主节点的分流算法,将来自客户机的访问请求分担给多个服务器节点,从而缓解整个系统的负载压力。例如,“DNS轮询”、“反向代理” 等
高可用群集(High Availability Cluster)
提高应用系统的可靠性、尽可能地减少中断时间为目标,确保服务的连续性,达到高可用(HA) 的容错效果。
HA的工作方式包括双工和主从两种模式,双工即所有节点同时在线;主从则只有主节点在线,但当出现故障时从节点能自动切换为主节点。例如,“故障切换” 、“双机热备” 等。
高性能运算群集(High Performance Computer Cluster)
以提高应用系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC)能力。
高性能依赖于"分布式运算”、 “并行计算”,通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备的计算能力。例如,'云计算”、 “网格计算”等
负载均衡群集
负载均衡群集架构
第一层 负载调度器(Load Balancer或Director)
访问整个群集系统的唯一入口,对外使用所有服务器共有的VIP地址,也称为群集IP地址,通常会配置主、备两台调度器实现热备份,当主调度器失效以后能够平滑替换至备用调度器,确保高可用性
通过VIP接受用户的请求,在通过调度算法确定要转发的节点服务器
第二层 服务器池(Server Pool)
群集所提供的应用服务、有服务器池承担,其中每个节点具有独立的RIP地址(真实IP),只处理调度器分发过来的客户机请求。当某个节点暂时失效时,负载调度器的容错机制会将其隔离,等待错误排除以后再重新纳入服务器池
通过RIP接受调度器转发来的请求,并处理请求进行响应
第三层 共享存储(Share Storage)
为服务器池中的所有节点提供稳定、一致的文件存取服务,确保整个群集的统一性共享存储可以使用NAS设备,或者提供NFS共享服务的专用服务器
为各个节点服务器提供稳定、一致的文件存取服务,比如NAS+NFS,文件服务器 +NFS,分布式对象存储等存储设备
节点
一个节点就是一个服务(实例),可以实现存储数据,索引并且搜索的功能。 每个节点都有一个唯一的名称作为身份标识;如果没有设置名称,默认使用 UUID 作为名称。推荐定义有意义的名称,便于更好的在集群中区分与管理。
节点通过设置集群名称,在同一网络中发现具有相同集群名称的节点,组成集群。如果在同一网络中只有一个节点,则这个节点成为一个单节点集群,即此节点集群中每个节点都是功能齐全的服务
负载均衡群集的工作模式
负载均衡群集是目前企业用的最多的群集类型
群集的负载调度技术有三种工作模式
1.地址转换(NAT模式)
2.IP隧道(IP_TUM)
3.直接路由(DR模式)
通常使用的是NAT和DR,使用最多的是DR模式
一、NAT模式
地址转换
- Network Address Translation,简称NAT模式
- 类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机的访问入口,也是各节点回应客户机的访问出口
- 服务器节点使用私有IP地址,与负载调度器位于同一个网络网络,安全性要优于其他两种方式
根据上图,讲解NAT模式的架构流程和配置过程
1.客户端进行请求服务器,对于 客户来说直接访问的ip地址可能不是下面三台或者多台服务器真实ip地址,而是依靠LVS负载调度服务器(真实存在的服务器),负载调度服务器在我们看来就是充当一个网关的作用所以它有两张网卡而且它们的网段不一样,在负载调度服务器上我们要设置 NAT地址转化,一般通过ip地址映射的方法实现数据请求转化和响应数据的功能
2.请求到达负载调度服务器后,会将数据以设置的调度算法进行任务分配
缺点:
数据的请求和数据的返回都需要经过负载调度服务器,在这么高负载的应用场景中,NAT模式中负载调度服务器就会成为服务性能的瓶颈
二、TUN模式(IP隧道)
IP Tunnel,简称TUN模式
采用开放式的网络结构,负载调度器仅作为客户机的访问入口。各节点通过各自的lnternet连接直接回应客户机,而不在经过负载调度器,承受压力比NAT模式小
服务器节点分散在互联网中的不同位置,具有独立公网IP地址,通过专用IP隧道与负载调度器相互通信
IP隧道原理的核心思想是:基于一个IP报文封装在另一个IP报文的技术,从而使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址,因而IP隧道技术也可以成为IP封装技术(IP encapsulation)。
IP隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有一个唯一的IP地址
原理
首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求报文封装一层IP隧道(T-IP)转发到真实服务器(RS)。真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均衡器
优点
负载均衡服务器只负责将请求包分发给后端服务器,而服务器将应答包直接发给用户,所以减少了负载调度器的大量数据流动,负载均衡器不再是系统的瓶颈也能处理巨大的请求量
缺点
隧道模式的服务器节点需要合法IP,这种方式需要所有服务器都有公网IP
三、DR模式——直接路由
Direct Routing,简称DR模式
采用半开放式的网络结构,与TUN模式的结构类似,但各节点并不是分散在各地,而是与调度服务器位于同一物理网络
负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道
原理
首先负载均衡器接受到客户的请求数据包是,根据调度算法决定将请求发送哪个后端的真实服务器,如何负载调度服务器就把客户端发送的请求数据包的目标MAC地址改为后端服务器的MAC地址,真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载调度器
优点
负载均衡器只负责将请求包分发给后端节点服务器,而后端服务器将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量
缺点
需要负载调度器与真实后端服务器都有一块网卡连接到同一物理网段上,必须在同一个局域网环境
LVS虚拟服务器
lvs虚拟服务器简介
Linux Virtual Server:
- 针对Linux内核开发的负载均衡
- 1998年5月,由我国的章文嵩博士创建
- 官方网站:www.linuxvirtualserver.org/
- LVS实际上相当于基于IP地址的虚拟化应用,为基于IP地址和内容请求分发的负载均衡提出来一种高效的解决方法
LVS相关常用术语
| 术语 | ||
|---|---|---|
| DS | Director Server | 指的是前端负载均衡服务器 |
| RS | Real Server | 节点服务器,后端真实的工作服务器 |
| VIP | Virtual IP | 向外部直接面向用户请求,作为用户请求的目标的IP地址 |
| DIP | Director Server IP | 主要用于和内部主机通讯的IP地址 |
| RIP | Real Server IP | 后端服务器的IP地址 |
| CIP | Client IP | 访问客户端的IP地址 |
| CMAC | 客户端的 MAC 地址,准确的应该是 LVS 连接的路由器的 MAC 地址 | |
| VMAC | 负载均衡 LVS 的 VIP 对应的 MAC 地址 | |
| DMAC | 负载均衡 LVS 的 DIP 对应的 MAC 地址 | |
| RMAC | 后端真实服务器的 RIP 地址对应的 MAC 地址 |
LVS负载调度算法
1.固定调度算法:rr wrr dh sh
rr:轮询算法(Round Robin)
- 将请求依次分配给不同的RS节点,即RS节点中均摊分配。适合于RS所有节点处理性能接近的情况。
- 将收到的访问请求安装顺序轮流分配给群集指定各节点(真实服务器),均等地对待每一台服务器,而不管服务器实际的连接数和系统负载。
wrr:加权轮询调度(Weighted Round Robin)
- 依据不同RS的权重值分配任务。权重值较高的RS将优先获得任务,并且分配到的连接数将比权值低的RS更多。相同权值的RS得到相同数目的连接数。
- 保证性能强的服务器承担更多的访问流量。
dh:目的地址哈希调度(destination hashing)
- 以目的地址为关键字查找一个静态hash表来获得所需RS。
sh:源地址哈希调度(source hashing)
- 以源地址为关键字查找一个静态hash表来获得需要的RS。
2.动态调度算法: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调度算法?
轮询(Round Robin)
加权轮询 (Weighted Round Robin)
最少连接 (Least Connections)
加权最少连接 (Weighted Least Connections)
源地址哈希表(source hashing)
加载ip_vs通用模块
LVS现在已成为Linux内核的一部分,默认编译为ip_vs模块,必要时能够自动调动
在Centos7系统中,手动加载ip_vs模块的命令如下:
modprobe ip_vs ##手动加载ip_vs模块
cat /proc/net/ip_vs ##查看当前系统中的ip_vs模块中的版本信息
加载LVS所有的负载调度算法
LVS 所有的负载调度算法文件在
/usr/lib/modules/3.10.0-693.el7.x86_64/kernel/net/netfilter/ipvs/ 目录下:
ls | grep -o "^[^.]*" //过滤出所有调度算法的名称
for i in $(ls /usr/lib/modules/$(uname -r)l/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modF filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done ##加载所有调度算法
可以将加载调度算法的命令写入脚本中
#!/bin/bash
a=$(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*")
for i in $a
do
echo $i
#查看单个模块的详细信息
/sbin/modinfo -F filename $i >/dev/null 2>&1
#加载算法模块
/sbin/modprobe $i
done
ipvsadm工具
ipvsadm是一个工具,同时它也是一条命令,用于管理LVS的策略规则
ipvsadm是ipvs的管理器,需要yum安装
ipvsadm工具的作用
LVS群集创建与管理:
创建虚拟服务器
添加、删除服务器节点
查看群集及节点情况
保存负载分配策略
ipvsadm命令选项说明
| 选项 | 功能 |
|---|---|
| -A | 添加虚拟服务器 |
| -D | 删除整个虚拟服务器 |
| -s | 指定负载调度算法(轮询:rr、加权轮询:wrr、最少连接:lc、加权最少连接:wlc) |
| -a | 表示添加真实服务器(节点服务器) |
| -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模式操作实列
LVS调度器作为Web服务器池的网关,LVS两块网卡,分别连接内外网,使用轮询(rr)调度算法
实验环境:
负载调度器:内网关 ens33:192.168.46.20,外网关:ens36:12.0.0.1
NFS服务器:192.168.46.30
两台web服务器:192.168.46.50 192.168.46.60
客户端:12.0.0.20
部署NFS共享存储服务(NFS服务器:192.168.46.30/24)
##关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
##安装nfs-utils、rpcbind软件包
yum install nfs-utils rpcbind -y
##启动rpcbind和nfs服务并设置为开机自启
systemctl start rpcbind.service
systemctl start nfs.service
systemctl enable nfs.service
systemctl enable rpcbind.service
##新建共享目录,并创建站点文件
mkdir /opt/meme /opt/benet
chmod 777 /opt/meme /opt/benet
echo 'this is meme web!' > /opt/meme/index.html
echo 'this is benet web!' > /opt/benet/index.html
##修改共享配置文件,设置共享策略
vim /etc/exports
/usr/share *(ro,sync)
/opt/meme 192.168.46.0/24(rw,sync)
/opt/benet 192.168.46.0/24(rw,sync)
exportfs -rv ##发布共享
部署节点服务器(192.168.46.50 192.168.46.60)
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
yum install httpd -y
systemctl start httpd.service
systemctl enable httpd.service
yum -y install rpcbind
showmount -e 192.168.46.30
systemctl start rpcbind
systemctl enable rpcbind
web1(192.168.46.50)
临时挂载
mount.nfs 192.168.46.30:/opt/meme /var/www/html
永久挂载
vim /etc/fstab
192.168.46.30:/share/meme/ /var/www/html/ nfs defaults,_netdev 0 0
mount -a
web2(192.168.46.60)
vim /etc/sysconfig/network-scripts/ifcfg-ens33 ##指定网关,网关地址设置为负载调度器的内网地址
GATEWAY=192.168.46.20
#DNS1=8.8.8.8
##挂载站点。将NFS服务器的共享目录/share/tt/,挂载到httpd服务的根目录
临时挂载
mount.nfs 192.168.46.30:/opt/benet /var/www/html
永久挂载
vim /etc/fstab
192.168.46.30:/share/benet/ /var/www/html/ nfs defaults,_netdev 0 0
mount -a
部署LVS负载调度服务器
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
配置SNAT转发规则
##开启路由转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
或 echo '1' > /proc/sys/net/ipv4/ip_forward
sysctl -p ##读取修改后的配置
##配置SNAT策略(如果内网想主动连接外网的话,需要配置SNAT策略)
iptables -t nat -F ##清空nat表中策略
iptables -F ##清空所有策略
iptables -t nat -A POSTROUTING -s 192.168.46.0/24 -o ens36 -j SNAT --to-source 12.0.0.1
##加载LVS内核模块
modprobe ip_vs ##加载ip_vs模块
cat /proc/net/ip_vs ##查看ip_vs模块的版本
##加载LVS所有调度算法
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
##安装ipvsadm管理工具,开启服务
确定yum仓库的建立,和磁盘是否挂载
yum install -y ipvsadm
##启动服务前须保存负载分配策略
ipvsadm-save > /etc/sysconfig/ipvsadm ##默认目录 也可以自创目录
或者 ipvsadm --save > /etc/sysconfig/ipvsadm
保存后在启动ipvsadm
systemctl start ipvsadm.service
##配置负载分配策略(NAT模式只要在服务器上配置,节点服务器不需要特殊配置)
ipvsadm -C ##清除原有策略
ipvsadm -A -t 12.0.0.1:80 -s rr ##指定VIP地址及端口,-s rr 指定负载均衡策略或算法为轮询
ipvsadm -a -t 12.0.0.1:80 -r 192.168.46.50:80 -m -w 1 ##先指定虚拟服务器指定真实服务器地址,-r指定真实服务器地址,-m指定nat模式,-w指定权重,权重值默认为1可省略
ipvsadm -a -t 12.0.0.1:80 -r 192.168.46.60:80 -m -w 1
ipvsadm ##查看策略
ipvsadm-save > /etc/sysconfig/ipvsadm ##保存负载均衡策略
ipvsadm -nl ##以数字形式查看策略
ipvsadm -d -t 12.0.0.1:80 -r 192.168.46.50:80 ##删除群集中某一节点服务器
ipvsadm -D -t 12.0.0.1:80 ##删除整个虚拟服务器
systemctl stop ipvsadm ##停止服务(清空策略),如果selinux没关闭(setenforce 0)/etc/sysconfig/ipvsadm内容也会清空
systemctl stat ipvsadm ##启动服务(根据/etc/sysconfig/ipvsadm回复策略)
客户机访问测试
环境设置:
测试:
第一次访问
第二次访问