ngoDB/data/mongos.log
logappend = true
fork = true
port = 30000
chunkSize = 100
然后是启动脚本文件
先写好每个server的启动脚本
在每个server中都有一个serverX_start.sh(X表示1~6),用来启动该机器上的进程。
server2、4、6还有一个serverX_start_mongos.sh脚本,因为route server需要等到所有config server启动了之后才能启动。因为找不到config server 的话route server就不知道从哪里读取集群配置了。
以server1为例:
#server1_start.sh
#!/bin/bash
/erpfs/mongoDB/bin/mongod -f /erpfs/mongoDB/config1.conf
/erpfs/mongoDB/bin/mongod -f /erpfs/mongoDB/shard11.conf
/erpfs/mongoDB/bin/mongod -f /erpfs/mongoDB/rep32.conf
/erpfs/mongoDB/bin/mongod -f /erpfs/mongoDB/rep33.conf
选项-f(或--config)代表执行配置文件内容。
server2中用mongos的启动脚本,其实就是一句。
#server2_start_mongos.sh
#!/bin/bash
/erpfs/mongoDB/bin/mongos -f /erpfs/mongoDB/mongos.conf
进程都启动之后,route server已经跟config server连接上,但是所有的shard server都还是处于游离状态。我们要将他们加入到集群中,在加入集群之前还有一件事情,就是初始化复制集。
任意一台server上使用bin目录下的mongo连接到某一复制集的其中一个shard server上。
例如:/erpfs/mongoDB/bin/mongo 10.50.9.12:27017
就连接上了shard11了
执行初始化复制集代码
www.2cto.com
cfg={_id:'shard1',members:[{_id:1,host:'10.50.9.12:27017'},{_id:2,host:'10.50.9.13:27018'},{_id:3,host:'10.50.9.13:27019'}]};
rs.initiate(cfg);
看到 'OK':1字样则初始化成功。
然后exit退出。
接着重复上述步骤初始化复制集shard2~6
初始化复制集完成之后就是将每个复制集加入到集群当中。
使用bin目录下的mongo连接到任意一个route server,进入admin
数据库(命令:use admin)
然后执行下列代码增加分片的复制集
www.2cto.com
db.runCommand({addshard:'shard1/10.50.9.12:27017,10.50.9.13:27018,10.50.9.13:27019'});
db.runCommand({addshard:'shard2/10.50.9.13:27017,10.50.9.14:27018,10.50.9.14:27019'});
db.runCommand({addshard:'shard3/10.50.9.14:27017,10.50.9.12:27018,10.50.9.12:27019'});
db.runCommand({addshard:'shard4/10.50.9.15:27017,10.50.9.16:27018,10.50.9.16:27019'});
db.runCommand({addshard:'shard5/10.50.9.16:27017,10.50.9.17:27018,10.50.9.17:27019'});
db.runCommand({addshard:'shard6/10.50.9.17:27017,10.50.9.15:27018,10.50.9.15:27019'});
执行命令db.runCommand({enablesharding:'test'})
这样test
数据库就可以分片了,MongodDB默认连接上的是test数据库。
如果想要使数据库中的某个集合可以分片存储,例如test集合,可以使用db.runCommand({shardcollection:'test.test',key:{_id:1}})
key是片键,是分片的依据,这里使用_id字段作为片键。
所谓片键,例如某个片键的值的范围是a~z,则可能某一分片存储a~h,某一分片存储i~n,某一分片存储o~z。
为了不用每次启动MongoDB的时候都人为执行上述初始化复制集和加入分片的操作,可以将上述命令写成js脚本,MongoDB可以执行js脚本。
只要启动bin目录下的mongo时加入参数
mongo [ip][:port] [*.js]
www.2cto.com
然后将所有执行js脚本的命令写入shell脚本
#!/bin/bash
/erpfs/mongoDB/bin/mongo 10.50.9.12:27017 /erpfs/mongoDB/shard1Initiate.js
/erpfs/mongoDB/bin/mongo 10.50.9.13:27017 /erpfs/mongoDB/shard1Initiate.js
/erpfs/mongoDB/bin/mongo 10.50.9.14:27017 /erpfs/mongoDB/shard1Initiate.js
/erpfs/mongoDB/bin/mongo 10.50.9.15:27017 /erpfs/mongoDB/shard1Initiate.js
/erpfs/mongoDB/bin/mongo 10.50.9.16:27017 /erpfs/mongoDB/shard1Initiate.js
/erpfs/mongoDB/bin/mongo 10.50.9.17:27017 /erpfs/mongoDB/shard1Initiate.js
/erpfs/mongoDB/bin/mongo 10.50.9.13:30000/admin /erpfs/mongoDB/addshards.js
这样只要一执行启动脚本,就自动完成启动server进程,初始化复制集,加入分片的操作。
停止MongoDB
要停止MongoDB的方法有几种,只要MongoDB接受到结束信号就会迅速停止。
可以使用 kill -2来停止MongoDB