所谓的linux集群-其实可以so easy

简介:

所谓的集群知识—只需要简单的梳理

(图可能较多,笔者喜欢用图形的排版方式来梳理知识而告别繁琐的文字)

   刚解除集群,这东西庞而多杂的概念,各种集群的架构:负载均衡、高可用、高性能等等,难免或让人眼花缭乱。当然想要快速掌握他们,需要的只是从简单到复杂。那么笔者同大家一起进行这些知识的梳理,告别繁琐的文字的束缚,由浅入深,来一层一层剥离他们的关系。

194335304.png

如上图,我们告别繁琐的书面信息(这些东西从哪里来,怎么得来,由谁搞出来等),先来大致认识下集群及其分类,大致功能。这些掌握ok再去寻根问底。



LB负载均衡集群详解

定义(本人解释方法):

1
2
如果一台服务器,某个时间点接受了N多用户的请求,那么它肯定会出现处理不了导致响应缓慢的问题,而硬件提升服务器太昂贵或者已经达到顶峰,那么LB的作用就在这里体现了。
当用户(大量)请求到来时,由负载均衡器接收,而将这些请求分摊发放给由它管理的服务器上。让M多服务器同时来承受这些用户的请求(这些服务器的功能是相同的也就好比同一台服务器的影分身)。


了解了他的大致作用,来看下图,它的分类

194623585.png

到这里,我们大致要对LB有个思维上的理解,那么开始详解他们的功能



四层LVS详解:



LVS由前端的负载均衡器(Load Balancer,LB)和后端的真实服务器(Real Server,RS)群组成。RS间可通过局域网或广域网连接。LVS的这种结构对用户是透明的,用户只能看见一台作为LB的虚拟服务器(Virtual Server),而看不到提供服务的RS群。

当用户的请求发往虚拟服务器,LB根据设定的包转发策略负载均衡调度算法将用户请求转发给RS。RS再将用户请求结果返回给用户。同请求包一样,应答包的返回方式也与包转发策略有关。



LVS转发策略:三种模式

(ps:这里我们需要说明一下具体的一些名词:)


1
2
3
4
5
Director:复制调度集群的主机
VIP(virtual ip) 向外提供服务的IP
RIP(real ip)后端真正提供接点的ip
DIP(Director‘s ip)及负载均衡器(Loader balance,LB)上连接D /RIP 的地址(向内部的IP通信的IP,在Director主机上)
CIP(custom ip)用户请求的ip



1、NAT 地址转换

194936816.png



1
2
3
4
5
6
7
8
9
10
1.集群节点跟director(引向器)必须在同一个IP网络中
2.RIP通常是私有地址,仅用于各集群节点通讯
3.director位于client和real server之间,并负责处理进出的所有通信
4.realserver必须将网关指向DIP
5.支持端口映射
6.realserver可以使用任意操作系统(OS)
7.使用在较大规模应用场景中,director易成为系统瓶颈(进口出口都在DIP)
PS:
Director上只需要一个网卡,然后利用别名来配置两个IP:VIP和DIP。Director在接受到外部主机的请求的时候转发给Real Server。
Real Server进行回复时,将请求先交给DIP,然后由VIP转发给交换机实现通信。



2、DR直接路由 (最常用的)

195039635.png


1
2
3
4
5
6
7
8
9
10
11
1.集群节点跟directr必须在同一个物理网络中;
2.RIP可以使用公网地址,实现便捷的远程管理和监控;
3.director仅负责处理入站请求,响应报文则由realserver直接发往客户端;
4.realserver不能将网关指向DIP;
5.不支持端口映射;
6.realserver隐藏自己的DIP
PS:
Director如NAT模型
每个Real Server上都有两个IP:VIP和RIP,但是VIP是隐藏的,只是用来做请求回复的(暂时可以这么理解)。
Director在接受到外部主机的请求的时候转发给Real Server的时候并不更改目标地址,只是进行一次封装然后转给Real Server
Real Server在接受到信息以后拆除第一层封装,并且丢掉,只保留原始的SIP(CIP),然后直接回复给CIP


