开发者学堂课程【分布式文件存储系统技术及实现:元数据管理的高可用性 】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/368/detail/4385
元数据管理的高可用性
内容介绍
一、高可用
二、可拓展性
三、元数据管理的高可用性方案
四、Paxos 协议
一、高可用
高可用一般在分布式的存储运算里都用多个备份的方式,需要保证的是在故障的时候能够快速切换,另外,多个备份之间要保证状态的一致性。
二、可拓展性
可拓展性是分布式存储的线性扩展的能力,,主要涉及两点,一点是元数据容量可线性扩展,另一点是元数据服务能力可线性扩展。
三、元数据管理的高可用性方案
它主要有两种方式:
1. 主从方式
这种方式一般会部署两个服务器,一个是主服务器,其他为从服务器。在决定主服务的过程中主要是通过锁互斥技术选举。两个服务器在启动的时候,之后就开始进行强锁,主节点就变成了从节点,当主节点出现宕机或网络断开的时候,锁自动换掉,再次重复刚才的操作。数据一致性是通过共享存储,主节点在服务写操作的时候,对数据的更改方式会变成以日志的方式,拿到共享存储里面,然后进入从节点读取日志,恢复自己的内存状态,这样就做到了多个同时备份和切换。
2.分布式协议
是通过复杂的分布式协议,如 Paxos/Raft 协议去完成切换和状态同步。
3.两种方式对比
主从方式和分布式协议对比,主从同步方式,虽然相对简单,但它所需要的复杂功能依赖其他模块,例如分布式锁服务和共享存储,这样的数据安全模块可以给它提供有效的保护。利用分布式协议完成这个过程,独立自包含,不依赖其他模块。
4.元数据的高可用模块是如何实现的
(1)HDFS NameNode
HDFS 的 NameNode 采用了主从模式,一般会使用 NFS 作为共享存储,使用 zookeeper 作为它的分布式锁服务,两个 NameNode 在 zookeeper 上强锁来决定主服务节点。用 NFS 作为共享存储,这样达到了两个节点互为备份。
(2)Pangu Metadata Server
使用 Paxos 一致性协议,保证高可用和快速切换,同时不依赖外部共享存储和互斥锁服务,独立自包含,以下来讲解这个过程怎么依赖于主服务节点,首先启动Pangu Master,进入选举状态,这个状态被称为 Elector 状态。每个 Master 都会选举自己为 Primary,此时要得到大多统一的过程叫做 Propose,一位节点接受了其他的建议后就会被锁定,变成如图所示的红色。
如果一个节点的 Propose 请求被大多数接受,此时会自动进入第二个过程, publish,将自己的选举结果告知被锁定状态的 Pangu Master,Pangu Master 接收到 publish 请求验证通过之后,自动进入 Secondary 状态。如下图所示:
若收到大部分 Publish 请求之后,发起选举的 Pangu Master 会进入 Primary 状态,对外提供主节点服务,这样就完成了主节点的确定过程。
只在后面的服务过程中, Primary 节点和 secondary 节点之间会维持有心跳,如果 Primary 出现异常,此时心跳会丢失,secondary 在一段时间之内收不到心跳,会认为主节点宕机,此时会降级为选举状态,重新决定主节点是哪个,过程同前面的图一样,先发起 Propose,然后再发起 publish,然后完成选举。
之前出现异常的节点想要恢复到这个系统里,首先如果故障排除,Pangu Master 重启启动后,会进入选举状态,此时还会选择自己为主节点,这时候 Propose 请求到达现在当前的主节点之后,主节点会拒绝这个请求,同时将自己是主节点这个信息 Publish给新启动的 Pangu Master ,让其升级为 secondary 状态,重新加入服务。
(3)Ceph Metadata Server:
在 ceph 系统中,Metadata Server 是他的 mds,由于 mds 的数据都存储在下层的 osd 上,所以这个系统天然存在一个共享存储设备,另外 mds 之间的心跳相互维持可以保证主节点确定过程,另外主节点出现异常的时候,也可以通过心跳方式去决定切换。在这个架构里面,先进点在于自身具备共享存储能力,同时可以用心跳代替分布式文件锁,可以做到独立自包含,这是一个相对于其他系统的比较先进的点。
四、Paxos 协议
Paxos 协议是分布式协议中,公认的可依赖分布式协商协议。
1.Paxos 协议关键点有三点:
(1)大多协商一致
(2)两阶段协商协议
(3)协议号递增且需要持久化
在这里,协议号递增且需要持久化是前提,前两个阶段:大多数协商一致和两阶段协商协议,是数据一致性的保证。
2. 两阶段协商过程
首先先发起请求,达到的第一个节点叫 Proposr ,然后接受数据同步的节点叫A cceptor ,这两个节点的数据要大于三,这时才能保证服务可切换,保证协商实现大多数同意。Proposr 接到用户修改请求后会发起第一个阶段 prepare ,如果此时 Acceptor 接受了 prepare ,会进入锁定当前协议号的状态,如果同时有其他 Proposr 发过来相同协议号的请求,会被当前的 Acceptor 拒绝掉。下一步,Proposr 会将带有相同协议号的 Accept 请求发给 Acceptor ,如果大多数 Acceptor 同意请求,这时这些数据已经保证了三个数据一致,可以安全返回告知修改操作成功。在第二个 Accept 请求的发生中,都会用下一步的 prepare 携带过 Accept ,同时保证中间交互尽量少,提高协议效率。
Paxos 协议—致性可得到证明,但在工业界采用的非常少,因为实现过于复杂,程序实现难理解,不利于维护。
Raft 协议是对 Paxos 协议的简化,有效保证了数据一致性,是分布式系统采用最多的一种算法。