# 集群的常用配置

# 查看分片信息状态

在mongos节点中查询整个集群的状态,包括副本集、分片集、mongs数量、数据库分布在哪个分片上、有无开启平衡器等

db.printShardingStatus()
1

image-20210523100537596

分片状态属性说明

属性 说明
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

登录

use admin
db.auth('superadmin','superadmin')
1
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

有多少个副本节点,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

若在副节点修改,则须加上"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

# 加入仲裁节点

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

# 禁用平衡器

sh.stopBalancer()
sh.setBalancerState(false)
1
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
上次更新时间: 2024年2月12日星期一晚上7点28分