MongoDB分布式自动分片(Auto-sharding)研究

作者:Crazybaby 2011-07-28 13:24:03数据库其他数据库数据库运维分布式MongoDB 跳过理论东西,网上有介绍自动分片的…直接进入配置,有疑问请留言。还是以1000W级数据做测试。

跳过理论东西,网上有介绍自动分片的…直接进入配置,有疑问请留言

还是以1000W级数据做测试

不分片的情况下,插入1000W条数据到一个数据库。

数据存储情况如下:

    ^_^[root@:/usr/local/mongodb/data/mongodb/test]#ls-lhtotal4.0G-rw-------1rootroot64MJul2511:25test.0-rw-------1rootroot128MJul2511:22test.1-rw-------1rootroot256MJul2511:23test.2-rw-------1rootroot512MJul2511:25test.3-rw-------1rootroot1.0GJul2511:25test.4-rw-------1rootroot2.0GJul2511:24test.5-rw-------1rootroot16MJul2511:25test.ns

下面进行自动分片配置:

这里我们选择两台Server做测试

测试机IP为:

10.X.X.163

10.X.X.228

分别在163,228服务器上启动Shardsvr进程

    ^_^[root@:/usr/local/mongodb/bin]#catrunServerShard.sh./mongod--shardsvr-dbpath=../data/mongodb--logpath=../data/shardsvr_logs.txt--logappend--fork

在163服务器上启动configsvr 和 mongos路由进程(下面的27019为configsvr的ip,mongos的ip请到log里面去看)

    [root@localhostbin]#catrunServerConfig.sh./mongod--configsvr--dbpath=../data/mongodb/config_db/--logpath=../data/mongodb/log/configsvr_logs.txt--logappend--fork[root@localhostbin]#catrunServerMongos.sh./mongos--configdb10.10.21.163:27019--logpath=../data/mongodb/log/mongos_logs.txt--logappend--fork

查看下是否都启动成功:

    [root@localhostbin]#ps-ef|grep'mongo'root179391218:47?00:01:26./mongod--shardsvr-dbpath=../data/mongodb--logpath=../data/shardsvr_logs.txt--logappend--forkroot182501019:05?00:00:00./mongod--configsvr--dbpath=../data/mongodb/config_db/--logpath=../data/mongodb/log/configsvr_logs.txt--logappend--forkroot1829011219:08?00:03:35./mongos--configdb10.10.21.163:27019--logpath=../data/mongodb/log/mongos_logs.txt--logappend--fork

可见3个服务都已经启动成功。

下面进入配置自动分片:

用mongo连接mongos进程(去log里面看)进行配置管理:

    >useadminswitchedtodbadmin>db.runCommand({addshard:"10.10.21.163:27018"});{"ok":0,"errmsg":"hostalreadyused"}>db.runCommand({addshard:"10.7.3.228:27018"});{"shardAdded":"shard0001","ok":1}>db.runCommand({enableSharding:"test"}){"ok":1}>db.runCommand({shardcollection:"test.users",key:{_id:1}}){"collectionsharded":"test.users","ok":1}

向mongos进程进行插入1000W数据

来看下数据的大小:

163:

    ^_^[root@:/usr/local/mongodb/data/mongodb]#ls-lhtotal2.0G-rw-r--r--1rootroot1011Jul2512:33mongodb.log-rwxr-xr-x1rootroot6Jul2512:34mongod.lockdrwxr-xr-x3rootroot4.0KJul2512:39moveChunk-rw-------1rootroot64MJul2512:42test.0-rw-------1rootroot128MJul2512:40test.1-rw-------1rootroot256MJul2512:41test.2-rw-------1rootroot512MJul2512:42test.3-rw-------1rootroot1.0GJul2512:41test.4-rw-------1rootroot16MJul2512:42test.nsdrwxr-xr-x2rootroot4.0KJul2512:38_tmp

228:

    [root@localhostmongodb]#ls-lh总计2.0Gdrwxr-xr-x3rootroot4.0K07-2519:39config_dbdrwxr-xr-x2rootroot4.0K07-2518:51config_repair_dbdrwxr-xr-x2rootroot4.0K07-2519:39log-rwxr-xr-x1rootroot607-2519:39mongod.lockdrwxr-xr-x3rootroot4.0K07-2519:13moveChunk-rw-------1rootroot64M07-2520:38test.0-rw-------1rootroot128M07-2520:38test.1-rw-------1rootroot256M07-2520:40test.2-rw-------1rootroot512M07-2520:41test.3-rw-------1rootroot1.0G07-2520:42test.4-rw-------1rootroot16M07-2520:38test.nsdrwxr-xr-x2rootroot4.0K07-2520:38_tmp

自动分片成每个2G。

原文链接:http://blog.csdn.net/crazyjixiang/article/details/6631382

【编辑推荐】

    教你如何利用MySQL学习MongoDB说说MongoDB的基础如何用Java操作MongoDBMongoDB基于Java、PHP的一般操作和用户安全设置设计实例对比:MySQL vs MongoDB