著录项信息
专利名称 | 分布式内存数据库的实现方法、系统、令牌控制器及内存数据库 |
申请号 | CN201010570252.X | 申请日期 | 2010-12-02 |
法律状态 | 授权 | 申报国家 | 暂无 |
公开/公告日 | 2011-08-03 | 公开/公告号 | CN102142008A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F17/30 | IPC分类号 | G;0;6;F;1;7;/;3;0查看分类表>
|
申请人 | 华为技术有限公司 | 申请人地址 | 广东省深圳市龙岗区坂田华为基地总部办公楼
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 华为技术有限公司 | 当前权利人 | 华为技术有限公司 |
发明人 | 查峰;何沁 |
代理机构 | 北京中博世达专利商标代理有限公司 | 代理人 | 张丽荣 |
摘要
本发明的实施例公开了一种分布式内存数据库的实现方法、装置及内存数据集群,涉及通信技术领域,解决了现有技术中分布式内存数据库可靠性较差的技术问题,本发明实施例中的方法主要包括:发送包含节点内存数据库信息的消息到至少两个令牌控制器;分别接收来自所述至少两个令牌控制器的包含内存数据库列表的消息,其中,所述内存数据库列表中包括根据至少一个所述节点内存数据库信息整理的集群内信息;根据所述内存数据库列表中的集群内信息处理所述集群内的事务。本发明实施例适用于内存数据库。
1.一种分布式内存数据库的实现方法,其特征在于,包括:
发送包含节点内存数据库信息的消息到至少两个令牌控制器;所述节点内存数据库信息包括一个或多个:本地内存数据库的名称,因特网协议IP地址,端口和数据库优先级别;
分别接收来自所述至少两个令牌控制器的包含内存数据库列表的消息,其中,所述内存数据库列表中包括根据至少一个所述节点内存数据库信息整理的集群内信息;所述集群内信息包括一个或多个:组成所述集群的每个内存数据库的所述节点内存数据库信息、组成所述集群的每个内存数据库的主从模式信息,和发送所述内存数据库列表的令牌控制器的控制器优先级别;
根据所述内存数据库列表中的集群内信息处理所述集群内的事务;
所述根据所述内存数据库列表中的集群内信息处理所述集群内的事务,包括:当接收到的包含内存数据库列表的消息是来自所述至少两个令牌控制器中的主令牌控制器时,以来自所述主令牌控制器的内存数据库列表中的集群内信息为准处理集群内事务;
当内存数据库为主内存数据,且所述集群内的事务为所述至少两个令牌控制器中的一个令牌控制器故障时,根据所述内存数据库列表中的集群内信息确定所述故障的令牌控制器的控制器优先级别;如果所述故障的令牌控制器的控制器优先级别为最高控制器优先级别,则根据所述集群内信息从所述故障的令牌控制器以外的其它令牌控制器中选择当前控制器优先级别最高的令牌控制器作为主令牌控制器。
2.根据权利要求1所述的方法,其特征在于,当内存数据库为主内存数据,且所述集群内的事务为故障恢复的令牌控制器重新进入所述集群内时,所述根据所述内存数据库列表中的集群内信息处理所述集群内的事务包括:
在接收到来自所述故障恢复的令牌控制器的包含内存数据库列表的消息后,根据所述内存数据库列表中的集群内信息确定故障恢复的令牌控制器的控制器优先级别;
如果所述故障恢复的令牌控制器的控制器优先级别比当前主令牌控制器的控制器优先级别高,则根据来自所述当前主令牌控制器的内存数据库列表确定所述故障恢复的令牌控制器的内存数据库列表的可用性;
如果确定所述故障恢复的令牌控制器的内存数据库列具有可用性,则选择所述故障恢复的令牌控制器作为新的主令牌控制器。
3.根据权利要求1所述的方法,其特征在于,当内存数据库为主内存数据库,且所述集群内的事务为接收写入操作请求时,所述根据所述内存数据库列表中的集群内信息处理所述集群内的事务包括:
根据所述写入操作请求更新本地内存数据库中的数据信息;
根据所述内存数据库列表中的集群内信息将所述写入操作请求更新到从内存数据库,以便所述从内存数据库根据所述写入操作请求更新其本地内存数据库中的数据信息。
4.根据权利要求1所述的方法,其特征在于,当内存数据库为比主内存数据库的数据库优先级别更高的内存数据库,且所述集群内的事务为所述更高的内存数据库进入所述集群内时,所述根据所述内存数据库列表中的集群内信息处理所述集群内的事务包括:
根据所述内存数据库列表中集群内信息向所述主内存数据库发送数据更新请求,所述数据更新请求中包括所述更高的内存数据库中最后记录的数据信息的操作序号,以便所述主内存数据库返回接续所述操作序号的数据信息;
根据返回的接续所述操作序号的数据信息更新所述更高的内存数据库的本地内存数据库,并发送更新完成响应到所述主内存数据库以便所述主内存数据库执行退出主内存数据库模式的处理。
5.根据权利要求1所述的方法,其特征在于,还包括:
发送包含节点内存数据库信息的消息到第一站点的令牌控制器;
从所述第一站点的令牌控制器获取所述第一站点的内存数据库列表,其中,所述内存数据库列表中包括作为从内存数据库加入第一站点的第二站点的主内存数据库信息,以及根据至少一个所述节点内存数据库信息整理的第一站点的集群内信息;
根据所述内存数据库列表处理站点间的事务。
6.根据权利要求5所述的方法,其特征在于,当所述站点间事务为接收到写入操作请求时,所述根据所述内存数据库列表处理站点间的事务包括:
根据所述写入操作请求更新各从内存数据库的数据信息,其中,所述各从内存数据库包括:根据所述集群内信息获取的第一站点中的从内存数据库,以及根据所述主内存数据库信息获取的第二站点中的主内存数据库;
所述第二站点的主内存数据库根据所述写入操作请求更新过数据信息后,根据所述写入操作请求更新所述第二站点的从内存数据库的数据信息。
7.根据权利要求6所述的方法,其特征在于,在接收到写入操作请求时,该方法还包括:对接收到的写入操作请求添加操作序号;
所述根据所述写入操作请求更新所述各从内存数据库的数据信息包括:
根据所述写入操作请求更新所述各从内存数据库的数据信息,其中,所述写入请求中携带所述写入操作所属站点的全局站点名以及所述写入操作请求的操作序号,以便所述各从内存数据库根据所述全局站点名记录所述写入操作请求的操作序号。
8.根据权利要求6所述的方法,其特征在于,当所述站点间的事务为所述第二站点的主内存数据库变更时,所述根据所述内存数据库列表处理站点间的事务包括:
获取所述第二站点中变更后的主内存数据库的主内存数据库信息和所述第二站点的主内存数据库最后记录的操作序号;
根据所述主内存数据库信息和操作序号获取对应的写入操作的数据信息;
将所述写入操作的数据信息更新到所述第二站点变更后的主内存数据库。
9.一种分布式内存数据库的实现方法,其特征在于,包括:
接收来自至少一个内存数据库的包含节点内存数据信息的消息;
根据所述节点内存数据库信息获取内存数据库列表,其中,所述内存数据库列表中包括根据至少一个所述节点内存数据库信息整理的集群内信息;所述节点内存数据库信息包括一个或多个:本地内存数据库的名称,因特网协议IP地址,端口和数据库优先级别;所述集群内信息包括一个或多个:组成所述集群的每个内存数据库的所述节点内存数据库信息、组成所述集群的每个内存数据库的主从模式信息,和发送所述内存数据库列表的令牌控制器的控制器优先级别;
将包含所述内存数据库列表的消息发送到所述至少一个内存数据库,以便所述至少一个内存数据库根据所述内存数据库列表中的集群内信息处理所述集群内的事务;其中,当接收到的包含内存数据库列表的消息是来自所述至少两个令牌控制器中的主令牌控制器时,以来自所述主令牌控制器的内存数据库列表中的集群内信息为准处理集群内事务;当内存数据库为主内存数据,且所述集群内的事务为所述至少两个令牌控制器中的一个令牌控制器故障时,根据所述内存数据库列表中的集群内信息确定所述故障的令牌控制器的控制器优先级别;如果所述故障的令牌控制器的控制器优先级别为最高控制器优先级别,则根据所述集群内信息从所述故障的令牌控制器以外的其它令牌控制器中选择当前控制器优先级别最高的令牌控制器作为主令牌控制器。
10.根据权利要求9所述的方法,其特征在于,当所述至少一个内存数据库中其中一内存数据库故障时,该方法还包括:
根据所述内存数据库列表中集群内信息确定所述故障的内存数据库的数据库优先级别;
如果所述故障的内存数据库的数据库优先级别为最高控制器优先级别,则根据所述集群内信息从所述故障的内存数据库以外的其它内存数据库中选择当前数据库优先级别最高的内存数据库作为新的主内存数据库。
11.根据权利要求9所述的方法,其特征在于,当所述至少一个内存数据库为故障恢复的内存数据库时,该方法还包括:
在接收来自所述故障恢复的内存数据库的包含节点内存数据信息的消息后,根据故障恢复的内存数据库的节点内存数据库信息确定所述故障恢复的内存数据库的数据库优先级别;
如果所述故障恢复的内存数据库的数据库优先级别比当前主内存数据库的数据库优先级别高,则在所述当前主内存数据库的退出主内存数据库模式后,选择所述故障恢复的内存数据库为新的主内存数据库。
12.一种分布式内存数据库的实现装置,其特征在于,包括:
发送模块,用于发送包含节点内存数据库信息的消息到至少两个令牌控制器;所述节点内存数据库信息包括一个或多个:本地内存数据库的名称,因特网协议IP地址,端口和数据库优先级别;
接收模块,用于分别接收来自所述至少两个令牌控制器的包含内存数据库列表的消息,其中,所述内存数据库列表中包括根据至少一个所述节点内存数据库信息整理的集群内信息;所述集群内信息包括一个或多个:组成所述集群的每个内存数据库的所述节点内存数据库信息、组成所述集群的每个内存数据库的主从模式信息,和发送所述内存数据库列表的令牌控制器的控制器优先级别;
处理模块,用于根据所述内存数据库列表中的集群内信息处理所述集群内的事务;
其中,当接收到的包含内存数据库列表的消息是来自所述至少两个令牌控制器中的主令牌控制器时,以来自所述主令牌控制器的内存数据库列表中的集群内信息为准处理集群内事务;
所述处理模块,还用于当内存数据库为主内存数据,且所述集群内的事务为所述至少两个令牌控制器中的一个令牌控制器故障时,根据所述内存数据库列表中的集群内信息确定所述故障的令牌控制器的控制器优先级别;如果所述故障的令牌控制器的控制器优先级别为最高控制器优先级别,则根据所述集群内信息从所述故障的令牌控制器以外的其它令牌控制器中选择当前控制器优先级别最高的令牌控制器作为主令牌控制器。
13.根据权利要求12所述的分布式内存数据库的实现装置,其特征在于,所述处理模块包括:
恢复确定单元,用于当有故障恢复的令牌控制器重新进入所述集群内时,根据接收模块接收到的来自所述故障恢复的令牌控制器的内存数据库列表中的集群内信息确定所述故障恢复的令牌控制器的控制器优先级别;
可用确定单元,用于当所述恢复确定单元确定所述故障恢复的令牌控制器的控制器优先级别比当前主令牌控制器的控制器优先级别高时,根据来自所述当前主令牌控制器的内存数据库列表确定所述故障恢复的令牌控制器的内存数据库列表的可用性;
第二选择单元,用于当所述可用确定单元确定所述故障恢复的令牌控制器的内存数据库列表具有可用性时,选择所述故障恢复的令牌控制器作为新的主令牌控制器。
14.根据权利要求12所述的分布式内存数据库的实现装置,其特征在于,所述处理模块包括:
写入单元,用于在处于主内存数据库状态时,接收写入操作请求,并根据所述写入操作请求更新本地内存数据库中的数据信息,再根据所述内存数据库列表中的集群内信息将所述写入操作请求更新到从内存数据库,以便所述从内存数据库根据所述写入操作请求更新其本地内存数据库中的数据信息。
15.根据权利要求12所述的分布式内存数据库的实现装置,其特征在于,所述处理模块包括:
同步恢复单元,用于在数据库优先级别比当前主内存数据库的数据库优先级别更高时,根据所述内存数据库列表中集群内信息向所述主内存数据库发送数据更新请求,所述数据更新请求中包括所述更高的内存数据库中最后记录的数据信息的操作序号,以便所述主内存数据库返回接续所述操作序号的数据信息,再根据返回的接续所述操作序号的数据信息更新本地内存数据库的数据信息,并发送更新完成响应到所述主内存数据库,以便所述主内存数据库执行退出主内存数据库模式的处理。
16.一种分布式内存数据库的实现控制装置,其特征在于,包括:
接收模块,用于接收来自至少一个内存数据库的包含节点内存数据信息的消息;
获取模块,用于根据所述节点内存数据库信息获取内存数据库列表,其中所述内存数据库列表中包括根据至少一个所述节点内存数据库信息整理的集群内信息;所述节点内存数据库信息包括一个或多个:本地内存数据库的名称,因特网协议IP地址,端口和数据库优先级别;所述集群内信息包括一个或多个:组成所述集群的每个内存数据库的所述节点内存数据库信息、组成所述集群的每个内存数据库的主从模式信息,和发送所述内存数据库列表的令牌控制器的控制器优先级别;
发送模块,用于将包含所述内存数据库列表的消息发送到所述至少一个内存数据库,以便所述至少一个内存数据库根据所述内存数据库列表中的集群内信息处理所述集群内的事务;其中,当接收到的包含内存数据库列表的消息是来自所述至少两个令牌控制器中的主令牌控制器时,以来自所述主令牌控制器的内存数据库列表中的集群内信息为准处理集群内事务;当内存数据库为主内存数据,且所述集群内的事务为所述至少两个令牌控制器中的一个令牌控制器故障时,根据所述内存数据库列表中的集群内信息确定所述故障的令牌控制器的控制器优先级别;如果所述故障的令牌控制器的控制器优先级别为最高控制器优先级别,则根据所述集群内信息从所述故障的令牌控制器以外的其它令牌控制器中选择当前控制器优先级别最高的令牌控制器作为主令牌控制器。
17.根据权利要求16所述的分布式内存数据库的实现控制装置,其特征在于,该分布式内存数据库的实现控制装置还包括:
故障确定单元,用于当所述至少一个内存数据库中其中一内存数据库故障时,根据所述内存数据库列表中集群内信息确定所述故障的内存数据库的数据库优先级别;
第一选择单元,用于当所述故障确定单元确定所述故障的内存数据库的数据库优先级别为最高控制器优先级别时,根据所述集群内信息从所述故障的内存数据库以外的其它内存数据库中选择当前数据库优先级别最高的内存数据库作为新的主内存数据库。
18.根据权利要求16所述的分布式内存数据库的实现控制装置,其特征在于,该分布式内存数据库的实现控制装置还包括:
恢复确定单元,用于在从故障恢复的内存数据库接收到包含节点内存数据信息的消息后,根据所述故障恢复的内存数据库的节点内存数据库信息确定所述故障恢复的内存数据库的数据库优先级别;
第二选择单元,用于当所述恢复确定单元确定所述故障恢复的内存数据库的数据库优先级别比当前主内存数据库的数据库优先级别高时,在所述当前主内存数据库的退出主内存数据库模式后,选择所述故障恢复的内存数据库为新的主内存数据库。
19.一种分布式内存数据库系统,其特征在于,包括:至少两个分布式内存数据库的实现控制装置和至少一个分布式内存数据库的实现装置;
所述分布式内存数据库的实现装置,用于发送包含节点内存数据库信息的消息到所述至少两个分布式内存数据库的实现控制装置,并分别接收来自所述至少两个分布式内存数据库的实现控制装置的包含内存数据库列表的消息,其中,所述内存数据库列表中包括根据至少一个所述节点内存数据库信息整理的集群内信息,存储所述内存数据库列表,并根据所述内存数据库列表中的集群内信息处理所述集群内的事务;
所述分布式内存数据库的实现控制装置,用于接收所述分布式内存数据库的实现装置的包含节点内存数据信息的消息,并根据所述节点内存数据库信息获取内存数据库列表,再将包含所述内存数据库列表的消息发送到所述至少一个内存数据库。
20.一种站点系统,至少包括:第一站点和第二站点,其特征在于,
所述第一站点中的分布式内存数据库的实现控制装置,用于从第二站点的分布式内存数据库的实现控制装置接收包含所述第二站点的主内存数据库信息的消息,并根据所述第二站点的主内存数据库信息和第一站点的集群内信息获取所述第一站点的内存数据库列表,再将所述第一站点的内存数据库列表发送到所述第一站点的分布式内存数据库的实现装置;
所述第一站点中的分布式内存数据库的实现装置,用于发送包含节点内存数据库信息的消息到第一站点的分布式内存数据库的实现控制装置,并从所述第一站点的分布式内存数据库的实现控制装置获取所述第一站点的内存数据库列表,以及根据所述内存数据库列表处理所述第一站点间的事务,或所述第一站点与所述第二站点间的事务;
其中,所述内存数据库列表中包括:作为从分布式内存数据库的实现装置加入第一站点的第二站点的主内存数据库信息,以及根据节点内存数据库信息整理的第一站点的集群内信息。
分布式内存数据库的实现方法、系统、令牌控制器及内存数\n据库\n技术领域\n[0001] 本发明涉及通信技术,尤其涉及一种分布式内存数据库的实现方法、系统、令牌控制器及内存数据库。\n背景技术\n[0002] MMDB(Main Memory Database,内存数据库)是一种数据库技术,主要用于实现将数据放在内存中,进而可直接操作内存中保存该数据的数据库的目的。访问保存在内存中数据与访问保存在磁盘上的数据相比,由于数据处理时无需进行磁盘访问,所以读写速度可以提高很多,故而在很多技术领域,使用MMDB的技术。现有技术中主要采用如下方案部署分布式MMDB:\n[0003] 根据Active-Standby主备双机方案,即部署两个令牌控制器在两台设备上,一台的主令牌控制器工作,另一台的备令牌控制器闲置,在两台设备上都装有双机控制软件,两个令牌控制器对外显示为一个浮动IP。对于分布式内存数据库中的一个集群内各MMDB而言,只有一个令牌控制器,只需要配一个令牌控制器的IP,与该令牌控制器保持心跳。如果主令牌控制器发生故障,通过双机控制软件的切换功能,备令牌控制器可接管该主令牌控制器的工作,并且仍旧以浮动IP呈现给MMDB。这样对于MMDB而言,集群内仍就是一个令牌控制器,感觉不到主备令牌控制器发生的切换。\n[0004] 但是,这种方法还是有不足之处。当主令牌控制器发生故障时,如果手工切换,还存在着延时的风险,而自动检测也使令牌故障需要在两台令牌控制器外的第三个点检测令牌控制器的心跳以判定其状态,该第三个点也存在单点故障的风险,该种方案部署较复杂,可靠性和稳定性较差。\n发明内容\n[0005] 本发明的实施例提供一种分布式MMDB的实现方法、系统、令牌控制器及MMDB,可提高分布式MMDB的可靠性。\n[0006] 为达到上述目的,本发明的实施例采用如下技术方案:\n[0007] 一种分布式MMDB的实现方法,包括:\n[0008] 发送包含节点MMDB信息的消息到至少两个令牌控制器;\n[0009] 分别接收来自所述至少两个令牌控制器的包含MMDB列表的消息,其中,所述MMDB列表中包括根据至少一个所述节点MMDB信息整理的集群内信息;\n[0010] 根据所述MMDB列表中的集群内信息处理所述集群内的事务。\n[0011] 一种分布式MMDB的实现方法,包括:\n[0012] 接收来自至少一个MMDB的包含节点内存数据信息的消息;\n[0013] 根据所述节点MMDB信息获取MMDB列表,其中,所述MMDB列表中包括根据至少一个所述节点MMDB信息整理的集群内信息;\n[0014] 将包含所述MMDB列表的消息发送到所述至少一个MMDB,以便所述至少一个MMDB根据所述MMDB列表中的集群内信息处理所述集群内的事务。\n[0015] 一种内存数据库,包括:\n[0016] 发送模块,用于发送包含节点MMDB信息的消息到至少两个令牌控制器;\n[0017] 接收模块,用于分别接收来自所述至少两个令牌控制器的包含MMDB列表的消息,其中,所述MMDB列表中包括根据至少一个所述节点MMDB信息整理的集群内信息;\n[0018] 处理模块,用于根据所述MMDB列表中的集群内信息处理所述集群内的事务。\n[0019] 一种令牌控制器,其特征在于,包括:\n[0020] 接收模块,用于接收来自至少一个MMDB的包含节点内存数据信息的消息;\n[0021] 获取模块,用于根据所述节点MMDB信息获取MMDB列表,其中所述MMDB列表中包括根据至少一个所述节点MMDB信息整理的集群内信息;\n[0022] 发送模块,用于将包含所述MMDB列表的消息发送到所述至少一个MMDB,以便所述至少一个MMDB根据所述MMDB列表中的集群内信息处理所述集群内的事务。\n[0023] 一种分布式MMDB系统,包括:至少两个令牌控制器和至少一个MMDB;\n[0024] 所述MMDB,用于发送包含节点MMDB信息的消息到所述至少两个令牌控制器,并分别接收来自所述至少两个令牌控制器的包含MMDB列表的消息,其中,所述MMDB列表中包括根据至少一个所述节点MMDB信息整理的集群内信息,存储所述内测数据列表,并根据所述MMDB列表中的集群内信息处理所述集群内的事务;\n[0025] 所述令牌控制器,用于接收所述MMDB的包含节点内存数据信息的消息,并根据所述节点MMDB信息获取MMDB列表,再将包含所述MMDB列表的消息发送到所述至少一个MMDB。\n[0026] 一种站点系统,至少包括:第一站点和第二站点,\n[0027] 所述第一站点中的令牌控制器,用于从第二站点的令牌控制器接收包含所述第二站点的主内存数据库信息的消息,并根据所述第二站点的主内存数据库信息和第一站点的集群内信息获取所述第一站点的内存数据库列表,再将所述第一站点的内存数据库列表发送到所述第一站点的内存数据库;\n[0028] 所述第一站点中的内存数据库,用于发送包含节点内存数据库信息的消息到第一站点的令牌控制器,并从所述第一站点的令牌控制器获取所述第一站点的内存数据库列表,以及根据所述内存数据库列表处理所述第一站点间的事务,或所述第一站点与所述第二站点间的事务;其中,所述内存数据库列表中包括:作为从内存数据库加入第一站点的第二站点的主内存数据库信息,以及根据节点内存数据库信息整理的第一站点的集群内信息。\n[0029] 在本发明实施例提供的上述方案中,无需双机软件控制MMDB,无需主备双机方案,每个MMDB可通过与令牌控制器之间的交互获取MMDB列表,并根据MMDB列表处理集群内的事务,故而避免了为处理主备倒换等事务时产生的延时问题,降低了执行复杂度,无需提供闲置的备用设备,减少了购机成本,提高了分布式MMDB的可靠性。\n附图说明\n[0030] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。\n[0031] 图1为本发明实施例分布式MMDB的实现方法的流程示意图;\n[0032] 图2为本发明实施例在MMDB登入或保持心跳或退出MMDB集群时的场景示意图;\n[0033] 图3为本发明实施例在MMDB登入时,分布式MMDB的实现方法的流程示意图;\n[0034] 图4为本发明实施例在MMDB保持心跳时,分布式MMDB的实现方法的流程示意图;\n[0035] 图5为本发明实施例在令牌控制器故障时的场景示意图;\n[0036] 图6为本发明实施例在令牌控制器故障时,分布式MMDB的实现方法流程示意图;\n[0037] 图7为本发明实施例在令牌控制器重新进入集群内时,分布式MMDB的实现方法流程示意图;\n[0038] 图8为本发明实施例在接收到写入操作时,分布式MMDB的实现方法流程示意图;\n[0039] 图9为本发明实施例在MMDB故障时,分布式MMDB的实现方法的流程示意图;\n[0040] 图10为本发明实施例在MMDB故障恢复时,分布式MMDB的实现方法的流程示意图;\n[0041] 图11为本发明实施例提供的MMDB的结构示意图;\n[0042] 图12为本发明另一实施例提供的MMDB的结构示意图;\n[0043] 图13为本发明实施例提供的令牌控制器的结构示意图;\n[0044] 图14为本发明实施例中分布式MMDB的实现方法的流程示意图;\n[0045] 图15为本发明实施例在接收到写入请求时,站点间分布式MMDB的实现方法的流程示意图;\n[0046] 图16为本发明实施例提供的方法中不同站点间令牌控制器的交互示意图;\n[0047] 图17为本发明实施例在接收到写入请求时,站点间数据同步的示意图;\n[0048] 图18为本发明实施例在主MMDB变更时,站点间分布式MMDB的实现方法的流程示意图;\n[0049] 图19为本发明实施例提供的站点系统的示意图。\n具体实施方式\n[0050] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。\n[0051] 如图1所示,本实施例提供一种分布式MMDB的实现方法,该方法主要涉及MMDB和管理该MMDB的令牌控制器,包括:\n[0052] 步骤101,MMDB发送包含节点MMDB信息的消息到至少两个令牌控制器;\n[0053] 在本实施例以及下述各个实施例中,上述节点MMDB信息至少包括:本地MMDB的名称,IP地址,端口,数据库优先级别等。\n[0054] 例如:某集群1中的MMDB1将包含本身的节点MMDB信息发送到管理集群1的令牌控制器1和令牌控制器2,其中,该节点MMDB信息包括:MMDB1的MMDB名称,IP地址,端口,以及MMDB1的优先级别。\n[0055] 在一个集群内,一般主MMDB对设备性能要求最高,为了能够使这种性能最高的设备作为主MMDB工作,因此在本实施例中还包括:组成集群的每个MMDB设置有数据库优先级别,数据库优先级用于指示集群内作为主MMDB工作的先后顺序。故而上述MMDB1的数据库优先级别是用于指示集群1内MMDB1作为主MMDB工作的优先级别。\n[0056] 一般集群中可以包含有多个MMDB,故而若该集群1中可以还有MMDB2,MMDB3....执行方式与上述MMDB1相似,在此不赘述。\n[0057] 步骤102,MMDB分别接收来自至少两个令牌控制器的包含内存数据库列表的消息,其中,内存数据库列表中包括根据至少一个节点内存数据库信息整理的集群内信息;\n[0058] 本实施例以及下述实施例中,该集群内信息至少包括:组成集群的每个MMDB的节点MMDB信息、组成集群的每个MMDB的主从模式信息,以及发送MMDB列的令牌控制器的控制器优先级别。\n[0059] 例如:令牌控制器1接收到集群1中MMDB1的节点MMDB信息以及其他MMDB的节点MMDB信息后,根据MMDB1的节点MMDB信息和以及其他MMDB的节点MMDB信息整理出MMDB列表,该MMDB列表中包括如:集群1中的每个MMDB的节点MMDB信息,每个MMDB的主从模式信息,以及令牌控制器1的控制器优先级别。同理,令牌控制器2也是如此。\n[0060] 在具体的实施例中,令牌控制器1将包含该MMDB列表的消息发送到集群1中的每个MMDB,如MMDB1。令牌控制器2也将包含该MMDB列表的消息发送到集群1中的每个MMDB,如MMDB1。以便MMDB1等根据MMDB列表中的集群内信息处理集群内的事务。\n[0061] 步骤103,MMDB根据内存数据库列表中的集群内信息处理集群内的事务。\n[0062] 本实施例以及下述实施例中,该集群内事务至少包括:由MMDB进入或退出该集群,该集群内的MMDB故障,该故障的MMDB恢复故障,管理该集群的令牌控制器故障,该故障的令牌控制器恢复故障,有写入操作请求请求将数据信息写入MMDB等。\n[0063] 当管理的集群的令牌控制器故障时,为了保证可以有其他令牌控制器接管该故障的令牌控制器的工作,并且无需闲置的设备以及复杂的双机软件,故而在本实施例提供的方法中,还包括:管理集群的每个令牌控制器设置有控制器优先级别,控制器优先级别用于指示集群内优先作为主令牌控制器工作的先后顺序。故而上述令牌控制器1上也设置有控制器优先级别,该级别用于指示集群1内令牌控制器1作为主令牌控制器工作的优先级,主令牌控制器即相当于主令牌控制器,非工作的从令牌控制器相当于从令牌控制器。同理,令牌控制器2也是如此。\n[0064] 因为MMDB会接收到多个令牌控制器发送过来的,MMDB列表,为了降低方法的难度,在本实施例的方法中,还方法包括:当接收到的包含MMDB列表的消息是来自至少两个令牌控制器中的主令牌控制器时,根据MMDB列表中的集群内信息处理集群内事务包括:\n[0065] 以来自主令牌控制器的MMDB列表中的集群内信息为准处理集群内事务。即以主令牌控制器发送而来的MMDB列表为准,其他的从令牌控制器发送而来的MMDB列表作备用存储,以便主令牌控制器故障时,用作不时之需。\n[0066] 例如:MMDB1接收到令牌控制器1包含MMDB列表的消息,该MMDB列表中包括根据集群1中MMDB1及其他多个MMDB的节点MMDB信息整理的集群内信息,如:集群1中的每个MMDB的节点MMDB信息,每个MMDB的主从模式信息,以及令牌控制器1的控制器优先级别。同理,MMDB接收到令牌控制去2的包含MMDB列表的消息,该列表中包含根据集群1中MMDB1及其他多个MMDB的节点MMDB信息整理的集群内信息,如:集群1中的每个MMDB的节点MMDB信息,每个MMDB的主从模式信息,以及令牌控制器2的控制器优先级别。设令牌控制器1的控制器优先级别最高,为主令牌控制器,因此MMDB1将以令牌控制器1的MMDB列表为准,从令牌控制器,即令牌控制器2的MMDB作为备份保存。\n[0067] 需要说明的是,本实施例中提供的非工作的令牌控制器所在的设备并非闲置,也就说,即便是作为非工作的令牌控制器也不会不工作,等待主令牌控制器故障,并接替其工作,故而非工作的令牌控制器也是正常工作的设备(即热机),因此不会产生需要购置多台设备的问题,也不需要采用双机软件控制。\n[0068] 在本实施例提供的方法中,通过与令牌控制器的交互获取到的MMDB列表,并根据该列表处理如设备故障,或写入操作请求等集群事务的技术手段,可解决现有技术中采用双机软件处理故障时产生的需要冷机备份,过程复杂,易故障,可靠性差的技术问题,进而取得了可实现热机备份,无需双机软件操控,不易故障,可靠性较高的技术效果。\n[0069] 本实施例提供一种分布式MMDB的实现方法,在该方法中,包括一个分布式MMDB集群,该集群中包括至少两个以上的MMDB,以及管理该集群中MMDB的至少两个以上的令牌控制器,并且MMDB既可以与令牌控制器合设在相同设备,也可以部署在不同的设备上,其中,扩展各个MMDB与令牌控制器间的通信协议,包括:\n[0070] 每个令牌控制器设置有一个名称(该名称在集群内唯一),设置有在集群中唯一的控制器优先级别,设置有该集群中每个MMDB的地址信息;每个MMDB设置有一个名称(该名称在集群内唯一),设置有在集群中唯一的数据库优先级别,以及设置有管理该集群的每个令牌控制器的地址信息。\n[0071] 如图2所示的场景,描述一种MMDB在登入或保持心跳或退出该集群时,分布式数据库的实现方法。包括:\n[0072] (一)当有MMDB登入集群时,该MMDB启动后向每个令牌控制器均注册,下面以该MMDB是MMDB1为例进行描述,如图3所示,包括:\n[0073] 步骤201,MMDB1向每个令牌控制器发送注册消息,以便与每个令牌控制器建立连接,该注册消息包含MMDB1的节点MMDB信息,具体可以包括:MMDB1名称,MMDB1的IP地址,MMDB端口,MMDB1的数据库优先级别等。\n[0074] 步骤202,令牌控制器在接收到该注册消息后,将包含该集群的集群内信息的MMDB列表在集群内广播,以便响应MMDB1,同时将MMDB1加入该集群的这一状态通知集群中的其他MMDB。这样,每个在网的MMDB都可以获知新加入的MMDB,并且根据新加入的MMDB的控制器优先级别进行调整。\n[0075] 其中,该MMDB的列表包括:每个MMDB的名称,IP地址及端口,主从模式信息,以及本令牌控制器的控制器优先级别。这里主从模式信息可以包括了本网络中,哪个令牌控制器是主令牌控制器,哪些令牌是从令牌控制器等。\n[0076] 如图4所示,(二)当MMDB1登入集群后,需要与令牌控制器保存心跳[0077] 步骤301,MMDB1定时向所有令牌控制器发起心跳消息,该心跳消息包括MMDB1的节点MMDB信息。\n[0078] 上述所有令牌控制器包括令牌控制器1,令牌控制器2和令牌控制器3。\n[0079] 该MMDB信息具体可参照下表一\n[0080] \n MMDB名称 MMDB IP地址 MMDB端口 MMDB优先级别\n[0081] 表一\n[0082] 其中,MMDB名称:MMDB1集群内唯一名称\n[0083] MMDB IP地址:MMDB1集群内IP地址\n[0084] MMDB端口:MMDB1集群IP端口号\n[0085] MMDB优先级:MMDB的控制器优先级,可由1开始增加,数字越小,优先级越高。\n[0086] 步骤302,各令牌控制器接收到该MMDB1的心跳消息后,广播包含MMDB列表的响应消息到集群中的所有MMDB。\n[0087] 每个MMDB接收到MMDB列表后均保存该列表,并根据定时接收到的心跳消息时时更新MMDB列表中的集群内信息。\n[0088] 该MMDB列表具体可参照下表二\n[0089] \n[0090] 表二\n[0091] 其中,MMDB名称:分布式MMDB系统内唯一名称\n[0092] MMDB IP地址:分布式MMDB系统内IP地址\n[0093] MMDB端口:分布式MMDB系统IP端口号\n[0094] MMDB优先级:MMDB数据库优先级,可由1开始增加的整数,数字越小,优先级越高。\n[0095] 属性:该MMDB的主从模式信息,由令牌控制器计算指定。\n[0096] 令牌控制器的优先级别:广播该MMDB列表的令牌控制器的控制器优先级别。\n[0097] 上述实施例仅以MMDB1为例描述了其定时发送心跳消息与令牌控制器保持交互的过程,实际上,该过程是每个MMDB均执行的步骤,具体执行方式与MMDB1类似,在此不赘述。\n[0098] 每个MMDB通过上述注册及上述与令牌控制器的心跳流程,可以与令牌控制器交互彼此信息,了解集群中各MMDB以及各令牌控制器的状况获取到:\n[0099] 所有令牌控制器的信息,包括每个令牌控制器的控制器优先级;\n[0100] 集群中所有MMDB,每个MMDB名称,IP地址及端口号及其主从模式信息。\n[0101] MMDB只以控制器优先级最高的主令牌控制器的MMDB列表为准,其它级别令牌控制器播报的集群MMDB列表数据,仅做备份,在主令牌控制器发生故障心跳丢失时,MMDB选择一个控制器优先级次高的令牌控制器作为主令牌控制器,并将其发来的MMDB列表生效。\n[0102] (三)当有MMDB1退出集群时,下面以该MMDB是MMDB1为例进行描述,参照图3,该MMDB1退出前向每个令牌控制器均注销,因此MMDB1向每个令牌控制器发送注销消息以便与每个令牌控制器撤销连接,注销消息包含MMDB的节点MMDB信息。具体执行过程与注销时相似。\n[0103] 参照图5所示的令牌控制器故障的场景,如果在一段时间内,MMDB没有收到某令牌控制器发送过来的MMDB列表,或者如果令牌控制器也定时发送心跳消息到MMDB,那么当一段时间内,MMDB没有接到该令牌控制器的心跳消息,则MMDB可以认为该令牌控制器故障,一台令牌控制器发生故障时,主要包括以下两种情况:\n[0104] 发生故障的令牌控制器的控制器优先级别最高,即主令牌控制器故障,但是其它令牌控制器工作正常,即从令牌控制器未故障,此时需要由新的令牌控制器作为主令牌控制器接管该故障的令牌控制器的工作;\n[0105] 发生故障的控令牌制器的控制器优先级别不是最高,即从令牌控制器故障,此时,因为只有优先级最高的令牌控制器是工作的主令牌控制控制器,其它优先级的令牌控制器只作热备份用,所以MMDB可以不作任何特殊处理。\n[0106] 因此,本实施例提供的分布式MMDB的实现方法,是用于当集群内的事务为:至少两个令牌控制器中的一个令牌控制器故障时,如图6所示,MMDB根据上述MMDB列表中的集群内信息处理集群内的事务主要包括如下步骤:\n[0107] 步骤601,MMDB根据当前最新的MMDB列表中的集群内信息确定故障的令牌控制器的控制器优先级别;\n[0108] 步骤602,如果故障的令牌控制器的控制器优先级别为最高控制器优先级别,则执行步骤603;否则,执行步骤604;\n[0109] 步骤603,MMDB根据集群内信息从故障的令牌控制器以外的其它令牌控制器中选择当前控制器优先级别最高的令牌控制器作为主令牌控制器。\n[0110] 步骤604,结束本流程。\n[0111] 具体地,以MMDB是MMDB1为例,举例来说MMDB1发现令牌控制器1故障,并根据之前该令牌控制器1发送过来的MMDB列表中的集群内信息确定该令牌控制器1的控制器优先级别,假设该控制器优先级别为A。\n[0112] 如果上述A是最高控制器优先级别,则代表故障的令牌控制器1是工作的主令牌控制器,因此需要重新确定主令牌控制器,故而MMDB1根据MMDB列表中的集群内信息从除令牌控制器1以外的其他有效的从令牌控制器中选择出控制器优先级别次高的令牌控制器2,并以该令牌控制器2作为新的主令牌控制器,此后将以令牌控制器2发送过来的MMDB列表为准进行事务处理;如果上述A不是最高控制器优先级别,则代表故障的令牌控制器\n1是从令牌控制器,不会对集群带来过大的影响,因此可不采取特殊处理而结束流程。在这里,假设控制器优先级别A为最高控制器优先级别来进行说明。\n[0113] 在本实施例提供的方法中,当有令牌控制器故障时,MMDB可根据该故障的令牌控制器的优先级别判断是否为主令牌控制器,若判定是,则根据MMDB列表中的集群内信息可选择出控制器优先级别次高的令牌控制器作为新的主令牌控制器,进而保证了主令牌控制器故障时,可以有从令牌控制器迅速的接替原主令牌控制器的工作,并且由于该接替的令牌控制器也是热机,所以不会产生延时,也避免了冷机备份导致的购机成本高,双机软件复杂易故障的技术问题,故而取得了减少购机成本,简单方便,可靠性高的有益效果。\n[0114] 上述描述了集群内事务是令牌控制器故障时,分布式MMDB的实现方法,那么相应地,下面将提供一种当该集群内事务是故障的令牌控制器恢复故障时,分布式MMDB的实现方法。\n[0115] 如果故障的令牌控制器故障恢复重新启动,该出故障的令牌控制器,将通过注册流程重新加入集群中,因此MMDB能够重新接收到该故障的令牌控制器发送而来的MMDB列表,具体注册流程可参照上述图3对应的实施例,在此不赘述。如果一台故障的令牌控制器重新注册进入集群中,主要包括以下两种情况:\n[0116] 故障恢复的令牌控制器的控制器优先级别比当前的主令牌控制器的控制器优先级别高,那么该故障恢复的令牌控制器在加入集群后,应该作为新的主令牌控制器使用;\n[0117] 故障恢复的控令牌制器的控制器优先级别比当前的主令牌控制器的控制器优先级别低,那么该故障恢复的令牌控制器在加入集群后,将作为从令牌控制器使用,此时,因为只有优先级最高的令牌控制器是工作控制器,其它优先级的令牌控制器只作热备份用,所以MMDB可以不作任何特殊处理。\n[0118] 如图7所示,当集群内故障恢复的令牌控制器重新进入集群内时,MMDB根据MMDB列表中的集群内信息处理集群内的事务包括:\n[0119] 步骤701,在接收到来自故障恢复的令牌控制器的包含MMDB列表的消息后,MMDB根据MMDB列表中的集群内信息确定故障恢复的令牌控制器的控制器优先级别;\n[0120] 具体地,以MMDB是MMDB1为例,MMDB1接收到故障恢复的令牌控制器1发送的包含MMDB列表的注册消息(也可以是心跳消息),并根据该MMDB列表中的集群内信息确定故障恢复的令牌控制器1的控制器优先级别,该控制器优先级别为A。\n[0121] 步骤702,如果故障恢复的令牌控制器的控制器优先级别比当前主令牌控制器的控制器优先级别高,则执行步骤703;否则执行步骤705。\n[0122] 具体地,举例来说,设当前主令牌控制器2的控制器优先级别是a,判断a是否比A的控制器优先级别低,如果a比A的级别低,则代表故障恢复的令牌控制器1应该可以作为新的主令牌控制器使用,执行步骤703;否则代表故障恢复的令牌控制器1是从令牌控制器,MMDB可以不做特殊处理,执行步骤705。\n[0123] 步骤703,MMDB根据来自当前主令牌控制器的MMDB列表判断故障恢复的令牌控制器的MMDB列表的是否可用;如果判断故障恢复的令牌控制器的MMDB库列可以使用,则执行步骤704;否则在下一次接收到故障恢复的令牌控制器的MMDB列表时,继续执行步骤703。\n[0124] 具体地,例如:MMDB1根据主令牌控制器2的MMDB列表核对故障恢复的令牌控制器1是否一致,即令牌控制器2的MMDB列表上的数据是否与令牌控制器1的MMDB列表上的数据一致,若不一致,说明该令牌控制器1还未与集群内所有MMDB建立正常心跳,不可以使用,因此需要对下一次心跳消息发送过来的MMDB列表进行继续核对,确定是否与令牌控制器1的MMDB列表数据一致;若一致,则说明该令牌控制器1已与集群内所有MMDB建立正常心跳,进入正常工作状态,因此该MMDB可以使用,可执行步骤704\n[0125] 步骤704,MMDB选择故障恢复的令牌控制器作为新的主令牌控制器。\n[0126] 具体地,例如:MMDB1切换到故障恢复的令牌控制器1,将故障恢复的令牌控制器1作为新的工作的主令牌控制器,并以该令牌控制器1发送过来的MMDB列表为准进行集群内事务处理,令牌控制器2作为从令牌控制器使用。\n[0127] 步骤705,结束本流程。\n[0128] 本实施例提供的方法,可保证控制器优先级别高的令牌控制器在故障恢复后继续作为主令牌控制器使用,因为优先级别高的令牌控制器其配置,或性能可能更优越,更适合作为主令牌控制器工作,故而在故障恢复后,可继续使用该性能优越的令牌控制器作为主令牌控制器的技术方案,有助于保证令牌控制器的处理能力,进而提高可靠性。\n[0129] 如图8所示,提供一种当有写入操作请求时,分布式MMDB的实现方法,在分布式MMDB的集群中,主MMDB已从来自令牌控制器的消息中获得集群内的MMDB列表,那么当集群内的事务为:接收到写入操作请求时,根据MMDB列表中的集群内信息处理集群内的事务包括:\n[0130] 步骤801,主MMDB根据写入操作请求更新本地MMDB中的数据信息;\n[0131] 具体地,主MMDB根据写入操作请求中的插入,删除,更新等操作内存更新本地MMDB中的数据信息,并对每个写入操作请求按接收到的顺序添加操作序号。\n[0132] 步骤802,主MMDB根据MMDB列表中的集群内信息将写入操作请求更新到从MMDB,以便从MMDB根据写入操作请求更新其本地MMDB中的数据信息\n[0133] 具体地,主MMDB在更新完本地MMDB后,将该写入操作请按照各从MMDB数据库优先级高低由先到后的顺序,发送到各从MMDB,可确保数据库优先级高的从MMDB先收到该写操作请求,收到该写操作请求的从MMDB根据写入操作请求中的插入,删除,更新等操作内存更新本地MMDB中的数据信息,并同样对每个接收到的写入操作请求按接收到的顺序添加操作序号。例如:从MMDB1接收到第五个写入操作请求,故而添加序号5到更新后的MMDB1的数据信息上,从MMDB2接收到该第五个写入操作请求,添加序号5到更新后的MMDB2的数据信息上。\n[0134] 一般MMDB的可靠性是这样保证的:如果一台从MMDB发生故障,对MMDB所属集群没有大的影响,仅仅影响集群MMDB并发查询效率,增加一个从MMDB,效率就恢复。但是如果主MMDB发生故障,这时整个集群就没有MMDB能够执行写操作的数据库,因此这样的故障是必须解决的。在本实施例中,当集群事务为:至少一个MMDB中其中某一MMDB故障时,如图\n9所示,分布式MMDB的实现方法包括:\n[0135] 步骤901,令牌控制器根据MMDB列表中集群内信息确定故障的MMDB的数据库优先级别;\n[0136] 例如:令牌控制器1(可以是工作的主令牌控制器,也可以是从令牌控制器)根据MMDB列表中的集群内信息,确定故障的MMDB1的数据库优先级别,设故障的MMDB1的数据库优先级别为B。\n[0137] 步骤902,如果故障的MMDB的数据库优先级别为最高控制器优先级别,则执行步骤903;否则执行步骤904;\n[0138] 步骤903,令牌控制器根据集群内信息从故障的MMDB以外的其它MMDB中选择当前数据库优先级别最高的MMDB作为新的主MMDB,并根据选择过程更新MMDB列表中的主从模式信息。\n[0139] 步骤904,令牌控制器发送该MMDB列表到集群中的各MMDB。\n[0140] 举例来说,如果令牌控制器1确定B为最高数据库优先级别,则代表MMDB1为主MMDB,故而需要由新的MMDB接管该MMDB1的工作,因此根据集群内信息从除MMDB1以外的其他从MMDB中选择出当前数据库优先级别最高的MMDB2,即与B相比,数据库优先级别次高的MMDB2作为新的主MMDB接替MMDB1的工作,并根据选择出MMDB2的过程更新MMDB列表,包括更新MMDB2的主从模式信息,即将MMDB2由“从”改为“主”,标识MMDB1故障等。并发送该更新后的MMDB列表到集群中的各MMDB,成为新的主MMDB的MMDB2将接管MMDB1的工作,如执行写操作等;如果令牌控制器1确定B不是最高数据库优先级别,则代表MMDB1为从MMDB,故而可以无需采取特殊处理,仅在发送的MMDB列表中标识MMDB1故障即可。\n[0141] 在本实施例中,令牌控制器会可在各从MMDB中选择一个MMDB,作为新的主MMDB,并通过广播MMDB列表的方式通知集群中的各MMDB。当从MMDB接收到写入操作请求后,将转发到新的主MMDB;新的主MMDB根据该写入操作请求更新数据信息后,在将该写入操作请求同步各从MMDB。但这里有个限制:我们应该主动选择哪一个MMDB为新的主MMDB。一般在一个集群内会部署若干MMDB,但承载这些MMDB的设备能力不一样,有的设备CPU及内存性能更好,成本很高,我们更希望用这样的设备承担MMDB写操作,因为写操作是读操作性能的四分之一左右,因此为了实现自动的完成故障切换的操作过程,必须确定原则。为此,按承载MMDB设备的性能的高到低或其它因素,为各设备安装的MMDB配置一个数据库优先级。令牌控制器能够动态选择数据库优先级别最高的MMDB,将其指定为主MMDB使用,并广播通知这一指定到集群内各MMDB,即可降低手工切换带来的延时,也可提高分布式MMDB的可靠性。\n[0142] 上面描述了当有MMDB故障时,分布式MMDB的实现方法,那么下面将继续介绍当故障的MMDB恢复,即MMDB为成为故障恢复的MMDB时,本实施例提供的分布式MMDB的实现方法如图10所示,包括:\n[0143] 步骤1001,故障恢复的MMDB向令牌控制器发送包含其节点MMDB信息的消息,令牌控制器在接收来自故障恢复的MMDB的包含节点内存数据信息的消息后,根据故障恢复的MMDB的节点MMDB信息确定故障恢复的MMDB的数据库优先级别,并将该MMDB的节点信息整理到MMDB列表中,发送到每个MMDB。\n[0144] 例如:故障恢复的MMDB1加入集群,首先向令牌控制器1(该令牌控制器1可以是主令牌控制器,也可以是从令牌控制器)注册。注册消息中包括MMDB1的节点MMDB信息。\n令牌控制器1收到该注册消息后,确定MMDB1的数据库优先级别,因为当前集群中已有主MMDB2正常工作,所以即便MMDB1的数据库优先级别比MMDB2的数据库优先级别高,令牌控制器1也不会立刻将MMDB1选择为新的主MMDB,因为需要MMDB1先完成数据信息更新,当MMDB1中的数据信息与当前主MMDB2数据信息一致时,才能被选择为新的主MMDB,故而,令牌控制器1仅需将MMDB1的节点MMDB信息整理到MMDB列表中,并将该列表发送到每个MMDB。\n[0145] 步骤1002,如果故障恢复的MMDB的数据库优先级别比当前主MMDB的数据库优先级别高,则该故障恢复的MMDB根据MMDB列表中集群内信息向主MMDB发送数据更新请求,数据更新请求中包括故障恢复的MMDB中最后记录的数据信息的操作序号,以便当前主MMDB返回接续操作序号的数据信息;否则,该故障恢复的MMDB可无需采取特殊处理,不进行下述步骤,而是结束本流程。\n[0146] 例如:接收到令牌控制器1发送的MMDB列表的MMDB1,根据集群内信息获知当前集群内的主MMDB是MMDB2。\n[0147] 如果故障恢复的MMDB1的数据库优先级别比当前主MMDB2的数据库优先级别高,则MMDB2向MMDB2发送数据更新请求,该数据更新请求中包括MMDB1中最后记录的数据信息的操作序号。\n[0148] 如果故障恢复的MMDB1的数据库优先级别比当前主MMDB2的数据库优先级别低,MMDB1可直接结束本流程。\n[0149] 步骤1003,当前主MMDB在收到该数据更新请求后,返回接续操作序号的数据信息到该故障恢复的MMDB;\n[0150] 例如:当前的主MMDB2接收到数据更新请求中的操作序号是10,则代表故障恢复的MMDB1在故障前最后执行的写入操作的操作序号是10。故而MMDB2将操作序号11到当前最新的操作序号30的数据信息发送到MMDB1。\n[0151] 步骤1004,该故障恢复的MMDB根据返回的接续操作序号的数据信息更新故障恢复的MMDB的本地MMDB,并发送更新完成响应到主MMDB以便主MMDB执行退出主MMDB模式的处理。\n[0152] 例如:故障恢复的MMDB1接收到当前主MMDB2返回的数据信息后,更新MMDB1的本地MMDB,完成数据同步过程,并发送更新完成响应消息到MMDB2。\n[0153] 步骤1005,该当前主MMDB接收到该更新完成响应消息后,执行退出主MMDB模式的处理,包括:该当前主MMDB向令牌控制器发起退出主MMDB模式的请求,同时将本地写功能禁止,一旦有新的写入操作请求,转给上述故障恢复的,也是数据库优先级最高的MMDB。\n[0154] 例如:当前主MMDB2接收到更新完成响应消息后,向令牌控制器1发起退出主MMDB模式的请求,同时将MMDB2的本地写功能禁止,一旦有新的写入操作请求,转给上述故障恢复的MMDB1。\n[0155] 步骤1006,令牌控制器在当前主MMDB的退出主MMDB模式后,选择故障恢复的MMDB为新的主MMDB,将故障恢复的MMDB为新的主MMDB的主从模式信息更新到MMDB列表中,并将该MMDB列表广播给每个MMDB,每个MMDB可通过该MMDB列表获知当前主MMDB已被切换为新的MMDB。\n[0156] 例如:令牌控制器1在当前主MMDB2的退出主MMDB模式后,选择故障恢复的MMDB1为新的主MMDB。将该信息整理到MMDB列表,并广播该MMDB列表给每个MMDB,每个MMDB获知当前主MMDB已被切换为MMDB1,此后,写入操作请求由最高优先数据库级MMDB1执行。集群内其它MMDB收到写入操作请求,都将转给MMDB1执行。\n[0157] 在本实施例提供的方法中,当数据库优先级最高的MMDB故障恢复,重新启动时向令牌控制器注册,此刻还不能立即将其选择为主MMDB,先要完成数据信息复制过程,只能当前主MMDB同步数据到该数据库优先级最高MMDB并达到数据一致时,该当前主MMDB才会向令牌控制器申请放弃主席。这时令牌控制器重新将新注册的数据库最高优先级的MMDB确定为主MMDB并广播MMDB列表到集群内所有MMDB。因此可实现性能优越的MMDB在故障恢复后仍能再次作为主MMDB使用的目的。\n[0158] 本实施例提供一种MMDB,如图11所示,该MMDB包括:发送模块11,接收模块12,处理模块13。\n[0159] 发送模块11,用于发送包含节点MMDB信息的消息到至少两个令牌控制器;接收模块12,用于分别接收来自至少两个令牌控制器的包含MMDB列表的消息,其中,MMDB列表中包括根据至少一个节点MMDB信息整理的集群内信息;处理模块13,用于根据MMDB列表中的集群内信息处理集群内的事务。\n[0160] 在发明的另一本实施例中,如图12所示,在该MMDB中,处理模块13可以包括:故障确定单元131,第一选择单元132。\n[0161] 故障确定单元131,用于当有令牌控制器故障时,根据MMDB列表中的集群内信息确定故障的令牌控制器的控制器优先级别;\n[0162] 第一选择单元132,用于当故障确定单元131确定故障的令牌控制器的控制器优先级别为最高控制器优先级别时,根据集群内信息从故障的令牌控制器以外的其它令牌控制器中选择当前控制器优先级别最高的令牌控制器作为主令牌控制器。\n[0163] 如图12,处理模块还可以包括:恢复确定单元134,可用确定单元135,第二选择单元136。\n[0164] 恢复确定单元134,用于当有故障恢复的令牌控制器重新进入集群内时,根据接收模块接收到的来自故障恢复的令牌控制器的MMDB列表中的集群内信息确定故障恢复的令牌控制器的控制器优先级别;\n[0165] 可用确定单元135,用于当恢复确定单元134确定故障恢复的令牌控制器的控制器优先级别比当前主令牌控制器的控制器优先级别高时,根据来自当前主令牌控制器的MMDB列表确定故障恢复的令牌控制器的MMDB列表的可用性;\n[0166] 第二选择单元136,用于当时可用确定单元135确定定故障恢复的令牌控制器的MMDB列具有可用性时,选择故障恢复的令牌控制器作为新的主令牌控制器。\n[0167] 如图12,处理模块还可以包括:写入单元133,同步恢复单元137。\n[0168] 写入单元133,用于在处于主MMDB状态时,接收写入操作请求,并根据写入操作请求更新本地MMDB中的数据信息,再根据MMDB列表中的集群内信息将写入操作请求更新到从MMDB,以便从MMDB根据写入操作请求更新其本地MMDB中的数据信息。\n[0169] 同步恢复单元137,用于在数据库优先级别比当前主MMDB的数据库优先级别更高时,根据MMDB列表中集群内信息向主MMDB发送数据更新请求,数据更新请求中包括更高的MMDB中最后记录的数据信息的操作序号,以便主MMDB返回接续操作序号的数据信息,再根据返回的接续操作序号的数据信息更新本地MMDB的数据信息,并发送更新完成响应到主MMDB,以便主MMDB执行退出主MMDB模式的处理。\n[0170] 本实施例提供的MMDB可以与令牌控制器合设在同一设备上,也可以部署在不同的设备上,组网十分灵活。不需要用Active-Standby双机部署,不用执行双机切换动作,较简单,不易故障,切换过程可是自动完成,可避免手动切换产生的延时,提高了分布式MMDB的可靠性。\n[0171] 本实施例提供一种令牌控制器,如图13所示,该令牌控制器包括:接收模块21,获取模块22,发送模块23。\n[0172] 接收模块21,用于接收来自至少一个MMDB的包含节点内存数据信息的消息;获取模块22,用于根据节点MMDB信息获取MMDB列表,其中MMDB列表中包括根据至少一个节点MMDB信息整理的集群内信息;发送模块23,用于将包含MMDB列表的消息发送到至少一个MMDB,以便至少一个MMDB根据MMDB列表中的集群内信息处理集群内的事务。\n[0173] 在本实施例中,如图13所示,该令牌控制器还包括:故障确定单元24,第一选择单元25。\n[0174] 故障确定单元24,用于当至少一个MMDB中其中一MMDB故障时,根据MMDB列表中集群内信息确定故障的MMDB的数据库优先级别;\n[0175] 第一选择单元25,用于当故障确定单元24确定故障的MMDB的数据库优先级别为最高控制器优先级别时,根据集群内信息从故障的MMDB以外的其它MMDB中选择当前数据库优先级别最高的MMDB作为新的主MMDB。\n[0176] 进一步地,该令牌控制器还可以包括:恢复确定单元26,第二选择单元27。\n[0177] 恢复确定单元26,用于在从故障恢复的MMDB接收到包含节点内存数据信息的消息后,根据故障恢复的MMDB的节点MMDB信息确定故障恢复的MMDB的数据库优先级别;\n[0178] 第二选择单元27,用于当恢复确定单元26确定故障恢复的MMDB的数据库优先级别比当前主MMDB的数据库优先级别高时,在当前主MMDB的退出主MMDB模式后,选择故障恢复的MMDB为新的主MMDB。\n[0179] 本实施例提供的令牌控制器适合部署在工作的设备上,即热机,因此,可避免部署复杂的双机软件到冷机,由此导致主备切换时启动冷机,产生延时的技术问题,进而取得了当需要进行令牌控制器切换时,可以减少延时,提高可靠性,降低购机成本的技术效果。\n[0180] 本实施例提供一种分布式MMDB系统,如图2所示,包括:MMDB集群和令牌控制器集群,其中,MMDB集群包括至少两个令牌控制器,令牌控制器集群包括:至少一个MMDB;\n[0181] 其中,每个MMDB,用于发送包含节点MMDB信息的消息到至少两个令牌控制器,并分别接收来自至少两个令牌控制器的包含MMDB列表的消息,其中,MMDB列表中包括根据至少一个节点MMDB信息整理的集群内信息,存储内测数据列表,并根据MMDB列表中的集群内信息处理集群内的事务;\n[0182] 每个令牌控制器,用于接收MMDB的包含节点内存数据信息的消息,并根据节点MMDB信息获取MMDB列表,再将包含MMDB列表的消息发送到至少一个MMDB。\n[0183] 本实施例提供的分布式MMDB系统,无需双机软件控制MMDB,无需主备双机方案,每个MMDB可通过与令牌控制器之间的交互获取MMDB列表,并根据MMDB列表处理集群内的事务,故而避免了为处理主备倒换等事务时产生的延时问题,降低了执行复杂度,无需提供闲置的备用设备,减少了购机成本,提高了分布式MMDB的可靠性。\n[0184] 本实施例还提供一种分布式MMDB的实现方法,在该方法中,包括至少两个站点,第一站点和第二站点,每个站点中部署至少一个MMDB集群,和管理MMDB集群的令牌控制器集群。其中,每个MMDB集群由多个MMDB组成,每个令牌控制器集群由多个令牌控制器组成,且每个令牌控制器上配置了异地站点的令牌控制器的IP地址及端口。\n[0185] 因为一个MMDB只能属于一个MMDB集群,并且写操作请求仅能在其所属MMDB集群内的主MMDB上操作,故而为了保证对其所属集群外的MMDB不进行复制,因此本实施例中,需要做如下工作:\n[0186] 在执行本实施例的下述步骤前,扩展MMDB集群的定义\n[0187] 1,将一个站点定义为一个域,域名全局唯一,例如:站点1的域名,即全局站点名为mmdb_Site1,站点2的域名,即全局站点名为mmdb_Site2;\n[0188] 2,站点内的每个MMDB集群配置有集群名称,该名称为字符串,且在站点内唯一,该集群的MMDB全局集群名称是该集群名称与所属站点的全局站点名的组合,格式为:集群名称@全局站点名。\n[0189] 3,站点内的每个令牌控制器都有令牌名称,该名称为字符串,且在站点内唯一,例如mmdb_ring1,该令牌控制器的全局名称是该令牌控制器在站点内的令牌名称与其所属站点的全局站点名的组合,格式为:令牌名称@全局站点名,例如:“mmdb_ring1@mmdb_Site1”。\n[0190] 4,站点内的每个MMDB都有内存名称,该内存名称为字符串,且在站点内唯一,例如mmdb1,该MMDB的全局名称是该站点内名称与站点域名组合,格式为:MMDB名@站点域名,例如:“mmdb1@mmdb_Site1”\n[0191] 综上,在本实施例中,每个站点配置有全局站点名;\n[0192] 站点中的每个MMDB集群配置有集群名称,集群名称与全局站点名组合成MMDB集群的全局集群名称;\n[0193] 站点中的每个令牌控制器配置有令牌名称,令牌名称与全局站点名组合成令牌控制器的全局令牌器名称;\n[0194] 站点中的每个MMDB配置有内存名称,内存名称与全局站点名组合成MMDB的全局内存名称。\n[0195] 故而,通过比较的全局站点名这个后缀,,可以判断MMDB或者令牌控制器是本地站点还是异地站点,并且还可根据@后面的全局站点名区分不同站点。\n[0196] 进一步的,在MMDB集群中的每个MMDB上设置数据库优先级别,还可以在每个令牌控制器上设置控制器优先级别,具体该设置出的数据库优先级别和控制器优先级别在站点内的实施方式可参考上述图1至图10所对应的实施例,在此不赘述。\n[0197] 在做了上述扩展以及相应部署后,如图14所示,该方法主要包括:\n[0198] 步骤1401,第一站点的MMDB发送包含节点MMDB信息的消息到第一站点的令牌控制器;\n[0199] 具体地,第一站点的每个MMDB发送包含其节点MMDB信息的消息到第一站点的令牌控制集群,即每个令牌控制器。该包含其节点MMDB信息的消息可以是需要周期性发送的心跳消息,也可以是在加入该MMDB集群时发送的注册消息。\n[0200] 上述节点MMDB信息本实施例以及下述实施例中至少包括:所属集群名称,本地MMDB的名称,IP地址,端口,数据库优先级别。\n[0201] 例如:第一站点的MMDB1发送包含MMDB1的节点MMDB信息的心跳消息到第一站点的令牌控制器1,其中,节点MMDB信息包括:MMDB1所属集群的名称,MMDB1的本地MMDB的名称,IP地址,端口,数据库优先级别。\n[0202] 第一站点的MMDB2发送包含MMDB2的节点MMDB信息的心跳消息到第一站点的令牌控制器1,其中,节点MMDB信息包括:MMDB2所属集群的名称,MMDB2的本地MMDB的名称,IP地址,端口,数据库优先级别。第一站点的MMDB3同样如此。\n[0203] 步骤1402,第一站点的令牌控制器从第二站点的令牌控制器接收包含第二站点的主MMDB信息的消息;\n[0204] 具体地,如图16所示,第一站点的每个令牌控制器与第二站点的每个令牌控制器的通过心跳消息交互管理各自的MMDB集群的主MMDB信息,进一步的,还可以交互彼此的令牌控制器信息。也就是说,通过心跳消息,第一站点的每个令牌控制器可以获取到发送该心跳消息的第二站点令牌控制器的令牌控制器信息以及其管理的MMDB集群中主MMDB的信息。\n[0205] 其中,令牌控制器信息包括:该令牌控制器所属站点的全局站点名,该令牌控制器的全局名称,该令牌控制器的控制器优先级别,该令牌控制器的IP地址和端口。\n[0206] 其中,该主MMDB信息包括:主MMDB所属的集群的全局集群名称,主MMDB的全局内存名称,以及主MMDB的IP地址和端口。\n[0207] 例如:站点1的令牌控制器1与站点2的令牌控制器1通过心跳消息交互,通过该交互,令牌控制器1获取到站点1的主MMDB信息,和令牌控制器2的令牌控制器信息。其中,站点1的主MMDB信息包括:主MMDB所属的集群的全局集群名称,主MMDB的全局内存名称,以及主MMDB的IP地址和端口;令牌控制器2的令牌控制器信息包括:站点2的全局站点名,令牌控制器2的全局名称,令牌控制器2的控制器优先级别,令牌控制器2的IP地址和端口。\n[0208] 同理,令牌控制器2也可以的通过该交互获取到站点2的令牌控制器1的主MMDB信息,以及令牌控制器1的令牌控制器信息。\n[0209] 步骤1403,第一站点的令牌控制器根据第二站点的主MMDB信息和第一站点的集群内信息获取第一站点的MMDB列表,其中,第一站点的集群内信息是根据来自第一站点的至少一个MMDB的节点MMDB信息整理而得;\n[0210] 其中,上述集群内信息可至少包括:组成MMDB集群的每个MMDB的节点MMDB信息、组成MMDB集群的每个MMDB的主从模式信息,以及发送MMDB列的令牌控制器的控制器优先级别。\n[0211] 例如:站点1的令牌控制器1根据上述来自站点2的令牌控制器2的主MMDB信息和站点1的集群内信息获取站点1的MMDB列表。其中,该站点1的MMDB列表中的集群内信息是根据来自站点1的多个MMDB的节点MMDB信息整理而得;\n[0212] 并且,需要说明的是:根据站点2的令牌控制器2的主MMDB信息获取MMDB列表的具体意义是指:如果根据站点2的令牌控制器2的主MMDB信息确定如果该站点2的主MMDB不在该MMDB站点1的MMDB集群中,则将站点2的主MMDB作为站点1的MMDB集群中的从MMDB加入该站点1的MMDB集群。\n[0213] 步骤1404,第一站点的令牌控制器将第一站点的MMDB列表发送到第一站点中的至少一个MMDB,以便MMDB根据MMDB列表处理站点间或站点内的事务。\n[0214] 其中,上述站点间或站点内的事务是指:第一站点与第二站点之间的事务,或第一站点内的事务,具体可包括:第一站点的写入操作请求同步到第二站点,第二站点的写入操作请求同步到第一站点,第一站点或第二站点的主MMDB故障时的写入操作请求同步处理,第一站点接收到来自应用程序的写入操作请求处理等。\n[0215] 例如:站点1的令牌控制器1将上述站点1的MMDB列表发送到站点1的MMDB1,MMDB2,MMDB3等,以便MMDB1,MMDB2,MMDB3根据该MMD列表处理站点1与站点2之间的事务,或者站点1内的事务。\n[0216] 步骤1405,第一站点的MMDB从第一站点的令牌控制器获取第一站点的MMDB列表,其中,MMDB列表中包括作为从MMDB加入第一站点的第二站点的主MMDB信息,以及根据至少一个节点MMDB信息整理的第一站点的集群内信息;并根据MMDB列表处理站点间或站点内的事务。\n[0217] 具体地,第一站点的MMDB获取到第一站点的MMDB列表,并根据该MMDB列表处理第一站点与第二站点间的事务,或者第一站点内的事务。\n[0218] 例如:站点1的MMDB1(该MMDB1可以是任意的MMDB)从站点1的令牌控制器1(该令牌控制器1可以是任意的令牌控制器)获取站点1的MMDB列表,其中,该MMDB列表中包括:站点1根据MMDB集群中每个MMDB的节点MMDB信息整理的集群内信息,以及作为站点\n1该MMDB集群中的从MMDB加入的站点2的主MMDB的主MMDB信息。其中,集群内信息包括:每个MMDB的节点MMDB信息、每个MMDB的主从模式信息,以及发送MMDB列的令牌控制器的控制器优先级别;站点2的主MMDB的主MMDB信息包括:该主MMDB所属的集群的全局集群名称,该主MMDB的全局内存名称,以及该主MMDB的IP地址和端口。\n[0219] 需要说明的是:上述步骤1401到步骤1405过程均是以站点1和站点2为例进行描述的,实际上还可以包括更多的站点,如站点3,站点4等,其它站点的工作方式与本实施例中的站点2相似,如步骤1405中,站点1接收的MMDB列表中还可以包括:作为站点1的从MMDB加入该MMDB集群的站点3的主MMDB信息等。\n[0220] 并且上述步骤1401到步骤1405中根据MMDB列表处理站点间或站点内的事务之前的流程是以一个周期为例进行描述的,在实际应用中,站点1的令牌控制器与站点2的令牌控制器是周期性的通过心跳消息进行交互的,站点1的MMDB与站点1的令牌控制器也可以是周期性的通过心跳消息进行交互。\n[0221] 在本实施例提供的方法中,通过站点间令牌控制器的交互获取彼此主MMDB信息,并将该对方的主MMDB信息整理到站点的MMDB列表中,再根据该MMDB列表处理站点间或站点内的数据同步等事务,因此解决了现有技术中必须通过运行同步软件管理复杂的数据同步的技术问题,进而降低了站点间数据同步的复杂度,在保证了站点的容灾能力的同时,提高了站点间的可靠性,适合应用在包含多个站点的大型分布式MMDB场景。\n[0222] 如图15所示,当站点间或站点内的事务为:站点内的主MMDB接收到写入操作请求时,根据MDDB列表处理站点间或站点内的事务包括:\n[0223] 步骤1501,在主MMDB接收到来自应用程序的写入操作请求时,第一站点内的主MMDB根据该写入操作请求更新主MMDB的数据信息;\n[0224] 优选地,步骤1501可以通过如下方式实现:\n[0225] 第一站点内的主MMDB在接收到来自应用程序的写入操作请求时,对接收到的写入操作请求添加操作序号,再根据该写入操作请求更新主MMDB的数据信息。\n[0226] 步骤1502,第一站点根据写入操作请求更新各从MMDB的数据信息,其中,各从MMDB包括:根据集群内信息获取的第一站点中的从MMDB,以及根据主MMDB信息获取的第二站点中的主MMDB;\n[0227] 具体地,步骤1502包括:第一站点根据写入操作请求更新各从MMDB的数据信息,其中,写入请求中携带写入操作所属站点的全局站点名以及写入操作请求的操作序号,以便各从MMDB根据全局站点名记录写入操作请求的操作序号。\n[0228] 步骤1503,第二站点的主MMDB根据写入操作请求更新过数据信息后,根据写入操作请求更新第二站点的从MMDB的数据信息。\n[0229] 具体地,步骤1503包括:第二站点的主MMDB根据第一站点的全局站点名将该写入操作请求存储到第二站点的主MMDB中用于存放第一站点的数据信息的位置,其中,在该位置中,该写入操作请求更新的数据信息对应的操作序号即是该写入操作请求中携带的操作序号。\n[0230] 上述仅是以第一站点和第二站点为例进行描述,实际上还可以包括更多的站点,如第三站点,此时第三站点的执行方式与第二站点相似。\n[0231] 例如:参照图17,站点1的主MMDB接收到来自应用程序的第100个写入操作请求,对该写入操作请求添加操作序号100,并该根据该写入操作请求更新主MMDB的数据信息,包括插入,删除,更新等写入操作;\n[0232] 站点1根据站点1的MMDB列表中个从MMDB的IP地址和端口可将该写入操作请求同步到站点1的从MMDB1,从MMDB2,从MMDB3,该写入操作请求中携带站点1的全局站点名,操作序号100,以及插入,删除,更新;其中,从MMDB3以从MMDB的身份加入站点1的站点2的主MMDB,从MMDB4以从MMDB的身份加入站点1的站点3的主MMDB。\n[0233] 从MMDB1根据该写入操作请求在从MMDB1中用于存储站点1的位置更新从MMDB1的数据信息,并将该部分的操作序号记录为100;从MMDB2根据该写入操作请求在从MMDB2中用于存储站点1的数据信息位置更新从MMDB2的数据信息,并将该部分的操作序号记录为100;同理,从MMDB3根据该写入操作请求在从MMDB3中用于存储站点1的数据信息的位置更新从MMDB3的数据信息,并将该部分的操作序号记录为100;从MMDB4根据该写入操作请求在从MMDB4中用于存储站点1的数据信息的位置更新从MMDB4的数据信息,并将该部分的操作序号记录为100;\n[0234] 特别的,因为从MMDB3同时也是站点2的主MMDB,故而还会将该写入操作请求同步到站点2的各从MMDB,该写入操作请求中携带站点1的全局站点名,操作序号100,以及插入,删除,更新等写入操作;站点2的各从MMDB在接收到站点2的主MMDB,即MMDB3的写入操作请求后,站点2的各从MMDB根据该写入操作请求分别在各自用于存储站点1数据信息的位置更新对应的数据信息,并将该部分的操作序号记录为100;同理,因为从MMDB4同时也是站点3的主MMDB,故而还会将该写入操作请求同步到站点3的各从MMDB,站点3的各从MMDB在接收到站点3的主MMDB,即MMDB4的写入操作请求后,站点3的各从MMDB根据该写入操作请求分别在各自用于存储站点1数据信息的位置更新对应的数据信息,并将该部分的操作序号记录为100。\n[0235] 在本实施例提供的方法中,第一站点中的主MMDB仅将写入操作请求同步到第二站点的主MMDB,再由第二站点的主MMDB负责将该写入操作请求同步到第二站点的各从MMDB,而不是分别同步给第二站点的主和各从MMDB,故而可减少站点间的数据流量,降低站点之间数据同步的复杂度,即可保证容灾性,有可提高站点间数据同步的可靠性。\n[0236] 如图18所示,本实施例提供的方法,结合当站点间与站点内的事务为:第二站点的主MMDB变更时,在本实施例提供的方法中,第一站点的MMDB根据MMDB列表处理站点间或站点内的事务包括:\n[0237] 步骤1801,第二站点的令牌控制器根据心跳消息可获知主MMDB故障,或者有比该主MMDB的数据库优先级别更高的MMDB加入第二站点的MMDB集群。\n[0238] 例如:站点2的令牌控制器1(该令牌控制器1可以是主令牌控制器,也可以是从令牌控制器)接收不到当前MMDB集群中作为主MMDB工作的MMDB1的心跳消息,或者站点\n2接收到比MMDB1的数据库优先级别更高的MMDB2加入该MMDB集群的注册消息。\n[0239] 步骤1802,第二站点的令牌控制器从MMDB集群中根据各MMDB的数据库优先级别选择出变更后的主MMDB,即新的主MMDB,并将该选出的结果指示在MMDB列表中,通过广播该MMDB列表通知第二站点该MMDB集群中各MMDB。\n[0240] 例如:站点2的令牌控制器1根据MMDB列表中各MMDB的数据库优先级别选择出MMDB2为新的主MMDB,并将该选出的结果指示在MMDB列表中,发送到站点2MMDD集群中的各个MMDB,该各个MMDB即可获知MMDB2是新的主MMDB。\n[0241] 步骤1803,第二站点中新的主MMDB将其MMDB最后记录的操作序号和主MMDB信息发送到第二站点的令牌控制器。该第二站点的令牌控制器将新的主MMDB最后记录的操作序号和新的主MMDB的主MMDB信息。\n[0242] 例如:站点2的MMDB2作为主MMDB工作后,MMDB2最后记录的操作序号100和MMDB2的主MMDB信息发送到站点2的令牌控制器1。该站点2的令牌控制器1将MMDB2最后记录的操作信号100和主MMDB信息通知站点1的令牌控制器11(该令牌控制器11可以是站点1的主令牌控制器,也可以是站点1的从令牌控制器)。其中,主MMDB信息包括:\nMMDB2所属的MMDB集群的全局集群名称,MMDB2的全局内存名称,以及该MMDB2的IP地址和端口。\n[0243] 步骤1804,第一站点的令牌控制器从第二站点的令牌控制器获取第二站点中故障的MMDB最后记录的操作序号和新的主MMDB的主MMDB信息,并将携带操作序号和新的主MMDB的主MMDB信息的消息发到第一站点的主MMDB。\n[0244] 例如:站点1的令牌控制器11接收到站点2作为新的主MMDB工作的MMDB2最后记录的操作序号100和MMDB2的主MMDB信息,并将这些发送到站点1当前作为主MMDB工作的MMDB3。\n[0245] 步骤1805,第一站点的主MMDB获取第二站点中变更后的主MMDB的主MMDB信息和第二站点的主MMDB最后记录的操作序号,并根据主MMDB信息和操作序号获取对应的写入操作的数据信息。\n[0246] 例如:站点1中当前作为主MMDB工作的MMDB3接收到来自站点1的令牌控制器\n11发送的站点2新的主MMDB,即MMDB2最后记录的操作序号100后,根据MMDB2的全局集群名或全局内存名称获知该请求来自站点2,MMDB3中存储站点2数据信息的位置上获取到对应操作序号100之后的写入操作的数据信息。\n[0247] 步骤1806,第一站点的主MMDB将写入操作的数据信息更新到第二站点新的主MMDB。\n[0248] 例如:站点1的MMDB3将到的对应操作序号100之后的写入操作的数据信息发送到站点2的MMDB2,站点2的MMDB2根据该数据信息更新MMDB2的MMDB。\n[0249] 在本发明提供的实施例中,分布式MMDB的构架可由多个站点构成,每个站点可部署至少一个分布式MMDB集群,MMDB集群主MMDB接收应用程序的写入操作请求,为每一个操作产生一个递增的唯一64位数据编号,该数据编号即为该写入操作请求的操作序号。主MMDB同步数据信息时,在请求更新的消息中必须附带此操作序号作为参数。并且,因为每个主MMDB同时又将作为其他站点MMDB集群中的一个从MMDB,接收该其他站点同步而来的数据信息,所以主MMDB必须记录操作编号和其他站点的全局站点名,进而完成本站点的数据更新过程,并将操作编号,写入操作请求及该写入操作请求所属的站点名同步给本站点中的从MMDB。这样,每个MMDB中除了记录了本MMDB集群的操作编号,还记录了其它站点中MMDBJ集群的(由全局站点名区分)操作编号。\n[0250] 故而,站点1的主MMDB发生故障时,站点1的令牌控制器按本地MMDB数据库优先级重新选出一个新的主MMDB,新的主MMDB在收到令牌控制器的MMDB列表后,会将最后记录的操作序号等信息返回到该令牌控制器,该令牌控制器将此操作序号通知给其他站点的令牌控制器,由该其他站点的令牌控制器再传递给其MMDB集群中的主MMDB。主MMDB就可从此该操作序号断点处继续将数据信息同步到站点1的新的主MMDB,再有该新的主MMDB将这些数据信息同步到集群内的复制各从MMDB。由此,站点1可在主MMDB故障时,通过与其他站点的数据同步过程获取丢失的数据信息,并继续其职能,进而取得了减少数据同步过程中的复杂度,容灾能力强,可靠性高的技术效果。\n[0251] 本实施例提供一种可选的MMDB,如图11所示,其中发送模块11,还可以发送包含节点MMDB信息的消息到第一站点的令牌控制器;接收模块12,还可以用于从第一站点的令牌控制器获取第一站点的MMDB列表,MMDB列表中包括作为从MMDB加入第一站点的第二站点的主MMDB信息,以及根据至少一个节点MMDB信息整理的第一站点的集群内信息;处理模块13,还可以用于根据MMDB列表处理站点间或站点内的事务。\n[0252] 本实施例提供一种可选的MMDB,如图11所示,其中处理模块13还可以用于当该MMDB装置处于主MMDB状态时,接收写入操作请求,并根据写入操作请求更新各从MMDB的数据信息,其中,各从MMDB包括:根据集群内信息获取的第一站点中的从MMDB,以及根据主MMDB信息获取的第二站点中的主MMDB;以及还可以用于当写入操作请求来自第二站点的主MMDB时,根据第二站点的写入操作请求更新第一站点中从MMDB的数据信息。\n[0253] 本实施例提供一种可选的MMDB,如图11所示,其中处理模块13还可以用于在接收到写入操作请求时,对接收到的写入操作请求添加操作序号;以及还用于在写入操作请求中携带写入操作所属站点的全局站点名以及写入操作请求的操作序号,以便各从MMDB根据全局站点名记录写入操作请求的操作序号。\n[0254] 本实施例提供一种可选的MMDB,如图11所示,其中处理模块13还可以用于在第二站点的主MMDB变更时,获取第二站点中变更后的主MMDB的主MMDB信息和第二站点的主MMDB最后记录的操作序号,并根据主MMDB信息和操作序号获取对应的写入操作的数据信息,再将写入操作的数据信息更新到第二站点变更后的主MMDB。\n[0255] 本实施例提供的MMDB装置无需同步软件的控制即可执行站点间数据同步的过程,在提高了容灾性的同时,也确保了可靠性,并且适用于大型跨站点分布式MMDB场景,可降低解决方案成本,提升产品竞力。\n[0256] 本实施例提供一种可选的令牌控制器,如图13所示,其中接收模块21,还用于从第二站点的令牌控制器接收包含第二站点的主MMDB信息的消息;获取模块22,还用于根据第二站点的主MMDB信息和第一站点的集群内信息获取第一站点的MMDB列表,其中,第一站点的集群内信息是根据来自第一站点的至少一个MMDB的节点MMDB信息整理而得;发送模块23,还用于将第一站点的MMDB列表发送到第一站点的至少一个MMDB,以便MMDB根据MMDB列表处理站点间或站点内事务。\n[0257] 本实施例提供一种可选的令牌控制器,如图13所示,故障确定单元24,还用于当第二站点的主MMDB变更时,从第二站点的令牌控制器获取第二站点中变更后的主MMDB最后记录的操作序号和主MMDB信息,并将携带操作序号和主MMDB的主MMDB信息的消息发到第一站点的主MMDB。\n[0258] 本实施例提供的令牌控制器可替代同步软件控制站点间数据同步的过程,降低了站点间实现控制数据同步的复杂度,加强了容灾能力,提高了可靠性。\n[0259] 如图19,本实施例提供一种站点系统,该系统中至少包括:第一站点61和第二站点62。\n[0260] 第一站点61中的令牌控制器,用于从第二站点62的令牌控制器接收包含第二站点62的主MMDB信息的消息,并根据第二站点62的主MMDB信息和第一站点61的集群内信息获取第一站点61的MMDB列表,再将第一站点61的MMDB列表发送到第一站点61的MMDB;\n[0261] 第一站点61中的MMDB,用于发送包含节点MMDB信息的消息到第一站点61的令牌控制器,并从第一站点61的令牌控制器获取第一站点61的MMDB列表,以及根据MMDB列表处理第一站点61间的事务,或第一站点61与第二站点62间的事务。\n[0262] 其中,MMDB列表中包括:作为从MMDB加入第一站点61的第二站点62的主MMDB信息,以及根据节点MMDB信息整理的第一站点61的集群内信息。\n[0263] 另外,第二站点中的MMDB和令牌控制器同样可以像第一站点中的MMDB和令牌控制器一样执行,以便完成第一站点与第二站点间或第二站点内的事务。\n[0264] 在现有技术中,由同步应用程序操控不同站点间的数据同步,以便保证分布式MMDB的容灾性,但该过程复杂,可拓展性差,因此易故障,可靠性差,而本发明实施例提供的方案,采用两个不同的站点间可通过其令牌控制器的交互获取对方的主MMDB信息,并根据包含该信息的MMDB信息处理以及集群内信息处理站点间或站点内的事务的技术手段,可避免因采用同步应用软件带来的复杂度高,可拓展性差的技术问题,故而可以取得提供可能性,增强容灾能力的技术效果。\n[0265] 通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以便得一台设备(可以是笔记本电脑等)执行本发明各个实施例的方法。\n[0266] 以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
法律信息
- 2013-04-17
- 2011-09-28
实质审查的生效
IPC(主分类): G06F 17/30
专利申请号: 201010570252.X
申请日: 2010.12.02
- 2011-08-03
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2010-02-24
|
2008-08-18
| | |
2
| |
2010-10-06
|
2009-04-01
| | |
3
| | 暂无 |
1982-10-06
| | |
4
| |
2010-09-08
|
2009-03-06
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |