当前位置:首页 > 开发 > 数据库 > 正文

【MongoDB学习笔记十二】Mongo副本集服务器角色之Arbiter

发表于: 2014-11-20   作者:bit1129   来源:转载   浏览:
摘要:  一、复本集为什么要加入Arbiter这个角色 回答这个问题,要从复本集的存活条件和Aribter服务器的特性两方面来说。 什么是Artiber? An arbiter does not have a copy of data set and cannot become a primary. Replica sets may have arbiters to add a

 一、复本集为什么要加入Arbiter这个角色

回答这个问题,要从复本集的存活条件和Aribter服务器的特性两方面来说。
什么是Artiber?
An arbiter does not have a copy of data set and cannot become a primary. Replica sets may have arbiters to add a vote in elections of for primary. Arbiters allow replica sets to have an uneven number of members, without the overhead of a member that replicates data.
 
假如复本集是N台服务器,那么至少有N/2+1台服务器能够正常工作才能保证复本集正常工作。j假如复本集是偶数个服务器,比如一主一从,这两台服务器只要有一台服务器挂了,那么整个复本集就不能正常工作了(剩下的一台不满足N/2+1条件)。所以,典型的复本集是一主两从,允许有一台挂了。
实际应用中,应用在资源有限(MongodDB需要运行在高性能服务器上)的情况下,不得不采用一主一从的架构,那么额外配置一台普通的服务器(即Arbiter),一样可以允许主从两台机器挂一台。因为Arbiter可以运行在普通的机器上,是因为,Arbiter没有数据,既不同步复制主服务器的数据,也不给客户端提供读数据能力,它的存在目的是通过参与Leader投票,作为一台凑数的服务器来使用。

需要注意的是,Arbiter服务器只有在主从服务器是偶数个时才能用

 

二、将Arbiter加入复本集

 像普通的mongod服务器一样,使用如下命令启动Arbiter服务器

 

mongd --port 27021 --dbpath data5 --replSet rs0

 

然后通过mongo连接到主服务器,执行如下命令,将2721加入到复本集中

 

rs.addArb("tom-Inspiron-3521:27021");

 

执行rs.status()得到如下结果:

 

 

rs0:PRIMARY> rs.status();
{
	"set" : "rs0",
	"date" : ISODate("2014-11-19T16:29:53Z"),
	"myState" : 1,
	"members" : [
		{
			"_id" : 0,
			"name" : "tom-Inspiron-3521:27017",
			"health" : 1,
			"state" : 1,
			"stateStr" : "PRIMARY", //主服务器
			"uptime" : 180,
			"optime" : Timestamp(1416414576, 1),
			"optimeDate" : ISODate("2014-11-19T16:29:36Z"),
			"self" : true
		},
		{
			"_id" : 1,
			"name" : "tom-Inspiron-3521:27018",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY", //从服务器
			"uptime" : 156,
			"optime" : Timestamp(1416414576, 1),
			"optimeDate" : ISODate("2014-11-19T16:29:36Z"),
			"lastHeartbeat" : ISODate("2014-11-19T16:29:51Z"),
			"lastHeartbeatRecv" : ISODate("2014-11-19T16:29:51Z"),
			"pingMs" : 0,
			"syncingTo" : "tom-Inspiron-3521:27017"
		},
		{
			"_id" : 2,
			"name" : "tom-Inspiron-3521:27021",
			"health" : 1,
			"state" : 7,
			"stateStr" : "ARBITER", //仲裁服务器
			"uptime" : 17,
			"lastHeartbeat" : ISODate("2014-11-19T16:29:52Z"),
			"lastHeartbeatRecv" : ISODate("2014-11-19T16:29:51Z"),
			"pingMs" : 0 //没有syncingTo信息,也就是说,Arbiter不与主服务器做数据同步
		}
	],
	"ok" : 1
}

 

 

 

Arbiter查询

当对Arbiter做查询时,得到的结果是

rs0:ARBITER> db.bar.find();
error: {
	"$err" : "not master or secondary; cannot currently read from this replSet member",
	"code" : 13436
}

 

【MongoDB学习笔记十二】Mongo副本集服务器角色之Arbiter

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
MongoDB多台服务器上保存着数据备份,确保数据安全,其中一台服务器挂掉后应用程序数据能正常提供服
既要有副本集的热备功能,又要充分利用多台服务器性能 <code style="font-size: 12px !important
上篇咱们遗留了几个问题 1主节点能否自动切换连接?目前需要手动切换 2主节点读写压力过大如何解决 3
保证主节点挂掉了,备节点能继续提供数据服务。Primary表示主节点,Secondary表示备节点。备节点可
1. 什么是副本集 副本集就是mongoDB副本所组成的一个集群。 同期原理是,写操作发生在主库,从库同
忽然发现芋头好鸡贼 正式环境,4台机器+一台定时任务的机器。服务器是阿里云的ECS,负载均衡用的是
mongodb运维之副本集实践 正式环境, 4台机器+一台定时任务的机器。 服务器是阿里云的ECS, 负载均
一、复制介绍 所谓的复制就是在多个主机之间同步数据的过程。 1、数据冗余及可用性 复制技术提供数
环境 操作系统:win7 64位 MongoDB version: 2.6.5 配置mongodb实例 配置了三个实例,用的都是同一
Mongodb副本集配置好以后,少不了维护,维护内容也不是很多,主要是现在状态和增删节点等。 在说维
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号