美文网首页
mongodb单机分片的例子

mongodb单机分片的例子

作者: 陆遥远 | 来源:发表于2018-08-29 11:39 被阅读0次

    1、分片实际情况例子:

    Shard Server 1:27020
    Shard Server 2:27021
    Shard Server 3:27022
    Shard Server 4:27023
    Config Server :27100
    Route Process:40000

    创建分片数据目录:

    mkdir -p /mongoDB/shard/s0
    mkdir -p /mongoDB/shard/s1
    mkdir -p /mongoDB/shard/s2
    mkdir -p /mongoDB/shard/s3

    创建分片服务器日志目录:建立4个日志目录

    mkdir -p /mongoDB/shard/log/s0
    mkdir -p /mongoDB/shard/log/s1
    mkdir -p /mongoDB/shard/log/s2
    mkdir -p /mongoDB/shard/log/s3

    启动分片进程,启动分片数据库

    mongod --port 27020 --dbpath=/mongoDB/shard/s0 --logpath=/mongoDB/shard/log/s0/s0.log --logappend --fork
    mongod --port 27021 --dbpath=/mongoDB/shard/s1 --logpath=/mongoDB/shard/log/s1/s1.log --logappend --fork
    mongod --port 27022 --dbpath=/mongoDB/shard/s2 --logpath=/mongoDB/shard/log/s2/s2.log --logappend --fork
    mongod --port 27023 --dbpath=/mongoDB/shard/s3 --logpath=/mongoDB/shard/log/s3/s3.log --logappend --fork

    创建配置目录

    mkdir -p /mongoDB/shard/config

    启动配置服务器,可以启动三台,保证安全

    mongod --port 27100 --dbpath=/mongoDB/shard/config --logpath=/mongoDB/shard/log/config.log --logappend --fork

    启动路由,3.4以上版本必须是复制集模式,否则报错,所以本例子必须做成3.2版本

    mongos --port 40000 --configdb localhost:27100 --fork --logpath=/mongoDB/shard/log/route.log
    mongos --port 40001 --configdb localhost:27100 --fork --logpath=/mongoDB/shard/log/route1.log
    mongos --port 40000 --configdb localhost:27100 --fork --logpath=/www/mongoDB/shard/log/route.log --chunkSize 500

    登陆mongos

    mongo --port 40000
    use admin

    下面命令等同

    sh.addShard("localhost:27020")
    sh.addShard("localhost:27021")
    sh.addShard("localhost:27022")
    sh.addShard("localhost:27023")

    db.runCommand({ addshard:"localhost:27020" })
    db.runCommand({ addshard:"localhost:27021" })
    db.runCommand({ addshard:"localhost:27022" })
    db.runCommand({ addshard:"localhost:27023" })

    db.runCommand({"enablesharding":"test_shard" }) #设置分片存储的数据库
    db.runCommand({"enablesharding":"test" }) #设置分片存储的数据库

    做哈希分片,必须先建立哈希索引

    db.test.createIndex({"_id": 1});
    db.test.createIndex({"_id": "hashed"});

    哈希分片

    db.runCommand({ shardcollection: "test.test", key: {"_id": "hashed"}});

    db.runCommand({ shardcollection: "test.log", key: { id:1,time:1}})

    测试上线

    for(var i=0;i<50000;i++){ db.test.insert({name:'test'+i}) };

    1、检查库是否为分片,进入mongos,可以看到有几个分片

    use admin
    sh.status();
    db.printShardingStatus();

    mongs刷新过时信息

    db.adminCommand({"flushRouterConfig":1})

    分片信息得查询和管理,登陆mongos或者配置集都可以

    use config
    db.shards.find()

    迁移分片,从2021端口迁移到端口2023

    停止2021、2023分片

    pgrep mongo -a
    kill 9495 9496

    迁移分片数据,把2021的数据全部拷贝到2023

    cp -r /mongoDB/shard/s1/* /mongoDB/shard/s3

    修改配置库(如果多个,需要都修改),原来2021修改为2023

    db.shards.find();

    { "_id" : "shard0000", "host" : "localhost:27020" }
    { "_id" : "shard0001", "host" : "localhost:27021" }
    { "_id" : "shard0002", "host" : "localhost:27022" }

    db.shards.update({"_id":"shard0001"},{$set:{"host" : "localhost:27023"}})

    特别注意,复制集,新增加节点会变other,在主配置服务器节点上必须要做下面命令:在添加和移除的时候,只能在PRIMARY节点类型上操作

    use admin
    rs.status()
    rs.add("10.20.222.63:10001")

    rs.remove("10.20.0.44:10001")

    启动2023服务器,原来没数据,现在应该有一条,检查没问题

    mongod --port 27023 --dbpath=/mongoDB/shard/s3 --logpath=/mongoDB/shard/log/s3.log --logappend --fork
    mongo --port 27023
    use test_shard
    db.test.find();

    启动配置服务器和mongos

    mongod --port 27100 --dbpath=/mongoDB/shard/config --logpath=/mongoDB/shard/log/config.log --logappend --fork
    mongos --port 40000 --configdb localhost:27100 --fork --logpath=/mongoDB/shard/log/route.log

    检查数据是否存在

    mongo --port 40000
    db.test.find({"_id" : ObjectId("5ac9d47b8d6a9994ad2fd956")});

    运行,mongs会显示 "msg" : "isdbgrid"

    db.isMaster()

    相关文章

      网友评论

          本文标题:mongodb单机分片的例子

          本文链接:https://www.haomeiwen.com/subject/eiphwftx.html