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