集群基础
两个及两个以上的节点一起完成一个任务称之为集群。主要集群类型有:存储、高可用、负载均衡、高性能。
存储集群:集群主要提供一个跨越服务器的一致文件系统镜像,允许服务器同时对一个共享文件系统进行读写。使用一个存储集群范围的文件系统,无需对应用数据进行冗余复制,同时可以简化备份和灾难恢复。(GFS2、GlusterFS、GPFS、Ceph等)
负载均衡集群(LBC):集群分发网络服务请求到多个计算节点(调度算法)来平衡各节点间的请求负载。集群中一个节点挂掉后,负载均衡软件会发现问题同时将请求发送到其他节点。集群中各节点可以一起完成许多并行的小任务。
高性能集群(HPC):使用集群节点来执行并行计算,一起完成一个或多个任务,支持应用并行工作,由此来加强应用性能,使得完成任务的速度和可靠性远大于单机,弥补单机性能不足。一般在天气预报、环境监控等数据量大、计算复杂的环境应用比较多。实现HPC的一种方式是采用SSI(Single System Image单一系统映象)。
高可用集群(HAC):提供高可用服务,消除单点故障。在一个节点出现故障时,集群中另一个节点可以接管。典型高可用集群中,服务通过可读写的挂载文件系统读写数据。因此,高可用集群在一个节点接管服务时必须维护数据完整性。这类在银行、电信等行业应用较多。(rehat rgmanager)
HA集群的一些介绍
Linux HA集群可以保证服务的可用性,不过还是会存在一些短暂的服务中断。Linux HA集群有时候会和HA功能混淆。如VMware vSphere HA是为了确保在出现硬件故障时保护虚拟机。vSphere监控主机或虚拟机是否可用。如果发生故障,则会将虚拟机在其他主机上重启。这可HA集群有点类似,但实际上是有本质区别的。虚拟化平台提供的HA解决方案虚拟机的情况是不可知的。也就是说虚拟机如果hang住了,但在虚拟化层,它可能还显示可用,此时这种HA解决方案就一筹莫展了。因此,还需要考虑操作系统高可用、应用层高可用及物理层高可用(如多网卡)。
Heartbeat是一个守护进程,提供集群服务,可以让集群中的服务器知道其他服务器上的对等进程是否存在,同时互相交换消息。Heartbeat守护进程需要结合CRM,典型和Heartbeat关联的CRM是Pacemaker。heartbeat在2.0以前不支持自监控,而且不支持两个节点以上的集群。除了heartbeat外,还有其他方案如Red Hat Cluster Suite,提供类似Heartbeat的功能。Heartbeat 2.0被分为两个子项目,一个来负责集群成员,另一个负责资源管理。
集群成员层的主要功能是监控节点的可用性。Corosync是目前主流的管理和监控节点成员的组件,它在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等。RedHat集群中通常是使用cman。
资源管理方面,Heartbeat演变成Pacemaker。Pacemaker是一个集群资源管理器,它的核心组件是CRM,用来监控资源可用性,如果资源有变化,它会提示LRM(本地资源管理器)来执行相应本地操作。Pacemaker几乎可以做任何规模的集群,并有一个强大的依赖关系,能准确表达集群资源之间的关系(包括顺序和位置)。
HA集群组件
• 共享存储
• 不同的网络
• 网卡绑定
• 多通道
• STONITH(Shoot The Other Node In The Head)设备
共享存储
大多数集群都需要共享存储。可以使用NFS或SAN来作为共享存储。但是NFS不如SAN灵活。
SAN(Storage Area Network )是一个集中式管理的高速存储网络,由于SAN的基础是存储接口,所以是与传统网络不同的一种网络,常常被称为服务器后面的网络。SAN主要分为两类:光纤和iSCSI。光纤SAN的性能最好,使用专用的SAN架构,一般比较贵,但是性能和可靠性高。iSCSI SAN通过IP网络发送SCSI命令,也就是说可以使用普通的以太网,成本相对较低,可靠性也相对低一点。而目前高级的iSCSI SAN解决方案和光纤SAN的性能差别不大了。
网络隔离
一般集群中采用专用网络作为集群内部协议通信。专有的存储网络用于存储数据传输,采用什么类型的网络取决于采用什么存储类型。SAN中需要采用HBA,iSCSI网络中采用普通以太网络即可,而目前高速网卡有取代HBA的趋势。
网卡绑定
如果单网卡模式,如果网卡挂掉了,那么节点的网络连接就断掉了,集群就可能受到影响。可以通过网卡绑定来解决这个问题,网卡绑定是多网卡的聚合,目的就是为了冗余。
多路冗余
当集群节点连接到SAN,在节点和SAN存储间添加多路径,可以发现SAN上的LUN。节点可以发现多个设备,节点到LUN的每个路径可以连接一个LUN。在一个节点连接到两个不同的SAN交换机的环境中,节点轮流连接到两个不同的SAN控制器,就会有四个路径,多路径驱动会发现四个不同的磁盘,但实际上是同一个磁盘。借助多个 I/O 路径可以提高容错率 —— 如果路径子集失败,剩下的路径仍然能够工作,还可以提高性能,因为 I/O 可以同时经过多个路径。
注:LUN是存储子系统的逻辑引用,LUN可以包含磁盘、整个磁盘阵列或磁盘阵列的一部分。使用LUN可以简化SAN存储管理,因为他们用作逻辑标识符,你可以通过这些标识符分配访问和控制权。
Fencing/STONITH设备和Quorum
集群中有个情形称为脑裂,脑裂表示集群分裂成了两个或多个部分,各个节点组都想接管资源。如果资源是文件系统,多个节点在没有协调的情况下同时尝试去进行写操作,可能会导致文件系统损坏及数据丢失。一般解决脑裂情况有两种方式。第一,采用quorum,原理很简单,就是如果集群仲裁失败,集群将不会进行任何操作。这可以解决前面说的那种问题。
shoot the other node in the head)或fencing。使用STONITH,指定硬件用来关闭集群中一个无响应的节点。集群中故障节点上的资源迁移到另一个节点前,集群必须确认相应节点确实挂掉了。为了完成这个,集群会发送一个关机操作到SNONITH设备,关闭无响应的节点。这看起来是个极端方法,但这确保不存在数据损坏而且可以清除一些瞬时错误(如内核崩溃)。Linux HA集群必须使用STONITH设备,有如下不同类型的STONITH设备:
•Integrated management boards, such as HP ILO, Dell DRAC ,and IBM RSA
• Power switches that can be managed, such as the APC master device
• Disk-based STONITH, which uses a shared disk device to effectuate the STONITH operation
• Hypervisor-based STONITH, which talks to the hypervisor in a virtualization environment
• Software and demo STONITH solutions (which, in fact, should be avoided at all times)