MongoDB Shareding部署

标签: 数据库应用 MongoDB | 发表时间:2014-10-16 06:00 | 作者:Litrin
出处:http://www.litrin.net

几年前写过 MongoDB的Sharding和replication。其实现在看起来Replication还是可以,Sharding的部分有点过于简单了。于是现在重新补充一下,至少也更新下,毕竟现在的MongoDB已经到了2.6,于当时的2.2还是有所差异的。

正常的情况下,应该是有6台主机实现一个比较像样的MongoDB Sharding集群,它们分别是mongos /router1台,config 3台,shard 2台。具体的拓扑可以参考官方的下图。不过这次还是在一台主机上实现,主机还是ubuntu,预先apt-get方式安装了mongodb,但关闭了默认的mongodb service 。

mongoDB-toplogic

首先是先做config节点。config节点主要是保存了整个集群中的数据配置信息——毋庸置疑的重要!建议是采用高可用的靠谱机器来实现。我的建议是采用素数个实体作为集群的config server,这样,一旦出现数据差异,不会出现类似50:50的尴尬局面。

建立多个config server所属的数据目录和mongDB进程的日志目录。

root@MongoDB:~# mkdir conf log
root@MongoDB:~# cd conf/
root@MongoDB:~/conf# mkdir 17017 17018 17019
root@MongoDB:~/conf# ls
17017 17018 17019
root@MongoDB:~/conf# cd ..

启动configserver进程,这里3个config server 绑定了17017 17018 17019 3个port

 root@MongoDB:~# mongod --configsvr --dbpath conf/17017 --port 17017 --fork --logpath log/17017
...
root@MongoDB:~#mongod --configsvr --dbpath conf/17018 --port 17018 --fork --logpath log/17018
...
root@MongoDB:~#mongod --configsvr --dbpath conf/17019 --port 17019 --fork --logpath log/17019

Config server准备完毕,下一个就是shard节点了。

建目录的过程

root@MongoDB:~# mkdir shard
root@MongoDB:~# cd shard
root@MongoDB:~/shard# mkdir 37017 37018 37019 37020
root@MongoDB:~/shard# ls
37017 37018 37019 37020
root@MongoDB:~/shard# cd ..

启动的过程

 root@MongoDB:~# mongod --shardsvr --dbpath shard/37017 --port 37017 --fork --logpath log/37017.log
...
root@MongoDB:~# mongod --shardsvr --dbpath shard/37018 --port 37018 --fork --logpath log/37018.log
...
root@MongoDB:~# mongod --shardsvr --dbpath shard/37019 --port 37019 --fork --logpath log/37019.log
...
root@MongoDB:~# mongod --shardsvr --dbpath shard/37020 --port 37020 --fork --logpath log/37020.log
...

不出意料的话,这个时候你应该有了3个config serve实体和4个shard server实体。剩下的就是启动mongos服务了。

mongos --configdb localhost:17017,localhost:17018 ,localhost:17019 --fork --logpath log/monogs.log

到这里,外部的配置已经完成,剩下的就是mongoDB内部的配置了。其实这个部分,我已经写好了一个bash,如果你仅仅打算起一个本地的cluster玩玩的话可以建好必要的目录结构后直接执行这个脚本就可以了。

#!/bin/bash
uri=''
for port in `ls conf`
do
mongod --configsvr --dbpath conf/$port --port $port --fork --logpath log/$port.log >> /dev/null
echo "Config server started on port $port"
uri="$uri,localhost:$port"
done

for port in `ls shard`
do
mongod --shardsvr --dbpath shard/$port --port $port --fork --logpath log/$port.log >> /dev/null
echo "Shard server started on port $port"
done

uri=`echo $uri | cut -c2-`
mongos --configdb $uri --fork --logpath log/monogs.log >> /dev/null

echo All Done!

相关 [mongodb shareding] 推荐:

MongoDB Shareding部署

- - 开源小站
几年前写过 MongoDB的Sharding和replication. 其实现在看起来Replication还是可以,Sharding的部分有点过于简单了. 于是现在重新补充一下,至少也更新下,毕竟现在的MongoDB已经到了2.6,于当时的2.2还是有所差异的. 正常的情况下,应该是有6台主机实现一个比较像样的MongoDB Sharding集群,它们分别是mongos /router1台,config 3台,shard 2台.

[mongodb] java操作mongodb

- - 数据库 - ITeye博客
           //实例化Mongo对象,连接27017端口.                               //连接名为yourdb的数据库,假如数据库不存在的话,mongodb会自动建立. //从Mongodb中获得名为yourColleection的数据集合,如果该数据集合不存在,Mongodb会为其新建立.

【MongoDB】MongoDB之优化器Profiler

- - CSDN博客数据库推荐文章
在mysql数据库中,慢查询日志经常作为优化数据库的依据, mongodb中依然有类似的功能. Mongodb自带的profiler,可以方便地记录所有耗时的操作,以便于调优;. 一、开始profiler功能. 开启profier功能有两种:. 第一种就是直接在启动参数里面进行设置,就在茄冬mongodb时候添加-profile=级别.

夜说mongodb

- Lianhui Wang - NoSQLFan
前两天本站刚刚分享了wordnik使用MongoDB经验的文章:《Wordnik 的 MongoDB 使用经历》,今天又看到一位朋友对这方面做的总结,分享在这里,供大家参考. 赋闲以后很长没有更新博客了,说忙完全是借口,多半因为没有兴致所致. 今天凌晨比赛多多,趁着比赛的前奏和间隙,遂浏览些技术文章.

MongoDB与内存

- 高春辉 - 火丁笔记
但凡初次接触MongoDB的人,无不惊讶于它对内存的贪得无厌,至于个中缘由,我先讲讲Linux是如何管理内存的,再说说MongoDB是如何使用内存的,答案自然就清楚了. 据说带着问题学习更有效,那就先看一个MongoDB服务器的top命令结果:. 这台MongoDB服务器有没有性能问题. 先讲讲Linux是如何管理内存的.

白话MongoDB(一)

- Ease - 江边潮未尽,枫红一季秋
按照官方的说法,MongoDB是一种可扩展的高性能的开源的面向文档(document-oriented )的数据库,采用C++开发. 注意mongo不是mango(芒果),这个词是从humongous中截取出来的,其野心不言而明,直指海量数据存储. 和其他很多NoSQL不太一样,MongoDB背后有一个专门的商业公司在提供支持和推广,有点类似MySQL AB的模式.

MongoDB 索引

- - 博客园_首页
索引是用来加快查询的,数据库索引与数据的索引类似,有了索引就不需要翻遍整本书,数据库可以直接在索引中查找,. 使得查询速度很快,在索引中找到条目后,就可以直接跳转到目标文档的位置.. 要掌握如何为查询配置最佳索引会有些难度.. MongoDB索引几乎和关系型数据库的索引一样.绝大数优化关系型数据库索引的技巧同样适用于MongoDB..

MongoDB sql操作

- - 数据库 - ITeye博客
1.  基本查询:. 下面的示例等同于SQL语句的where name = "stephen" and age = 35.      --返回指定的文档键值对. 下面的示例将只是返回name和age键值对.      --指定不返回的文档键值对. 下面的示例将返回除name之外的所有键值对.

MongoDB REST Api介绍

- peigen - NoSQLFan
MongoDB默认会开启一个HTTP协议的端口提供REST的服务,这个端口是你Server端口加上1000,比如你的Server端口为27017,那么这个HTTP端口就是28017,默认的HTTP端口功能是有限的,你可以通过添加–rest参数启动更多功能. 下面是在这个端口通过其RESTFul 的API操作MongoDB数据的几个例子,来源是MongoDB官方文档.