• MongoDB分片配置系列一:


    接这篇博客:

    http://www.cnblogs.com/xiaoit/p/4479066.html

    这里不再说明安装过程。

    1:分片简介

    分片是一种将海量的数据水平扩展的数据库集群系统,数据分表存储在sharding的各个节点上,使用者通过简单的配置就可以很方便地构建一个分布式MongoDB集群。MongoDB的数据分块称为chunk。每个chunk都是Collection中一段连续的数据记录,通常最大尺寸是200MB,超出则生成新的数据块。

    2:

    配置MongoDB的Sharding Cluster需要3中角色:
    a:Shard Server
    Shard Server 即存储数据的分片,每个Shard可以是一个实例,也可以是一个副本集。为了实现每个Shard内部的auto-failover,官方建议,每一个Shard为一组Replica Set .
    b:Config Server
    为了将一个特定的collection存放在多个shard中。需要为collection指定一个shard key,例如{age:1}.shard key 决定了数据存放在哪个分片中。Config Server 就是用来存储所有Shard节点的配置信息、分片的分布情况、该集群中所有DB和collection的sharding配置信息。
    c:Route Process
    这是一个前端的路由进程,客户端由此进入。然后会询问Config Server需要到哪个Shard上查询或者保存记录?再连接相应的Shard进行操作,最后将结果返回给客户端。客户端只需原封不动的将原来发给Mongod的查询或者更新请求发给Route Process即可。不用关心文档到底存储在哪个Shard上面。

    在一台机器上模拟环境配置分片
    Shard Server 1:27017
    Shard Server 2:27018
    Config Server :27019
    Route Process:40000

    3:创建数据目录并保证有读写权限

    mkdir -p ./data/shard/{s01,s02}
    

    4:启动Shard Server1:

    [root@localhost mongodb]# ./bin/mongod --port 27017 --dbpath ./data/shard/s01 --logpath ./log/s01 --fork
    about to fork child process, waiting until server is ready for connections.
    forked process: 54045
    child process started successfully, parent exiting
    

      

    启动Shard Server2:

    [root@localhost mongodb]# ./bin/mongod --port 27018 --dbpath ./data/shard/s02 --logpath ./log/s02 --fork
    about to fork child process, waiting until server is ready for connections.
    forked process: 54065
    child process started successfully, parent exiting
    

      

    启动Config Server

    [root@localhost mongodb]# mkdir -p ./data/shard/config
    [root@localhost mongodb]# ./bin/mongod --port 27019 --dbpath ./data/shard/config --logpath ./log/configlog --fork
    about to fork child process, waiting until server is ready for connections.
    forked process: 54111
    child process started successfully, parent exiting
    

    注意:我们完全可以像启动普通Mongod服务一样启动,不需要添加-shardsvr和configsvr参数。因为两个参数的作用就是改变启动端口的,这里我们自行指定端口就可以了。

    启动Route Process 

    [root@localhost mongodb]# ./bin/mongos --port 40000 --fork --logpath ./data/shard/route.log --chunkSize 1 --configdb localhost:27019
    2015-05-05T01:28:04.996-0700 warning: running with 1 config server should be done only for testing purposes and is not recommended for production
    about to fork child process, waiting until server is ready for connections.
    forked process: 54169
    child process started successfully, parent exiting
    

    chunkSize :指定chunk的大小,默认为200M。为了方便测试指定为1M。意思是当这个分片中插入的数据大于1M时候开始数据转移。

    5:配置Sharding

    此时直接连mongos路由进程即可

    [root@localhost mongodb]# ./bin/mongo admin --port 40000
    MongoDB shell version: 2.6.9
    connecting to: 127.0.0.1:40000/admin
    mongos> 
    
    [root@localhost mongodb]# ./bin/mongo admin --port 40000
    MongoDB shell version: 2.6.9
    connecting to: 127.0.0.1:40000/admin
    mongos> db.runCommand({addshard:"localhost:27017"})
    { "shardAdded" : "shard0000", "ok" : 1 }
    mongos> db.runCommand({addshard:"localhost:27018"})
    { "shardAdded" : "shard0001", "ok" : 1 }
    mongos> db.runCommand({enablesharding:"test"})
    { "ok" : 1 }
    mongos> db.runCommand({shardcollection:"test.users",key:{id:1}})
    { "collectionsharded" : "test.users", "ok" : 1 }
    mongos> 
    

      

    注意这里我们要注意片键的选择,选择片键时需要根据具体业务的数据形态来选择,切不可随意选择,实际中尤其不要轻易选择自增_id作为片键,除非你很清楚你这么做的目的,根据经验推荐一种较合理的片键方式,“自增字段+查询字段”。另外这里说明一点,分片的基本机制:分片总是试图将现有数据均分到所有的分片上。举例说,现在有两个分片,我已经选择了id作为片键,假定插入的id是自增的,如1——10000,则分片后的结果是均分,即1——5000在片A,5000——10000在片B,当然,不一定有这么精确,但却是保证尽量的平均的,以此类推,如果有三块分片,同样均分三等分。还需要说明的是,一开始插入数据时,数据是只插入到其中一块分片上的,插入完毕后,mongodb内部开始在各片之间进行数据的移动,这个过程可能不是立即的,mongodb足够智能会根据当前负载决定是立即进行移动还是稍后移动。
    在插入数据后,立马执行db.users.stats();两次可以验证如上所说。

  • 相关阅读:
    telnet linux 参数
    telnet服务 linux机器
    how to learn
    mysql关键字
    linux 下iptables配置详解
    C#调用开源图像识别类库tessnet2
    netty入门实例
    android布局属性详解
    安卓高手之路之ClassLoader(四)
    安卓高手之路之 GDI图形引擎篇
  • 原文地址:https://www.cnblogs.com/xiaoit/p/4479849.html
Copyright © 2020-2023  润新知