mongodb的配置分片步骤
mongodb库默认是不会将你的表进行分片的,是需要手动配置的,如果不配置,数据都会全部存放在主节点,不会均匀分配到各个分片
现在手动将一个表做分片,就拿um_t_staff表作为例子
sh.enableSharding("'mongodbDemo")//先让当前库支持分片
sh.shardCollection('mongodbDemo.um_t_staff',{timestamp:1})//当前集合加入分片,递增片键(timestamp已经作为索引了)
db.adminCommand("flushRouterConfig")//刷新路由
sh.enableBalancing("mongodbDemo.um_t_staff")//让当前分片支持平衡
sh.startBalancer() //开启平衡
sh.status({"verbose":1})//查看详细分片信息
db.um_t_staff.getShardDistribution()//查看该表分片数据信息
二:配置分片步骤
创建库并设置分片
我们都知道,切换数据库会自动创建库,所以我们要换要创建的库openIM
use openIM
开启均平器
sh.startBalancer()
指定要分片的数据库
sh.enableSharding("openIM")
接下来最重要的工作,指定集合的分片规则。
要分片存储的集合都需要指定分片规则,分片规则一经创建不可修改,只能删除集合再重新设置
sh.shardCollection("openIM.msg", { _id : "hashed" } )
这里表示指定openIM库下的msg集合的_id字段(也就是主键,每个集合都有这个字段)按hash散列进行分片,{ id : 1 }表示按字段id进度范围分片,这里id必须是整型
查询msg的集合状态
db.msg.stats()
三:迁移数据块
迁移数据块(chunks) (迁移到指定分片或区域中)在迁移过程中不可以进行数据写入,否则会导致机器卡死 :
db.adminCommand( { moveChunk : "mongo.mongodb1",find : {_id : 1},to : "shard1" } )
db.adminCommand( { moveChunk : "mongo.mongodb2",find : {_id : 1},to : "shard2" } )
db.adminCommand( { moveChunk : "mongo.mongodb3",find : {_id : 1},to : "shard3" } )
db.adminCommand( { moveChunk : "mongo.mongodb4",find : {_id : 1},to : "shard4" } )
db.adminCommand( { moveChunk : "mongo.mongodb5",find : {id : 1},to : "shard5" } )
四:命令参考
################################### 注意 #################################################
在分片的主节点也可以同样步骤创建用户并验证,然后可以执行其他命令。
之后,可以在分片副本上用上一步创建的用户并验证,但是show dbs 会出现错误uncaught exception: Error: listDatabases failed:
当前从节点只是一个备份,不是奴隶节点,无法读取数据,写当然更不行。因为默认情况下,从节点是没有读写权限的,可以增加(删除)读的权限,rs.secondaryOk()/rs.secondaryOk(false)。
仲裁节点不会放任何业务数据,可以登陆查看.仲裁节点不能进行数据的查看。
查看副本集的配置:返回包含当前副本集配置的文档。rs.conf()/rs.config()是该方法的别名。
查看副本集的状态:返回包含状态信息的文档,次输出结果从副本集的其他成员发送的心跳包中获得的数据反映副本集的当前状态。rs.status()
添加副本从节点:在主节点添加从节点,将其他成员加入到副本集。rs.add(host, arbiterOnly)
查看全局所有账户:db.system.users.find().pretty()
查看当前库下的账户:use test; show users;
#数据库 命令
db.serverStatus().connections; //连接数查看
show collections //查看表信息
db.test_shard.find().count() //查看table1数据长度
db.test_shard.remove({}) //删除数据表
db.stats() //查看所有的分片服务器状态
db.adminCommand( { listShards: 1 } ) //分片列表
db.test_shard.find({ age: 36 }).explain() //精确查询
db.test_shard.find({ age: { $gte : 36 ,$lt : 73 } }).explain() //范围查询
#分片 操作命令
sh.enableSharding('testdb') //开启数据库testdb分片
sh.shardCollection('testdb.users',{uid:1}) //按testdb.users的uid字段分片
sh.shardCollection("testdb.test_shard",{"age": 1}) //按ranged分片
sh.shardCollection("testdb.test_shard2",{"age": "hashed"}) //按hash分片
sh.status() //查看分片节点
sh.addShard() //向集群中添加一个 shard
sh.getBalancerState() //查看平衡器
sh.disableBalancing() //禁用平衡器
sh.enableBalancing() //启用平衡器
db.runCommand( { removeShard: "mongodb0" } ) //删除分片mongodb0,迁移数据查看命令
db.runCommand( { movePrimary: "test", to: "mongodb1" }) //将数据库test未分片mongodb0的数据,迁移到mongodb1主分片。
db.adminCommand("flushRouterConfig") //处理分片后,刷新路由数据。
use config
db.databases.find() //查看所有数据库使用分片
db.settings.save({_id:"chunksize",value:1}) //将 chunk 的大小调整为 1MB
db.serverStatus().sharding
#副本集 操作命令
rs.status() //查看成员的运行状态等信息
rs.config() //查看配置信息
rs.slaveOk() //允许在SECONDARY节点上进行查询操作,默认从节点不具有查询功能
rs.isMaster() //查询该节点是否是主节点
rs.add({}) //添加新的节点到该副本集中
rs.remove() //从副本集中删除节点
rs.stepDown //降级节点
db.printSlaveReplicationInfo() //查看同步情况
rs.addArb("172.20.0.16:27038") //添加仲裁节点
#强制加入仲裁节点:
config=rs.conf()
config.members=[config.members[0],config.members[1],{_id:5,host:"127.0.0.1:27023",priority:5,arbiterOnly:"true"}]
rs.reconfig(config,{force:true})
#强制主节点:
cfg = rs.conf()
cfg.members[0].priority = 0.5
cfg.members[1].priority = 0.5
cfg.members[2].priority = 1
rs.reconfig(cfg)
#备份/恢复
mongodump -h 127.0.0.1:27017 -d test -o /data/backup/
mongorestore -h 127.0.0.1:27017 -d test --dir /data/db/test
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved