HA cluster原理

HA cluster

一、什么是高可用集群
 
高可用集群就是当某一个节点或服务器发生故障时,另一个节点能够自动且立即向外提供服务,即将有故障节点上的资源转移到另一个节点上去,这样另一个节点有了资源既可以向外提供服务。高可用集群是用于单个节点发生故障时,能够自动将资源、服务进行切换,这样可以保证服务一直在线。在这个过程中,对于客户端来说是透明的。
 

            ————————————————————————————————–
            ————————————————————————————————–


二、高可用集群衡量标准
 
高可用集群一般是通过系统的可靠性(reliability)和系统的可维护性(maintainability)来衡量的。通常用平均无故障时间(MTTF)来衡量系统的可靠性,用平均维护 时间(MTTR)来衡量系统的可维护性。因此,一个高可用集群服务可以这样来定义:HA=MTTF/(MTTF+MTTR)*100%
 
一般高可用集群的标准有如下几种:
 
99%:表示 一年宕机时间不超过4天
 
99.9% :表示一年宕机时间不超过10小时
 
99.99%: 表示一年宕机时间不超过1小时
 
99.999% :表示一年宕机时间不超过6分钟
 
            ————————————————————————————————–
            ————————————————————————————————–

三、HA Cluster 相关特性
 
1、提供冗余系统:HA Cluster:为提升系统调用性,组合多台主机构建成为的集群

2、vote system投票系统:HA中的各节点无法探测彼此的心跳信息时,必须无法协调工作;此种状态即为partitioned cluster;
 
投票原则:
 
(1)少数服从多数原则:quorum
 
whit quorum(拥有法定票数) > total1/2
 
without quorum(无法定票数)<= total1/2
 
         当HA节点数为奇数时,通过判断投票数来仲裁,当HA节点数为偶数时,就需要使用其他仲裁设备
 
(2)仲裁设备
 
