Mongodb学习笔记(三)
?
?sharding(分片功能)? ? 手动分片:所有数据库都支持,但是需要应用程序自行维护连接、存储和查询,难以维护和处理。? ? 自动分片:集群自动分切数据存储、查询,自行负载均衡,对所有应用都是透明。mongodb支持自动分片功能
? ? mongodb分片的基本思想是将集合切分成小块,这些块分散到若干片里面,每个片只负责总数据的一部分,但这些对应用程序是透明的,一切由mongodb来管理。

?? ?
? ? ? ? 数据库复制集:每个分片的数据库复制集存储一部分数据? ? ? ? 配置服务器:存储分片数据库集群的元数据? ? ? ? 路由服务器:提供应用层进行读写,利用配置服务器的元数据进行读写数据定位和处理
? ? ? ? 分片集群最核心的是分割和迁移,涉及到块,及多个数据库之类的负载
? ? ? 学习知识最好的办法就是实际使用它并排除它的问题:? ? ? ? ??

?? ? 以上是一个结构图,这个例子是有两个replica Sets组成shard,有三个config server,一个mongos路由? ??建立shard A与B? ? ? ? ? ?mkdir -p /data1/rs-a-1 /data1/rs-a-2 /data1/rs-a-3 /data1/rs-b-1 /data1/rs-b-2 /data1/rs-b-3? ? ? ? ??./mongod --shardsvr --replSet shard-a --dbpath /data1/rs-a-1 --port 30000 --logpath /data1/rs-a-1.log --fork --nojournal
./mongod --shardsvr --replSet shard-a --dbpath /data1/rs-a-2 --port 30001 --logpath /data1/rs-a-2.log --fork --nojournal
./mongod --shardsvr --replSet shard-a --dbpath /data1/rs-a-3 --port 30002 --logpath /data1/rs-a-3.log --fork --nojournal
./mongod --shardsvr --replSet shard-b --dbpath /data1/rs-b-1 --port 30100 --logpath /data1/rs-b-1.log --fork --nojournal
./mongod --shardsvr --replSet shard-b --dbpath /data1/rs-b-2 --port 30101 --logpath /data1/rs-b-2.log --fork --nojournal
./mongod --shardsvr --replSet shard-b --dbpath /data1/rs-b-3 --port 30102 --logpath /data1/rs-b-3.log --fork --nojournal
./mongo devdb:30000
rs.initiate()
rs.add("devdb:30001")
rs.add("devdb:30002",{arbiterOnly: true})
rs.status()
./mongo devdb:30100? ?建立Config服务器? ? ??????mkdir -p /data1/config-1 /data1/config-2 /data1/config-3? ? ? ? ??./mongod --configsvr --dbpath /data1/config-1 --port 27019 --logpath /data1/config-1.log --fork --nojournal
rs.initiate()
rs.add("devdb:30101")
rs.add("devdb:30102",{arbiterOnly: true})
rs.status()
等待status()都正常后,shardA与B就配置完成
./mongod --configsvr --dbpath /data1/config-2 --port 27020 --logpath /data1/config-2.log --fork --nojournal./mongod --configsvr --dbpath /data1/config-3 --port 27021 --logpath /data1/config-3.log --fork --nojournal??建立路由服务器? ? ??????./mongos --configdb devdb:27019,devdb:27020,devdb:27021 --logpath /data1/mongos.log --fork --port 40000
??配置集群? ? ? ? ??sh.addShard("shard-a/devdb.zoneland.net:30000,devdb:30001")
??????????sh.addShard("shard-b/devdb.zoneland.net:30100,devdb:30101")? ? ? ? ? 注:加入到集群的是shard的两个非表决节点? ? ??????db.getSiblingDB("config").shards.find() 查看config是否正常? ? ? ? ? ?更简单的方法? ? ? ? ??> use admin??????????> db.runCommand({listshards: 1})? ? ? ? ?至此,集群初始环境配置完成
? 设置分片的数据库? ? ? ? ?sh.enableSharding("cloud-docs")? ?设置分片集合? ? ? ? ?sh.shardCollection("cloud-docs.spreadsheets", {username: 1, _id: 1})? ? ? ? 这里的共享键是username和_id? ?? ??? ? ? ? ?
? ? ? ? ??? ? ? ? ??
? ? ?
? ? ?