dbrd可以实现数据的同步,drbd一般是一主一从,所有的读写操作,挂载只能在主节点上进行。drbd主从节点可以调换。
通过corosync+pacemaker实现drbd主从点挂掉后能自动切换到从节点上,实现故障转移继续提供服务。
因此可以将mysql的数据放置到drbd数据块上。
drbd: DRBD:(distributed replication block device)即分布式复制块设备。它的工作原理是:在A主机上有对指定磁盘 设备写请求时,数据发送给A主机的kernel,然后通kernel中的一个模块,把相同的数据传送给B主机的kernel中一份, 然后B主机再写入自己指定的磁盘设备,从而实现两主机数据的同步,也就实现了写操作高可用。 类似于raid1一样,实现数据的镜像, DRBD一般是一主一从,并且所有的读写操作,挂载只能在主节点服务器上进行,,但是主从DRBD服务器之间是可以进行 调换的。
各个组件之间的关系: 其实mysql与drbd根本没有半毛钱的关系,而drbd与mysql相结合就有很重要的作用了,因为drbd实现数据的镜像,当drbd的主节点挂了之后,drbd的辅助节点还可以提供服务,但是主节点不会主动的切换到辅助的节点上面去,于是乎,高可用集群就派上用场了,因为资源定义为高可用的资源,主节点出现故障之后,高可用集群可以自动的切换到辅助节点上去,实现故障转移继续提供服务。
1、高可用集群的定义
高可用集群,是指以减少服务中断(如因服务器宕机等引起的服务中断)时间为目的的服务器集群技术。简单的说,集群就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点。
高可用集群的出现是为了减少由计算机硬件和软件易错性所带来的损失。它通过保护用户的业务程序对外不间断提供的服务,把因软件/硬件/人为造成的故障对业务的影响降低到最小程度。如果某个节点失效,它的备援节点将在几秒钟的时间内接管它的职责。因此,对于用户而言,集群永远不会停机。高可用集群软件的主要作用就是实现故障检查和业务切换的自动化。
2、高可用集群的结构
要想实现、配置高可用集群,就必须要了解高可用集群的结构,从底至上分为三层结构
先上高可用集群的结构图
1)Messaging Layer
信息层,心跳信息传输层,它是运行在每一个主机上的一个进程
今天要讲的corosync就是运行在这一层的
2)CRM,Cluster Resources Manager
集群资源管理器,依赖于各自底层的心跳信息层。之所以有这一层是因为那些非ha_aware软件本身不具备集群高可用能力,才借助于CRM来实现的;而如果一个应用程序自己能够利用底层心跳信息传递层的功能完成集群事务决策的软件就叫ha_aware。
在这层中,其实还有一层叫做LRM(Local Resource Manager)本地资源管理层,这一层是真正去把CRM层的决策去落实的层次;就好比,CRM层是公司的董事长,LRM就是总经理,CRM负责整个公司的远景规划及战略实施,然后分配给总经理(LRM)去实施,总经理再分摊给下面的各小弟(RA)去完成,这些在上图中也可以直观的表现出来
pacemaker就是属于这一层的,而pacemaker的配置接口的crm(suse),所以我们安装的时候需要安装crmsh
3)RA,Resource Agent
资源代理就是能够接收CRM的调度,用于实现在节点上对某一个资源完成管理的工具,通常是一些脚本
(1)heartbeat legacy
heartbeat的传统类型,监听在udp的694端口上
(2)LSB,linux standard base
那些在/etc/rc.d/init.d/*的脚本就是属于LSB的
(3)OCF,Open Cluster Framework
开放集群架构,那些提供资源代理脚本的组织叫provider,pacemaker就是其中的一个provider
(4)STONITH
shoot the other node in the head,这个RA类型主要是做节点隔离的,专为配置stonith设备耐用。
使用STONITH主要目的就是为了避免由于网络原因,节点之间不能完全通信(比如分为了两部分,左边3台,右边2台),左边的3台能收到各自的心跳信息,右边的2台也可以收到各自的心跳信息,就是左边部分和右边部分收不到各自的心跳信息,因此,它们都各自以为对方故障了,就会各自重新推选出一台做为DC(Designated Coordinator),从而出现了两个集群,这就导致了资源争用;如果恰好双方都往其共享存储写数据,很可能就会导致文件系统崩溃,这种现象就叫做集群分裂(brain-split)。
为了避免集群分裂,就出现了法定票数(quorum,票数>半数票数的集群成为满足法定票数)这一说法,就是在集群通信故障时,为了避免资源抢占,应该让一方放弃成为集群,具体应该哪方放弃呢?这就是投票的结果了,只有具有法定票数的一方才有资格做为集群,相反的一方就应该退出集群,但它放弃后并不代表服务停止,所以应该让其释放资源,关闭电源。stonith设备就是在这里用的,要让退出集群的设备彻底失效,电源交换机就是这个原理了
而如果一个集群只有两个节点的话,这又是一种特殊的集群,万一出现集群分裂后,它们双方可能都不会具有法定票数,那结果可想而知,资源不会转移,导致整个资源都故障了,因为没有仲裁设备
说这么多,就是为了说明下面两个比较重要的概念
①、corosync默认启用了stonith功能,而我们要配置的集群并没有stonith设备,因此在配置集群的全局属性时要对其禁用
②、当一个集群没有法定票数时,资源是不会正常转移的,当一个节点出现故障时,资源不会正常的转移到正常的节点上,就会导致所有的资源都故障了。所以,应该定义法定票数不足时做忽略而不是停止所有资源
未完,待续。。。。。。