MongoDB 基础(八)复制Ⅱ—部署仲裁节点

仲裁者(Arbiter)是复制集中的一个mongodb实例,它并不保存数据。仲裁节点使用最小的资源并且不要求的硬件设备,不能将Arbiter部署在用一个数据集节点中,可以部署在其他应用服务器或者监视服务器中,也可部署在单独的虚拟机中。为了确保复制集中有奇数的投票成员(包括primary),需要添加仲裁节点做为投票,否则primary不能运行时不会自动切换primary。

一个复制集中可设置50个成员,但只有7个投票成员(包括primary),其余为非投票成员(Non-Voting Members)。非投票成员是复制集中数据的备份副本,不参与投票,但可以被投票或称为主节点。

结构如下:

上一篇中:http://blog.csdn.net/kk185800961/article/details/45700485

配置了3个节点:

192.168.1.11:27017(primary)

192.168.1.12:27018(secondary)

192.168.1.13:27019(secondary)

当前节点情况:

rs0:SECONDARY> db.isMaster()
{
	"setName" : "rs0",
	"setVersion" : 12,
	"ismaster" : false,
	"secondary" : true,
	"hosts" : [
		"mongodb11.kk.net:27017",
		"mongodb12.kk.net:27018",
		"mongodb13.kk.net:27019"
	],
	"primary" : "mongodb13.kk.net:27019",
	"me" : "mongodb11.kk.net:27017",
	"maxBsonObjectSize" : 16777216,
	"maxMessageSizeBytes" : 48000000,
	"maxWriteBatchSize" : 1000,
	"localTime" : ISODate("2015-05-17T10:10:02.537Z"),
	"maxWireVersion" : 3,
	"minWireVersion" : 0,
	"ok" : 1
}

现在在primary中把节点"mongodb13.kk.net:27019" 移除:

rs0:PRIMARY> rs.remove("mongodb13.kk.net:27019")

rs0:PRIMARY> rs.conf()
[[email protected] ~]# vi /etc/mongod.conf
#replSet=rs0

[[email protected] ~]# service mongod restart

删除后剩余2个节点如下:

192.168.1.11:27017(primary)

192.168.1.12:27018(secondary)

在192.168.1.11:27017(primary)中删除服务进程,primary并没有切换:

[[email protected] ~]# ps -ef | grep mong
mongod    4592     1  0 20:00 ?        00:00:02 /usr/bin/mongod -f /etc/mongod.conf
root      4648  2580  0 20:00 pts/0    00:00:00 mongo mongodb11.kk.net:27017
root      4738  2618  0 20:06 pts/1    00:00:00 grep mong
[[email protected] ~]#
[[email protected] ~]# kill 4592

在192.168.1.12:27018(secondary)查看结果为:

rs0:SECONDARY> rs.status()
{
	"set" : "rs0",
	"date" : ISODate("2015-05-17T12:02:55.595Z"),
	"myState" : 2,
	"members" : [
		{
			"_id" : 0,
			"name" : "mongodb11.kk.net:27017",
			"health" : 0,
			"state" : 8,
			"stateStr" : "(not reachable/healthy)",
			"uptime" : 0,
			"optime" : Timestamp(0, 0),
			"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
			"lastHeartbeat" : ISODate("2015-05-17T12:02:53.655Z"),
			"lastHeartbeatRecv" : ISODate("2015-05-17T12:02:28.462Z"),
			"pingMs" : 0,
			"lastHeartbeatMessage" : "Failed attempt to connect to mongodb11.kk.net:27017; couldn't connect to server mongodb11.kk.net:27017 (192.168.1.11), connection attempt failed",
			"configVersion" : -1
		},
		{
			"_id" : 1,
			"name" : "mongodb12.kk.net:27018",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 726,
			"optime" : Timestamp(1431860765, 1),
			"optimeDate" : ISODate("2015-05-17T11:06:05Z"),
			"infoMessage" : "could not find member to sync from",
			"configVersion" : 13,
			"self" : true
		}
	],
	"ok" : 1
}

启动192.168.1.11:27017(primary)mongod服务后,发现才自动切换:

192.168.1.11:27017(secondary)

192.168.1.12:27018(primary)

方便测试,将primary改回原来:

192.168.1.11:27017(primary)

192.168.1.12:27018(secondary)

现在将添加一个仲裁节点:192.168.1.13:27019

创建数据文件目录:

[[email protected] ~]# mkdir /var/lib/mongo/arbiter

[[email protected] ~]# chown mongod:mongod /var/lib/mongo/arbiter

配置参数文件:

[[email protected] ~]# vi /etc/mongod.conf

pidfilepath=/var/run/mongodb/mongod.pid
logpath=/var/log/mongodb/mongod.log
bind_ip=192.168.1.13
dbpath=/var/lib/mongo/arbiter
port=27019
logappend=false
fork=true
replSet=rs0

接着重启服务:

[[email protected] ~]# service mongod restart

在192.168.1.11:27017(primary)中添加仲裁节点并查看结果:

rs0:PRIMARY> rs.addArb("mongodb13.kk.net:27019")
rs0:PRIMARY>
rs0:PRIMARY> db.isMaster()
{
	"setName" : "rs0",
	"setVersion" : 16,
	"ismaster" : true,
	"secondary" : false,
	"hosts" : [
		"mongodb11.kk.net:27017",
		"mongodb12.kk.net:27018"
	],
	"arbiters" : [
		"mongodb13.kk.net:27019"
	],
	"primary" : "mongodb11.kk.net:27017",
	"me" : "mongodb11.kk.net:27017",
	"electionId" : ObjectId("555884dc41ecb76a9ab03676"),
	"maxBsonObjectSize" : 16777216,
	"maxMessageSizeBytes" : 48000000,
	"maxWriteBatchSize" : 1000,
	"localTime" : ISODate("2015-05-17T12:31:34.720Z"),
	"maxWireVersion" : 3,
	"minWireVersion" : 0,
	"ok" : 1
}
rs0:PRIMARY> 

至此,添加完成!~

再次测试,在192.168.1.11:27017(primary)中删除服务进程:

[[email protected] ~]# ps -ef | grep mong
mongod    4771     1  0 20:08 ?        00:00:09 /usr/bin/mongod -f /etc/mongod.conf
root      4827  2580  0 20:08 pts/0    00:00:00 mongo mongodb11.kk.net:27017
root      5255  2618  0 20:33 pts/1    00:00:00 grep mong
[[email protected] ~]# kill 4771

到192.168.1.12:27018(secondary)查看,primary切换为192.168.1.12 

rs0:SECONDARY> db.isMaster()
{
	"setName" : "rs0",
	"setVersion" : 16,
	"ismaster" : true,
	"secondary" : false,
	"hosts" : [
		"mongodb11.kk.net:27017",
		"mongodb12.kk.net:27018"
	],
	"arbiters" : [
		"mongodb13.kk.net:27019"
	],
	"primary" : "mongodb12.kk.net:27018",
	"me" : "mongodb12.kk.net:27018",
	"electionId" : ObjectId("555889751e2e989b81963adc"),
	"maxBsonObjectSize" : 16777216,
	"maxMessageSizeBytes" : 48000000,
	"maxWriteBatchSize" : 1000,
	"localTime" : ISODate("2015-05-17T12:32:08.745Z"),
	"maxWireVersion" : 3,
	"minWireVersion" : 0,
	"ok" : 1
}
rs0:PRIMARY> 

primary能正常启动切换了!~

现在看看arbiter,连接到192.168.1.13:27019。

[[email protected] ~]# mongo 192.168.1.13:27019

rs0:ARBITER>
rs0:ARBITER> rs.slaveOk();
rs0:ARBITER> db.isMaster()

arbiter 最为仲裁者,没有数据副本存储在本地,能读取复制集的信息。

参考:

Replication Introduction

Replica Set Elections

Replica Sets with Four or More Members

Add an Arbiter to Replica Set

时间: 2024-10-13 14:45:35

MongoDB 基础(八)复制Ⅱ—部署仲裁节点的相关文章

MongoDB 3.2复制集单节点部署(四)

MongoDB在单节点中也可以做复制集,但是仅限于测试实验,最大的好处就是部署方便快速,可以随便添加新节点,节省资源.在这里我使用的是MongoDB 3.2版本进行复制集实验(但MongoDB配置文件使用的是老版本格式),一共使用三个节点,一个是主节点(PRIMARY),一个是从节点(SECONDARY),一个是投票节点(ARBITER).如下图: 一.实验环境 1)节点信息:192.168.60.10 3)节点确保iptables和selinux已关闭 1 2 [root@node1 ~]#

