搭建mongodb集群(副本集+分片)

完整的搭建mongodb集群(副本集+分片)的例子。。。

准备四台机器,分别是bluejoe1,bluejoe2,bluejoe3,以及bluejoe0

副本集及分片策略确定如下:

  • 将创建3个副本集,命名为shard1,shard2,shard3;
  • 以上3个副本集作为3个分片;
  • 每个副本集包含2个副本(主、辅);
  • 副本分开存储,即shard1存在bluejoe1和bluejoe2上各一份。。。以此类推
  • 将创建3个配置库实例,一台机器一个
  • bluejoe0上配置一个mongos(mongos一般可以配置在应用端)
画了一个图:



具体操作步骤如下:
  1. 在bluejoe1上下载mongdb安装包;
  2. 解压至/usr/local/mongdb(注意改名);
  3. 创建data/node1和data/node2目录,启动2个mongod实例,注意它们分别是shard1-1和shard3-2:
    /usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data/node1 --port 10001 --replSet shard1/bluejoe2:10002 --logpath=/usr/local/mongodb/log/node1.log
    /usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data/node2 --port 10002 --replSet shard3/bluejoe3:10001 --logpath=/usr/local/mongodb/log/node2.log
  4. 初始化副本
    db.runCommand(
    	{
    		"replSetInitiate":
    		{
    			"_id":"shard1",
    			"members":
    			[
    				{
    					"_id":1,
    					"host":"bluejoe1:10001"
    				},
    				{
    					"_id":2,
    					"host":"bluejoe2:10002"
    				}
    			]
    		}
    	})
    	

  5. 创建data/configdb,启动配置库实例:
    /usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data/configdb --port 20000 --logpath=/usr/local/mongodb/log/configdb.log
  6. 使用scp命令,将mongodb目录复制至bluejoe2和bluejoe3机器,并按照第3、4步启动每台机器上的3个实例,注意副本也要初始化;
  7. 到现在为止应该有9个mongd实例,其中3个为配置库实例,剩下的属于3个副本集;
  8. 接下来管理分片,在bluejoe0上启动mongs:
    /usr/local/mongodb/bin/mongos --port 30000 --configdb bluejoe1:20000,bluejoe2:20000,bluejoe3:20000
  9. 连接上mongos,配置分片信息:
    mongos> use admin
    switched to db admin
    	
    db.runCommand({"addShard":"shard1/bluejoe1:10001"})
    db.runCommand({"addShard":"shard2/bluejoe2:10001"})
    db.runCommand({"addShard":"shard3/bluejoe3:10001"})
  10. 对库开启分片功能:
    mongos> use admin
    switched to db admin
    mongos> db.runCommand({"enablesharding":"test"})
    { "ok" : 1 }
    mongos> db.runCommand({"shardcollection":"test.person","key":{"name":1}})
    { "collectionsharded" : "test.person", "ok" : 1 }


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。