• mongodb10---分片


    分片:数据非常大,把不同段的数据拆了,1-1000000放在节点1,1000000-2000000放在节点2,200000-300000放在节点上。把不同的数据放在不同的服务器叫shard分片。

    请求交给mongos,人对mongos查数据写数据。

    1:在3台独立服务器上,分别运行 27017,27018,27019实例, 互为副本集,形成3套repl set
    2: 在3台服务器上,各配置config server, 运行27020端口上
    
    3: 配置mongos
    ./bin/mongos --port 30000 
     --dbconfig 192.168.1.201:27020,192.168.1.202:27020,192.168.1.203:27020
    
    4:连接路由器
    ./bin/mongo --port 30000
    
    5: 添加repl set为片
    >sh.addShard(‘192.168.1.201:27017’);
    >sh.addShard(‘192.168.1.203:27017’);
    >sh.addShard(‘192.168.1.203:27017’);
    
    
    6: 添加待分片的库
    >sh.enableSharding(databaseName);
    
    7: 添加待分片的表
    >sh.shardCollection(‘dbName.collectionName’,{field:1});
    
    Field是collection的一个字段,系统将会利用filed的值,来计算应该分到哪一个片上.
    这个filed叫”片键”, shard key
    mongodb不是从单篇文档的级别,绝对平均的散落在各个片上, 
    
    而是N篇文档,形成一个块"chunk",
    优先放在某个片上,片上又分为一个一个的块, 
    当这片上的chunk,比另一个片的chunk,区别比较大时, (>=3) ,会把本片上的chunk,移到另一个片上, 以chunk为单位,
    维护片之间的数据均衡
    
    问: 为什么插入了10万条数据,才2个chunk?
    答: 说明chunk比较大(默认是64M)
    在config数据库中,修改chunksize的值.
    Use config
    Show tables
    Db.settings.find();    //{id:’chunksize’,’value’:64}
    
    问: 既然优先往某个片上插入,当chunk失衡时,再移动chunk,
    自然,随着数据的增多,shard的实例之间,有chunk来回移动的现象,这将带来什么问题?
    答: 服务器之间IO的增加, 
    
    接上问: 能否我定义一个规则, 某N条数据形成1个块,预告分配M个chunk,
    M个chunk预告分配在不同片上. 
    以后的数据直接入各自预分配好的chunk,不再来回移动?
    
    答: 能, 手动预先分片!
    mkdir -p /data/r17 /data/r18 /data/r20 /data/mlog    //17,18是shard的端口,20是configsvr的端口
    
    //启动2个mongo片的实例
    /usr/local/mongodb/bin/mongod --dbpath /data/r17/ --logpath /data/mlog/r17.log --port 27017 --fork --smallfile
    /usr/local/mongodb/bin/mongod --dbpath /data/r18/ --logpath /data/mlog/r18.log --port 27018 --fork --smallfile
    
    //准备configsvc(不是一台存储数据的服务器,而是存储配置信息的服务器)
    /usr/local/mongodb/bin/mongod --dbpath /data/r20/ --logpath /data/mlog/r20.log --port 27020 --fork --configsvr
    
    //mongos路由器
    /usr/local/mongodb/bin/mongos --logpath /data/mlog/r30.log --port 30000 --configdb 192.168.202:27020   --fork//哪台configsvr为他服务,现在mongos和configsvr连在了一起但是还没有和shard连在一起。
    
    ps aux | grep mongo    //可以看到刚才的4个进程
    
    //连接mongos
    ./bin/mongo --port 30000
    
    //添加repl set为片,现在3者都连接到一起了,(要先连接进30000端口,mongo 192.168.1.202:30000)
    >sh.addShard(‘192.168.1.201:27017’);
    >sh.addShard(‘192.168.1.203:27018’);   
    
    sh.status()   //可以查看分片信息
    
    use test
    db.stu.insert({ss:"ss"})
    db.stu.insert({ss:"ss"})
    db.stu.insert({ss:"ss"})
    db.stu.insert({ss:"ss"})
    db.stu.insert({ss:"ss"})
    
    
    //连接到27017
    ./bin/mongo --port 27017
    db.find()    //有数据
    
    //连接到27018
    ./bin/mongo --port 27018
    db.find()    //没有数据,因为没有指定分片规则
    
    //添加待分片的库(谁可以分片)
    >sh.enableSharding('shop');      //shop库可以分片
    
    sh.status()    //可以看到shop库可以分片
    
    //添加待分片的表
    >sh.shardCollection('shop.goods',{goods_id:1});
    
    sh.status()    //可以看到shop库goods表的状态
    
    
    //添加2000数据
    use shop
    for(var i=1;i<600000;i++){
        db.goods.insert({ss:"ss"+1})
    }
    db.goods.find()
    
    
    //查看分片数据
    ./bin/mongo --port 27017
    db.find()
    ./bin/mongo --port 27018
    db.find()
  • 相关阅读:
    PHP命令行执行程序php.exe使用及常用参数
    如何搜百度云盘里别人分享的文件
    WIN8下笔记本共享热点的设置
    COMPANY_点取消会卡死的解决方法
    python urllib
    windows技术
    五分钟搞定Linux容器
    分分钟教你制作完美的虚拟机镜像
    事件日志监控工具推荐
    Linux服务器管理员必备Linux命令TOP5
  • 原文地址:https://www.cnblogs.com/yaowen/p/8167779.html
Copyright © 2020-2023  润新知