Skip to content

Mongo Shared Cluster

WinChua edited this page Jun 21, 2020 · 3 revisions
  • shard: 每一个shard包含了整体数据的一部分, 同时每一个shard都能够被部署成为一个replicate set;
  • config server: 整个集群配置的存储;
  • mongos: mongos充当了查询操作分发器的角色, 在application已经整个mongod集群之间
  • shard key: mongo的shard在collection的level上对数据进行分区, 每一个collection只能够有一个shard key, 同时shard key在分片创建之后, 是不能够被更改的; 对于一个非空collection创建分片之前, 需要在shard key之上创建一个index; 而对于空collection来说, 直接分片就好了;
  • chunk: 每一个shard key, 经过hash之后, 会有一个取值范围, mongo根据分片的多少, 对取值区间进行划分, 每一个划分区间称为chunk
  • balancer: 为了使每一个chunk中实际包含的数据大小差不多, mongo运行了balancer, 对所有chunk进行检查, 重新分配, 数据迁移;

shard strategy

  • Hashed Sharding: 根据shard key的hash value, 将document分布到不同的chunk中, 这样做的好处是, 每一个chunk中数据量的大小基本均衡, 缺点是: 对于一个区间批量查询来说, 查询落到同一个mongod的chunk的概率更小了 ;
  • Range Sharding: 粗暴地根据shard key进行区间划分, 连续的区间作为一个chunk, 这样一来, 距离近的key将会更有可能落在同一个shard中, 更加有利于批量的区间查询;

对collection进行shard之前应该考虑的事情:

  • 充分考虑shard key的选择;
  • shard之后不能够重新shard,也不能够unshard
  • 对于一个sharded collection来说, 如果某次查询不包含shard key的查询条件, 那么mongos将会做一次broadcast来实现操作
  • 由于shard操作是在collection的level上的, 而一个db中可以包含多个collection, 有的collection进行shard,
  • 配置configsrv:
  1 sharding:
  2   clusterRole: configsvr
  3 replication:
  4   replSetName: cfg0
  5 net:
  6   bindIp: localhost
启动: mongod --dbpath `pwd`/dbpath0 --config confsrv.cnf
默认端口: 27019
连接configsvr:  mongo --host localhost --port 27019
  • 配置分片:
rs.status()
rs.initiate()

Clone this wiki locally