master节点的故障发现及处理

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之后再次注册时重建。

阅读(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...
给主人留下些什么吧!~~
评论热议

你可能感兴趣的:(LINUX)