MongoDB常见部署架构
- 单机版:开发与测试
- 复制集:高可用
- 分片集群:横向扩展
为什么要使用分片集群?
- 数据容量日益增大,访问性能日渐降低,怎么破?
- 新品上线异常火爆,如何支撑更多的并发用户?
- 单库已有10TB数据,恢复需要1-2天,如何加速?
- 地理分布数据
分片如何解决?下面用一个例子来讲解:
情况如下:
- 银行交易单表内10亿笔资料,超负荷运转
- 交易号0- 1,000,000,000
解决方法1
-
把数据分成两半,放到两个库物理里。
- 交易号 :0 - 500,000,000
- 交易号 :500,000,000 - 1,000,000,000
解决方法2
-
把数据分成四部分,放到四个物理库里。
- 交易号:0 - 250,000,000
- 交易号:250,000,000 - 500,000,000
- 交易号:500,000,000 - 750,000,000
- 交易号:750,000,000 - 1,000,000,000
分片集群解剖:路由节点mongos
graph TD
A[Application] --> B(Driver)
B --> C{mongos<br>123}
C --> |Shared1/config1| Z[复制集1]
B --> D{mongos}
D --> |Shared2/config2| Y[复制集2]
B --> E{mongos}
E --> |Shared3/config3| X[复制集3]
路由节点
- 提供集群单一入口
- 转发应用端请求
- 选择合适数据节点进行读写
- 合并多个数据节点的返回
- 无状态
- mongos 建议至少2个
配置(目录)节点
- 提供集群元数据存储
- 分片数据分布的映射
- 普通复制集架构
数据节点
- 以复制集为单位横向扩展
- 最大1024分片
- 分片之间数据不重复
- 所有分片在一起才可完整工作
MongoDB分片集群特点
- 应用全透明,无特殊处理
- 数据自动均衡
- 动态扩容,无须下线
- 提供三种分片方式
MongoDB分片集群特点
- 应用全透明,无特殊处理
- 数据自动均衡
- 动态扩容,无须下线
- 提供三种分片方式
分片集群数据分布方式
- 基于范围
- 基于Hash
- 基于zone/tag
分片集群数据分布方式-基于范围(最常用)
Pros | Cons |
---|---|
片键范围查询性能好 | 数据分布可能不均匀 |
优化读 | 容易有热点 |
分片集群数据分布方式-基于哈希
Pros | Cons |
---|---|
数据分布均匀,写优化 | 范围查询效率低 |
- 适用:日志,物联网等高并发场景
分片集群数据分布方式-自定义Zone
小结
- 分片集群可以有效解决性能瓶颈及系统扩容问题
- 分片额外消耗较多,管理复杂,尽量不要分片
- 如果实在要用,请仔细学习下一讲
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。