3、TUN 隧道模型


这个模型跟DR模型有些相似,只不过Real Server跟DIP不在同一物理网络中。Real Server回复模式同DR模型相似。DIP向RIP传送的时候同样也是进行了一次包装而里面保留了CIP的SIP(source ip)。图不在继续画。

1
2
3
4
5
6
集群节点可以跨越互联网;
RIP必须是公网地址;
director仅负责处理入站请求,响应报文则由realserver直接发往客户端;
realserver不能将网关指向DIP;
只有支持隧道功能的OS才能用于realserver;
不支持端口映射



LVS的调度算法


LVS是一个L4转发,因为他是根据用户请求的服务不同,提供转发的,所以他是使用四层的端口进行转发的,对用户来说是透明的。


静态调度方法

1
2
3
4
5
6
7
8
rr:
轮叫,轮询轮循着,它将请求依次分配不同的RS,也就是在RS中均摊请求。这种算法简单,但是只适合于RS处理性能相差不大的情况;
wrr:
Weight, 加权轮调,它将依据不同RS的权值分配任务。权值较高的RS将优先获得任务,并且分配到的连接数将比权值较低的RS更多。相同权值的RS得到相同数目的连接数;
sh:
source  hash , 源地址 hash  将来自同一个用户的请求,始终转发到特定的路由器或防火墙(平均内网负载),从而保证cookie与session等进行会话绑定;
dh:
destination  hash  根据服务的请求转发到特定的服务器,跟用户建立粘性,提高缓存命中率。主要用于缓存服务器;


动态调度方法


1
2
3
4
5
6
7
8
9
10
11
12
lc:
(least-connect)最少连接,检查active和inactive,连接数(overhead)最少的接受请求。公式:active*256+inactive 谁小给谁
wlc
(weight least-connect)加权最小连接数(集群最好的算法),公式:(active*256+inactive) /weight  谁小给谁(权值表示服务器的性能,越好权值越高。)默认
sed :
shortest expected delay (SED)最短期望延迟(谁响应最快给谁),不考虑非活动状态,在计算overhead之前,把非活动状态的总数加上1 。公式:(active+1)*256 /weight
nq:
(never query)基于 sed , 只要有空闲的,不考虑算法的接受请求;
LBLC:
(locality-based-least-connect:DH)支持权重(Real server是缓存服务器的),基于地址的最小连接数调度(Locality-Based Least-Connection) , 如果这台服务器尚未满负荷,将来自同一目的地址的请求分配给同一台RS(realserver),否则分配给连接数最小的RS,并以它为下一次分配的首先考虑;
LBLCR: (带复制功能的最少连接)
(locality-based-least-connect with replication scheduling)是对LBLC的改进,对于某一目的地址,对应有一个RS子集。对此地址的请求,为它分配子集中连接数最小的RS;如果子集中所有的服务器均已满负荷,则从集群中选择一个连接数较小的服务器,将它加入到此子集并分配连接(同时从本应连接的那台服务器中复制过来用户的信息);若一定时间内,这个子集未被做任何修改,则将子集中负载最大的节点从子集删除;

LVS的命令介绍


1
2
3
ipvsadm:管理集群服务的命令行工具,工作于用户空间
ipvs:为lvs提供服务的内核模块,工作于内核空间
PS:在linux内核2.4.23之前的内核中模块默认是不存在的,需要自己手动打补丁,然后把此模块编译进内核才可以正常使用:确定内核中是否有ipvs模块, grep  -i  'ip_vs'  /boot/config-2 .6.18-308.el5


ipvsadm命令

ipvsadm 功能及使用:

1
2
3
4
5
6
7
8
9
10
11
12
1.定义集群服务默认方法:wlc
ipvsadm -A|-E -t|-u|-f VIP:PORT {tcp|udp|firewall mark} [-s scheduler调度算法]
-A 添加
-t: TCP协议的集群
-u:UDP协议的集群
service-address:IP:PORT
-f:FWM 防火墙标记 file  ware mark
server-address: Mark Number
-E 修改
-D 删除
ipvsadm -D -t|-u|-f VIP:PORT 删除定义的集群
# ipvsadm -A -t 172.16.100.1:80 -s rr


2.要为集群服务定义realserver


1
2
3
4
5
6
7
8
9
10
11
12
13
14
ipvsadm -a|-e -t|-u VIP:port -r REALSERVER:port -g|-i|-m(模型) [-w weitht]
-a 添加
-t|-u|-f service-address:实现定义好的某集群服务
-r server-address: 某RS的地址,在NAT模型中,可使用IP:PORT实现端口映射
-e 修改
-w 权重
-d 删除
ipvsadm -d -t|-u VIP:port -r REALSERVER:PORT
-C 情况规则
-R 恢复
-S 保存
其中模式中的-g|-i|-m分别用于dr|tun|nat
# ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 -m
# ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -m


3.查看

1
2
3
4
5
6
7
8
9
ipvsadm
-l|-L|--list
-n 数字的方式来显示主机地址和端口号
--stats显示统计的数据信息
--rate 显示统计的速率
--timeout: 显示tcp、tcpin和udp的会话超时时长
-- sort :根据协议、地址和蹲坑进行排序
-c:显示当前ipvs连接状况
-Z: 清空,重新计数


4.删除所有集群服务

1
-C:清空ipvs规则


5.保存规则


1
2
3
4
5
6
7
-S
# service ipvsadm save 在 /etc/sysconfig/ipvsadm.web
或者
# ipvsadm -S > /path/to/somefile
载入此前的规则:
-R
# ipvsadm -R < /path/from/somefile


实验:

由于实验环境约束,将对NAT模型及DR模型进行演示。

由于实验过程加起来有点长,本人将在后边的博客中进行贴出。此处留位子以便以后进行编辑。



HA高可用集群详解

什么是高可用集群

高可用集群是指以减少服务中断时间为目的的服务器集群技术。它通过保护用户的业务程序对外不间断提供的服务,把因软件/硬件/人为造成的故障对业务的影响降低到最小程度。高可用集群的应用系统有多样化发展趋势,用途也越来越多样化,同时带来了配置及可操作性方面的复杂性,因此选择好的高可用软件至关重要。

PS:上边是学术界给出的说法,笔者觉得一句话就可以了:保证服务不间断安全运行的方式。

少一点文字,直接上关系图:

195940277.png


结合什么是高可用集群的概念与这张图。大概可以划分下其中大致关系:


split-brain:脑裂:

脑裂扰乱心跳信息的传递,集群节点无法有效获取其它节点的状态信息,产生脑裂


什么是状态信息,他们怎么传播状态信息?


1
2
3
节点A B为主从关系(1个挂掉由另外一个接替关系),但是为了更好的确保他们是否知道对方是否出现故障(挂掉),双方(当然节点多的情况下你懂的)要进行通信(也就是发送状态信息),也可以将之称之为(heartbeat),这个传播的通道即为 Messaging Layer。
脑裂的后果之一:
抢占共享存储:假如节点A B都连接到一台MySQL,如果A正在写入数据到表中,但是突然发生了脑裂,B默认接收不到A的信息自然会认为A坏掉了,从而接管A的位子,正式连接到MySQL,恰巧连接到了A正在写入数据的表中,那么双方都在写入,如果都进行存储,势必会发生文件系统崩溃。当然如果是三个节点,ABC,如果AB可以通信。C他们都连接不到,那么自然会认为是C坏掉了,然后干掉C。


避免脑裂的方式:

