Mongodb分片的简单配置
相关概念:
配置服务器(Config server) : 是一个独立的mongod进程,保存集群和分片的元数据,即各分片包含了哪些数据的信息。最先开始建立,启用日志功能。像启动普通的mongod一样启动配置服务器,指定configsvr选项。不需要太多的空间和资源,配置服务器的1KB空间相当于真是数据的200MB。保存的只是数据的分布表。当服务不可用,则变成只读,无法分块、迁移数据。
路由服务器(Router server) : 即mongos,起到一个路由的功能,供程序连接。本身不保存数据,在启动时从配置服务器加载集群信息,开启mongos进程需要知道配置服务器的地址,指定configdb选项。
分片服务器(Shard server) : 是一个独立普通的mongod进程,保存数据信息。可以是一个副本集也可以是单独的一台服务器。
测试环境
Mongodb版本:3.4.9
操作系统:Centos 6.5
3台vm:
vm A(192.168.9.10)
vm B(192.168.9.11)
vm C(192.168.9.12)
一,配置 Config server
在A,B,C分别启动Config Server
mongod --configsvr --replSet cfgReplSet --dbpath /data/mongodb_sharding/dbs/config --port 21000 --logpath /data/mongodb_sharding/logs/config.log --fork
创建Config Server的ReplSet
mongo --host 192.168.9.10 --port 21000
rs.initiate({_id:"cfgReplSet",configsvr:true,members:[{_id:0,host:"192.168.9.10:21000"},{_id:1,host:"192.168.9.11:21000"},{_id:2,host:"192.168.9.12:21000"}]})
二,配置 Shard server
在A,B,C分别启动分片1
mongod --shardsvr --replSet shard1ReplSet --port 22001 --dbpath /data/mongodb_sharding/dbs/shard1 --logpath /data/mongodb_sharding/logs/shard1.log --fork --nojournal --oplogSize 10
创建分片1的ReplSet
mongo --host 192.168.9.10 --port 22001
rs.initiate({_id:"shard1ReplSet",members:[{_id:0,host:"192.168.9.10:22001"},{_id:1,host:"192.168.9.11:22001"},{_id:2,host:"192.168.9.12:22001",arbiterOnly:true}]})
在A,B,C分别启动分片2
mongod --shardsvr --replSet shard2ReplSet --port 22002 --dbpath /data/mongodb_sharding/dbs/shard2 --logpath /data/mongodb_sharding/logs/shard2.log --fork --nojournal --oplogSize 10
创建分片2的ReplSet
mongo --host 192.168.9.10 --port 22002
rs.initiate({_id:"shard2ReplSet",members:[{_id:0,host:"192.168.9.10:22002"},{_id:1,host:"192.168.9.11:22002"},{_id:2,host:"192.168.9.12:22002",arbiterOnly:true}]})
在A,B,C分别启动分片3
mongod --shardsvr --replSet shard3ReplSet --port 22003 --dbpath /data/mongodb_sharding/dbs/shard3 --logpath /data/mongodb_sharding/logs/shard3.log --fork --nojournal --oplogSize 10
创建分片3的ReplSet
mongo --host 192.168.9.10 --port 22003
rs.initiate({_id:"shard3ReplSet",members:[{_id:0,host:"192.168.9.10:22003"},{_id:1,host:"192.168.9.11:22003"},{_id:2,host:"192.168.9.12:22003",arbiterOnly:true}]})
三,配置 Router server
在A,B,C分别启动mongos
mongos --configdb cfgReplSet/192.168.9.10:21000,192.168.9.11:21000,192.168.9.12:21000 --port 20000 --logpath /data/mongodb_sharding/logs/mongos.log --fork
设置分片
mongo –port 20000
use admin;
sh.addShard("shard1ReplSet/192.168.9.10:22001,192.168.9.11:22001,192.168.9.12:22001");
sh.addShard("shard2ReplSet/192.168.9.10:22002,192.168.9.11:22002,192.168.9.12:22002");
sh.addShard("shard3ReplSet/192.168.9.10:22003,192.168.9.11:22003,192.168.9.12:22003");
sh.status();
指定分片库、集合、片键:
db.runCommand( { enablesharding :"mydb"});
db.runCommand( { shardcollection : "mydb.table1",key : {id: 1} } );
插入数据:
use mydb;
for(var i =1;i<=2000000;i++) { db.table1.save({ id:i,"user":"user-"+i }); }
可能会用到的命令
//查看副本集状态
rs.status();
//查看Collection信息
//连接到 "stateStr" 属性为 "PRIMARY" 的副本
use table1;
db.table1.count();
//删除数据库
use mydb;
db.dropdatabase();
//移除分片
use admin;
db.runCommand( { removeshard: "shard1ReplSet" } );
//重置主分片
use admin;
db.runCommand({"moveprimary":"mydb","to":"192.168.9.10:22001"});
//查看分片信息
sh.status();
//查看shardCollection数据分布
use mydb;
db.table1.stats();
参考:
https://www.cnblogs.com/zhoujinyi/p/4635444.html
https://www.tuicool.com/articles/UzeUze