分片服务器 | 对应配置文件 | 服务端口设定 |
---|---|---|
配置服务器 | mongod1.conf | 37017 |
分片服务器1 | mongod2.conf | 47017 |
分片服务器2 | mongod3.conf | 47018 |
分片服务器3 | mongod4.conf | 47019 |
路由服务器 | mongod.conf | 27017 |
MongoDB2.3版本可在MongoDB官方网站下载:https://www.mongodb.com/
yum install openssl-devel -y
tar zxvf mongdb-linux-x86_64-3.2.1.tgz -C /opt
mv mongodb-linux-x86_64-3.2.1/ /usr/local/mongodb
mkdir -p /data/mongodb/mongodb{1,2,3,4,5}
mkdir /data/mongodb/logs
touch /data/mongodb/logs/mongodb{1,2,3,4,5}.log
chmod -R 777 /data/mongodb/logs/*.log
ulimit -n 25000
ulimit -u 25000
创建每个节点配置文件
vim /etc/mongod1.conf
port=37017 //服务端口号
dbpath=/data/mongodb/mongodb1 //工作目录
logpath=/data/mongodb/logs/mongodb1.log //日志文件位置
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
configsvr=true //设置为配置服务器
sysctl -w vm.zone_reclaim_mode=0
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
ln -s /usr/local/mongodb/bin/mongo /usr/bin/mongo
ln -s /usr/local/mongodb/bin/mongod /usr/bin/mongod
vim /etc/mongodb2.conf
port=47017 //其他两个分片服务器端口分别为47018和47019
dbpath=/data/mongodb/mongodb2 //工作目录也要更换
logpath=/data/mongodb/logs/mongodb2.log //日志文件也要更改
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true //设置为分片服务器功能
mongod -f mongodb1.conf
mongod -f mongodb2.conf
mongod -f mongodb3.conf
mongod -f mongodb4.conf
./mongos --port 27017 --fork --logpath=/usr/local/mongodb/bin/route.log --configdb 192.168.144.113:37017 --chunkSize 1
//客户端通过27017端口访问,工作模式为fork,日志文件位置及配置文件位置,交给配置服务器的37017去处理调度分片服务器
2018-07-16T21:54:55.081+0800 W SHARDING [main] Running a sharded cluster with fewer than 3 config servers should only be done for testing purposes and is not recommended for production.
about to fork child process, waiting until server is ready for connections.
forked process: 3058
child process started successfully, parent exiting
mongo
mongos> show dbs
mongos> sh.status() //此时查看shards下为空,没有分片服务器
mongos> sh.addShard("192.168.144.113:47017") //添加分片服务器
mongos> sh.addShard("192.168.144.113:47018")
mongos> sh.status() //再次查看shards下有了分片服务器
当路由服务器可以找到分片服务器后,并不能将数据存储在不同的分片服务器中,需要开启此功能才可以。
mongos> use kgc //创建数据库
mongos> for(var i=1;i<=10000;i++)db.users.insert({"id":i,"name":"jack"+i}) //创建一万条数据
mongos> sh.status() //查看数据库分片信息
databases:
{ "_id" : "kgc", "primary" : "shard0000", "partitioned" : false } //当看到false时表示分片存储功能未开启
mongos> db.users.createIndex({"id":1}) //对users集合创建索引
mongos> sh.shardCollection("kgc.users",{"id":1}) //集合分片
mongos> sh.status()
mongos> sh.addShardTag("shard0000","first")
mongos> sh.addShardTag("shard0001","second") //添加标签
mongos> sh.removeShardTag("shard0000","sales01") //删除标签
mongo --port 37017
configsvr> use config //配置数据库
configsvr> show collections
....
collections //集合信息
chunks //分片节点信息
databases //数据库信息
....
configsvr> db.chunks.findOne()
configsvr> db.collections.find()
configsvr> db.databases.find()
动态添加分片服务器,自动可以平均分片存储
mongod -f mongodb4.conf
mongo //进入路由服务器
mongos> sh.addShard("192.168.144.113:47019") //添加分片服务器
mongos> sh.status() //查看状态
chunks:
shard0000 4
shard0001 5
shard0002 2
如图:
mongos> use admin
mongos> db.runCommand({"removeshard":"192.168.144.113:47019"})
MongoDB分片群集(实现分片服务启用、分片服务管理、单点故障模拟)
原文:http://blog.51cto.com/13659253/2146967