mongodb单机分片的例子

1、分片实际情况例子:

Shard Server 1:27020
Shard Server 2:27021
Shard Server 3:27022
Shard Server 4:27023
Config Server :27100
Route Process:40000

创建分片数据目录:

mkdir -p /mongoDB/shard/s0
mkdir -p /mongoDB/shard/s1
mkdir -p /mongoDB/shard/s2
mkdir -p /mongoDB/shard/s3

创建分片服务器日志目录:建立4个日志目录

mkdir -p /mongoDB/shard/log/s0
mkdir -p /mongoDB/shard/log/s1
mkdir -p /mongoDB/shard/log/s2
mkdir -p /mongoDB/shard/log/s3

启动分片进程,启动分片数据库

mongod --port 27020 --dbpath=/mongoDB/shard/s0 --logpath=/mongoDB/shard/log/s0/s0.log --logappend --fork
mongod --port 27021 --dbpath=/mongoDB/shard/s1 --logpath=/mongoDB/shard/log/s1/s1.log --logappend --fork
mongod --port 27022 --dbpath=/mongoDB/shard/s2 --logpath=/mongoDB/shard/log/s2/s2.log --logappend --fork
mongod --port 27023 --dbpath=/mongoDB/shard/s3 --logpath=/mongoDB/shard/log/s3/s3.log --logappend --fork

创建配置目录

mkdir -p /mongoDB/shard/config

启动配置服务器,可以启动三台,保证安全

mongod --port 27100 --dbpath=/mongoDB/shard/config --logpath=/mongoDB/shard/log/config.log --logappend --fork

启动路由,3.4以上版本必须是复制集模式,否则报错,所以本例子必须做成3.2版本

mongos --port 40000 --configdb localhost:27100 --fork --logpath=/mongoDB/shard/log/route.log
mongos --port 40001 --configdb localhost:27100 --fork --logpath=/mongoDB/shard/log/route1.log
mongos --port 40000 --configdb localhost:27100 --fork --logpath=/www/mongoDB/shard/log/route.log --chunkSize 500

登陆mongos

mongo --port 40000
use admin

下面命令等同

sh.addShard("localhost:27020")
sh.addShard("localhost:27021")
sh.addShard("localhost:27022")
sh.addShard("localhost:27023")

db.runCommand({ addshard:"localhost:27020" })
db.runCommand({ addshard:"localhost:27021" })
db.runCommand({ addshard:"localhost:27022" })
db.runCommand({ addshard:"localhost:27023" })

db.runCommand({"enablesharding":"test_shard" }) #设置分片存储的数据库
db.runCommand({"enablesharding":"test" }) #设置分片存储的数据库

做哈希分片,必须先建立哈希索引

db.test.createIndex({"_id": 1});
db.test.createIndex({"_id": "hashed"});

哈希分片

db.runCommand({ shardcollection: "test.test", key: {"_id": "hashed"}});

db.runCommand({ shardcollection: "test.log", key: { id:1,time:1}})

测试上线

for(var i=0;i<50000;i++){ db.test.insert({name:'test'+i}) };

1、检查库是否为分片,进入mongos,可以看到有几个分片

use admin
sh.status();
db.printShardingStatus();

mongs刷新过时信息

db.adminCommand({"flushRouterConfig":1})

分片信息得查询和管理,登陆mongos或者配置集都可以

use config
db.shards.find()

迁移分片,从2021端口迁移到端口2023

停止2021、2023分片

pgrep mongo -a
kill 9495 9496

迁移分片数据,把2021的数据全部拷贝到2023

cp -r /mongoDB/shard/s1/* /mongoDB/shard/s3

修改配置库(如果多个,需要都修改),原来2021修改为2023

db.shards.find();

{ "_id" : "shard0000", "host" : "localhost:27020" }
{ "_id" : "shard0001", "host" : "localhost:27021" }
{ "_id" : "shard0002", "host" : "localhost:27022" }

db.shards.update({"_id":"shard0001"},{$set:{"host" : "localhost:27023"}})

特别注意,复制集,新增加节点会变other,在主配置服务器节点上必须要做下面命令:在添加和移除的时候,只能在PRIMARY节点类型上操作

use admin
rs.status()
rs.add("10.20.222.63:10001")

rs.remove("10.20.0.44:10001")

启动2023服务器,原来没数据,现在应该有一条,检查没问题

mongod --port 27023 --dbpath=/mongoDB/shard/s3 --logpath=/mongoDB/shard/log/s3.log --logappend --fork
mongo --port 27023
use test_shard
db.test.find();

启动配置服务器和mongos

mongod --port 27100 --dbpath=/mongoDB/shard/config --logpath=/mongoDB/shard/log/config.log --logappend --fork
mongos --port 40000 --configdb localhost:27100 --fork --logpath=/mongoDB/shard/log/route.log

检查数据是否存在

mongo --port 40000
db.test.find({"_id" : ObjectId("5ac9d47b8d6a9994ad2fd956")});

运行,mongs会显示 "msg" : "isdbgrid"

db.isMaster()

你可能感兴趣的:(mongodb单机分片的例子)