主从应用美高梅手机登录网站

作者:电脑系统

配置文件

从节点失效

从节点崩溃,主节点分配给从节点未完成的任务,需要重新派发。因此主节点分配任务前,具备检测从节点是否崩溃的能力。从节点崩溃时,派发的任务可能没有执行完成,也可以执行完成,但是没有报告结果。因此,重新派发任务前,必须清楚任务的状态。

3、故障转移

当从节点发现自己的主节点变为已下线(FAIL)状态时,便尝试进Failover,以期成为新的主。
以下是故障转移的执行步骤:
1)从下线主节点的所有从节点中选中一个从节点
2)被选中的从节点执行SLAVEOF NO NOE命令,成为新的主节点
3)新的主节点会撤销所有对已下线主节点的槽指派,并将这些槽全部指派给自己
4)新的主节点对集群进行广播PONG消息,告知其他节点已经成为新的主节点
5)新的主节点开始接收和处理槽相关的请求

cfg = rs.conf()
cfg.members[2].priority = 0
rs.reconfig(cfg)

主节点失效

主节点失效时,需要一个备份主节点。当主节点崩溃,备份主节点承担主节点的角色,备份主节点启用后,并不是直接开始工作,必须能够恢复到旧的主节点崩溃时的状态。对于主节点的状态获取,不能依靠旧的主节点,而是从zookeeper获取这些信息。
还有一种情况,假若主节点有效,备份节点任务主节点宕机。这种错误的假设可能发生在以下情况,例如主节点负载很高,导致消息延迟,从节点误认为主节点崩溃,此时,备份主节点成为第二个主节点。更糟的是,如果一些从节点无法与主节点通信,由于网络分区错误,这些从节点可能会与主节点断开,与第二个主节点建立通信,从而导致脑裂。

1、故障检测

集群中的每个节点都会定期地向集群中的其他节点发送PING消息,以此交换各个节点状态信息,检测各个节点状态:在线状态、疑似下线状态PFAIL、已下线状态FAIL。

美高梅手机登录网站 1

当主节点A通过消息得知主节点B认为主节点D进入了疑似下线(PFAIL)状态时,
主节点A会在自己的clusterState.nodes字典中找到主节点D所对应的clusterNode结构,
并将主节点B的下线报告(failure report)添加到clusterNode结构的fail_reports链表中
struct clusterNode {
//...
//记录所有其他节点对该节点的下线报告
list*fail_reports;
//...
};
每个下线报告由一个clusterNodeFailReport结构:
struct clusterNodeFailReport{
//报告目标节点已经下线的节点
structclusterNode *node;
//最后一次从node节点收到下线报告的时间
mstime_ttime;
}typedef clusterNodeFailReport;
如果集群里面,半数以上的主节点都将主节点D报告为疑似下线,那么主节点D将被标记为已下线(FAIL)状态,将主节点D标记为已下线的节点会向集群广播主节点D的FAIL消息,
所有收到FAIL消息的节点都会立即更新nodes里面主节点D状态标记为已下线。
将node****标记为FAIL****需要满足以下两个条件:
1.有半数以上的主节点将node标记为PFAIL状态。
2.当前节点也将node标记为PFAIL状态。

美高梅手机登录网站 2

# vim /etc/mongod.conf

storage:
  dbPath: /var/lib/mongodb
  journal:
    enabled: true

systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

net:
  port: 27017

security:
  keyFile: /var/lib/mongodb/mongodb-keyfile

replication:
  replSetName: rs0

主从系统的需要解决的三个关键问题javascript:void(null)

1.主节点崩溃。如果主节点发生错误或失效,系统将无法分配新的任务或者重新分配已经执行失败的任务。
2.从节点崩溃。如果从节点崩溃,系统无法执行已经分配的任务。
3.通信故障。如果主节点和从节点之间发生通信故障,从节点无法得知新任务已经分配给它。

2、多个从节点选主

选新主的过程基于Raft协议选举方式来实现的
1)当从节点发现自己的主节点进行已下线状态时,从节点会广播一条
CLUSTERMSG_TYPE_FAILOVER_AUTH_REQUEST消息,要求所有收到这条消息,并且具有投票权的主节点向这个从节点投票
2)如果一个主节点具有投票权,并且这个主节点尚未投票给其他从节点,那么主节点将向要求投票的从节点返回一条,CLUSTERMSG_TYPE_FAILOVER_AUTH_ACK消息,表示这个主节点支持从节点成为新的主节点
3)每个参与选举的从节点都会接收CLUSTERMSG_TYPE_FAILOVER_AUTH_ACK消息,并根据自己收到了多少条这种消息来统计自己获得了多少主节点的支持
4)如果集群里有N个具有投票权的主节点,那么当一个从节点收集到大于等于集群N/2 1张支持票时,这个从节点就成为新的主节点
5)如果在一个配置纪元没有从能够收集到足够的支持票数,那么集群进入一个新的配置纪元,并再次进行选主,直到选出新的主节点为止

美高梅手机登录网站 3

rs.initiate( {
   _id : "rs0",
   members: [ { _id : 0, host : "ubuntu-mongodb-node1:27017" } ]
})

通信故障

从节点与主节点通信断开,重新分配任务,可能导致两个从节点执行相同的任务,若果,任务可以被多次执行,无需验证改任务是否执行完成。若任务不允许多次执行,需要适应多个从节点执行任务的可能性

修改节点的优先级,设置为0则不会被选为主

在主节点上添加从节点

rs.add("ubuntu-mongodb-node2:27017")
rs.add("ubuntu-mongodb-node3:27017")

在主节点初始化复制集配置

本文由美高梅4858官方网站发布,转载请注明来源

关键词: Redis Zookeeper