zoukankan      html  css  js  c++  java
  • MongoDB sharding cluster Step by Step

    本篇讲述MongoDB的 Sharding Cluster 的详细步骤,按着做理论上不会有什么错误。

    关于说着里边的参数、变量、和设置,没有用到很多,只用到了关键的一些,其他的可以参考MongoDB的官方文档。

    后者自己google,baidu,这里不想多讲。同样废话不多说,直接上菜。

    哦,对了Sharding Cluster里边一定要弄明白的三个概念, DataNode, ConfigServer, Router。如图:

    好了, 配置正式开始:

    1, 配置Shard Data Node, 即我们刚才说的 Replica Set

    1)自己编写 mongo_sharding_dataNode_1.conf

    文件的内容:

    bind_ip=localhost
    port=27022
    dbpath=D:MongoDBdatadbnode1
    logpath=D:MongoDBlog ode1.log
    logappend=true
    replSet=testsh1
    shardsvr=true

    2)同样的文件,改掉bind_ip,port,dbpath,logpath的值,做成mongo_sharding_dataNode_2.conf

    这样存数据的两个库就有个一个primary,一个secondary。

    3)在Replica Set中还要有一个arbitrary,所以接着编写第三个文件:mongo_sharding_dataNode_arbit.conf

    内容同上,只是bind_ip,port,dbpath,logpath不一样而已。

    上边的配置项,和参数有不清楚的,或者想加入更多参数的,最好使用 mongod -h 去查看一下, 里边解释的很清楚。

    4)三个文件编号之后使用 mongod.exe -f  mongo_sharding_dataNode_2.conf 启动三个mongod

    例如,我的是: 

    D:MongoDBServer3.2in>
    D:MongoDBServer3.2in>mongod.exe -f ..confmongo_sharding_dataNode_1.conf

    5)三个Server(三个mongod)都启起来之后,把这个三个server配置成一个 Replica Set 即让他们成为我们的一个shard data node.

    随便登录进这个三个server中的一个, 比如我登录的是27022,

    mongo.exe localhost:27022

    use admin

    cfg = {_id:'testsh1',members:[{_id:0,host:'localhost:27022',priority:2},{_id:1,host:'localhost:27023',priority:1},{_id:2,host:'localhost:27024',arbiterOnly:true}]}
    rs.initiate(cfg)

     通过以上命令,把这三个server配置成一个Replica Set, 即一个Shard Data Node,

    现在我们就已经有个了一个 Shard Data Node 了。

    如果中间出了错误, 不要害怕,先可以找找有没有补救的办法,比如rs.remove("localhist:27023")    rs.reconfig(cfg)等等,这样可以学习的耕读。

    最不怕的就是毁掉重来嘛, 不过这么弄自己练习可以, 公司环境或生产环境,要千万千万万万万万小心的!!

    2,配置ConfigServer

    1)自己编写 conf 文件 mongo_configserver_1.conf 内容:

    bind_ip=localhost
    port=27019
    dbpath=D:MongoDBdataconfserver1
    logpath=D:MongoDBlogconfserver1.log
    logappend=true
    configsvr=true

    注意这里的 configsvr=true.

    同样的方式编写另外两个或多个 conf 文件。

    2)启动 Config Server

    mongod.exe -f mongo_configserver_1.conf

    例如,我的启动方式: 

    D:MongoDBServer3.2in>
    D:MongoDBServer3.2in>mongod.exe -f ..confmongo_configserver_2.conf

    现在 Config Server 有了, Shard DataNode 有了,该有的准备都有了。

    我们最终的要角色: mongos Router 该上场了。

    3,配置Mongos

    同样,我们编写mongos的配置文件mongos.conf

    bind_ip=localhost
    port=27030
    #dbpath=D:MongoDBdatadb  ####### 注意一下,它不需要dbpath, 可以查看 mongos -h 查看mongos的参数列表
    logpath=D:MongoDBlogmongos.log
    logappend=true
    configdb=localhost:27019,localhost:27020,localhost:27021    ####看一下这个三个ip:port用逗号分隔,这是三个 ConfigServer的地址。

    好了全部的静态,需要写到文件里的配置都配置完了, 启动 mongos

    mongos.exe -f mongos.conf

    例如,我的启动是: 

    D:MongoDBServer3.2in>
    D:MongoDBServer3.2in>mongos.exe -f ..confmongos.conf

    如果启动mongos没错的话,你应该能进入mongos

    使用命令:mongo.exe localhost:27030  进入mongos,

    进入mongos 后的提示应该是: mongos> 这样子的, 如图:

    4,配置 Sharding

    1)加入shard

    使用命令:mongos> sh.addShard("testsh1/localhost:27022")

    还记得前边那个testsh1吧, testsh1表示Replica Set的名字,当把主节点添加到shard以后,会自动找到set里的主,备,决策节点。

    所以上边的命令就是:把testsh1这个Replica Set中的主节点加入到Shard中,让shard自己找备节点和决策节点。

    可以使用命令:mongos> db.runCommand({listshards:1}); 来看一下添加的shards, 运行结果应该类似:

    mongos>
    mongos> db.runCommand({listshards:1});
    {
    "shards" : [
    {
    "_id" : "testsh1",
    "host" : "testsh1/localhost:27022,localhost:27024"
    }
    ],
    "ok" : 1
    }
    mongos>
    mongos>

    2)激活数据库分片,使用命令:

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

    激活 test-db 的数据库分片。

    通过执行以上命令,可以让数据库跨shard,如果不执行这步,数据库只会存放在一个shard。

    一旦激活数据库分片,数据库中不同的collection将被存放在不同的shard上,但一个collection仍旧存放在同一个shard上,要使单个collection也分片,还需单独对collection作些操作。

    3)激活collection分片,如图说的清楚,明白:

    使用命令:mongos> db.runCommand({shardcollection:'test-db.usertest',key:{_id:1}});

    表示激活test-db这个数据库的中 usertest 表的分片,使用 key是有索引的_id 这个列。

    设置完了,可以切换到 test-db下,看看usertest表的状态。

    使用命令:

    use test-db;

    db.usertest.stats()

    由于内容太多,不在这里列出了。

    文章到这里所有的配置已经结果, 这个Mongo Shard Cluster 已经配置完成了,

    可以使用 mongos 来进行, 操作了。 比如添加,删除,查看等等。

    mongos> user test-db;

    mongos> db.usertest.save({name:'xiaobing'});

    mongos> db.usertest.find();

    等等一系列的操作。

    ok, let's call it a day.

    没完没了了,你还。

    哈哈, 我很想知道如果那个mongos挂了怎么办?嗯,下图给了一个解决方案, 为了防止单点故障,一个mongos挂了怎么办?

    看图, 不多说了:

    知道怎么弄了吧, 这样应该没有单点故障了吧,完美,perfect。嘿嘿,嘿嘿

  • 相关阅读:
    MyBatis 缓存机制
    MyBatis 动态SQL
    SpringMVC的简介与使用
    捕获组和前后查找
    正则表达式:( ) 小括号、[ ] 中括号、{ } 大括号的区别
    343.整数拆分
    74. 搜索二维矩阵
    数的划分
    213.打家劫舍||
    整数划分为k份
  • 原文地址:https://www.cnblogs.com/icenter/p/5338995.html
Copyright © 2011-2022 走看看