一种面向时钟不同步、弱网环境的主备切换的方法与流程

文档序号:37543796发布日期:2024-04-08 13:45阅读:11来源:国知局
一种面向时钟不同步、弱网环境的主备切换的方法与流程

本发明涉及分布式系统,具体是一种面向时钟不同步、弱网环境的主备切换的方法。


背景技术:

1、现有的典型分布式系统(如hbase、hdfs)都存在两个管理节点,一主一备,同一时刻只会有一个节点是主,主管理节点负责管理整个分布式系统,并维护全局索引信息,提供全局索引信息的增、删、改、查等操作;备管理节点会异步加载主管理节点的最新更改信息,并监听主管理节点的健康状态,当主管理节点出现故障时,备管理节点会切换成为主管理节点,承担主管理节点的职责,确保整个分布式系统平稳运行。

2、根据flp不可能理论,在异步通信场景中,没有任何算法能保证达到一致性。也就是说如果网络通信不可靠,任何两个进程都无法达成共识(谁是主,谁是备),因此,在典型分布式系统中,两个管理节点都需要依赖第三方协作系统来完成选主过程,而且为了解决“脑裂”问题,在备管理节点在成为主管理节点之前需要确保主管理节点不再对外提供服务,而这往往需要在主备切换期间两个管理节点的时钟同步并且网络畅通可达。

3、以hdfs为例,两个管理节点namenode依赖分布式协作系统来完成选主,备管理节点监听主管理节点在分布式协作系统中的状态,当备管理节点收到主管理节点异常状态通知之后,备管理节点启动升主流程,并通过ssh到主节点杀掉主节点进程的方式来确保主节点不再对外提供服务,之后,备管理节点才能完成升主过程,成为主节点对外提供服务。虽然这个过程解决了“脑裂”问题,但是却需要两个管理节点之间的时钟同步并且网络畅通可达,如果主管理节点网络不通或者断电宕机,就不满足网络畅通可达的条件,也就无法完成主备切换,进一步导致整个分布式系统不可用;

4、为此,本发明提出一种面向时钟不同步、弱网环境的主备切换的方法。


技术实现思路

1、本发明旨在至少解决现有技术中存在的技术问题之一。为此,本发明提出一种面向时钟不同步、弱网环境的主备切换的方法,解决了需要依赖时钟同步和网络畅通才能完成主备切换的问题。

2、为实现上述目的,根据本发明的实施例1提出一种面向时钟不同步、弱网环境的主备切换的方法,包括以下步骤:

3、步骤一:通过分布式协作系统提供的有序临时节点创建功能和事件监听通知机制提供fifo的分布式锁服务;每个进程根据分布式锁服务判断是否拿到锁;

4、步骤二:管理节点在启动后首先通过分布式锁服务等待获得锁,获得锁之后,创建一个本地租约;并从分布式协作系统中临时节点的父节点中加载租约信息,在等待一个预设的加载时间间隔后,将租约信息写入到临时节点的父节点中,在写入成功后,则认为该管理节点成为主节点;

5、步骤三:管理节点向客户端或者其他节点提供元数据的读写服务,当需要写数据时,在写数据之前先通过数据写栅栏判断是否满足写数据的条件,如果不满足写数据的条件,则生成拒绝服务异常;所述数据写栅栏通过查询管理节点当前的状态和本地租约的当前状态判断是否满足写数据的条件;

6、所述每个进程根据分布式锁服务判断是否拿到锁的方式为:

7、每个进程在启动后通过客户端在分布式协作系统中创建一个有序的临时节点,并通过心跳信息维持该临时节点,当心跳超时或中断时临时节点会被删除,从而触发事件通知;在创建了临时节点后,通过原子操作获得临时节点的父节点下已创建的临时节点,同时设置监听器,当父节点下出现临时节点新增或减少时监听进程会收到事件通知,进程根据事件通知来判断是否能拿到锁;

8、所述通过心跳信息维持该临时节点的方式为:

9、在分布式锁服务中每个进程通过客户端定期以时间间隔发送心跳来维护在分布式协作系统中的临时节点;其中,△t是分布式协作系统自带的最大超时时间;

10、所述根据事件通知来判断是否能拿到锁的方式为:

11、如果本进程创建的临时节点的序号是最小的,那么本进程拿到锁,否则继续监听等待下一次事件通知;

12、所述临时节点代表了该进程,所述临时节点的内容中包含了进程信息;

13、所述租约信息包括持有者和最大超时时间△t;

14、所述预设的加载时间间隔为

15、所述管理节点当前的状态为:管理节点当前是否为主节点;

16、所述本地租约的当前状态的设置方式为:

17、所述本地租约中包含定时任务,所述定时任务定期以时间间隔检查分布式协作系统中临时节点的父节点中的租约信息中的持有者是否是自己,如果检查操作失败或者持有者不是自己,本地租约会将状态改为过期,并将当前管理节点的状态由主改为备;否则租约将本地最新检查时间设置为当前逻辑时钟;

18、所述本地租约的当前状态的查询方式为:

19、如果本地租约状态为过期或者当前逻辑时钟减去最新检查时间的差值大于最大超时时间△t,那么返回本地租约的状态为过期。

20、与现有技术相比,本发明的有益效果是:

21、本发明通过通过分布式协作系统提供的有序临时节点创建功能和事件监听通知机制提供fifo的分布式锁服务;每个进程根据分布式锁服务判断是否拿到锁,管理节点在启动后首先通过分布式锁服务等待获得锁,获得锁之后,创建一个本地租约;并从分布式协作系统中临时节点的父节点中加载租约信息,在等待一个预设的加载时间间隔后,将租约信息写入到临时节点的父节点中,在写入成功后,则认为该管理节点成为主节点,管理节点向客户端或者其他节点提供元数据的读写服务,当需要写数据时,在写数据之前先通过数据写栅栏判断是否满足写数据的条件,如果不满足写数据的条件,则生成拒绝服务异常;所述数据写栅栏通过查询管理节点当前的状态和本地租约的当前状态判断是否满足写数据的条件;实现了:

22、1、不需要时钟同步也不需要时钟频率严格同步,只需要时钟频率在时间间隔△t内的偏差有上限△t/3即可保证分布式锁服务的互斥性。

23、2、分布式锁服务往往需要通过事件监听通知机制来触发锁的获取或释放,在不满足分区容错性且进程繁忙来不急处理触发事件时,往往会造成“脑裂”的情况,本方案通过租约定期以时间间隔检查自己是否还持有租约的方式避免了“脑裂“的发生,而且不需要像hdfs那样需要保证两个管理节点之间网络畅通可达。

24、3、数据写栅栏机制保证了只有管理节点成为主,并且本地租约状态没有过期的情况下才能进行写数据,严格保证同时只有一个管理节点可以提供服务,避免“脑裂“发生。



技术特征:

1.一种面向时钟不同步、弱网环境的主备切换的方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的一种面向时钟不同步、弱网环境的主备切换的方法,其特征在于,所述每个进程根据分布式锁服务判断是否拿到锁的方式为:

3.根据权利要求2所述的一种面向时钟不同步、弱网环境的主备切换的方法,其特征在于,所述通过心跳信息维持该临时节点的方式为:

4.根据权利要求3所述的一种面向时钟不同步、弱网环境的主备切换的方法,其特征在于,所述根据事件通知来判断是否能拿到锁的方式为:

5.根据权利要求4所述的一种面向时钟不同步、弱网环境的主备切换的方法,其特征在于,所述临时节点代表了该进程,所述临时节点的内容中包含了进程信息。

6.根据权利要求5所述的一种面向时钟不同步、弱网环境的主备切换的方法,其特征在于,所述租约信息包括持有者和最大超时时间△t。

7.根据权利要求6所述的一种面向时钟不同步、弱网环境的主备切换的方法,其特征在于,所述预设的加载时间间隔为

8.根据权利要求7所述的一种面向时钟不同步、弱网环境的主备切换的方法,其特征在于,所述管理节点当前的状态为:管理节点当前是否为主节点。

9.根据权利要求8所述的一种面向时钟不同步、弱网环境的主备切换的方法,其特征在于,所述本地租约的当前状态的设置方式为:

10.根据权利要求9所述的一种面向时钟不同步、弱网环境的主备切换的方法,其特征在于,所述本地租约的当前状态的查询方式为:


技术总结
本发明公开了一种面向时钟不同步、弱网环境的主备切换的方法,涉及分布式系统技术领域,通过提供FIFO的分布式锁服务,每个进程根据分布式锁服务判断是否拿到锁,管理节点在启动后首先通过分布式锁服务等待获得锁,获得锁之后,创建一个本地租约,并从分布式协作系统中临时节点的父节点中加载租约信息,在等待一个预设的加载时间间隔后,将租约信息写入到临时节点的父节点中,在写入成功后,则认为该管理节点成为主节点,在写数据之前先通过数据写栅栏判断是否满足写数据的条件,如果不满足写数据的条件,生成拒绝服务异常;解决了需要依赖时钟同步和网络畅通才能完成主备切换的问题。

技术研发人员:董昌坤,江峰,魏玮,李桐
受保护的技术使用者:天翼云科技有限公司
技术研发日:
技术公布日:2024/4/7
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1