设为首页 收藏本站
查看: 914|回复: 0

[经验分享] 配置MongoDB集群分片

[复制链接]

尚未签到

发表于 2015-7-10 08:44:41 | 显示全部楼层 |阅读模式
  转载自http://my.oschina.net/zhzhenqin/blog/97268
  现在网上很多教程都在讲MongoDB分片配置,但大多都没有经过实战,胡乱转载。而且用的MongoDB版本不同各种配置眼花寮乱,让入门者莫衷一是。
  最近我也做了MongoDB分片,贴出自己的配置。并且把需要注意的问题和大伙聊聊,不恰当的地方希望大家指正。 也同时希望让后来者能绕过这些问题。
  正式环境为了保证数据安全都要进行备份的,关于分片复制请见alibaba教程:http://www.taobaodba.com/html/525_525.html
  我配置的集群是测试用的,没有复制。只是简单的分片存储数据进行测试。在测试的时候又分片,又复制,那么多机器也麻烦。这一点网上的很多例子都是错误的,为此我也花了很多时间。
  我配置完成后的结构图为:
DSC0000.png
  我的Mongo版本为:mongodb-linux-x86_64-2.0.8,计算机为普通Pc。
  在这里我要特别说明:
  1.大数据情况下最好是64位机器,32位机器不能创建大于2GB的单个文件。 小数据量无所谓
  2.集群中的每台计算机的系统最好都是一样的,不要32位,64位搭配
        -- 我在开始做测试就是这样,2台64,2台32.当注入300W左右的数据,索引大于3-4G时32位机器出错了,32位系统上不能创建大于2GB的单个文件。整个集群瘫痪,我为此找了很长时间的原因
  
让我们开始吧!
  mongo从下载后解压后的目录结构如下:我们视安装目录为:${MONGO_INSTALL}
DSC0001.png
  先在第一台计算机上在${MONGO_INSTALL}下分别执行:



1mkdir -p /data/shard11



1bin/mongod -shardsvr -port 27017 -dbpath=/data/shard11/ -logpath=/data/shard11.log --fork
  再在另一台机器上也分别执行:



1mkdir -p /data/shard12



1bin/mongod -shardsvr -port 27017 -dbpath=/data/shard12/ -logpath=/data/shard12.log --fork
  正常情况下你能启动这两个节点的。如果启动不成功。那就是mkdir -p /data/shard11没有成功创建。
  在Ubuntu系统下你需要root权限:



1sudo mkdir /data/shard11

2sudo chmod -R 777 /data/shard11
  然后启动。在终端中分别执行检查Mongod进程是否成功启动:



1ps -ef |grep mongod
  如果任何一台没有启动成功,重复上面的,直到找出原因。
  OK,现在我们成功的分别在2太计算机上启动了1个mongod实例,mongod是真正存储数据的进程。进群中还需要一个配置服务器,用来存储在各个节点中共享的配置信息,存储数据的元信息[METADATA],也如上面我结构图中config.
  config不会占用太多资源的。我们在其中任何一台上面启动Mono的Config,shell如:



1#config也是存储少量数据的,不要忘了给它创建存储数据的文件夹

2mkdir /data/config



1bin/mongod -configsvr -dbpath=/data/config -port 20000 -logpath=/data/config.log --fork
  也许你已经注意到,在2台shard的启动参数中加了-shardsvr,在配置实例中加了-configsvr。 mongo就是这样进行区分的。当然复制的配置应该是: -replSet setName。 setName就是复制集群的别名。
  当以上都启动成功,我们可以开启mongos服务了。在任何一台机器上执行:



1#mongos进程不需要dbpath,但是需要logpath

2#mongos启动参数中,chunkSize这一项是用来指定chunk的大小的,单位是MB,默认大小为200MB

3bin/mongos -configdb ip:20000 -port 30000 -chunkSize 512 -logpath=/data/mongos.log --fork
  请注意上面的IP,这个IP应该是你启动config的那台机器ip和port。
  如果顺利的话,你也应该能轻松的启动mongos进程的。可以执行查看:ps -ef |grep mongos
  现在就剩下配置了。让mongos进程知道哪些机器是需要加入到分片的。在任何一台机器上执行[mongosip为启动mongos服务的机器IP]:



1bin/mongo ip:30000/admin
  注意后边的admin,配置分片必须要链接admin集合。链接成功后你就可以把分片加入集群:



1db.runCommand({"addshard":"192.168.1.23:27017"})

2db.runCommand({"addshard":"192.168.1.22:27017"})
  上边的两个ip都是第一次启动的shard的ip地址,不是config 。
  如果顺利,你应该能看到{ ”ok“ : 1}的字样。这样你就成功的把两个shard加入了分片。现在你还需要制定分片的规则。



1db.runCommand({"shardcollection":"dbname.tablename", "key":{"primaryKey":1}})
  最后你还需要激活分片的设置。



1db.runCommand({"enablesharding": "ndmongo"})
  OK,走到最后你应该成功的配置了分片。
  现在你需要在刚才指定dbname和tablename插入一定数量的数据。测试集群:



1db.printShardingStatus()
  你能看到类似如下的输出[shard中有2台机器,并且databases也存在你的dbname的partitioned为true的信息]:
DSC0002.png
  现在你应该能体验自己的分片了。
  如果你的机器是64位的,你用我的配置应该很容易的就成功了。如果你用的32位的,你应该还要注意在启动shard的时候加上:
--journal
  因为64位默认启动开启journal的,32位没有。至于journal什么作用我也不太清楚,读者自己google吧。
  因为我开始测试时用的机器32,64都有,出现了这么多烦人的问题。 希望其他跟我一样的人不要重蹈复辙。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-85006-1-1.html 上篇帖子: MongoDB循序渐进之[特性]——介绍 下篇帖子: 10gen发布MongoDB增量备份服务
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表