乐趣区

如何搭建-MongoDB-分片无主从

首先,在运行分片的服务器上将 MongoDB 准备好。我们需要规划:

  1. 一台配置服务器,用来保存分片信息以及协调数据存储;
  2. 若干台分片服务器,用来保存数据本身;
  3. 一个 broker 服务器,用来执行分片操作,同时也是客户端的访问入口。

1. 启动分片服务器

此时我们先将每个分片服务器独立运行起来,同时加上 --shardsvr 参数表名它是一台用来存储分片数据的实例。

./mongod --shardsvr --port 10001 --dbpath /data/shard/s1 --fork --logpath /data/shard/log/s1.log --directoryperdb
./mongod --shardsvr --port 10002 --dbpath /data/shard/s2 --fork --logpath /data/shard/log/s2.log --directoryperdb
./mongod --shardsvr --port 10003 --dbpath /data/shard/s3 --fork --logpath /data/shard/log/s3.log --directoryperdb
./mongod --shardsvr --port 10004 --dbpath /data/shard/s4 --fork --logpath /data/shard/log/s4.log --directoryperdb

2. 启动配置服务器

然后我们将配置服务器开启。

 ./mongod --configsvr --port 20000 --dbpath /data/shard/conf --fork --logpath /data/shard/log/conf.log --directoryperdb

3. 启动 broker 服务器

继续将 broker 开启,此时需要在 --configdb 参数中将其指向配置服务器。

 ./mongos --port 30000 --configdb 192.168.39.241:20000 --fork --logpath /data/shard/log/route.log

至此,所有的服务器都已经开启,但是它们之间还是处于相互独立的状态。我们需要用客户端登入管理服务,将分片服务器加入进来。

4. 添加分片服务器(登入 broker,数据库 admin)

db.runCommand({ addshard : "192.168.39.241:10001"} );
db.runCommand({ addshard : "192.168.39.241:10002"} );
db.runCommand({ addshard : "192.168.39.241:10003"} );
db.runCommand({ addshard : "192.168.39.241:10004"} );

5. 对数据库启用分片

db.adminCommand({enableSharding:"content"});

6. 对集合启用分片

 db.adminCommand({shardCollection:"content.content", key:{"_id":1}});

删除分片

如果我们需要下掉某台分片服务器,那么要执行相应的命令,MongoDB 会自动将上面的数据移到其他分片。这是一个比较长时间的过程,此间数据库操作效率也会受到影响。

db.adminCommand({ listShards: 1} )
db.adminCommand({ removeShard: "mongodb0"} )

// 删除进度状态
use config
db.shards.update({},{$unset:{draining:true}}, false, true)
退出移动版