您的位置:首页 > 其它

master节点的故障发现及处理

2017-04-10 10:26 260 查看
master节点的故障发现
对于master节点故障的检测,采用“心跳线”的方式进行,它的布局如图1-1所示。当master A在处理客户端的请求时,master B处于监控master A的状态。



master是本地无状态的。所谓本地无状态,是指master的状态数据都存放在后端数据库里,所以可以认为是个无状态的服务。但严格来说,master是有状态的,比如nc节点注册之后,在ets中建立的nc pid和host的对应关系是个内存状态,但这个状态是可恢复状态,因为每次注册都会重建这个状态在内存中的数。
在master A正常处理客户端的请求时,master B会有一个监督进程来监督master A是否发生故障,具体是通过master B端的监督进程给master A发送消息来实现的。
要注意的是,在erlang环境中,数据库需要配置成多副本,且A机器和B机器都应是数据库的备份点。
master节点的故障处理
对于master节点,我们有两个机器,master A和master B机器,master B上会有一个监控进程来监控master A,当然,master上的数据都保存在后端的数据库里,当master A发生故障时,master B上的监控进程就会获知A发生了故障,然后B自己获取后端数据库里的数据重新启动自己,从而代替A。
master B重新启动之后,nc节点会重新在master B上进行注册的。另外,对于用户发给master A的一些请求参数,当master A还没有来得及处理时,master A就崩溃了,那么master B又是如何获取这些参数的呢?如果这样,master A请求处理超时,客户端获得返回错误。master客户端会再次重新发起请求,这时如果master B准备好了,则进行处理,如果不行,那么客户端又要再次发送请求,直至master B接受。至于这里客户端重复发送请求,应该由客户端的逻辑层负责的。
对于上述过程的恢复描述,主要也就是三点。一是nc节点在内存里的数据恢复,二是本地数据的恢复,三是用户请求的恢复。对于内存里nc节点数据恢复,是通过nc重新注册的方法实现的;对于本地数据的恢复,是通过“本地无状态”方式(数据存储在后端数据库里)来实现的;至于用户请求的恢复,是通过重新发送的方式来实现的。
上述的方法是我们具体的实现过程,下面我们可以看一下,一般通用的内存数据恢复的处理方法:
1.内存数据提前备份到远程的数据库里。这样的缺点是网络的速度远慢于内存的速度。
2.内存数据再生,这样就不怕内存数据丢失了。
3.主从同步的方式。任何主服务的内存数据,都传输到从服务的内存当中,这样就使得主从的数据同步了。对于我们的实例当中的话,也就是master A和master B的内存数据时时刻刻是一样的。
显然,对于我们的实际系统,我们采用的是第二中方法。因为master节点的数据是可以容忍丢失的,也就是说master节点的数据是可再生的,并且我们关键的内存数据是注册信息,而这些数据是在ets中记录的,所以这些信息可以通过由master A切换到master B之后再次注册时重建。


<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>

阅读(1716) | 评论(0) | 转发(0) |

0
上一篇:根据结构体的一个成员来获取其他成员的使用

下一篇:腾讯将我拒绝?

相关热门文章

多磁盘自动分区自动挂载脚本...

Python 包管理工具解惑

MyBatis 入门(五)--分页查询(...

研究说:失眠的人刷微博、朋友...

物联网、自动化的冲击下未来20...

linux 常见服务端口

xmanager 2.0 for linux配置

【ROOTFS搭建】busybox的httpd...

openwrt中luci学习笔记

什么是shell

linux dhcp peizhi roc

关于Unix文件的软链接

求教这个命令什么意思,我是新...

sed -e "/grep/d" 是什么意思...

谁能够帮我解决LINUX 2.6 10...

给主人留下些什么吧!~~

评论热议
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: