mongo 分片

1 副本集vs分片

副本集是mongo数据的备份镜像集群,主要解决数据备份问题;分片是每一个分片(mongod)都存放有其它分片不同的子集,所有的分片之和,是总的数据,分片主要用于提高读写IO写速度

2 分片组成(3个组件)

2.1 mongs
请求路由到mongd,以及对mongd返回的数据做拼装;mongos会与配置服务器发生读写请求来同步信息;一个web应用可以连接一个mongos

2.2 mongd
存储真正数据的普通mongo;考虑到分片的性能开销,建议分片至少3片以上,否则不如用单个mongo;

2.3 配置服务器
普通的mongd,一般有3台,主要存放集群和分片元信息。数据存储大小可以不用设的置太大,1kb可映射到200M的数据;

3 开发人员最应该关注是数据分发方式

3.1 索引
对数据库分片是对集合分片的前提,对集合分片必须对集合的某个字段(片键)加索引(hash,1,-1)

db.enableSharding("dbName") // 数据库支持分片
sh.shardCollection("dbName.collectionName",{ name, 1}) // 集合分片,name为片键

3.2 数据块和分片均衡

shardCollection操作,会拆分集合为数据块(mongo分片的数据基本单元),然后将块均匀的分布到分片上;这个过程可能持续一段时间;

由于mongo中可能有海量的文档存储在不同的机器上,这样mongo难以操作。因此mongo将文档分组成块,每个块有特定范围的文档组成,每个块只存在在一个分片中,配置服务用比较小的表就能维护分片和块的映射关系

(1) 块的拆分:mongs会记录每个块的数据量,当块的数据数据大小到阈值时,就会在配置服务器上更新块的元数据信息,拆分只需要更新元数据即可

(2) 分片的均衡:当某一个分片的负载比较大(较多的块),那么均衡器会自动把块迁移到块数量较少的分片上

3.3 数据分发

讨论使用某字段作为片键时,分发到数据块的行为

(1) 升序片键

如以自增的ID、自增的timestamp作为片键;缺点是可能会导致插入的IO落在一个块上,数据块会不断的拆分,不断的迁移

(2) 随机分发片键

电话、email、hash等作为片键;有点是IO会随机的分发到块中,并且减少数据块迁移的概率

(3) 位置片键

注意:无论升序键还是随机键,数据块都是随机分发到分片中的

片键策略

1 b-tree 索引(ensureIndex时设置为1,-1)

2 散列片键

对片键字段建立hash索引,这样无论是什么类型的片键,都能随机分发到分片上

db.users.ensureIndex('username','hashed')
db.shardCollection('users,{'username','hashed'}')

缺点是散列片键无法比较大小(mysql的hash索引也是这个问题)
 

MongoDB的分片集群是一种将数据分布在多个服务器上的方式,以实现高可用性和横向扩展性。下面是一些关于MongoDB分片集群的常见问题和答案: 1. 什么是MongoDB的分片集群? MongoDB的分片集群是一种将数据分割成多个片段并分布在多个服务器上的方法。每个片段(shard)都是一个独立的MongoDB实例,可以存储一部分数据。通过将数据分散在多个片段上,可以实现数据的水平扩展和负载均衡。 2. 如何设置MongoDB的分片集群? 要设置MongoDB的分片集群,需要遵循以下步骤: a. 部署和配置一个或多个Config Server。Config Server用于存储集群的元数据,如分片键范围和配置信息。 b. 部署和配置一个或多个mongos路由器。mongos路由器是客户端与分片集群交互的入口点。 c. 部署和配置一个或多个shard服务器。每个shard服务器都是一个独立的MongoDB实例,可以存储一部分数据。 d. 启动mongos路由器,并将其连接到Config Server和shard服务器。 e. 创建分片集合,并根据需要启用分片。 3. 分片键是什么?如何选择分片键? 分片键是用来决定将数据分配到哪个片段的字段。选择合适的分片键非常重要,以确保数据在分片集群中均匀分布。通常,一个好的分片键应该满足以下条件: a. 数据均匀分布:分片键的值应该能够在不同的分片之间平均分配。 b. 查询性能:选择经常被查询的字段作为分片键,以便查询可以在单个片段上执行而不需要扫描整个集群。 c. 数据增长:选择一个能够支持数据增长的分片键,以避免在未来需要重新分片。 4. 如何监控和管理MongoDB的分片集群? MongoDB提供了一些工具和功能来监控和管理分片集群。一些常见的方法包括: a. 使用mongos路由器的命令行工具或管理界面来管理集群配置、添加/删除shard以及监控性能指标。 b. 使用MongoDB的内置监控工具,如mongostat和mongotop,来监视集群的吞吐量、延迟和负载情况。 c. 使用第三方监控工具,如Prometheus、Grafana等,来获取更详细的指标和可视化。 这些是关于MongoDB分片集群的一些常见问题和答案。希望能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值