• 浅尝key-value数据库(三)——MongoDB的分布式


    浅尝key-value数据库(三)——MongoDB的分布式

    测试了单机MongoDB的随机读和写入性能,这一节来讲一讲MongoDB的分布式。

    MongoDB的分布式分成两种,一种是Replication,一种是Sharding。我们主要来看一下Sharding。

    先贴一张结构示意图:

     

    MongoDB Auto-Sharding的配置非常简单,在不同的机器分别开启shard, config server, mongos的进程即可。(假设config serevr的IP为192.168.1.11)

    mongod --shardsvr --dbpath /var/db/mongo_shade --port 10000 --fork --logpath /var/log/mongodb.log --logappend --nohttpinterface
    mongod --configsvr --dbpath /var/db/mongo_config/ --port 20000 --fork --logpath /var/log/mongodb_config.log --logappend --nohttpinterface
    mongos --configdb 192.168.1.11:20000 --fork --logpath /var/log/mongodb_shard.log --logappend

    这里需要注意的是,如果你的多台shard是打算用ip连接,那么mongos中也要用ip连接config server,如果是用机器名,则都要用机器名。不然会报错。

    之后使用客户端连接到mongos服务上(默认还是27017端口),进行分布式的设置(假设两台shard的IP分别为192.168.1.12和192.168.1.13,共享数据库a的collection b)

    ./mongo
    MongoDB shell version: 1.6.0
    connecting to: test
    > use admin
    switched to db admin
    > db.runCommand( { addshard : "192.168.1.12:10000" } )
    { "shardadded" : "shard0000", "ok" : 1 }
    > db.runCommand( { addshard : "192.168.1.13:10000" } )
    { "shardadded" : "shard0001", "ok" : 1 }
    > db.runCommand( { enablesharding : "a" } )
    {"ok" : 1}
    > db.runCommand( { shardcollection : "a.b", key : {_id : 1} } )
    {"ok" : 1}

    之后用db.runCommand({ listShards : 1}) 或db.printShardingStatus()就可以看到分布式的状态了。

    性能测试下来发现速度和未使用分布式的时候速度差不多,插入的数据以chunk_size为单位,插入到某台shade server。有一个单独的Balancer线程比较各个shade server的chunk数,将他们分布平均。这样的算法显然不会提高写入性能。

    在测试的过程中发现两个bug。一是当某台shade server断掉再恢复时,Balancer线程运行不正常,也就是说之后所有数据都会往一台上插。。-.- 很挫的bug吧。还有一个是当插入数据部采用safe=True模式(见Python的客户端文档)时,一定时间后某一台server会因Out of Memory被系统kill掉。。不知这两个bug何时能fix掉。

  • 相关阅读:
    分析java程序的命令总结jps,jstack
    Tomcat配置详解及tomcat的连接数与线程池
    Go入门练习题
    WebSocket的原理,及如何测试websocket是否连接成功
    day3-每天进步一点基础知识-正则练习题
    day2-每天进步一点基础知识
    day1-每天进步一点
    数组有没有length()这个方法? String有没有length()这个方法?
    List, Set, Map是否继承自Collection接口?
    启动一个线程是用run()还是start()?
  • 原文地址:https://www.cnblogs.com/timssd/p/5448014.html
Copyright © 2020-2023  润新知