quorum disk (qdisk):qdisk 是一个小于 10MB 导入所有集群节点的共享磁盘设备。qdiskd 是运行在集群的所有节点上用来定期评估自身的健康情况的后台服务,它定期将其节点的状态信息放 入到 qdisk 上。 每 qdiskd 服务在提交其节点信息后,接着查看 qdisk 上其他节点的状态,权重为(N / 2);
 
               ping node:同时ping某个网关或设备,通过通不通来仲裁(两节点集群,需要关闭投票仲裁,使用ping来决定

                 注意:一般集群中的主机数量都为3台以上,且为奇数;目的是为了防止分离时,刚好分离成每边成员都是相等了,造成资源的争用,服务无法提供,但是也可以关闭投票机制,使用ping node,但是还是不能完全弥补此种缺陷


3、failover: 失效转移,故障转移,failback:失效转回,故障转回,通过配置ha.cf文件中的 auto_failback on启用
 
4、心跳信息传递机制
 
(1)Serail cable:串形接口连接,作用范围有限,不建议使用;
 
(2)Ethernet cable:网线连接,通过网络接口(中间可通过交换机)将主机连接起来;
 
(3)UDP Unicast:UDP单播方式
 
 UDP  Multicast:UDP组播方式(相对比较常用)
 
UDP Broadcast:UDP广播方式
 
说明:组播地址:用于标识一个IP组播域;IANA(Internet Assigned number authority)把D类地址空间分配给IP组播使用;其范围是:224.0.0.0-239.255.255.255;
 
永久组播地址:224.0.0.0  –  224.0.0.255;
 
临时组播地址:224.0.1.0  –  238.255.255.255;
 
本地组播地址:239.0.0.0  –  239.255.255.255, 仅在特定本地范围内有效
 

            ————————————————————————————————–
            ————————————————————————————————–

四、HA Cluster的工作模型
 
1、主从方式(非对称)A/P:两节点集群,active, passive,工作于主备模型;
集群包含2个节点和一个或多个服务器,备份节点随时都在检测主节点的健康状态信息,当主节点发生故障时,服务会自动切换到备份节点保证运行,平时备份节点不会运行
 
2、对称方式:A/A:两节点集群,active/active,工作于双主模型;
 集群包含2个节点和一个或多个服务,其中每一个节点都运行着不同的服务且相互作为备份,两个节点互相检测对方的健康状况,这样当其中一个节点发生故障时,该节点上的服务会自动切换到另一个节点上去,保证服务运行
 
3、多机模型:M-N(M个节点,N个服务,M>N)或M-M(M个节点,M个服务)
 集群包含多个节点和多个服务。每一个节点都可能运行和不运行服务,每台服务器都监视着几个指定的服务,当其中的一个节点发生故障时,会自动切换到这组服务器中的一个节点上去。
 


            ————————————————————————————————–
            ————————————————————————————————–


五、HA Cluster的架构层次与解决方案

         

              HA Cluster.png

 
1、Messaging Layer:
主要为信息层,作用是传递当前节点的心跳信息,告知其他节点是否在线,如果不在线,可根据相关机制实现资源转移,同时传递集群相关事务消息(每个节点安装相关心跳软件,通过网线连接起来,相互监听在相关IP地址和端口上)
 
解决方案:
 
(1)heartbeat  V1,V2(稳定版),V3
 
(2)corosync(openAIS的子项目分出研发,功能强大)
 
(3)keepalive
 
(4)cman
 
2、CRM(Cluster  Resource Messager):集群资源管理器
 
主要用来提供那些不具有高可用的服务提供高可用性的,调用Messaging Layer来实现工作。因此工作在Messaging Layer上层。资源管理器的主要工作是根据messaging Layer传递的健康信息来决定服务的启动、停止和资源转移、资源的定义和资源分配。在每一个节点上都包含一个CRM,且每个CRM都维护这一个CIB(Cluster Internet  Base,集群信息库),只有在主节点上的CIB是可以修改的,其他节点上的CIB都是从主节点那里复制而来的。在CRM中还包含LRM和DC等组件
 
解决方案:
 
(1)heartbeat v1 haresources (配置接口:配置文件,文件名为haresources)
 
(2)heartbeat v2 crm (在各节点运行一个crmd进程,配置接口:命令行客户端程序crmsh,GUI客户端:hb_gui);
 
(3)heartbeat v3, pacemaker (pacemaker可以以插件或独立方式运行;配置接口,CLI接口:crmsh, pcs; GUI: hawk(webgui), LCMC, pacemaker-mgmt);
 
(4)rgmanager (配置接口,CLI:clustat, cman_tool; GUI: Conga(luci+ricci))
 
组合方式:
 
(1)heartbeat v1
 
(2)heartbeat v2
 
(3)heartbeat v3 + pacemaker
 
(4)corosync + pacemaker
 
(5)cman + rgmanager (RHCS)
 
(6)cman + pacemaker
 
3、LRM(Local Resource  Messager):本地资源管理器,属于CRM的组件,用来获取某个资源状态,并且管理本地资源,例如:当检测到对方没有心跳信息时,则会启动本地相关服务
 
4、DC:事务协调员,当集群节点发生故障,出现分组的情况时,由于可能都运行着相关服务,会发生资源抢夺的情况,因此事务协调员DC会根据每个组的法定票数来决定哪些节点启动服务,哪些节点停止服务
 
5、资源隔离组件:如果主节点出现相关故障,此时备份节点立即抢占资源,而主节点正在执行写操作,备份节点一旦也执行相应的写操作,会导致文件系统错乱和服务器崩溃,因此隔离机制此种情况需要采用资源
 
(1)节点级别隔离
 
  STONITH(Shoot The Other Node in the Head,”爆头“)通过控制电源开关断电,上电来使节点重启或关机(电源路由器)
 
(2)资源级别
 
       FC SAN switch可以实现在存储资源级别拒绝某节点的访问
 
6、资源代理RA(Resource Agent):RA实际复制启动相关资源的,是一个脚本文件,一个节点可以有多个RA
 
(1)heartbeat legacy:heartbeat传统类型的RA,通常位于/etc/ha.d/haresources.d/目录下;
 
(2)LSB:Linux Standard Base, /etc/rc.d/init.d目录下的脚本,至少接受4个参数:{start|stop|restart|status};
 
(3)OCF:Open Cluster Framework,子类别:provider
 
STONITH:专用于实现调用STONITH设备功能的资源;通常为clone类型
 
7、资源:资源就是启动一个服务需要的子项目。例如启动一个httpd服务,需要ip,也需要服务脚本、还需要文件系统(用来存储数据的),这些我们都可以统称为资源
 
(1)资源类型:
 
(a)primitive:主资源,只能运行于集群内的某单个节点;(也称作native);
 
(b)group:组资源,容器,包含一个或多个资源,这些资源可通过“组”这个资源统一进行调度;
 
(c)clone:克隆资源,可以在同一个集群内的多个节点运行多份克隆;
 
(d)master/slave:主从资源,在同一个集群内部于两个节点运行两份资源,其中一个主,一个为从;
 
(2)资源约束
 
(a)location:位置约束,定义资源对节点的倾向性;用数值来表示,-oo, +oo;
 
(b)colocation:排列约束,定义资源彼此间“在一起”倾向性;-oo, +oo
group(分组):亦能实现将多个资源绑定在一起;
 
(c)order:顺序约束,定义资源在同一个节点上启动时的先后顺序;例如:首先应该先挂载共享存储,在启动httpd或mysqld服务才行吧。


            ————————————————————————————————–

            ————————————————————————————————–


总结:

            

           为了构建一个较为完善的高可用集群,我们应该使用三个或者更多的的节点,组织起来后负责实现一个复杂功能。这个功能包含这些节点之间通信状态,健康状态是否正常;每个节点的资源状态输出;每个节点上边都运行一个软件,该软件通过单播多播,广播的方式进行通讯来完成事务集群决策。输出完之后通过上层应用进行调用,但是多数应用都没有这种功能,所以我们在此之后再加一层次,这个层次称为资源管理器。资源管理器真正管理资源是靠资源管理器中的一个子层LRM。但是LRM对于某个功能的具体实现需要调用脚本,或者调用一个systemd的until file来实现,这一个又一个的实现,我们称之为资源代理,所有资源代理集合起来,我们称之为资源代理层。

这只是规范











原创文章,作者:hunter,如若转载,请注明出处:http://www.178linux.com/60964

(0)
hunterhunter
上一篇 2016-11-27
下一篇 2016-11-27

相关推荐

  • NFS(Network File System)介绍与应用(双httpd + php-fpm + nfs + mysql 搭建discuz论坛)

    NFS相关介绍 一、NFS简介     1. NFS(Network File System): NFS是一个文件共享协议, 也是是在类Unix系统中在内核中实现的文件系统。      2. 起源: 最早是由SUN公司研发,非常古老,只是实现文件共享,安全控制方面比较简…

    Linux干货 2015-07-21
  • Linux终端类型

    前言 终端是一个很重要的外设,用过终端设备的人都知道如果设备类型不对就会有乱字符,也可用仿真终端软件如netterm试验一下,Linux的终端信息放在 /usr/share/terminfo下,在这个目录的子目录v下就有许多的如vt100,vt102,vt200等,看一下就知道了。 终端类型的区别与概念 1、 pty(虚拟终端): 但是如果我们远程telne…

    Linux干货 2016-10-14
  • LAMP快速部署及LAMP组合深入讲解-1

      lamp php php: 脚本编程语言、嵌入到html中的嵌入式web程序开发语言;基于zend编译成opcode(二进制格式的字节码,重复运行,可省略编译环境) 一、PHP简介 PHP是通用服务器端脚本编程语言,其主要用于web开发以实现动态web页面,它也是最早实现将脚本嵌入HTML源码文档中的服务器端脚本语言之一。同时,php还提供了一…

    Linux干货 2017-06-04
  • 关于文件查找和解压缩

                     文件查找和解压缩在文件系统上查找符合条件的文件,文件查找的工具有两个,locate 和find文件查找分为:          &nbs…

    系统运维 2016-08-18
  • M22 wireshark使用方法简介

    wireshark是一款著名的开源抓包软件,它可以抓取网卡的数据包,以供网络管理员分析。 一 安装方法 debain系安装方法: sudo add-apt-repository ppa:wireshark-dev/stable sudo apt update sudo apt install wireshark 启动wireshark: sudo wires…

    2017-03-20
  • 安装包管理

       软件包管理 软件的运行和编译 ABI 由于window和linux不兼容 linux是ELF window 是PE 对应的内核解析方式不同,可以用虚拟化 API 只程序与程序的公用的接口,相互调用方式 程序源代码 –>预处理–>编译–>汇编–>链接 预处理只会引…

    Linux干货 2017-04-24