# 集群的常用配置
# 查看分片信息状态
在mongos节点中查询整个集群的状态,包括副本集、分片集、mongs数量、数据库分布在哪个分片上、有无开启平衡器等
db.printShardingStatus()
1

分片状态属性说明
| 属性 | 说明 |
|---|---|
| shards | 记录副本集、分片集群说明 |
| active mongos | mongos的版本及数量 |
| autosplit | chunk自动切割的功能是否启动,默认为启动 |
| balancer | 平衡器的相关信息 |
| databases | 数据库存放的相关信息 |
# 调整副本集
# 登录数据节点的主节点
/mongodb/mongodb-linux-x86_64-enterprise-rhel70-4.4.5/bin/mongo --port 27019
1
副本创建超级管理员
db.createUser(
{
user:"superadmin",
pwd:"superadmin",
roles:[{role:"root",db:"admin"}]
}
);
1
2
3
4
5
6
7
2
3
4
5
6
7
登录
use admin
db.auth('superadmin','superadmin')
1
2
2
# 查看副本集节点的配置信息
rs.conf()
1
{
"_id" : "repl_0",
"version" : 2,
"term" : 5,
"protocolVersion" : NumberLong(1),
"writeConcernMajorityJournalDefault" : true,
"members" : [
{
"_id" : 0,
"host" : "node1:27019",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "node2:27019",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "node3:27019",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"catchUpTimeoutMillis" : -1,
"catchUpTakeoverDelayMillis" : 30000,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("60a8c54c3688ad95075d34cc")
}
}
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
有多少个副本节点,members里就会记录多少笔host数据,从members的属性值中可以了解每个副本集的状态及配置
members的相关属性及说明
| 属性 | 说明 |
|---|---|
| arbiterOnly | 是否为仲裁节点,默认为false |
| buildIndexes | 是否会同步建立索引,默认为true,一旦加入节点后便无法更改。若要为false,须要在一开始加入节点时就进行设定 |
| hidden | 是否为隐藏节点,默认为false |
| priority | 成为主节点的优先权,默认为1 |
| tags | 用作功能隔离的读优先 |
| slaveDelay | 设定节点同步数据延迟的时间,单位为秒。若要设定延迟,则priority须设定为0 |
| votes | 选举主节点时的投票权 |
# 更新副本集的成员配置
cfg=rs.conf()
# 副本集成员的位置,从0开始
cfg.members[1].priority=2
rs.reconfig(cfg)
1
2
3
4
2
3
4
若在副节点修改,则须加上"force"
rs.reconfig(cfg,{froce:true})
1
# 加入新节点
# 若仅输入IP地址及端口号,则其余配置都采用默认值
rs.add('10.10.10.10:27019')
# 若要自定义参数值,则在添加节点时可以加入设定
rs.add({_id:4,host:'10.10.10.10:27019',priority:0,votes:0})
1
2
3
4
2
3
4
# 加入仲裁节点
rs.addArb('10.10.10.10:27019')
1
# 删除节点
rs.remove('10.10.10.10:27019')
1
# 使用副节点查询数据(需登录副本节点)
rs.slaveOK()
1
# 在特定时间内使其节点不成为主节点
rs.freeze(<秒数>)
1
# 使主节点降级为副节点
re.stepDown()
1
# 查看Oplog相关信息(包含Oplog大小、头尾数据时间)
rs.printReplicationInfo()
1
# 显示主节点的副本集及同步状态
rs.printSlaveReplicationInfo()
1
# 查看副本集中的节点有哪些指令可使用
rs.help()
1
# 查看当前节点是否为主节点
db.isMaster()
1
# 指定副节点成员同步的对象(需登录副节点)
rs.syncFrom('10.10.10.10:27019')
1
# 调整分片集群
登录mongos节点
# 新增分片
db.runCommand({addShard:"Shard3/10.10.10.10:27017,10.10.10.11:27017,10.10.10.12:27017"})
1
# 移除分片
db.runCommand({removeShard:"Shard3"})
1
# 禁用chunk的自动切割功能
sh.disableAutoSplit()
1
# 启用chunk的自动切割功能
sh.enableAutoSplit()
1
# 用指定的分片键值拆分chunk
大多数情况下,MongoDB会自动拆分,无须自动执行
sh.splitAt("database.collection",{"<字段>":"<值>"})
1
# 将拥有特定键值的chunk均分拆开
大多数情况下,MongoDB会自动拆分,无须自动执行
sh.splitFind("database.collection",{"<字段>":"<值>"})
1
# 查看分片的状态(与db.printShardingStatus()相同)
sh.status()
1
# 查看分片集的可用指令
sh.help()
1
# 管理平衡器
平衡器使得分片之间的chunk数可以平衡,并不是使chunk数完全一致,而是在一定范围内的平衡
# 查看平衡器是否启用
sh.getBalancerState()
1
# 启用平衡器
sh.startBalancerState()
sh.setBalancerState(true)
1
2
2
# 禁用平衡器
sh.stopBalancer()
sh.setBalancerState(false)
1
2
2
# 禁用特定分片集合的平衡器
sh.disableBalancing('<数据库名>.<集合名>')
1
# 启用特定分片集合的平衡器
sh.enableBalancing('<数据库名>.<集合名>')
1
# 查看平衡器是否正在运行
sh.isBalancerRunning()
1
# 让数据在分片间迁移
对于做了分片的数据集合,MongoDB会将数据块( chunk )储存在不同的分片上。对于没有做数据 分片的数据库,MongoDB会将数据块( chunk )整个储存在一个分片上。原始储存在哪个分片上不是我 们可以设置的,但是我们可以通过指令将数据块( chunk )或整个数据库搬迁到另一一个分片上。
# 将指定的数据块(chunk)搬迁到目标分片上
sh.moveChunk("<数据库名>.<集合名>",{"<字段名>":"<内容>"},"<分片名>")
1
# 将数据库的主分片(Primary)迁移到目标分片上
db.adminCommand({movePrimary:"<数据库名>",to:"<分片名>"})
1