MongoDB复制集相关方法使用(五)
这里我们把复制集中可用的方法都实验一遍,帮助我们更好地来理解复制集。提前说明这些方法的使用是基于Mongodb3.2版本来的,看这篇文章之前需要先看上一篇文章。
介绍一下复制集可用的相关方法
rs.help()
#查看(rs)复制集相关的方法.
rs.status()
#返回复制集的当前状态,使用的数据来源于副本集中其他成员发送的心跳包.
rs.initiate()
#简单初始化一个新的复制集.
rs.initiate(cfg)
#配置复制集,采用新的复制集配置对象(配置文件).
rs.conf()
#返回复制集配置文件.
rs.reconfig(cfg)
#通过重新应用复制集配置文件来为复制集更新新配置,这个操作只能在主节点执行,会短暂断开连接.
rs.add(hostportstr)
#添加一个成员到复制集,会短暂断开连接.
rs.add(membercfgobj)
#添加一个成员到配置文档,会短暂断开连接.
rs.addArb(hostportstr)
#添加一个ARBITER成员到复制集.
rs.stepDown([stepdownSecs, catchUpSecs])
#让当前的主节点变为从节点并触发选举,会短暂断开连接.
rs.syncFrom(hostportstr)
#设置复制集节点从哪个节点处同步数据,将会覆盖默认选取逻辑.
rs.freeze(secs)
#控制当前节点在一段时间内选举成为主节点.
rs.remove(hostportstr)
#从复制集中移除一个成员,会短暂断开连接.
rs.slaveOk()
#用来开启从节点是否有查询权限,值为true时表示开启查询(需要在从节点执行rs.slaveOk).
rs.printReplicationInfo()
#检查主节点oplog大小和时间范围.
rs.printSlaveReplicationInfo()
#检查从节点复制状态.
db.isMaster() & rs.isMaster()
#检查谁是主节点,如果isMaster为true则表示此节点为主节点,而应用程序就是靠isMaster来识别主从节点并且isMaster对隐藏节点不可见,而rs.status可以显示所有成员信息.
rs.stepDown([stepdownSecs, catchUpSecs])
让当前主节点成为从节点并触发选举,并可以在切换时给一个时间(秒),表示在这个时间内此节点不能被选为主节点。这里我的主节点是27017.
192.168.60.10:27017
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
ywnds:PRIMARY> rs.stepDown(600)
2016-02-04T12:08:20.694+0800 DBClientCursor::init call() failed
2016-02-04T12:08:20.694+0800 Error: error doing query: failed at src/mongo/shell/query.js:81
2016-02-04T12:08:20.697+0800 trying reconnect to 192.168.60.10:27017 (192.168.60.10) failed
2016-02-04T12:08:20.701+0800 reconnect 192.168.60.10:27017 (192.168.60.10) ok
ywnds:SECONDARY>
ywnds:SECONDARY> rs.isMaster()
{
"setName" : "ywnds",
"setVersion" : 1,
"ismaster" : false,
"secondary" : true,
"hosts" : [
"192.168.60.10:27017",
"192.168.60.10:27018"
],
"arbiters" : [
"192.168.60.10:27019"
],
"primary" : "192.168.60.10:27018",
"me" : "192.168.60.10:27017",
"maxBsonObjectSize" : 16777216,
"maxMessageSizeBytes" : 48000000,
"maxWriteBatchSize" : 1000,
"localTime" : ISODate("2016-02-04T04:20:37.953Z"),
"maxWireVersion" : 2,
"minWireVersion" : 0,
"ok" : 1
}
|
你可以看到,当主节点执行延迟2秒进行主从切换操作后,主节点立马会变成从节点,标识符PRIMARY会变成SECONDARY,使用rs.isMaster看看状态信息,发现主从已经调换但投票节点还是投票节点,它不会有任何改变。
192.168.60.10:27018
看看从节点会话,标识符会立马从SECONDARY变成PRIMARY。
1
2
|
ywnds:SECONDARY>
ywnds:PRIMARY>
|
rs.reconfig(cfg)
通过重新应用复制集配置文件来为复制集更新新配置,这个操作只能在主节点执行。复制集的配置文档存在local.system.replset集合中。
1
2
3
|
ywnds:PRIMARY> config = db.system.replset.findOne()
ywnds:PRIMARY> rs.reconfig(config)
{ "ok" : 1 }
|
rs.remove(hostportstr)
从复制集中移除一个成员,会短暂断开连接,现在我们来移除ARBITER节点,目前复制集还有两个成员,一个主节点(192.168.60.10:27018)和一个从节点(192.168.60.10:27017).具体操作如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
ywnds:PRIMARY> rs.remove("192.168.60.10:27019")
2016-02-15T04:08:01.615+0800 DBClientCursor::init call() failed
2016-02-15T04:08:01.615+0800 Error: error doing query: failed at src/mongo/shell/query.js:81
2016-02-15T04:08:01.619+0800 trying reconnect to 192.168.60.10:27018 (192.168.60.10) failed
2016-02-15T04:08:01.620+0800 reconnect 192.168.60.10:27018 (192.168.60.10) ok
ywnds:PRIMARY> rs.status()
{
"set" : "ywnds",
"date" : ISODate("2016-02-14T20:08:13Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "192.168.60.10:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 12,
"optime" : Timestamp(1455480481, 1),
"optimeDate" : ISODate("2016-02-14T20:08:01Z"),
"lastHeartbeat" : ISODate("2016-02-14T20:08:13Z"),
"lastHeartbeatRecv" : ISODate("2016-02-14T20:08:13Z"),
"pingMs" : 0,
"lastHeartbeatMessage" : "syncing to: 192.168.60.10:27018",
"syncingTo" : "192.168.60.10:27018"
},
{
"_id" : 1,
"name" : "192.168.60.10:27018",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 864061,
"optime" : Timestamp(1455480481, 1),
"optimeDate" : ISODate("2016-02-14T20:08:01Z"),
"electionTime" : Timestamp(1455480326, 1),
"electionDate" : ISODate("2016-02-14T20:05:26Z"),
"self" : true
}
],
"ok" : 1
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
ywnds:PRIMARY> rs.conf()
{
"_id" : "ywnds",
"version" : 4,
"members" : [
{
"_id" : 0,
"host" : "192.168.60.10:27017"
},
{
"_id" : 1,
"host" : "192.168.60.10:27018"
}
]
}
|
移除完192.168.60.10:27019节点后,可以看到复制集状态信息中已经没有这个节点的信息了,包括复制集配置文档中也没有此节点信息了。当复制集还剩下两个节点时,如果此时有一个节点挂掉的话,那么复制集容灾就不满足2/1原则(剩余节点没有大于总节点数),那么接下来剩余的一个节点就会是从节点故而整个复制集变得不可用。下面模拟27017故障然后看看27018节点的变化。
192.168.60.10.:27017
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
ywnds:SECONDARY> rs.isMaster()
{
"setName" : "ywnds",
"setVersion" : 4,
"ismaster" : false,
"secondary" : true,
"hosts" : [
"192.168.60.10:27017",
"192.168.60.10:27018"
],
"primary" : "192.168.60.10:27018",
"me" : "192.168.60.10:27017",
"maxBsonObjectSize" : 16777216,
"maxMessageSizeBytes" : 48000000,
"maxWriteBatchSize" : 1000,
"localTime" : ISODate("2016-02-14T20:56:09.904Z"),
"maxWireVersion" : 2,
"minWireVersion" : 0,
"ok" : 1
}
[root@node1 ~]# cat /mongodb/pid/pid27017/mongod.pid
93840
[root@node1 ~]# kill -2 93840
|
192.168.60.10.:27018
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
ywnds:PRIMARY>
2016-02-15T04:16:16.354+0800 DBClientCursor::init call() failed
2016-02-15T04:16:16.382+0800 trying reconnect to 192.168.60.10:27018 (192.168.60.10) failed
2016-02-15T04:16:16.382+0800 reconnect 192.168.60.10:27018 (192.168.60.10) ok
ywnds:SECONDARY>
ywnds:SECONDARY> rs.isMaster()
{
"setName" : "ywnds",
"setVersion" : 4,
"ismaster" : false,
"secondary" : true,
"hosts" : [
"192.168.60.10:27018",
"192.168.60.10:27017"
],
"me" : "192.168.60.10:27018",
"maxBsonObjectSize" : 16777216,
"maxMessageSizeBytes" : 48000000,
"maxWriteBatchSize" : 1000,
"localTime" : ISODate("2016-02-14T20:18:08.922Z"),
"maxWireVersion" : 2,
"minWireVersion" : 0,
"ok" : 1
}
|
rs.addArb(hostportstr)
添加一个ARBITER成员到复制集,只能在主节点上操作,所以我们要先把27017节点启动起来,重新选举一个主节点。
192.168.60.10:27017
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root@node1 ~]# mongod -f /mongodb/conf/conf27017/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 99692
child process started successfully, parent exiting
[root@node1 ~]# mongo 192.168.60.10:27017
MongoDB shell version: 2.6.0
connecting to: 192.168.60.10:27017/test
ywnds:SECONDARY>
ywnds:SECONDARY>
ywnds:SECONDARY>
ywnds:PRIMARY>
ywnds:PRIMARY> rs.addArb("192.168.60.10:27019")
{ "ok" : 1 }
|
192.168.60.10:27019
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@node1 ~]# mongo 192.168.60.10:27019
MongoDB shell version: 2.6.0
connecting to: 192.168.60.10:27019/test
ywnds:REMOVED>
ywnds:REMOVED>
ywnds:REMOVED>
ywnds:REMOVED>
ywnds:REMOVED>
ywnds:REMOVED>
ywnds:REMOVED>
ywnds:ARBITER>
ywnds:ARBITER>
|
rs.add(hostportstr)
添加一个成员到复制集,会短暂断开连接。下面创建一个新的节点(27010)并启动,然后加入到现在的复制集中。
192.168.60.10:27010
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
[root@node1 ~]# mkdir /mongodb/conf/conf27010
[root@node1 ~]# mkdir /mongodb/data/data27010
[root@node1 ~]# mkdir /mongodb/pid/pid27010
[root@node1 ~]# mkdir /mongodb/log/log27010
[root@node1 ~]# cp /mongodb/conf/conf27017/mongod.conf /mongodb/conf/conf27010/
[root@node1 ~]# vi /mongodb/conf/conf27010/mongod.conf
#/etc/mongod.conf
logpath = /mongodb/log/log27010/mongod.log
logappend = true
dbpath = /mongodb/data/data27010
port = 27010
bind_ip=192.168.60.10
fork = true
pidfilepath = /mongodb/pid/pid27010/mongod.pid
logRotate = rename
timeStampFormat = ctime
#Replica Set
oplogSize = 1024
replSet = ywnds
replIndexPrefetch = _id_only
[root@node1 ~]# mongod -f /mongodb/conf/conf27010/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 101491
child process started successfully, parent exiting
|
192.168.60.10:27017
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
ywnds:PRIMARY> rs.add("192.168.60.10:27010")
{ "ok" : 1 }
ywnds:PRIMARY> rs.conf()
{
"_id" : "ywnds",
"version" : 8,
"members" : [
{
"_id" : 0,
"host" : "192.168.60.10:27017"
},
{
"_id" : 1,
"host" : "192.168.60.10:27018"
},
{
"_id" : 2,
"host" : "192.168.60.10:27019",
"arbiterOnly" : true
},
{
"_id" : 3,
"host" : "192.168.60.10:27010"
}
]
}
|
192.168.60.10:27010
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
[root@node1 ~]# mongo 192.168.60.10:27010
MongoDB shell version: 2.6.0
connecting to: 192.168.60.10:27010/test
ywnds:SECONDARY>
ywnds:SECONDARY>
ywnds:SECONDARY> show dbs
admin (empty)
local 2.077GB
ywnds 0.078GB
ywnds:SECONDARY> use ywnds
switched to db ywnds
ywnds:SECONDARY> show tables
2016-02-15T06:16:18.362+0800 error: { "$err" : "not master and slaveOk=false", "code" : 13435 } at src/mongo/shell/query.js:131
ywnds:SECONDARY> rs.slaveOk()
ywnds:SECONDARY> show tables
system.indexes
ywnds
ywnds:SECONDARY> db.ywnds.find()
{ "_id" : ObjectId("56b174aed239dcb7b2dacc1f"), "name" : "ywnds", "age" : "20", "gender" : "B" }
|
rs.printReplicationInfo()
检查主节点oplog大小和时间范围.
1
2
3
4
5
6
|
ywnds:PRIMARY> rs.printReplicationInfo()
configured oplog size: 1958.92041015625MB
log length start to end: 1023492secs (284.3hrs)
oplog first event time: Wed Feb 03 2016 09:56:23 GMT+0800 (CST)
oplog last event time: Mon Feb 15 2016 06:14:35 GMT+0800 (CST)
now: Mon Feb 15 2016 06:18:57 GMT+0800 (CST)
|
rs.printSlaveReplicationInfo()
检查从节点复制状态.
1
2
3
4
5
6
7
|
ywnds:SECONDARY> rs.printSlaveReplicationInfo()
source: 192.168.60.10:27018
syncedTo: Mon Feb 15 2016 06:14:35 GMT+0800 (CST)
0 secs (0 hrs) behind the primary
source: 192.168.60.10:27010
syncedTo: Mon Feb 15 2016 06:14:35 GMT+0800 (CST)
0 secs (0 hrs) behind the primary
|
MongoDB复制集相关方法使用(五)的更多相关文章
- MongoDB复制集成员及状态转换
此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 复制集(Replica Set)是MongoDB核心组件,相比早期版本采用的主从(Master-Slave) ...
- MongoDB复制集与Raft协议异同点分析
此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 一.日志复制流程: a.raft leader节点在接收client请求后,先将请求写到日志中,再将日志通过 ...
- spring mongodb 复制集配置(实现读写分离)
注:mongodb当前版本是3.4.3 spring连接mongodb复制集的字符串格式: mongodb://[username:password@]host1[:port1][,host2[: ...
- MongoDB 复制集节点增加移除及节点属性配置
复制集(replica Set)或者副本集是MongoDB的核心高可用特性之一,它基于主节点的oplog日志持续传送到辅助节点,并重放得以实现主从节点一致.再结合心跳机制,当感知到主节点不可访问或宕机 ...
- MongoDB复制集概念架构浅析
一.复制集的作用 (1) 高可用 防止设备(服务器.网络)故障. 提供自动failover 功能. 技术来保证数 (2) 灾难恢复 当发生故障时,可以从其他节点恢复. (3) 功能隔离 用于分析.报表 ...
- MongoDB 复制集 (一) 成员介绍
一 MongoDB 复制集简介 MongoDB的复制机制主要分为两种: Master-Slave (主从复制) 这个已经不建议使用 ...
- mongodb 复制集
mongodb 复制集 复制集简介 Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写 ...
- Raft与MongoDB复制集协议比较
在一文搞懂raft算法一文中,从raft论文出发,详细介绍了raft的工作流程以及对特殊情况的处理.但算法.协议这种偏抽象的东西,仅仅看论文还是比较难以掌握的,需要看看在工业界的具体实现.本文关注Mo ...
- MongoDB复制集
1.1 MongoDB复制集简介 一组Mongodb复制集,就是一组mongod进程,这些进程维护同一个数据集合.复制集提供了数据冗余和高等级的可靠性,这是生产部署的基础. 1.1.1 复制集的目的 ...
随机推荐
- Java菜鸟到大牛学习路线培训教程
第1阶段(Java程序员) - Java语言基础 - 101 JavaSE -01-常见Dos命令.Java历史.Java跨平台.配置Path环境变量.第一个HelloWorld例子 -02-配置JA ...
- mdadm
http://en.wikipedia.org/wiki/Mdadm mdadm From Wikipedia, the free encyclopedia mdadm Original au ...
- URL 截取参数 正则
用处很多,记录下. function getvl(name) { var reg = new RegExp("(^|\\?|&)"+ name +"=([^&am ...
- 目标跟踪之meanshift---均值漂移搞起2000过时的
基于灰度均值分布的目标跟踪! http://blog.csdn.net/wds555/article/details/24499599 但他有些有点: 1.不会受遮挡太多影响 Mean Shift跟踪 ...
- oracle指定访问某表或某视图
在oracle中,想创建一个账号,然后只能只读地访问指定的表,怎么搞? 一.为特定的表创建视图 创建视图的时候还可以加上过滤条件,连访问哪些数据都可以指定. create or replace vie ...
- P1355 神秘大三角
题目描述 判断一个点与已知三角形的位置关系. 输入输出格式 输入格式: 前三行:每行一个坐标,表示该三角形的三个顶点 第四行:一个点的坐标,试判断该点与前三个点围成三角形的位置关系 (详见样例) 所有 ...
- 【BZOJ4953】lydsy七月月赛 F DP
[BZOJ4953]lydsy七月月赛 F 题面 题解:设f[i][j]表示第i个强度取为j时的最小误差.那么每次转移时,我们只计算j'和j之间的像素点带来的误差,于是有: $f[i][j]=min( ...
- How to deploy a Delphi OSX project from the command line
Delphi has a well developed command line build process (via MSBuild) for Windows projects. After the ...
- EM算法索引
把这n个{试验结果来自B的概率}求和得到期望,平均后,得到B出正面的似然估计,同理有p和q. 重复迭代,直到收敛为止 http://blog.csdn.net/junnan321/article/de ...
- Spring 配置JNDI数据源
1.Spring 提供的JNDI调用类. 2.使用weblogic进行部署项目,所以使用WebLogicNativeJdbcExtrator类进行配置. 3.配置完数据源后配置sessionFacto ...