发明名称 基于存储区域网络SAN的集群分布式锁管理方法
摘要 基于存储区域网络SAN的分布式锁管理方法属于网络存储领域,其特征在于:集群各节点服务器构成多重主从式子集群,即Quorum,子集群中一个节点作为主服务器,其他均为从属服务器;多重子集群包括一个State Quorum和若干个Lock Quorum,分别负责系统节点生灭状态的管理和名字空间中读写访问锁的管理;State Quorum由所有节点构成,Lock Quorum可由任意数量的节点构成,其大小及构成可由用户灵活配置;不论是State Quorum,还是Lock Quorum,都遵循子集群侦测协议,通过该协议,各节点能够选举Quorum中的唯一主服务器,构建正常态的Quorum;各个Lock Quorum分管名字空间的不同分段且互不交叠,按照服务能力分别被赋予不同的权值。各Lock Quorum独立统计自己的负载情况,当一个Lock Quorum所负担的锁管理任务过于繁重时,触发负载平衡过程,将本Lock Quorum的部分任务分流给其他Lock Quorum。本发明易于灵活配置,具有良好的性能、高可扩展性以及高可靠性。
申请公布号 CN101252603A 申请公布日期 2008.08.27
申请号 CN200810103809.1 申请日期 2008.04.11
申请人 清华大学 发明人 郑纬民;舒继武;向小佳;薛巍;陈康
分类号 H04L29/08(2006.01);H04L29/06(2006.01);H04L29/12(2006.01) 主分类号 H04L29/08(2006.01)
代理机构 代理人
主权项 1.基于存储区域网络SAN的集群分布式锁管理方法,其特征在于,所述方法是在集群的各节点服务器上依次按以下步骤实现的:步骤(1).集群初始化步骤(1.1).集群的设定初始化在集群的各节点上设立一个状态服务器State Server,负责包括监测各节点的生灭状态、屏蔽故障节点、维护整个集群在内的各项正常工作,形成一个状态侦测集群State Quorum,负责节点生灭状态的管理;在所述集群各节点上有选择地选择若干节点,各自设立一个锁服务器Lock Server,负责包括对共享数据资源并发访问的控制、保障集群卷管理系统、文件系统或数据库读写查询在内的各项操作的正确执行,维护共享存储系统的一致性并且按照锁更新协议构成每个锁服务子集群Lock Quorum,负责名字空间中读写访问锁的管理,各个与所述锁服务的节点必须安装锁代理Lock Agent作为客户端,只有通过锁代理才能申请读写访问锁;所述包括状态侦测集群和锁服务子集群在内的各个集群Quorum是由设定数量的服务器构成的一个服务单元,所述集群内的各服务器按照功能不同被分为主服务器Master、仲裁服务器Arbitrator,以及从属服务器Slave,其中:主服务器仅存在于原先由设定数量的服务器构成的集群中,是随机选择的,仅有一个,负责提供相关服务;仲裁服务器仅在所述集群未达到设定数量时存在,由此时的所有服务器按照选举协议临时选举出来作管理者用的,当接收该服务器加入后,使服务器总数超过设定阈值时,所选仲裁服务器便转换为主服务器,所在的集群转入正常状态,即Quorate状态,提供正常服务;从属服务器,为所选主服务器的热备,存储重要数据的副本,参与集群中的投票与决策,在当前的主服务器失败后,新的主服务器由各从属服务器投票选出;所述锁更新协议是指:各个锁服务子集群分管名字空间的不同分段且互不交叠,独立统计本锁服务子集群的负载情况,并按照服务分别被赋予不同权重值条件下,当一个锁服务子集群所负担的锁管理任务过于繁重时,则向其他锁服务子集群分流即更新名字空间的分段;步骤(1.2)配置初始化步骤(1.2.1)配置节点的IP地址、主机名,以及相应的XML配置文件,其中,包括版本、根元素的版本等,所述根元素代表整个锁集群,其版本及其名称,用<cluster_version>及<name>表示,其中包括:<cluster_nodes>标签,包括:集群中每个节点的标签及其内容,其中包括节点名name、节点优先级rank、节点投票时的权重votes,所述各节点的权重必须满足以下条件:对于进入正常状态,即Quorate状态的集群,已经加入其中的所有节点的权重和必须大于整个集群系统中所有节点权重和的一半,在缺省情况下,设各节点的权重为1,则Quorate状态成立的条件为当前已加入集群的节点必须多于半数;<thudlm_dom>标签,包括:构成锁服务子集群的所有节点,其属性为:权重weight,描述该锁服务子集群的锁处理能力;代表该锁服务子集群中一个节点的标签<lock_server>,以及每个节点的名称name;步骤(1.2.2).把配置文件分发到集群中的各个节点;步骤(1.3).状态初始化,按以下步骤建立状态侦测集群:步骤(1.3.1).对集群内各节点同时运行以下操作:步骤(1.3.1.1).读取并分析配置文件,脚本参数,初始化各内存的数据结构,包括:节点当前状态、状态侦测集群和锁服务子集群的链表;步骤(1.3.1.2).开放本节点的服务端口,侦听集群内其他节点的消息;步骤(1.3.1.3).按以下步骤执行集群探测流程:步骤(1.3.1.3.1).定义节点在本集群中的四种状态为:初始化状态Beginner,仲裁服务器状态Arbitrator,主服务器状态Master,以及从属服务器状态Slave;步骤(1.3.1.3.2).把本集群中的所有节点读入节点链表,并设定一个游标指针指向该链表的首节点;步骤(1.3.1.3.3).若本节点的当前状态为开始状态或仲裁服务器状态,则把游标指针指向节点链表的首节点,并发起探测游标所指向的首节点的操作,发起连接申请,侦听本节点在本集群中的服务端口,持续侦听,直到有事件到来;步骤(1.3.1.3.4).若被探测节点发出同意连接的响应,则登录所探测节点,向所探测发出本节点的基本信息,并根据不同情况,作以下处理:若:所探测节点当前处于初始状态,且本节点的优先级低于被探测节点,则退出在所探测节点上的登录,重置游标指针,重新探测,转步骤(1.3.1.3.5);若:所探测节点为从属服务器则退出在所探测节点上的登录,转步骤(1.3.1.3.5);若:所探测节点当前为仲裁服务器状态,且本节点也为仲裁服务器状态,则根据优先级确定最终候选者,一旦本节点候选失败,则遣散所有本节点上的登录者并勒令登录者转换为初始状态,而本节点转为从属服务器;若:所探测节点当前为主服务器状态,则遣散所有在本节点上的登录者,并勒令所有登录者转为初始状态重新探测,而本节点则转为从属服务器状态;若:所探测的节点其状态为未知,则退出在所探测节点上的登录;步骤(1.3.1.3.5).若:本节点收到其他节点的探测请求,则建立连接,发回同意连接的消息;若:本节点处于初始状态或从属服务器状态下,收到其他节点的登录信息,则向对方节点发回本节点的具体信息;若:本节点处于仲裁服务器状态,且本集群中的权重已足够使本集群转为Quorate时收到其他节点的登录信息,则记录对方节点在本集群中的权重,本节点转为主服务器状态;步骤(1.3.1.3.6).把事件内容记录入日志,转步骤(1.3.1.3.3);步骤(1.3.1.3.7).确定各节点在状态侦测集群中是主服务器,还是从属服务器状态的最终形式,由全部或多数存活节点构成状态侦测集群;步骤(1.3.1.4).作为主服务器的节点轮询检测集群中各节点的心跳信息,确认节点生灭状态,若有新节点加入,则更新本地状态侦测集群的节点链表,同时发送广播消息通知状态侦测集群中其他节点同步更新,若有节点出现故障,则主动屏蔽故障节点;步骤(1.3.1.5).各节点启动锁代理进程,通过作为锁服务子集群的客户端的锁代理把本地锁请求发送到对应的所服务子集群;步骤(1.4).锁服务初始化,建立锁服务子集群,其步骤如下:步骤(1.4.1).根据所述初始化时读入内存的配置文件信息、节点生灭状态,建立各个锁服务子集群的节点链表;步骤(1.4.2).查询本节点是否在锁服务子集群中,若属于某个锁服务子集群,则按步骤(1.3.1.3)所述的探测流程,确定本节点是主服务器还是从属服务器,若不属于任何一个锁服务子集群,则退出;步骤(1.4.3).按以下步骤初始化一个资源表RT:步骤(1.4.3.1).在锁服务子集群中,把整个名字空间映射到一个水平的哈希地址空间,设哈希值有n位,把整个哈希地址空间表示为{i|0≤i≤2n};步骤(1.4.3.2).把各个锁服务子集群锁管理的名字空间分段信息都记录在各个锁服务子集群自己的资源表RT中,其表项为:哈希地址hash_addr,对应名字空间某数据资源;锁服务子集群标识lqid,取值为1、2、3......m,共有m个锁服务子集群,令RTi表示隶属于第i个锁服务子集群LQi的表项组成的集合,用RTi={p|p∈RT∧p.lqid=i}表示,则整个集群系统包含m个锁服务子集群,用LQ1、LQ2、......、LQm表示,各自的权重分别为w1、w2、......、wm;步骤(2).状态侦测集群按以下步骤在各个锁服务子集群中进行负载均衡:步骤(2.1).各锁服务器子集群中的主服务器每隔间隔T为每个锁服务子集群LQi对应的资源表RTi的每一项按下式计算负载loadp:loadp(T)=(1-α)×arp+α×loadp(T-1);其中:p为RTi中的某个表项;arp为当前间隔T计算得到的单位时间内接收的锁请求数;a为历史因子,表示(T-1)周期的负载值loadp(T-1)在T周期中新计算得到的负载loadp(T)中的比例;步骤(2.2).状态侦测集群的主服务器通过锁代理收集各个锁服务子集群在同期T内的负载量,进而求出各锁服务子集群按各自权重所应负担的理论负载量,同时,求出各锁服务子集群的过载负载量,该过载负载量为现实负载量与理论负载量之差;步骤(2.3).根据所述过载负载量的正负,把各个锁服务子集群分别划分到过载集合和轻载集合;步骤(2.4).按以下步骤使负载量近似均衡分布:步骤(2.4.1).结束条件判断:当过载集合或轻载集合中其中任何一个为空,或最大过载量低于设定的阈值时则转步骤(2.4.5),否则,执行步骤(2.4.2);步骤(2.4.2).对于过载集合中的每一个元素,在轻载集合中寻求最佳分流匹配,把已匹配成对的从相应集合中去除,并把要分流的负载量记录到相应的过载集合的元素上;步骤(2.4.3).对于轻载集合中的每一个元素,在过载集合中寻求最佳负载与分流匹配,并把已匹配的从相应集合中去除,把要分流的负载量仍然记录在过载集合的元素上;步骤(2.4.4).结束一轮匹配,转步骤(2.4.1);步骤(2.4.5).负载分流,遍历过载集合中的每个节点,根据记录的分流信息把相应的流量分流到相应的轻载集合中。
地址 100084北京市100084-82信箱