本篇讲述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:\MongoDB\data\dbnode1
logpath=D:\MongoDB\log\node1.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:\MongoDB\Server\3.2\bin>
D:\MongoDB\Server\3.2\bin>mongod.exe -f ..\conf\mongo_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:\MongoDB\data\confserver1
logpath=D:\MongoDB\log\confserver1.log
logappend=true
configsvr=true

注意这里的 configsvr=true.

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

2)启动 Config Server

mongod.exe -f mongo_configserver_1.conf

例如,我的启动方式:

D:\MongoDB\Server\3.2\bin>
D:\MongoDB\Server\3.2\bin>mongod.exe -f ..\conf\mongo_configserver_2.conf

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

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

3,配置Mongos

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

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

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

mongos.exe -f mongos.conf

例如,我的启动是:

D:\MongoDB\Server\3.2\bin>
D:\MongoDB\Server\3.2\bin>mongos.exe -f ..\conf\mongos.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。嘿嘿,嘿嘿

MongoDB sharding cluster Step by Step的更多相关文章

  1. 【MangoDB分片】配置mongodb分片群集(sharding cluster)

    配置mongodb分片群集(sharding cluster) Sharding cluster介绍 这是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建monod ...

  2. enode框架step by step之消息队列的设计思路

    enode框架step by step之消息队列的设计思路 enode框架系列step by step文章系列索引: enode框架step by step之开篇 enode框架step by ste ...

  3. enode框架step by step之Staged event-driven architecture思想的运用

    enode框架step by step之Staged event-driven architecture思想的运用 enode框架系列step by step文章系列索引: 分享一个基于DDD以及事件 ...

  4. enode框架step by step之框架要实现的目标的分析思路剖析1

    enode框架step by step之框架要实现的目标的分析思路剖析1 enode框架系列step by step文章系列索引: 分享一个基于DDD以及事件驱动架构(EDA)的应用开发框架enode ...

  5. Tomcat Clustering - A Step By Step Guide --转载

    Tomcat Clustering - A Step By Step Guide Apache Tomcat is a great performer on its own, but if you'r ...

  6. e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (三) SqlServer数据库的访问

    上一篇文章“e2e 自动化集成测试 架构 京东 商品搜索 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step 二 图片验证码的识别” ...

  7. enode框架step by step之框架的物理部署思路

    enode框架step by step之框架的物理部署思路   enode框架系列step by step文章系列索引: enode框架step by step之开篇 enode框架step by s ...

  8. Step by Step Recipe for Securing Kafka with Kerberos

    Short Description: Step by Step Recipe for Securing Kafka with Kerberos. Article I found it is a lit ...

  9. MongoDB Sharding分片配置

    Ps:mongod是mongodb实例,mongos被默认为为mongodb sharding的路由实例. 本文使用的mongodb版本为3.2.9,因此参考网址为:https://docs.mong ...

随机推荐

  1. Configure xterm Fonts and Colors for Your Eyeball

    https://wiki.mpich.org/mpich/index.php/Configure_xterm_Fonts_and_Colors_for_Your_Eyeball Screenshot ...

  2. OC特有语法:分类category,给NSString增加方法计算字符串中数字的个数

    1:分类的使用场景:想对一个类,扩充一些功能,而又不改变原来类的模型,也不用继承,这时OC中的特有语法:分类可以做到: 当然分类也是一个类,也需要声明和实现,声明在.h文件中,实现在.m文件中,格式如 ...

  3. android 自定义ratingbar 图片显示不全的解决方案

    在res/style中自定义评分条: <!-- 自定义评分条 --> <style name="roomRatingBar" parent="@andr ...

  4. maven学习心得整理

    maven的学习心得 已经接触了maven项目有一段时间了,开始时仅仅会使用,在使用中发现了它的强大和方便,于是决心研究一下: 首先,普及一下maven参数: -D:传入属性参数 -P:使用POM中指 ...

  5. C# File

    http://msdn.microsoft.com/zh-cn/library/system.io.file(v=vs.110).aspx using System; using System.IO; ...

  6. 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。

    // ConsoleApplication1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> ...

  7. java和javascript真的有关系=。=

    相同点:1. 内存管理,两者都采用GC来对内存进行回收.因此Java与javascript的内存泄露情况十分相似. 2. 代码编译为机器码后由中间件执行:Java使用前会编译为字节码后由JVM执行,V ...

  8. window dos 设置网络

    ->netsh ->pushd interface ip ->set address "本地连接" static 192.168.1.2 255.255.255. ...

  9. 前端学习笔记汇总(之merge方法)

    学习笔记 关于Jquery的merge方法 话不多说,先上图 使用jquery时,其智能提示如上,大概意思就是合并first和second两个数组,得到的结果是first+(second去重后的结果) ...

  10. c#中HttpWebRequest使用Proxy实现指定IP的域名请求

    原文:http://www.cnblogs.com/greenerycn/archive/2010/04/11/httpwebreques_host_modify_By_set_proxy.html ...