Centos6.x用Mongodb3.4进行Sharding

参考官方连接:

    https://docs.mongodb.com/v3.4/

    https://docs.mongodb.com/manual/tutorial/manage-mongodb-processes/

1. 首先下载 3.4版的Mongodb

      wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.4.21.tgz

      注: 下文中所有的命令,均是下载解压好后在对应的bin目录下执行

2. 准备3台物理机器  ServerA (192.168.5.13)  ServerB(192.168.5.12)   ServerC(192.168.5.14)

     在ServerA  创建文件夹  /data/shard1-1    /data/shard2-1   /data/config

      在ServerB  创建文件夹 /data/shard1-2   /data/shard2-2   /data/config

      在ServerC   创建文件夹  /data/shard1-3   /data/shard2-3   /data/config

       注:该篇教程,启动两个Shard,下文描述分别命名为 Shard1和Shard2

3. 启动 Shard1,在ServerA, ServerB, ServerC 进入mongodb对应可执行文件目录,执行下列操作

  # 在ServerA启动 Shard1-1:

./mongod --fork --shardsvr --bind_ip 0.0.0.0 --port 27018 --dbpath /data/shard1-1/ --logpath /data/shard1-1/shard1-1.log --logappend --replSet shard1 --directoryperdb

   # 在ServerB上启动 Shard1-2:

./mongod  --fork --shardsvr --bind_ip 0.0.0.0 --port 27018 --dbpath /data/shard1-2/ --logpath /data/shard1-2/shard1-2.log --logappend --replSet shard1 --directoryperdb

     # 在 ServerC上启动 Shard1-3:

./mongod  --fork --shardsvr --bind_ip 0.0.0.0 --port 27018 --dbpath /data/shard1-3/ --logpath /data/shard1-3/shard1-3.log --logappend --replSet shard1 --directoryperdb

      # 选择 ServerB(任意选择一台),用 mongo 127.0.0.1:27018 进入,输入如下: 

config={ _id:'shard1',members:[{_id:0,host:'192.168.5.12:27018',priority:2},{_id:1,host:'192.168.5.13:27018',priority:1},{_id:2,host:'192.168.5.14:27018',arbiterOnly:true}] }
rs.initiate(config)

  4. 启动 Shard2,在ServerA, ServerB, ServerC 进入mongodb对应可执行文件目录,执行下列操作

     # 在ServerA上启动 Shard2-1

./mongod --fork --shardsvr --bind_ip 0.0.0.0 --port 27019 --dbpath /data/shard2-1/ --logpath /data/shard2-1/shard2-1.log --logappend --replSet shard2 --directoryperdb

     # 在ServerB上启动 Shard2-2

./mongod --fork --shardsvr --bind_ip 0.0.0.0 --port 27019 --dbpath /data/shard2-2/ --logpath /data/shard2-2/shard2-2.log --logappend --replSet shard2 --directoryperdb

     # 在ServerC上启动  Shard2-3

./mongod --fork --shardsvr --bind_ip 0.0.0.0 --port 27019 --dbpath /data/shard2-3/ --logpath /data/shard2-3/shard2-3.log --logappend --replSet shard2 --directoryperdb

     # 选择 ServerB(任意选择一台),用 mongo 127.0.0.1:27019 进入,输入如下: 

config={ _id:'shard2',members:[{_id:0,host:'192.168.5.12:27019',priority:2},{_id:1,host:'192.168.5.13:27019',priority:1},{_id:2,host:'192.168.5.14:27019',arbiterOnly:true}] }
rs.initiate(config)

  5. 配置 ConfigServer

      在 ServerA,ServerB,ServerC 分别输入下面一行命令:

./mongod --configsvr --bind_ip 0.0.0.0 --port 20000 --dbpath /data/config/ --logpath /data/config/config.log --replSet docdetection --logappend --fork

     # 选择 ServerB(任意选择一台),用 mongo 127.0.0.1:20000 进入,输入如下: 

configdb1={ _id:'docdetection',members:[{_id:0,host:'192.168.5.14:20000',priority:3},{_id:1,host:'192.168.5.13:20000',priority:1},{_id:2,host:'192.168.5.12:20000',priority:2}] }
rs.initiate(configdb1)

   6. 在ServerA, ServerB, ServerC 分别运行  mongos 服务

./mongos --configdb docdetection/192.168.5.12:20000,192.168.5.13:20000,192.168.5.14:20000 --bind_ip 0.0.0.0 --port 27017 --logpath /data/mongos.log --logappend --fork

   7. 选择 ServerB(任意选择一台),用 mongo进入  开始配置分片  输入如下命令

use admin;
db.runCommand({addshard:"shard1/192.168.5.12:27018,192.168.5.13:27018,192.168.5.14:27018"})
db.runCommand({addshard:"shard2/192.168.5.12:27019,192.168.5.13:27019,192.168.5.14:27019"})

   8. 测试

     # 设置分片chunk大小    设置1M是为了测试,否则要插入大量数据才能分片

use config
db.settings.save({ "_id" : "chunksize", "value" : 1 })

     # 指定test分片生效

sh.enableSharding("test")

     # 创建索引

use test
db.users.createIndex({user_id : 1})

     # 指定数据库里需要分片的集合和片键

use admin
sh.shardCollection("test.users", {user_id: 1})

     # 插入数据

use test;
for (var i = 1; i <=10000; i++){
db.users.save({user_id: i, username: "user"+i});
}

     # 查看分片结果

sh.status(true)

 

     注: 这样分片的好处在于,如果你一次不成功   只要把ServerA,ServerB,ServerC对应的目录全部删除,就可以从头再来试一遍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值