【MongoDB 分片集群架构详解】

本文详细介绍了MongoDB的分片集群架构,包括分片简介、核心概念如数据分片、配置服务器和查询路由,以及分片集群的搭建和使用。重点讨论了分片策略,如范围分片和哈希分片的优缺点,并提到了分片键的选择和数据均衡的重要性和方法。
摘要由CSDN通过智能技术生成

MongoDB 分片集群架构详解

1. 分片简介

分片(shard) 是指在将数据进行水平切分之后,将其存储到多个不同的服务器节点上的一种扩展方式。
分片在概念上非常类似于应用开发中的“水平分表”。不同的点在于 MongoDB 本身就自带了分片管理的能力。

1.1 为什么要使用分片

MongoDB 复制集实现了数据的多副本及高可用,但是一个复制集能承载的容量和负载是有限的。
在你遇到下面的场景时,就需要考虑使用分片了:

	-  存储容量需求超出单机的磁盘容量。
	-  活跃的数据集超出单机内存容量,导致很多请求都要从磁盘读取数据,影响性能。
	-  写IOPS超出单个 MongoDB 节点的写服务能力

1.2 垂直扩容(Scale Up)VS 水平扩容(Scale Out)

  1. 垂直扩容:用更好的服务器,提高 CPU 处理核数、内存数、带宽数等。
  2. 水平扩容:将任务分配到多台计算机上。

2. 分片集群架构

MongoDB 分片集群(Sharded Cluster)是对数据进行水平扩展的一种方式。MongoDB 使用分片集群支持大数据集和高吞吐的业务场景。在分片模式下,存储不同的切片数据的节点被称为分片节点,一个分片集群包含了多个分片节点。除了分片节点,集群中还需要一些配置节点、路由节点,以保证分片机制的正常运作。

MongoDB 分片集群概念图

2.1 核心概念

2.1.1 数据分片

分片用于存储真正的数据,并提供最终的数据读写访问。分片仅仅是一个逻辑的概念,它可以是一个单独的 MongoDB 实列,也可以是一个复制集。图中的 Shard 1、Shard 2 都是复制集分片。在生产环境中一般会使用复制集的方式,这是为了防止数据节点出现单点故障

2.1.2 配置服务器(config Server)

配置服务器包含多个节点,并组成一个复制集结构,对应于图中的 ConfigReplSet。配置复制集中保存了整个分片集群中的元数据,其中包含各个集合的分片策略,以及分片的路由表等。

2.1.3 查询路由(mongos)

mongos 是分片集群的访问入口,其本身并不持久化数据。mongos 启动之后,会从配置服务器中加载元数据,之后 mongos 开始提供访问服务,并将用户的请求正确路由到对应的分片。在分片集群中可以部署多个 mongos 以分担客户端的压力。

3. 环境搭建

3.1 分片集群搭建

分片集群搭建

3.2 使用 mtools 搭建分片集群

使用 mtools 搭建分片集群

4. 使用分片集群

为了使集合支持分片,需要先开启 database 的分片功能

sh.enableSharding("shop")

执行 shardCollection 命令,对集合执行分片初始化

sh.shardCollection("shop.product",{productId:"hashed"},false,{numInitialChunks:4})

shop.product集合将productId作为分片键,并采用了哈希分片策略,除此以外,
“numInitialChunks:4”表示将初始化4个chunk。 numInitialChunks必须和哈希分片策略配合使
用。而且,这个选项只能用于空的集合,如果已经存在数据则会返回错误。

4.1 向分片集合写入数据

向 shop.product 集合写入一批数据

db=db.getSiblingDB("shop");
var count=0;
for(var i=0;i<1000;i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值