在传统Linux集群种类,主要分了三类:
Pacemaker 是 Linux环境中使用最为广泛的开源集群资源管理器,Pacemaker利用集群基础架构(Corosync 或者 Heartbeat)提供的消息和集群成员管理功能,实现节点和资源级别的故障检测和资源恢复,从而最大程度保证集群服务的高可用。
从逻辑功能而言,pacemaker在集群管理员所定义的资源规则驱动下,负责集群中软件服务的全生命周期管理,这种管理甚至包括整个软件系统以及软件系统彼此之间的交互。
Pacemaker在实际应用中可以管理任何规模的集群,由于其具备强大的资源依赖模型,这使得集群管理员能够精确描述和表达集群资源之间的关系(包括资源的顺序和位置等关系)。同时,对于任何形式的软件资源,通过为其自定义资源启动与管理脚本(资源代理),几乎都能作为资源对象而被 Pacemaker管理。
此外,需要指出的是,Pacemaker仅是资源管理器,并不提供集群心跳信息,由于任何高可用集群都必须具备心跳监测机制,因而很多初学者总会误以为 Pacemaker 本身具有心跳检测功能,而事实上 Pacemaker 的心跳机制主要基于 Corosync或 Heartbeat来实现。
Pacemaker是整个高可用集群的控制中心,用来管理整个集群的资源状态行为,客户端通过 pacemaker来配置、管理、监控整个集群的运行状态。Pacemaker是一个功能非常强大并支持众多操作系统的开源集群资源管理器,Pacemaker支持主流的 Linux系统,如 Redhat的 RHEL系列、 Fedora系列、 openSUSE系列、Debian系列、 Ubuntu系列和 centos系列,这些操作系统上都可以运行 Pacemaker并将其作为集群资源管理器。更多关于企业集群运维管理系列的学习文章,请参阅:玩转企业集群运维管理专栏,本系列持续更新中。
Corosync是OpenAIS发展到Wilson版本后衍生出来的开放性集群引擎工程,corosync最初只是用来演示OpenAIS集群框架接口规范的一个应用,可以说corosync是OpenAIS的一部分,但后面的发展明显超越了官方最初的设想,越来越多的厂商尝试使用corosync作为集群解决方案。如Redhat的RHCS集群套件就是基于corosync实现。
corosync只提供了message layer,而没有直接提供CRM,一般使用Pacemaker进行资源管理。
corosync 的主要作用是提供messaging Layer,这个消息传递层的主要作用是,把个主机间的各状态信息,空闲信息等等一系列信息通过消息传递层互相传递,使得托管在corosync上的服务能够根据底层各主机传递的消息来决定,该服务该运行到那台主机上,一旦运行服务的主机发生故障时,它们又能够根据消息传递层的消息,来判断该把服务迁移到那台主机上运行,这样一来托管在corosync上的服务,就实现了高可用。
简单点讲,托管在corosync之上的服务对底层主机是不可见的,这也意味着托管在corosync上的服务是能够调用和理解Messaging Layer中的消息,这样一来托管在上面的服务就必须得提供接口来调用messaging Layer对外提供的接口,然后实现服务的迁移,而对于大多数程序来讲,它根本就没有这样的接口,这样一来我们要使用corosync实现服务高可用就变得困难。
为了解决托管在corosync的服务能够调用corosync提供的接口。我们需要开发一个中间件,让这个中间件能够向下理解和调用coroysnc提供的接口,向上能够托管服务,这个中间层就是pacemaker。它的主要作用是通过调用corosync提供的接口,来判断把集群资源该怎么分配,服务该怎么迁移和运行。
同时pacemaker还提供一个管理界面,能够让管理员来管理这些集群资源,而对于pacemaker来讲,它主要有3个层次,
比如,我们要把httpd服务托管在corosync+pacemaker这个架构上,首先我们得提供一个管理httpd的服务的脚本,比如centos7上的httpd.service,centos6上的/etc/init.d/httpd来实现;而这些脚本通常在我们使用yum安装都会提供,这样一来,我们要托管httpd服务就变得简单,我们只需要在pacemaker上配置,把httpd识别成集群资源即可;只要配置httpd为集群的资源,此时我们就可以在各主机上迁移httpd服务来实现httpd服务的高可用,要实现httpd服务在各节点上迁移,我们需要注意各节点上必须有httpd服务,对于其他服务也是同样的逻辑。
简单讲corosync主要提供底层各主机消息状态,集群状态信息,而pacemaker主要对托管在其上的服务进行管理;当然pacemaker也可以通过调用corosync的接口来管理底层的主机,比如让某一台主机下线上线等等操作。
可实现多种集群模型,包括 Active/Active, Active/Passive, N+1, N+M, N-to-1 and N-to-N。
主从架构集群:许多高可用性的情况下,使用Pacemaker和DRBD的双节点主/从集群是一个符合成本效益的解决方案。
多节点备份集群:支持多少节点,Pacemaker可以显着降低硬件成本通过允许几个主/从群集要结合和共享一个公用备份节点。
共享存储集群(多个节点多个服务):有共享存储时,每个节点可能被用于故障转移,Pacemaker甚至可以运行多个服务。
在corosync+pacemaker架构上,最为核心的就是资源,前边说了那么多,最终目的是为了管理托管在上面的资源;而对于资源来讲资源是有类型的;简单讲就是可以用来调配的服务称为资源,比如一个httpd服务,一个ip地址,一个后端共享存储等等,这些都叫做资源;而对于一个完整的服务来讲,它是由多个单一的资源组合而成;比如一个完整的httpd服务它应该由ip地址、httpd服务进程、在特殊场景中很有可能会有后端共享存储;而这些资源在corosync+pacemaker上,每个资源是有类型的,不同类型的资源运行方式各不相同。
primitive:基本资源,主资源;通常仅能运行为一份,运行在单个节点上的资源;
group:组;将一个或多个资源组织成一个可统一管理的单一单位资源;什么意思呢?默认情况托管在corosync+pacemaker上的资源会均衡的运行在多个主机之上,如果我们不将这些资源逻辑的关联在一起,就会存在,ip地址在A主机上,服务进程在B主机上,后端存储在C主机上,这样一来,我们托管的服务就没有办法向外提供服务,为了解决各依赖资源分散的问题,我们需要将多个有关联依赖的资源逻辑的组织成一个组,然后根据这个组为单位进行调度和管理;
clone:克隆;一个资源可以在集群中运行多个副本,可以运行于多个节点;
mutil-state(master/slave):是clone类型的资源的特殊表现,可以存在多个副本,副本间存在主从关系;
参考链接:https://blog.csdn.net/weixin_44209804/ article/details/89345101 https://www.cnblogs.com /qiuhom-1874/p/13585921.html dandelioncloud.cn /article/details/1555501395464114178