MongoDB 2.6复制集单节点部署(三)

MongoDB在单节点中也可以做复制集,但是仅限于测试实验,最大的好处就是部署方便快速,可以随便添加新节点,节省资源.在这里我使用的是MongoDB 2.6版本进行复制集实验(但MongoDB配置文件使用的是老版本格式),一共使用三个节点,一个是主节点(PRIMARY),一个是从节点(SECONDARY),一个是投票节点(ARBITER).如下图: 一.实验环境 1)节点信息:192.168.60.60 3)节点确保iptables和selinux已关闭 1 2 [root@node1 ~]#

Mongodb主、副、仲裁节点集群安装

mongodb 的集群方式主要分为三种Replica Set / Sharding / Master-Slaver ,这里只说明最简单的集群搭建方式(生产环境),如果有多个节点可以此类推或者查看官方文档. Replica Set 中文翻译叫做副本集.其实简单来说就是集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据需要和主节点一致.如下图: Mongodb(M)表示主节点,Mongodb(S)表示备节点,Mongodb(A)表示仲裁节点.主备节点存储数据(M,

mongodb3.0.1副本集安装部署(仲裁节点模式)

环境:OS:Centos 7db:3.0.1两台物理机器,启用3个进程,各角色如下192.168.1.118:28007 主192.168.1.85:28008 从192.168.1.85:28009 仲裁节点 1.下载安装介质,我这里下载的是mongodb-linux-x86_64-3.0.1.tgzhttp://dl.mongodb.org/dl/linux/x86_64 -------------------在192.168.1.118上安装---------------------1.安

MongoDB集群复制部署

简介: 本文总结了MongoDB 3.2版本的集群复制集部署步骤. 要求: •该集群中包含2个分片(shard) •每个分片都是1个副本集 •分片副本集.配置服务器都需要考虑到单机故障的情况,保证可用性 •为了减小实验数据占据磁盘空间.加快实验速度,将每个分片的mongodb服务oplogSize设置在100以下 •部署前,做好部署准备工作,记录部署架构 部署前准备工作: 根据要求,绘制出集群部署架构图,如下图所示: 两台Linux服务器,服务器版本为CentOS-6.6,为实现高可用配置两个复

MongoDB仲裁节点的理解以及memcached,zookeeper,redis,故障恢复方案思考.

在进行副本集部署时我们会添加一个或多个仲裁节点,仲裁节点不用于备份数据,由于它职责的职责是负责选举主节点,所以对硬件没有太高要求,可以将它部署在单独的服务器上,这个服务器可以是监听服务器,也可以部署在虚拟机上,但是有一点仲裁节点一定不能备份数据.仲裁节点和注解点都可以参与选举,而选举对象是各个非投票成员,也就是需要备份数据的从节点. 图列 这让我想起了以前了解过的zookeeper集群中的选举方案,它和MongoDB有所不同. ZooKeeper采用一种称为Leader election的选举算

mongodb需要配置仲裁节点

记录一下,MongoDB的角色创建及配置,以便以后使用 经过大量血的教训,一个分片配置两个副本集时(一个是primary一个是secondary),如果primary挂掉,secondary是不会升级的,必须要加上一个不存储数据的仲裁节点 config = {"_id" : "tonghao", "members" : [ {"_id" : 0, "host" : "10.2.42.101:270

MongoDB基础入门之一:基础入门和复制集

mongoDB基础入门 介绍 mongoDB是一个存储文档的非关系型数据库 mongoDB的结构: 数据库: 包含集合 集合: 存储文档 文档: json格式 一条命令在docker容器中运行mongoDB docker run --name mymongo -v /mongo/data:/data/db -d mongo:4 docker ps #查看容器状态 docker logs mymongo #查看日志 mongoExpress 的使用 基于网络的mongoDB数据库管理页面 dock

MongoDB添加仲裁节点报错replica set IDs do not match办法

背景:由于历史原因,某个MongoDB副本集只有一主一从双节点,无法满足自动故障转移要求,需要配置一个仲裁节点. 原有节点192.168.10.20:27017,192.168.10.21:27017,现在准备在20上配置一个新节点27018当做仲裁 在当前主节点上执行 repset:PRIMARY> cfg={_id:"repset", members:[{_id:0, host:'192.168.10.20:27017', priority:1},{_id:2, host:'