1.【超详细】手把手教你搭建MongoDB集群搭建
2.MongoDB详解
3.mongodb分片集群-chunk&balancer
4.MongoDBèªå¨åçä»ç»
【超详细】手把手教你搭建MongoDB集群搭建
超详细手把手教你MongoDB集群搭建 MongoDB集群搭建主要包括两种有效方式:副本集和分片。码分副本集作为基础组件之一,码分而分片则解决高并发和大数据量下的码分性能挑战,通过将数据分布在多个节点上实现扩展和可用性。码分分片机制详解
分片将数据库切割成小块,码分分散到多台服务器(shard)上,码分本源码出售通过mongos协调,码分简化应用层面的码分路由。关键组件包括:mongos:请求分发中心,码分负责路由操作至对应shard,码分为高可用性,码分通常需要配置HA。码分
config server:存储元数据,码分如分片配置,码分与mongos保持同步,码分多个配置服务器保证数据冗余。
shard:处理部分数据,应对海量数据,每个shard可分摊大负载。
replica set:在shard节点中,用于保证数据可靠性的stariver源码副本集,生产环境通常有2个副本加1个仲裁节点。
整体架构与步骤
搭建一个高可用集群需要个节点,包括Docker环境的准备、网络创建,以及ConfigServer、shard和mongos的逐步部署。以下是关键步骤:基础环境:安装Docker,创建Docker网络。
搭建配置:创建ConfigServer副本集,涉及密钥文件、配置文件和容器启动。
搭建分片:创建shard分片组,设置密钥文件、配置文件,启动shard节点,初始化并创建用户。
部署mongos:创建挂载目录,配置文件,启动mongos集群,配置分片信息。搏弈源码
使用docker-compose方式配置并启动整个环境。
全文详细描述了从环境配置到分片和mongos部署的整个过程,确保集群的可靠性和扩展性。MongoDB详解
MongoDB 是一个基于分布式文件存储的开源 NoSQL 数据库系统,采用 C++ 编写,提供面向文档的存储方式,操作简单,支持无模式数据建模,适用于存储复杂数据类型。在高负载场景下,MongoDB 支持水平扩展和高可用性,易于添加更多节点以保证服务性能和可用性。
MongoDB 的数据存储结构类似传统关系型数据库,主要由文档、集合和数据库组成。文档以 BSON(Binary JSON)格式存储,可以嵌套其他文档、数组和文档数组。集合无固定结构,可以存储不同格式和类型的阴影源码数据。数据库用于存储所有集合,每个数据库包含集合和权限。MongoDB 支持多种存储引擎,如 MMAPv1 和 WiredTiger,后者默认自 MongoDB 3.2 版本起使用,基于 B+ 树结构。
MongoDB 的主要优势在于其灵活的数据模型、可扩展的架构和强大的索引支持。适合应用场景包括存储日志、实时存储和离线分析,但具体需求需结合实际情况决定是否使用 MongoDB。
在存储引擎方面,MongoDB 支持不同类型的存储引擎以适应不同场景需求。WiredTiger 存储引擎默认自 MongoDB 3.2 版本起使用,支持 B+ 树和 LSM(Log Structured Merge) Tree 结构,提供高效的数据存储与检索能力。
MongoDB 的聚合操作用于汇总多个文档或集合进行计算分析,提供求和、取最大值等功能。聚合操作有两种执行方式,txbox源码其中聚合管道提供比 map-reduce 更好的性能和可用性。聚合管道由多个阶段组成,每个阶段转换文档,按顺序处理数据。
MongoDB 支持事务操作,具备 ACID 特性,允许对多文档进行原子性操作。从 MongoDB 4.0 版本起支持多文档 ACID 事务,而在 MongoDB 4.2 版本后,分布式事务和多文档事务成为同一概念。事务使用场景需考虑性能成本和数据模型设计。
MongoDB 提供数据压缩功能,借助 WiredTiger 存储引擎,可对所有集合和索引进行压缩,减少存储空间使用。默认使用 Snappy 压缩算法,提供较高压缩效率。其他压缩算法可选,包括 LZ4、LZO、Zstd、Zlib 等。
MongoDB 索引用于提高查询效率。索引通过限制需要检查的文档数量,加速查询过程,并允许按特定顺序返回结果。支持多种索引类型,如单字段索引、复合索引、多键索引、哈希索引、文本索引和地理索引。复合索引中的字段顺序影响查询方式,遵循左前缀原则。TTL 索引提供数据过期机制,用于管理需要存储有限时间的数据。覆盖索引查询无需在数据文档中检索匹配条件和结果,显著提升查询性能。
MongoDB 的高可用性主要通过复制集群和分片集群实现。复制集群(副本集)由主节点和从节点组成,主节点负责写操作,从节点进行读操作。主节点故障时,自动选举新的主节点以确保集群连续性。分片集群将数据分布到不同服务器上,解决数据容量和吞吐量增长带来的瓶颈问题,支持水平扩展,适用于处理大量数据和高并发读写场景。分片键是数据分区的关键,影响数据在集群中的分布。
MongoDB 的复制集群和分片集群提供了高可用性和水平扩展性,适用于大规模数据存储和处理需求。选择 MongoDB 应考虑其优势、应用场景以及与特定业务需求的匹配度。
mongodb分片集群-chunk&balancer
MongoDB在分片集群中的数据管理机制采用分片(chunk)与balancer策略,以实现高效的数据分布与迁移。在分片模式下,数据通过哈希分片算法分散至不同的分片中,每个分片负责特定的数据范围。具体过程如下:
1)数据写入时,通过哈希算法确定其所属的分片,并写入相应的chunk。
2)当分片发生变化,MongoDB更新chunk的元数据信息至config server,并缓存于mongos本地。
3)查询请求在config server上查找对应的chunk信息,确定需要查询的分片。
4)数据查询通过分片执行,结果合并后返回客户端。
5)当chunk超过正常大小或无法再进行分裂时,标记为jumbo chunk,更新config server中的信息。
6)数据分布不均时,触发chunk的搬迁,更新config server。
分片(chunk)是MongoDB sharding模式下的核心概念,将集合的数据按照shardKey划分为多个数据子集,每个子集负责特定的数据范围。同一子集的数据存储在同一分片上,数据分布通过记录在config server中的路由信息决定。
处理chunk大小和数量不均衡问题,MongoDB提供了调整策略,如改变chunk大小和均衡数据搬迁间隔。4.4版本引入了RefineCollectionShardKey命令和balancer设置,支持更灵活的迁移选项,4.2和4.0版本提供了清除jumbo chunk标识的命令。
数据分裂是解决chunk过大问题的机制,可以手动触发(sh.splitAt, sh.splitFind命令),或自动在插入和更新操作中触发。分裂逻辑上将chunk分割为更小的部分,以实现数据的更均匀分布。
数据迁移则通过moveChunk命令实现,balancer负责定期检测并触发,或由用户手动发起。迁移过程包括发送方和接收方的数据交换,分为七个步骤:发起迁移、初始化接收方、拉取增量修改、等待接收方完成、发送方进入临界区、接收方执行commit、configsvr执行commit。
Balancer作为后台进程,确保集合的chunk在各个分片上均衡分布,它运行在config server的主节点,自动从chunk数量最多的分片向数量最少的分片迁移。当遇到性能问题,如movechunk导致的性能抖动,可通过调整均衡时间窗口、控制迁移数据条数和迁移后删除旧chunk的速度等方法优化。
MongoDBèªå¨åçä»ç»
1. çé®ä»ç»ããæ°æ®ååï¼partitioningï¼å ³é®é®é¢æ¯æä¹æ ·å°ä¸ä¸ªéåä¸çæ°æ®åè¡¡çåå¸å¨é群ä¸çèç¹ä¸ã MongoDB æ°æ®ååçæ¯å¨éåçå±é¢ä¸è¿è¡çï¼å®æ ¹æ®çé®æ¥ååéåä¸çæ°æ®ã
ï¼1ï¼ä½¿ç¨çé®çåå¼èå´æå®æ°æ®å
ãã设置åççæ¶åï¼éè¦ä»éåééåºä¸ä¸ªå段ï¼ç¨è¯¥å段çå¼ä½ä¸ºæ°æ®æåçä¾æ®ï¼è¿ä¸ªå段称为çé®ï¼shard key)ï¼ææ¡£ä¸çæ°æ®æç §è¿ä¸ªå段æåºååæåï¼åå¸å°å个çä¸ãæ¯å¦è¯´æ个表示人åçéåï¼å¦æéæ©åå(ânameâ)å段ä½ä¸ºçé®ï¼ç¬¬ä¸çå¯è½ä¼åæ¾åå以A Få¼å¤´çææ¡£ï¼ç¬¬äºä¸ªåæ¾çæ¯ä»¥G På¼å¤´çææ¡£ï¼ç¬¬ä¸ä¸ªåçQï½Zçååãéçæ·»å ï¼å é¤ï¼çï¼MonogDBä¼éæ°å¹³è¡¡æ°æ®ï¼ä½¿æ¯ççæµéé½æ¯è¾åè¡¡ï¼æ°æ®éä¹å¨åçèå´å ã
æç §çé®åå¼èå´æ¥ä½ä¸ºæ°æ®åååçåºé´ä¾æ®ï¼ä¼ç¹æ¯æèå´æ¥è¯¢çæ¶åå®çæçå¾é«ï¼å½ç»å®ä¸ä¸ªæ¥è¯¢èå´ï¼æ ¹æ®mongosä¸çæ å°è¡¨å¯ä»¥å¾å¿«çå®ä½å°åçä¸çæ°æ®åãé¤æ¤ä¹å¤å½ä¸¤ä¸ªåççé®åå¼æ¯è¾é è¿çæ¶åï¼ä¼è¢«æ¾å°ç¸è¿çåä¸ï¼ç±äºæ°æ®çå±é¨æ§åçï¼è¿æ ·çè¯å¯ä»¥å å¿«æ¥è¯¢æçï¼åæ¶ä¹å¯ä»¥åå°å åæ¢é¡µæ¬¡æ°ã
缺ç¹æ¯å¯è½ä¼å¯¼è´æ°æ®åå¸ä¸åè¡¡ï¼å¦æéæ©ççé®å ·æ线æ§çæ§è´¨ï¼ä¾å¦æ¶é´ï¼å°å ¶ä½ä¸ºçé®çè¯ ï¼å¨æ个æ¶é´æ®µçå请æ±ï¼è¯»è¯·æ±ï¼é½ä¼è¢«æ å°å°åä¸ä¸ªåççåä¸ä¸ªæ°æ®åä¸ï¼ è¿æ ·çè¯ä¸ä» ä¼éä½ç³»ç»ç读åæ§è½ï¼èä¸ä¹ä¼å åæä½è¿äºéä¸å¯¼è´çé´çä¸å¹³è¡¡ã
ï¼2ï¼æç §çé®åå¸å¼æ¥ä½ä¸ºæ°æ®åçåååºé´ä¾æ®
ããä¼ç¹æ¯å¯ä»¥ç¡®ä¿ä¸ä¸ªæ¯è¾åè¡¡çæ°æ®åå¸ï¼å 为å³ä½¿å½ä¸¤ä¸ªææ¡£ççé®åå¼å¾æ¥è¿çæ¶åï¼ä¾å¦ä¸é¢ä¾åä¸ä¸ä¸ªx=ï¼ä¸ä¸ªx=ï¼å®ä»¬çåå¸ç»æä¹ä¼æå¾å¤§çå·®å«ï¼è¿æ ·çè¯æ°æ®ä¼éæºçåå¸å°é群ä¸ï¼æå©äºæ°æ®çåè¡¡çåå¸ï¼åå°æ°æ®åç移å¨æ¬¡æ°ï¼åæ¶ç±äºæ°æ®åæ£ä¼åå°å个æ°æ®åçåæä½çååï¼æé«åå ¥é度ã
缺ç¹æ¯éæºåå导è´æ°æ®è¿äºåæ£ï¼å½è¦æ¥è¯¢æ个èå´å çæ°æ®æ¶æ¯å¦å¹´é¾å¤§äºå°äºçææç·çä¿¡æ¯ï¼å¦æç´æ¥ä½¿ç¨èå´ååçè¯ï¼ç±äºå ¶å ·æè¯å¥½çæ°æ®å±é¨æ§ç¹ç¹ï¼å¯è½åªè¦è®¿é®å 个ç¸é»çæ°æ®åå°±è¡äºï¼ ä½æ¯å¦æè¦ä½¿ç¨åå¸ååçæ¹æ³å¾å¯è½è¦è®¿é®ææçæ°æ®åã
ï¼3ï¼åå¼æéççé®
ããè¿æ¯ä¸ç§ç²å度ççé®ï¼æ¯å¦ä¸è¾¹è¯´çç¨æ·IDãå¦ææç §ç¨æ·IDåçï¼ä½ å¯ä»¥é¢æå°æå ¥ä¼åå¸å¨å个åçä¸ï¼å 为æ æ³é¢ç¥åªä¸ªç¨æ·ä½æ¶ä¼æå ¥æ°æ®ãè¿æ ·ä¸æ¥ï¼ç²ç²åº¦åçé®ä¹è½æ¥æéæºæ§ï¼è¿è½åæ¥åçé群çä¼å¿ãèä¸ç²ç²åº¦ççé®è¿è½ä½¿ç¨å±é¨æ§å¸¦æ¥çæçæåãå½æ个ç¨æ·ä¸ä¼ 个æ件ï¼åºäºç¨æ·IDå段çåç建è½ç¡®ä¿è¿äºæå ¥é½è½å°åä¸ä¸ªåçä¸ï¼å¹¶å ä¹è½åå ¥ç´¢å¼çåä¸é¨åï¼è¿æ ·æçå¾é«ãç²ç²åº¦åçé®å¨åå¸æ§åå±é¨æ§ä¸é½è¡¨ç°å¾å¥½ï¼ä½æ¯å®ä¹æä¸ä¸ªå¾é¾è§£å³çé®é¢ï¼åæå¯è½æ éå¶çå¢é¿ãæ³æ³åºäºç¨æ·IDççé®ï¼åå¦æå 个ç¹æ®ç¨æ·ï¼ä»ä»¬ä¸ä¼ äºä¸ç¾ä¸ä¸ªæ件ï¼é£ä¹ä¸ä¸ªåéå°±å¯è½åªæä¸ä¸ªç¨æ·IDï¼è¿ä¸ªåè½æåä¹ï¼ä¸è½ï¼å 为ç¨æ·IDæ¯æå°çç²åº¦ï¼æåäºæ¥è¯¢å°±æ²¡æ³è·¯ç±å°æ°æ®ãè¿å°±é æåçä¹é´æ°æ®éä¸åè¡¡ãæ´å ¸åçå°±æ¯typeï¼statusè¿ç±»çå段ï¼å 为å®ä»¬çéæ©æ§å®å¨æ¯å¤ªä½ï¼å¯¼è´æ æ³æåãçé®åºæ¯è¾å°æ¶ï¼ææçé®å¼ç¸å导è´MongoDBä¸è½åè£Chunkï¼è¿ç§»è¿äºä¸å¯åè£çChunkå°æ´å èæ¶ï¼å³ä½¿è¿ç§»åä¹é¾ä»¥ä¿è¯æ°æ®å¨å个åçä¸ç平衡ãChunkæ°é被åºçº¦æä½åï¼æ们就ä¸è½å©ç¨MongoDåçé群ç¹æ§å°éåé¨ç½²å°æ´å¤çæºå¨ã
2. çé®çéååå
ããå¨Shardingç»æä¸ï¼åççç¥ï¼çé®éæ©æ¯å½±åæ§è½çå ³é®å ç´ ï¼çé®ä¸ä» å½±åæ°æ®åå¸ï¼èä¸å½±åä¸å¡é»è¾ï¼æ以çé®çéæ©ä¸ååæ¯ååçå°æ°æ®åå¸å°å个çä¸ï¼èä¸è¦èèæ¥è¯¢çæ§è½ãåççé®ææ¶åä¼å¯¼è´æ°æ®åå¸å¾å·®ï¼ææ¶åä¼å¯¼è´æ æ³ä½¿ç¨å±é¨æ§åçï¼è¿æä¸äºä¼å½±åæ°æ®åçæåã
ããä¸è¾¹æ们讨论äºä½æçé®çé®é¢ååå ï¼çæ³ççé®åºè¯¥ç»åç²ç²åº¦åçé®ä¸ç»ç²åº¦çé®ä¸¤è çä¼å¿ã
ä¸ä¸ªå¥½ççé®å¿ é¡»å å«çç¹æ§ï¼
1ãä¿è¯CRUDè½å©ç¨å±éæ§ ï¼ï¼ãååºçé®çä¼ç¹
2ãå°æå ¥æ°æ®åååå¸å°å个åçä¸ ï¼ï¼ãéæºçé®çä¼ç¹
3ãæ足å¤çç²åº¦è¿è¡åæå ï¼ï¼ãç²ç²åº¦çé®çä¼ç¹
满足è¿äºè¦æ±çççé®é常ç±ä¸¤ä¸ªå段ç»æï¼ç¬¬ä¸ä¸ªæ¯ç²ç²åº¦ï¼ç¬¬äºä¸ªæ¯ç²åº¦è¾ç»ãé£ä¹æ们éè¦ä½¿ç¨å¤åçé®ãä¾å¦å¯¹ä¸é¢çä¾åï¼éå{ useridï¼1ï¼_id:1}ä½ä¸ºçé®ï¼å½ç¨æ·åæ¶æå ¥æ°æ®æ¶ï¼æ们å¯ä»¥é¢è§å¤§å¤æ°æ åµä¸ï¼è¿äºæ°æ®ä¼è¢«ååçåå¸å°ææççä¸ï¼èä¸åçéçå¯ä¸å段_idè½ä¿è¯å¯¹ä»»æä¸ä¸ªææ¡£çæ¥è¯¢åæ´æ°å§ç»é½è½æåå个åçãå¦æ对ç¨æ·IDæ§è¡æ´å¤æçæ¥è¯¢ï¼é£ä¹è·¯ç±ä¹åªä¼å°æ¥è¯¢è·¯ç±å å«æ¤ç¨æ·IDåå¨ççä¸ï¼èä¸ä¼åå°ææåçãç±äº_idï¼ååºï¼çåå¨ï¼ä¿è¯äºåå§ç»æ¯è½ç»§ç»æåçï¼åªæç¨æ·å建äºå¤§éææ¡£ï¼æ åµä¹æ¯å¦æ¤ã
æ以å¨éæ©çé®æ¶å°½éè½ä¿æè¯å¥½çæ°æ®å±é¨æ§èåä¸ä¼å¯¼è´è¿åº¦çç¹çåºç°ï¼å¾å¤æ¶åï¼ç»åçé®æ¯ä¸ç§æ¯è¾å¸¸ç¨çåæ³ã
é¤æ¤ä¹å¤ï¼ä¹å¯ä»¥éæ©æ们ç»å¸¸æ¥è¯¢çå段ä½ä¸ºçé®ï¼è¿ç±»åçé®å¯ä»¥ä½¿å¾æ¥è¯¢æ¶mongosä» ä» å°æ¥è¯¢åéç»ç¹å®çmongodå®ä¾ï¼ä¸éè¦çå¾ å¤ä¸ªå®ä¾è¿åæ°æ®ååè¿è¡å并ã