MongoDB分片篇

来源:互联网 发布:报网络教育有用吗 编辑:程序博客网 时间:2024/06/15 12:13

本篇文章介绍在一台Windows机器上配置分片集群,这里使用的mongodb的版本是v3.4.6, 如果版本太老下面的配置步骤可能无效甚至shell命令语法会报错

1.模拟多台机器

分片需要多台机器,这里为了在一台机器上来模拟多台机器,需要使用多个MongoDB, 如图,复制MongoDB的安装文件复制多份

这里写图片描述

2. 以副本集方式启动3台配置服务器

这里分别使用MongoDB4、MongoDB5、MongoDB6作为配置服务器, 启动之前最好将dbpath对应的目录中的文件全部删除,放置配置副本集失败

D:\Java\MongoDB4\Server\bin>mongod --configsvr --port 30000  --dbpath=D:\Java\MongoDB4\DB --replSet configdbSetD:\Java\MongoDB5\Server\bin>mongod --configsvr --port 30001  --dbpath=D:\Java\MongoDB5\DB --replSet configdbSetD:\Java\MongoDB6\Server\bin>mongod --configsvr --port 30002  --dbpath=D:\Java\MongoDB6\DB --replSet configdbSet// 配置副本集时最好是清空所有服务器的数据,即dbpath目录D:\Java\MongoDB4\Server\bin>mongo 127.0.0.1:30000>config = {            _id:'configdbSet',            members:[                {_id:0,host:'127.0.0.1:30000',priority:1},                {_id:1,host:'127.0.0.1:30001',priority:2},                {_id:2,host:'127.0.0.1:30002',priority:3}            ]}>rs.initiate(config)

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

3. 启动mongos进程

// 启动mongos如果使用--logpath 好像启动不起来D:\Java\MongoDB7\Server\bin>mongos --port 27017 --configdb configdbSet/127.0.0.1:30000,127.0.0.1:30001,127.0.0.1:30002

4. 以副本集的方式启动3台分片服务器

这里以MongoDB、MongoDB2、MongoDB3作为分片服务器,启动时最好将dbpath对应的目录下的文件全删掉

D:\Java\MongoDB\Server\bin>mongod --shardsvr  --port 20000 --replSet mySet --dbpath=D:\Java\MongoDB\DB D:\Java\MongoDB2\Server\bin>mongod --shardsvr --port 20001 --replSet mySet --dbpath=D:\Java\MongoDB2\DB D:\Java\MongoDB3\Server\bin>mongod --shardsvr --port 20002 --replSet mySet --dbpath=D:\Java\MongoDB3\DBD:\Java\MongoDB\Server\bin>mongo 127.0.0.1:20000> config = {        _id:'mySet',        members:[                {_id:0,host:'127.0.0.1:20000'},                {_id:1,host:'127.0.0.1:20001'},                {_id:2,host:'127.0.0.1:20002'}               ]}> rs.initiate(config)

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

5. 连接mongos

D:\Java\MongoDB7\Server\bin>mongo 127.0.0.1:27017// 将三台分片服务器添加到分片集群中mongs>sh.addShard("mySet/127.0.0.1:20000,127.0.0.1:20001,127.0.0.1:20002")// 配置需要分片的数据库> sh.enableSharding("test")// 配置分片数据库的集合对应的片键(索引)> sh.shardCollection("test.users", {"name": 1})// 切换到分片的数据库> use test// 向文档中插入多条文档> for(i = 0; i < 100000; i++) { db.users.insert({"name": "name"+i, "age": i}); }// 用于测试看文档是否按块拆分到三台分片服务器上> sh.status()

这里写图片描述


这里写图片描述


集群相关的所有配置信息都保存在config数据库上

这里写图片描述

  • shards: 跟踪记录集群内所有的分片信息
  • databases: 跟踪记录集群内的所有数据库的信息
  • collections:跟踪记录所有分片集合的信息
  • chunks: 记录所有块的信息
  • changelog:跟踪记录集群中的操作
  • tags:用于将指定块分到指定的分片服务器上
  • settings: 均衡器相关的信息
D:\Java\MongoDB7\Server\bin>mongo 127.0.0.1:27017mongos> use configswitched to db configmongos> show collectionschangelogchunkscollectionsdatabaseslockpingslocksmigrationsmongosshardstagsversionmongos> db.shards.find().pretty(){        "_id" : "mySet",        "host" : "mySet/127.0.0.1:20000,127.0.0.1:20001,127.0.0.1:20002",        "state" : 1}mongos> db.databases.find(){ "_id" : "test", "primary" : "mySet", "partitioned" : true }mongos> db.collections.findOne(){        "_id" : "test.users",        "lastmodEpoch" : ObjectId("59a1203c9cdd0bcdfccff4d9"),        "lastmod" : ISODate("1970-02-19T17:02:47.296Z"),        "dropped" : false,        "key" : {                "username" : 1        },        "unique" : false}mongos> db.chunks.find().pretty(){        "_id" : "test.users-username_MinKey",        "lastmod" : Timestamp(1, 1),        "lastmodEpoch" : ObjectId("59a1203c9cdd0bcdfccff4d9"),        "ns" : "test.users",        "min" : {                "username" : { "$minKey" : 1 }        },        "max" : {                "username" : "username1"        },        "shard" : "mySet"}{        "_id" : "test.users-username_\"username1\"",        "lastmod" : Timestamp(1, 2),        "lastmodEpoch" : ObjectId("59a1203c9cdd0bcdfccff4d9"),        "ns" : "test.users",        "min" : {                "username" : "username1"        },        "max" : {                "username" : "username6"        },        "shard" : "mySet"}{        "_id" : "test.users-username_\"username6\"",        "lastmod" : Timestamp(1, 3),        "lastmodEpoch" : ObjectId("59a1203c9cdd0bcdfccff4d9"),        "ns" : "test.users",        "min" : {                "username" : "username6"        },        "max" : {                "username" : { "$maxKey" : 1 }        },        "shard" : "mySet"}

相关文章

关于MongoDB分布式高可用集群实现(Linux): http://blog.csdn.net/foreverfriends/article/details/70227911