集群的常用配置
查看分片信息状态
在mongos节点中查询整个集群的状态,包括副本集、分片集、mongs数量、数据库分布在哪个分片上、有无开启平衡器等
db.printShardingStatus()
分片状态属性说明
属性 | 说明 |
---|---|
shards | 记录副本集、分片集群说明 |
active mongos | mongos的版本及数量 |
autosplit | chunk自动切割的功能是否启动,默认为启动 |
balancer | 平衡器的相关信息 |
databases | 数据库存放的相关信息 |
调整副本集
登录数据节点的主节点
/mongodb/mongodb-linux-x86_64-enterprise-rhel70-4.4.5/bin/mongo --port 27019
副本创建超级管理员
db.createUser(
{
user:"superadmin",
pwd:"superadmin",
roles:[{role:"root",db:"admin"}]
}
);
登录
use admin
db.auth('superadmin','superadmin')
查看副本集节点的配置信息
rs.conf()
{
"_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")
}
}
有多少个副本节点,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)
若在副节点修改,则须加上"force"
rs.reconfig(cfg,{froce:true})
加入新节点
# 若仅输入IP地址及端口号,则其余配置都采用默认值rs.add('10.10.10.10:27019')# 若要自定义参数值,则在添加节点时可以加入设定rs.add({_id:4,host:'10.10.10.10:27019',priority:0,votes:0})
加入仲裁节点
rs.addArb('10.10.10.10:27019')
删除节点
rs.remove('10.10.10.10:27019')
使用副节点查询数据(需登录副本节点)
rs.slaveOK()
在特定时间内使其节点不成为主节点
rs.freeze(<秒数>)
使主节点降级为副节点
re.stepDown()
查看Oplog相关信息(包含Oplog大小、头尾数据时间)
rs.printReplicationInfo()
显示主节点的副本集及同步状态
rs.printSlaveReplicationInfo()
查看副本集中的节点有哪些指令可使用
rs.help()
查看当前节点是否为主节点
db.isMaster()
指定副节点成员同步的对象(需登录副节点)
rs.syncFrom('10.10.10.10:27019')
调整分片集群
登录mongos节点
扫描二维码关注公众号,回复:
13558551 查看本文章
新增分片
db.runCommand({addShard:"Shard3/10.10.10.10:27017,10.10.10.11:27017,10.10.10.12:27017"})
移除分片
db.runCommand({removeShard:"Shard3"})
禁用chunk的自动切割功能
sh.disableAutoSplit()
启用chunk的自动切割功能
sh.enableAutoSplit()
用指定的分片键值拆分chunk
大多数情况下,MongoDB会自动拆分,无须自动执行
sh.splitAt("database.collection",{"<字段>":"<值>"})
将拥有特定键值的chunk均分拆开
大多数情况下,MongoDB会自动拆分,无须自动执行
sh.splitFind("database.collection",{"<字段>":"<值>"})
查看分片的状态(与db.printShardingStatus()相同)
sh.status()
查看分片集的可用指令
sh.help()
管理平衡器
平衡器使得分片之间的chunk数可以平衡,并不是使chunk数完全一致,而是在一定范围内的平衡
查看平衡器是否启用
sh.getBalancerState()
启用平衡器
sh.startBalancerState()sh.setBalancerState(true)
禁用平衡器
sh.stopBalancer()sh.setBalancerState(false)
禁用特定分片集合的平衡器
sh.disableBalancing('<数据库名>.<集合名>')
启用特定分片集合的平衡器
sh.enableBalancing('<数据库名>.<集合名>')
查看平衡器是否正在运行
sh.isBalancerRunning()
让数据在分片间迁移
对于做了分片的数据集合,MongoDB会将数据块( chunk )储存在不同的分片上。对于没有做数据 分片的数据库,MongoDB会将数据块( chunk )整个储存在一个分片上。原始储存在哪个分片上不是我 们可以设置的,但是我们可以通过指令将数据块( chunk )或整个数据库搬迁到另一一个分片上。
将指定的数据块(chunk)搬迁到目标分片上
sh.moveChunk("<数据库名>.<集合名>",{"<字段名>":"<内容>"},"<分片名>")
将数据库的主分片(Primary)迁移到目标分片上
db.adminCommand({movePrimary:"<数据库名>",to:"<分片名>"})