无论oracle还是mysql数据库都有分区的概念,即同一张表物理上不在同一台机器上,有效缓解了表都集中存在一台机器的压力。当然,mongodb也有类似的机制,即是分片。具体理论知识大家可以参考网上文档,我这里只记录下具体操作步骤
参考网络上一个图。我选用的是2个副本集+1个仲裁。实际上我这里分片集群需要3个mongos,3个config server,数据分片3个shard server,对应着还有3个副本,3个仲裁节点,总共需要15个实例。因为我资源确实紧张,又不想影响实验效果。冥思苦想了一阵,索性在一台机器上实现得了,分给不同的实例以不同的端口就好了。
闲话少说,开始搞起!!!
1.资源划分(感觉这是最纠结的一步)
2.mongdb的安装
3.创建所需要的目录#创建所需要的目录
[root@DB mongodb]# mkdir -p mongos{1..3}/log
[root@DB mongodb]# mkdir -p config{1..3}/log
[root@DB mongodb]# mkdir -p config{1..3}/data
[root@DB mongodb]# mkdir -p shard{1..3}_{1..3}/log
[root@DB mongodb]# mkdir -p shard{1..3}_{1..3}/data
4.启动每一个配置服务器#启动配置服务器
mongod --configsvr --dbpath config1/data --port 21001 --logpath config1/log/config.log --fork
mongod --configsvr --dbpath config2/data --port 21002 --logpath config2/log/config.log --fork
mongod --configsvr --dbpath config3/data --port 21003 --logpath config3/log/config.log --fork
5.启动mongos服务器mongos --configdb 192.168.221.160:21001,192.168.221.160:21002,192.168.221.160:21003 --port 20001 --logpath mongos1/log/mongos.log --fork
mongos --configdb 192.168.221.160:21001,192.168.221.160:21002,192.168.221.160:21003 --port 20002 --logpath mongos2/log/mongos.log --fork
mongos --configdb 192.168.221.160:21001,192.168.221.160:21002,192.168.221.160:21003 --port 20003 --logpath mongos3/log/mongos.log --fork
6.启动分片的副本集
mongod --shardsvr --replSet shard1 --port 21101 --dbpath shard1_1/data --logpath shard1_1/log/shard.log --fork --nojournal --oplogSize 10
mongod --shardsvr --replSet shard1 --port 21201 --dbpath shard1_2/data --logpath shard1_2/log/shard.log --fork --nojournal --oplogSize 10
mongod --shardsvr --replSet shard1 --port 21301 --dbpath shard1_3/data --logpath shard1_3/log/shard.log --fork --nojournal --oplogSize 10
mongod --shardsvr --replSet shard2 --port 21102 --dbpath shard2_1/data --logpath shard2_1/log/shard.log --fork --nojournal --oplogSize 10
mongod --shards