`

mongodb缓存sharding和replSet以及config部署

阅读更多

MongoDB Sharding Cluster是一种可以水平扩展的模式,在数据量很大时特给力,一直想研究一下,要构建一个MongoDB Sharding Cluster,需要三种角色:

    1. Shard Server: mongod实例,用于存储实际的数据块,实际生产环境中一个Shard Server角色可由几台机器组个一个Replica Set承担,防止主机单点故障。

    2. Config Server: mongod实例,存储了整个Cluster Metadata,其中包括Chunk信息。

    3. Route Server: mongos实例,前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。

    Sharding架构图如下:

    因为是实验环境,我这里只是用一台Linux服务器,基本信息如下:

    1. 3个分片Sharding

    2. 每一个分片由3个节点构成1主2备的Replica Set

    3. 3个配置节点Configsvr

    4. 1个路由节点Mongos

    分片复制集A(三个分片节点构成一个复制集):127.0.0.1:10000   127.0.0.1:10001  127.0.0.1:10002

    分片复制集B(三个分片节点构成一个复制集):127.0.0.1:20000   127.0.0.1:20001  127.0.0.1:20002

    分片复制集C(三个分片节点构成一个复制集):127.0.0.1:30000   127.0.0.1:30001  127.0.0.1:30002

    Configsvr(三个配置服务器节点):127.0.0.1:40000   127.0.0.1:40001  127.0.0.1:40002

    Mongos(一个路由节点):127.0.0.1:50000

    详细操作步骤如下:

    1. 下载并安装MongoDB,并创建MongoDB用户

  1. tar zxvf mongodb-linux-i686-2.0.4.tgz -C /usr/local/  
  2. mv /usr/local/mongodb-linux-i686-2.0.4/ /usr/local/mongodb/  
  3. ln -s /usr/local/mongodb/bin/* /usr/bin/  
  4.  
  5. groupadd -g 20001 mongodb  
  6. useradd -u 20001 -g mongodb mongodb  
  7.  
  8. su - mongodb 

    2. 创建相关目录

  1. mkdir -p /home/mongodb/data/shard1/r0  
  2. mkdir -p /home/mongodb/data/shard1/r1  
  3. mkdir -p /home/mongodb/data/shard1/r2  
  4. mkdir -p /home/mongodb/data/shard1/config  
  5.  
  6. mkdir -p /home/mongodb/data/shard2/r0  
  7. mkdir -p /home/mongodb/data/shard2/r1  
  8. mkdir -p /home/mongodb/data/shard2/r2  
  9. mkdir -p /home/mongodb/data/shard2/config  
  10.  
  11. mkdir -p /home/mongodb/data/shard3/r0  
  12. mkdir -p /home/mongodb/data/shard3/r1  
  13. mkdir -p /home/mongodb/data/shard3/r2  
  14. mkdir -p /home/mongodb/data/shard3/config 

    3. 创建Sharding和Replica Set

    (1) 创建并配置第一组

  1. mongod -shardsvr -replSet shard1 -port 10000 -dbpath /home/mongodb/data/shard1/r0 -oplogSize 64 -logpath /home/mongodb/data/shard1/r0.log -logappend -fork  
  2. mongod -shardsvr -replSet shard1 -port 10001 -dbpath /home/mongodb/data/shard1/r1 -oplogSize 64 -logpath /home/mongodb/data/shard1/r1.log -logappend -fork  
  3. mongod -shardsvr -replSet shard1 -port 10002 -dbpath /home/mongodb/data/shard1/r2 -oplogSize 64 -logpath /home/mongodb/data/shard1/r2.log -logappend -fork  
  4.  
  5. mongo 127.0.0.1:10000/admin  
  6.  
  7. config={_id: 'shard1', members: [{_id: 0, host: '127.0.0.1:10000'}, {_id: 1, host: '127.0.0.1:10001'}, {_id: 2, host: '127.0.0.1:10002'}]}  
  8. rs.initiate(config); 

    (2) 创建并配置第二组

  1. mongod -shardsvr -replSet shard2 -port 20000 -dbpath /home/mongodb/data/shard2/r0 -oplogSize 64 -logpath /home/mongodb/data/shard2/r0.log -logappend -fork  
  2. mongod -shardsvr -replSet shard2 -port 20001 -dbpath /home/mongodb/data/shard2/r1 -oplogSize 64 -logpath /home/mongodb/data/shard2/r1.log -logappend -fork  
  3. mongod -shardsvr -replSet shard2 -port 20002 -dbpath /home/mongodb/data/shard2/r2 -oplogSize 64 -logpath /home/mongodb/data/shard2/r2.log -logappend -fork  
  4.  
  5. mongo 127.0.0.1:20000/admin  
  6.  
  7. config={_id: 'shard2', members: [{_id: 0, host: '127.0.0.1:20000'}, {_id: 1, host: '127.0.0.1:20001'}, {_id: 2, host: '127.0.0.1:20002'}]}  
  8. rs.initiate(config); 

    (3) 创建并配置第三组

  1. mongod -shardsvr -replSet shard3 -port 30000 -dbpath /home/mongodb/data/shard3/r0 -oplogSize 64 -logpath /home/mongodb/data/shard3/r0.log -logappend -fork  
  2. mongod -shardsvr -replSet shard3 -port 30001 -dbpath /home/mongodb/data/shard3/r1 -oplogSize 64 -logpath /home/mongodb/data/shard3/r1.log -logappend -fork  
  3. mongod -shardsvr -replSet shard3 -port 30002 -dbpath /home/mongodb/data/shard3/r2 -oplogSize 64 -logpath /home/mongodb/data/shard3/r2.log -logappend -fork  
  4.  
  5. mongo 127.0.0.1:30000/admin  
  6.  
  7. config={_id: 'shard3', members: [{_id: 0, host: '127.0.0.1:30000'}, {_id: 1, host: '127.0.0.1:30001'}, {_id: 2, host: '127.0.0.1:30002'}]}  
  8. rs.initiate(config); 

    4. 启动三个配置服务节点Configsvr

  1. mongod -configsvr -dbpath /home/mongodb/data/shard1/config -port 40000 -logpath /home/mongodb/data/shard1/config.log -logappend -fork  
  2. mongod -configsvr -dbpath /home/mongodb/data/shard2/config -port 40001 -logpath /home/mongodb/data/shard2/config.log -logappend -fork  
  3. mongod -configsvr -dbpath /home/mongodb/data/shard3/config -port 40002 -logpath /home/mongodb/data/shard3/config.log -logappend -fork 

    5. 启动一个路由点Mongos

  1. mongos -configdb 127.0.0.1:40000,127.0.0.1:40001,127.0.0.1:40002 -port 50000 -chunkSize 5 -logpath /home/mongodb/data/mongos.log -logappend -fork 

    6. 配置分片

  1. mongo 127.0.0.1:50000/admin  
  2.  
  3. db.runCommand({addshard:"shard1/127.0.0.1:10000,127.0.0.1:10001,127.0.0.1:10002",name:"ShardSetA"})  
  4. db.runCommand({addshard:"shard2/127.0.0.1:20000,127.0.0.1:20001,127.0.0.1:20002",name:"ShardSetB"})  
  5. db.runCommand({addshard:"shard3/127.0.0.1:30000,127.0.0.1:30001,127.0.0.1:30002",name:"ShardSetC"}) 

    7. 查看配置结果

  1. mongos> db.runCommand({listshards: 1})  
  2. {  
  3.     "shards" : [  
  4.         {  
  5.             "_id" : "ShardSetA",  
  6.             "host" : "shard1/127.0.0.1:10000,127.0.0.1:10001,127.0.0.1:10002" 
  7.         },  
  8.         {  
  9.             "_id" : "ShardSetB",  
  10.             "host" : "shard2/127.0.0.1:20000,127.0.0.1:20001,127.0.0.1:20002" 
  11.         },  
  12.         {  
  13.             "_id" : "ShardSetC",  
  14.             "host" : "shard3/127.0.0.1:30000,127.0.0.1:30001,127.0.0.1:30002" 
  15.         }  
  16.     ],  
  17.     "ok" : 1  
  18. }  
  19. mongos>  

     8. 如果不激活数据库分片,数据库只会存在一个Shard中,一旦激活数据库分片,数据库中不同的Collection将被存放在不同的Shard上,但一个Collection仍旧存放在同一个Shard上,要使单个Collection也分片,还需单独对Collection作些操作。

  1. mongos> db.runCommand({enablesharding:"test"});  
  2. "ok" : 1 } 

    9. 要使单个Collection也分片存储,需要给Collection指定一个分片key,通过以下命令操作:

  1. mongos> db.runCommand({shardcollection:"test.c1",key:{id:1}})  
  2. "collectionsharded" : "test.c1""ok" : 1 } 

    10. 查看Collection分片信息

  1. mongos> for (var i = 1; i <= 13210; i++) db.c1.save({id:i,value1:"1234567890",value2:"1234567890",value3:"1234567890",value4:"1234567890"});  
  2. mongos> db.c1.stats();  
  3. {  
  4.     "sharded" : false,  
  5.     "primary" : "config",  
  6.     "ns" : "admin.c1",  
  7.     "count" : 13210,  
  8.     "size" : 1690880,  
  9.     "avgObjSize" : 128,  
  10.     "storageSize" : 2793472,  
  11.     "numExtents" : 5,  
  12.     "nindexes" : 1,  
  13.     "lastExtentSize" : 2097152,  
  14.     "paddingFactor" : 1,  
  15.     "flags" : 1,  
  16.     "totalIndexSize" : 457856,  
  17.     "indexSizes" : {  
  18.         "_id_" : 457856  
  19.     },  
  20.     "ok" : 1  
分享到:
评论

相关推荐

    MongoDB Sharding 机制分析

    MongoDB Sharding 机制分析 MongoDB Sharding 机制是 MongoDB 中的一种机制,用于将数据水平切分到不同的物理节点,以...因此,MongoDB 的 Sharding 机制可以解决单机性能极限的问题,提高数据库的可扩展性和可靠性。

    mongodb3.2集群配置

    MongoDB 3.2 是一款高性能、开源的NoSQL数据库系统,在分布式环境下提供了丰富的功能支持,特别是其Sharding(分片)特性,使得它能够很好地支持大规模数据处理场景。本文将围绕基于MongoDB 3.2构建的真实生产环境...

    mongodb集群搭建

    1. **Config Server**:配置服务器存储每个shard节点的配置信息、每个chunk的shard key范围、chunk在各shard的分布情况以及集群中所有DB和collection的sharding配置信息。 2. **Replica Set**:主从配置(master-...

    The Definitive Guide to MongoDB

    - MongoDB的组件介绍(如mongod、mongos、config servers等)。 - 复制集(Replica Sets)的原理与配置方法。 - 分片集群(Sharded Cluster)的设计思路和实现方式。 5. **数据模型设计** - 如何有效地设计...

    高可用的MongoDB集群

    ### 高可用的MongoDB集群 #### 一、概述 MongoDB是一款强大的、开源的、模式自由的文档型数据库,采用C++语言...通过以上步骤,我们可以成功搭建起一个高可用的MongoDB集群,以满足各种复杂的数据存储和访问需求。

    centos7+mongodb 3.4 集群搭建:分片+副本集

    在本文档中,我们将详细介绍如何在CentOS 7.0系统上搭建基于MongoDB 3.4.3版本的集群环境,包括分片(sharding)和副本集(replica sets)的配置。本文档将介绍相关概念、环境准备、机器规划及端口分配、集群搭建的...

    mongodb-win32-x86_64-2008plus-ssl-3.2.22.zip

    6. **管理**:MongoDB提供了丰富的管理工具,如`mongoimport`和`mongoexport`用于数据导入导出,以及`mongodump`和`mongorestore`用于备份和恢复。 MongoDB 3.2.22版本虽然已经相对老旧,但它仍是一个稳定可靠的...

    mongo性能调优

    MongoDB是一款广泛使用的开源文档数据库系统,以其灵活性、可扩展性和高性能而闻名。在实际运行中,MongoDB的性能调优是一项关键任务,它能够帮助我们优化查询速度、提高资源利用率,确保系统的稳定运行和高效服务。...

    solr5.3.1 导入mysql数据

    例如,可以通过调整缓存设置、使用 Sharding 或 Replication 来提高 Solr 集群的性能和可用性。此外,Solr 支持多种数据源,不仅限于 MySQL,还包括 Oracle、MongoDB 等。 总之,将 MySQL 数据导入 Solr 5.3.1 需要...

Global site tag (gtag.js) - Google Analytics