当前位置: 首页 > 科技观察

Linux之HA高可用集群的基础概念总结

时间:2023-03-14 20:09:05 科技观察

HA(HighAvailability)高可用集群的特点是根据实际需要为前端Diretor、后端RS-server、数据库服务器、共享存储等集群节点做一个slave备份服务器或者多台服务器互相支持。一旦主服务器挂掉,备份服务器可以立即检测并替换主服务器上的资源继续运行服务,从而最大程度避免服务器宕机导致的服务中断。主节点(active/primary)、备节点(passive/standby)、主调度器(Director)一般都是集群中的关键节点,所以一般都有备份节点;而后端的RS-server可以根据实际可靠的需要增加备份节点,存储服务器如Mysql-Server也作为集群的关键节点,一般配备主从服务器.HA集群注重服务的可靠性和稳定性可用性=服务在线时间/(服务在线时间+故障处理时间)可用性从99%、99.9%、99.99%、99.999%不断提升,每增加9个,服务可用性提高十倍。在一些应用中,服务可用性必须达到5个9级别,比如:金融交易系统...HA资源(高可用集群资源):一旦某个节点出现故障,这些资源需要转移到其他备份节点,包括VIP、Services,隔离设备,文件系统。每个RS上运行着服务资源。当有多个RS节点时,一旦一个节点发生故障,必须立即将资源转移到其他节点,让其他节点处理未完成的请求,并防止Director将前端请求继续转发到这个节点,但是有这么多节点,故障发生时转移到哪个节点?如果故障节点恢复了怎么办?这时候就需要定义资源的粘性、资源约束等。资源粘性:资源更倾向于运行在哪个节点上,即资源和节点的偏好。例如:定义web服务在服务器A上的资源粘性为120,在服务器B上的资源粘性为100。恢复正常后,web服务会从服务器B转移到服务器A。资源粘性:是否是资源倾向于在当前节点上运行,Score>0(最好)Scoro<0(不倾斜,即一旦有其他资源可以运行此服务节点,资源会立即转移到其他节点)资源constraints:定义资源和资源倾向1.colocation(安排约束):定义不同资源是否可以运行在同一个节点上,Score>0(是),Score<0(不允许)-inf(负无穷..Mustnotrunonthesamenode)inf(positiveinfinity..mustrunonthesamenode)2.location(位置限制):每个节点可以给一个资源一个Score,Score>0(资源倾向于在这个节点上运行)3.Score<0(资源不倾向于在该节点上运行)取大者:一般资源粘性+位置约束,资源更可能在该节点上运行Order(顺序约束):定义资源运行的顺序启动和关闭,因为不同的资源可能有依赖如:VIP和IPVS规则,VIP先启动IPVS规则再启动资源分类1.Primitive资源只运行在一个节点(primaryresource)上。2.克隆在每个节点上运行此资源。3.group将多个资源分成一组,同组的资源一起进退,一起在节点上传递。4.master/slavemaster/slave,一个资源只能运行在两个节点上,一个是master,一个是slave。备份节点如何知道主节点宕机了?heartbeat(心跳信息):每个节点都要随时和备份节点通信,目的是检测对方是否在线,但是当有三个或三个以上的节点并且这些节点之间也互相传递心跳信息(比如如运行中此类服务的RS互为备份节点,从而判断是否有故障,是否为合法节点,如何判断?定义一个组播中的所有节点,让它们互相ping通。比如有有5个运行web服务的RS节点A、B、C、D、E,在某一时刻,A、B、C三个节点可以互相ping通,如果D、E两个节点可以互相ping通,可以定义一个Quorum(投票)机制,每个节点定义一票,所以五个节点一共五票,定义只有获得一半的选票才是合法节点。所以此时,节点A、B、C一共三票,而节点D、E一共两票。可以认为节点D和E不是非法节点(即节点D和E出现故障)或者节点A无法ping通其他节点获得一票。票,B、C、D、E四个节点可以互相ping得到四票,可以认为节点A是非法节点。对于多节点集群,为了实现投票机制,节点数必须是奇数。获得半数以上的选票即为合法,可以定义不同的节点拥有不同的选票。例如,性能好的节点A有两个投票权,而节点B一般有一个投票权。这时候就不需要奇数个节点了,只要投票总数是奇数个就可以决策了。节点一旦被认定为非法节点,应该采取什么措施?1.冻结(Freeze)这种非法进程只处理已经连接的请求,不再接受新的请求,处理完请求后再转移资源。2.停止非法节点直接停止运行服务和转移资源。这个措施最常用3.ignore直接忽略,继续正常运行服务。什么时候会忽略?当只有两个节点互为备份时。当只有两个节点互为备份时,一旦主节点无法ping通备份节点。采用投票机制(一旦采用投票机制,两个节点都只会得到一票,并且都认为自己已经死了,那么不仅主节点会停止服务,而且本应取代主节点的备份节点也会也无法响应主节点,因为它认为是非法的节点来替换),主节点只能继续运行服务,直到被Stonish设备或fence设备隔离进行资源转移,然后备份节点将也更换主节点。提供MySQL服务需要哪些资源?1、VIP提供特殊服务2、FIP(floatIP)移动IP可以在节点间转移3、Mysql服务4、文件系统(待挂载)一旦一个节点挂了,会转移到哪个节点?定义每个节点的资源约束分数,哪个分数大,哪个节点更倾向于转移脑裂:假设一个集群有4个RS_ServerA、B、C、D,其中A正在向文件写入数据,并且由于A服务器CPU忙或者误加了Iptables规则隔离心跳传输等原因,备份节点不发送自己的心跳信息。这时CRM(clusterresourcemanager是专门用来收集集群资源或服务信息的集群资源管理器。)发现检测不到A的心跳信息,认为是A服务器宕机了,于是调了所有将A上的资源分配给B等其他节点。这是节点B继续完成节点A的任务(写入数据到文件),会导致A和B同时写入一个文件,这将导致文件系统崩溃和文件混乱。如何避免脑裂?资源转移前,原节点需要进行资源隔离:1.节点隔离。Stonish设备直接下电,如果发现某个节点无法发送心跳,则直接下电。2、资源级隔离在存储资源中可以实现FC-SAN(光纤交换机),隔离故障节点的访问。如何检测节点是否故障?1.添加仲裁盘。主节点不断地将数据写入共享磁盘。一旦备节点发现自己可以访问共享磁盘,但是没有发现主节点有写入数据,就可以认为主节点宕机了,被隔离了。2.ping网关即可能ping通网关,说明节点正常。一旦ping不一样,就可以认为是自己故障了,将其隔离。3.watchdogwatchdog,协调同一个节点上的不同进程定时向watchdog写入数据,一旦写入中断watchdog会尝试重启进程,如果失败则节点有故障,MassagingLayer是从集群中移除(负责使用UDP协议以组播方式在主节点和备节点之间传递心跳、资源粘性、资源约束等信息),MassagingLayer也是一个服务(UDP/694),它应该在开机时自动启动。ClusterResourceManager(集群资源管理器):专门统计收集组上各资源的状态,如:资源粘性、资源约束、节点是否健康;CRM的组件PE计算资源现在应该运行在哪个节点上然后CRM的组件TE指挥各个节点的LRM完成相应的操作如:将服务从节点A迁移到节点B,在节点B上启用VIP,文件系统...高可用集群节点上的服务启动必须由CRM决定,不能自动启动,所以必须是#chkocnfig服务名offPE:policyenginePolicyengineTE:TransactionEngineTransactionengineLRM:locationResourceManager本地资源管理器PE、TE、LRM都是CRM的组件RA:ResourceAgent所有可以负责资源启动、关闭、重启、状态监控的脚本都称为RA,RA运行在各个节点上RA类Legencyheartbeatv1RALSB所有遵循linux的shell编程都支持start|restart|stop|status的脚本都是LSB类型的,比如/etc/rc.d/init.d/目录下的所有脚本OCF(openclusterframework)这样的scripts不仅可以接受start|restart|stop|status等参数,甚至可以接受Monitor(监控)等参数nodeMessagerLayer在多个节点间选举1.heartbeat(v1v2v3三个版本)2.heartbeatv3进一步分为heartbeat,pacemaker,cluster-glue3。RedHat6.0之后默认使用CoroSyncMessagingLayer4。RedHat5.0后默认使用CmanMessagingLayer,但由于工作在内核空间,配置复杂,6.0CoroSync5后被取代。keepalived工作在用户空间keepalived的配置和应用与前面的有所不同。例如VIP的配置是基于VRRP(VirtualRouterRedundancyProtocol)实现的CRM(clusterresource)。emanager)层软件实现CRM必须工作在MessagingLayer1.Haresources(heartbeatv1v2自带)2.CRM(heartbeatv2自带)3.Pacemaker(heartbeatv3独立项目)4.Ragmanager(一种crm专门为Cman提供的)所以集群MessageLayer和CRM结合如下:1.haresource+heartbeatv1/v22。crm+心跳v23.起搏器+corosync4。起搏器+心跳v35。cman+ragmanager然后定义一个Web服务的高可用集群至少需要多少个节点?应该定义多少资源?至少需要两个节点。要运行MassagerLayer和CRM,至少必须定义四种资源:VIP、httpd服务、文件系统和Stonish设备。我们应该如何处理我们的集群系统呢?首先,当每个节点都需要安装MessagerLayer,在CRM节点之间传输心跳信息时,应该采用加密传输(比如hash计算)。如果有两个节点可以单播传输心跳信息,两个以上的节点可以单播、组播、广播传输心跳信息,高级可用集群节点上的服务必须由CRM控制,所以需要设置CRM要自动启动,必须??用chkconfig关闭服务才能自动启动,MassagerLayer也是一个服务,需要自动启动,MessageLayer监听UDP/694,在Message传输心跳等信息Layer层同UDP协议。如果要配置HA集群,需要注意什么?节点名要和uname-n的结果一致;节点名/IP解析***在/etc/hosts文件中,不要使用DNS解析,否则DNS-Server挂掉会影响集群;节点时间必须同步;SSH互信通信(当要停止其他节点的HA集群服务时,不能从本节点进行,需要从正常节点关闭或启动HA服务)..第一个节点呢?第一个节点需要自己启动,然后再启动其他节点上的服务