1
2
3
4
5
6
1、在A和B之间连接一个硬盘,让他们不停的往里面写数据,当检测到对方停止写数据时,自然认为他坏掉了。于是干掉。
2、当节点为多节点的时候,可以引入“仲裁机制”:比如2个节点的场景,A节点性能好,给他2位的权位,B位1位的。如果通信不到,A就干掉B。多节点的情况类似。
without_quorum_policy“法定票数”不够仲裁的情况下:(根据权重票数分法不同)资源隔离设备:
freeze:冻结
stop:关闭停止
ignore:忽略,


CRM: Cluster Resource Manager: 集群资源管理器(CRM是运行在节点上的)

搜索每一个资源的状态,来计算出来资源节点应该运行的级别上,DC。


1
2
3
4
5
6
7
8
9
DC: Designated Coordinator : 指定的协调器(计算粘性的)
(DC:PE,TE)
PE:策略引擎 Policy Engine :得出结果
TE:事务引擎Transaction:指挥执行
LRM: Local Resource Manager: 本地资源管理器
接受TE的指挥,从而在某个节点上运行
LSB:linux Standard Base 符合linux标准库的脚本:
RA:Resource Agent资源代理(俗称脚本)
RG:Resource Group 资源组(将VIP 和IPVS 定义在一个资源组)


资源约束:Constraint (资源粘性)


1
2
3
4
5
6
7
8
9
10
排列约束:coloationconstraint
资源是否能够运行于同一节点
score:
正值:可以在一起负值:不能在一起
-inf:负无穷 inf:正无穷
位置约束:location constraint , score(分数)
正值:倾向于此节点
负值:倾向于逃离此节点
顺序约束(order constraint)
定义资源启动或关闭时的次序 VIP-IPVS

,










本文转自 陈延宗 51CTO博客,原文链接:http://blog.51cto.com/407711169/1198120,如需转载请自行联系原作者
相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
22天前
|
存储 负载均衡 索引
linux7安装elasticsearch-7.4.0集群配置
linux7安装elasticsearch-7.4.0集群配置
109 0
|
4月前
|
Kubernetes Shell Linux
linux|shell脚本|有趣的知识---格式化输出日志和脚本调试方法以及kubernetes集群核心服务重启和集群证书备份脚本
linux|shell脚本|有趣的知识---格式化输出日志和脚本调试方法以及kubernetes集群核心服务重启和集群证书备份脚本
55 0
|
4月前
|
存储 Java Linux
【Zookeeper】基于3台linux虚拟机搭建zookeeper集群(二)
【Zookeeper】基于3台linux虚拟机搭建zookeeper集群
73 1
【Zookeeper】基于3台linux虚拟机搭建zookeeper集群(二)
|
5月前
|
JSON Linux 开发工具
Linux jq 、vim以及LInux集群安装miniconda并配置虚拟环境(笔记)
Linux jq 、vim以及LInux集群安装miniconda并配置虚拟环境(笔记)
57 0
|
3月前
|
分布式计算 Hadoop Java
linux上面hadoop配置集群
linux上面hadoop配置集群
46 0
|
8月前
|
运维 关系型数据库 MySQL
【运维知识进阶篇】集群架构-Nginx实现基础web架构(Linux+Nginx+PHP+Mysql)(二)
【运维知识进阶篇】集群架构-Nginx实现基础web架构(Linux+Nginx+PHP+Mysql)(二)
201 0
|
4月前
|
关系型数据库 MySQL Linux
Linux|集群初始化脚本--osiniit.sh简介
Linux|集群初始化脚本--osiniit.sh简介
23 0
|
4月前
|
存储 NoSQL Linux
猿创征文|linux部署Redis集群(修订版)
猿创征文|linux部署Redis集群(修订版)
146 1
|
4月前
|
网络协议 Linux 数据安全/隐私保护
【Zookeeper】基于3台linux虚拟机搭建zookeeper集群(一)
【Zookeeper】基于3台linux虚拟机搭建zookeeper集群
79 1
【Zookeeper】基于3台linux虚拟机搭建zookeeper集群(一)
|
4月前
|
负载均衡 算法 网络协议
小白带你学习linux的LVS集群(三十六)
小白带你学习linux的LVS集群(三十六)
71 0