本篇讲述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. MVC的Ajax的异步请求

    MVC的Ajax的异步请求 在这里小写一下MVC的异步请求的一点小总结. 个人认为是有两种的,一种就是跟webform一样的,依旧是使用jQuery的$.get()方法,只是请求地址不同,webfor ...

  2. python SendMail 发送邮件

    最近在学习python 时,用到了发送邮件的操作,通过整理总结如下: 1.普通文本邮件 普通文本邮件发送的实现,关键是要将MIMEText中_subtype设置为plain,首先导入smtplib和m ...

  3. hadoop 蓄水池抽样 分布式抽样

    #!/usr/bin/env python # -*- coding=utf8 -*- import sys import os import random #input split 1565 #&g ...

  4. angular入门系列教程4

    主题: 本篇主要目的就是继续完善home页下的index子页面的内容,处理一个列表,进行增删改查过滤等操作. 效果图: 细节: 主要的更改有两个,一个是修改模板index.html,还有就是增加控制器 ...

  5. 关于asp.net mvc4 在IE8下 导出excel失败的解决办法

    在使用FileResult向浏览器输出文件时(pdf,excel等),通常这样做: byte[] fileContents = Encoding.UTF8.GetBytes(sbHtml.ToStri ...

  6. SDUT2241计算组合数C(n,m)(组合数)

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2241 这个题的代码适应性也挺强,但这个题倒不适 ...

  7. POJ 1125 Stockbroker Grapevine(floyd)

    http://poj.org/problem?id=1125 题意 : 就是说想要在股票经纪人中传播谣言,先告诉一个人,然后让他传播给其他所有的经纪人,需要输出的是从谁开始传播需要的时间最短,输出这个 ...

  8. Ubuntu环境下Hadoop1.2.1, HBase0.94.25, nutch2.2.1各个配置文件一览

    /×××××××××××××××××××××××××××××××××××××××××/ Author:xxx0624 HomePage:http://www.cnblogs.com/xxx0624/ ...

  9. 前端H5开发工具 Adobe Edge

    http://www.cnblogs.com/adobeedge/ http://my.oschina.net/duolus/blog/212801?fromerr=WAcqscJl

  10. nohup 程序名 & (使程序推到后台运行,即使终端关闭,该程序依然运行)

    IshallbeThatIshallbe:~ iamthat$ ps -ef |grep ping 502 450 1 0 9:30PM ?? 0:00.05 ping www.baidu.com 5 ...