- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
图 1 节点状态转换图图 2 选举模块流程图绵阳师范学院
图 1 节点状态转换图
图 2 选举模块流程图
绵阳师范学院 杨 锐
[摘 要]在当前的分布式多机系统中,为了保证服务的高可用性,节点的状态检测和单点失效时任务的平滑迁移变得十分重要。本
文在实际研发过程中设计实现了一套高效和高可靠的状态检测和任务选举机制。该机制具有状态少、效率高和支持负载均衡等优 点。
[关键词]选举模型 负载均衡 多机系统
1 引言
随着互联网上商业应用的日益增长, 高可用性服务变得越来越重
要。高可用性是通过检测服务器节点的错误和失效,然后用冗余的正常
节点替代失效服务器继续提供服务来实现的。这样做可以确保服务不
中断。上述过程中检测和任务选举是常用的手段。
通常来说,在双机热备的情况下,一般是其中一台机器定时地检测
另一台正在服务的机器,当发现目标服务器已死亡而不能继续提供服
务时,能够将任务平滑地移至备用机,使服务能够不中断。虽然该种方
式能够避免单点失效的问题,但同时会带来扩展性差,缺少负载均衡
(一般两台机器无法同时工作),浪费软硬件资源等问题。
以往出现的选举算法有 Bully 算法和环回算法。Bully 算法的核心
是发起选举算法的节点向其它比自己优先级高的所有节点发送选举
包,那些收到选举包的高优先级节点阻止低优先级节点的选举,同时进
一步向其它优先级更高的节点发送选举包。最终优先级最高的节点获
得服务资格并向所有低优先级节点发送确认包。环回算法的实现是基
于一个按优先级排列的节点环。选举节点向邻近的高优先级节点发送
选举包,该选举包沿环不断传递直到最高优先级节点。这两种方法都存
在通讯量大,选举效率低下,不能适应网络负载的动态变化,不能实现
负载均衡等等问题。
在考察上述方式的基础上,结合在多服务器系统中构建高可靠性
的服务器的需求,我们在具体实践中设计了一套分布式多机任务选举
模型。该模型主要包括多节点间的检测和多任务选举机制,实现利用服
务器群中适当的冗余将多个任务均匀地分布在多个节点的目标。该模
型主要实现思想是依靠节点优先级排队表来实现任务的选举。同时主
节点(管理节点)定时发起的轮循算法检测各个从节点(正在提供服务
节点)状态,并重排从节点优先级队列。这种模型的优点是通讯的消息
数量少,任务迁移快,定时器少,占用资源少。同时由于新的节点进程具
识别同类服务器进程的能力,因此该模型能支持动态增减节点。
2 模型介绍
2.1 模型简介
我们将能够提供某类服务的所有节点构成一个虚拟网 VN(virtual
network),我们将该 VN 中正在提供管理服务的节点称为主节点,其它
提供具体服务的节点称为从节点。正常情况下每个 VN 只有一个主节
点,主节点负责进行对整个 VN 的管理和同类任务的分配。VN 中的每一
个节点都拥有一个公共组播地址和私有 IP。使用组播地址是为了在 VN
中实现广播的功能。
在每个节点上都运行一个守护进程。各节点守护进程间的相互通
讯在逻辑上将各节点连接成了一个 VN。进程的逻辑状态也分为三个:
主节点状态、从节点状态和选举节点状态。守护进程的状态决定了节点
的状态。各状态间的转换关系如下图 1 所示。
typedef struct _PriorityNode {
char ServerIp[23];
int Priority;
bool inWork; // 表明是否承担工作
} PriorityNode;
节点队列数据结构:
PriorityNode * PriorityQueue[255];
任务队列数据结构:
int TaskEnvir[5];
2.2.1 选举模块算法
进入选举模块,节点首先检查本节点的 PriorityQueue 是否为空,如
果为空说明该节点第一次尝试进入 VN,需要向整个 VN 发出组播包并
启动定时器 T1,尝试获得 VN 中其它节点的信息包。如果在 T1 时间内
能够获得主节点的节点信息包就加入 VN 并进入从节点模块。如果 T1
超时时只收到从节点信息包而还未收到主节点信息包就再次进入选举
模块,如果 T1 超时情况下未收到任何包就进入主节点模块。如果一开
始本节点 PriorityQueue 就不为空就从节点优先级队列中查询获得一个
最高优先级的从节点位置。如果该位置为本节点,则进入主节点模块,
否则启动定时器 T2 并向该从节点位置发选举包,等待应答包。如果在
定时器 T2 允许时间内收到应答包或主节点的轮询包就进入从节点模
块,或者如果收到其它节点的选举包则进入主节点模块。如果未收到主
节点发回的应答包就释放 T2 重新查询优先级列表获得新的从节点位
置。其流程图如下图 2 所示:
2.2.2 从节点模块算法
进入从节点
原创力文档


文档评论(0)