本篇博客的内容是对目前公司某产品在mongodb架构方面的一些研究和心得(部分来源于公司wiki及互联网),整理一下发上来,希望对看到的人有所帮助。
一、MongoDB分布式架构相关:
1、MongoDB支持在多台机器中通过异步复制达到故障转移和实现冗余.多机器中同一时刻只有一台机器用于写操作。
2、Replica sets结构类似一个集群,其中一个节点如果出现故障,其它节点会马上将业务接过来而无需停机。担当primary角色的机器能把读操作分发给slave。
3、MongoDB的replica sets是通过一个日志来存储写操作的,这个日志叫做oplog。Oplog.rs是一个固定长度的capped collection,它存在于local数据库中,用于记录replica sets的操作日志。Oplog的大小可以通过mongod的参数—oplogSize来改变oplog的日志大小。
4、读写分离:默认的从库是不可读的,需要执行db.getMongo().setSlaveOk(),才可以查询从库。
5、复制集比传统的master-slave有改进的地方就是他可以进行故障的自动转移,如果我们停掉复制集中的任意一个成员,剩余成员会自动选举出一个成员,作为主库。这种故障处理机制,能将系统稳定性大大提高。
6、MongoDB的Replica Sets不仅提供高可用性解决方案,也提供负载均衡的解决方案。例如读压力暴增时,3台节点的环境已经不能满足需求,就需要增加节点将压力平均分配一下。
7、Sharding分片(水平扩展)
这是一种将海量数据水平扩展的数据库集群系统,数据分表存储在sharding各个节点上。
MongoDB的数据块称为chunk,每个chunk都是collection中一段连续的数据记录。通常最大空间200M,大于200M则生成新的数据块。
8、构建一个MongoDB Sharding Cluster需要三种角色:
(1)Shard Server:
每个Shard可以是一个mongod实例,也可以是一组mongod实例构成的Replica Sets。为了实现每个Shard内部的auto-failover(自动故障切换),MongoDB建议每个Shard为一组Replica Sets。
(2)Config Server:
为了将一个特定的collection存储在多个Shard中,需要为该collection指定一个shard key,例如{age:1}。shard key决定该条记录属于哪个chunk。Config Server就是用来存储:所有Shard节点的配置信息。每个chunk的shard key范围、chunk在各shard的分布情况。该集群中所有DB和Collection的Sharding配置信息。
(3)Route Process:
前端路由,客户端由此接入。询问Config Server需要到那个Shard上查询或者保存记录。再连接相应的Shard进行操作,最后将结果返回给客户端。客户端不必关心所操作的记录在那个shard上。
二、该产品MongoDB架构:
4台服务器做分片处理,每个Shard内部做replica set复制集:
ShardA:
使用1、2、3号机器,依次设置为主、从、仲裁。
ShardB:
使用2、3、4号机器,依次设置为主、从、仲裁。
ShardC:
使用3、4、1号机器,依次设置为主、从、仲裁。
ShardD:
使用4、1、2号机器,依次设置为主、从、仲裁。
配置节点:
Mongod:部署1、2、3号机器,使用端口30001。
路由节点:
Mongos:部署全部1、2、3、4四台机器,使用端口40001。
三、补充:
1、Shard相关:
(1)Shard可以动态添加或删除,数据会被动态转移,但转移完成前仍访问的原来的shard。
(2)删除shard指令执行后,在转移完成前,停止shard节点将会导致某些数据读写失败。
(3)第一次enablesharding时,会选出default shard。
(4)其他没有被enableshard的数据库将保存在默认shard上。
(5)每个collection的shardkey只能设置一次,无法更改,除非drop这个collection再重建。
(6)版本mongodb(1.8.2)不支持shard的auth,仅支持到repli-set级别。故现在连接mongodb上的db,不需要用户名密码。
(7)sharding功能是针对collection的,而不是整个数据库DB,而且所有数据都是有序的,排序是通过:实现shard应用时指定一个或多个Key,所有的数据都将按Key排序。
2、Replica set相关:
(1)一个repli-set中,只要有一个可见的非arbiter节点存活,该set不会丢失数据。
(2)当前配置中所有非arbiter节点都是可见的,但是primary down了,在新的primary还未选举出来时马上又down一台,可能会丢数据。
(3)一个repli-set可以动态增减非Primary节点,但是也需要执行时间,执行完成后才能真正使用或停掉某节点。Arbiter节点是primay选举的投票者之一,但并不保存数据。
(4)Replica Set需要最少两个Server,配置最简单的Replica Set可以是两台服务器加一台仲裁服务器或者是三台服务器,仲裁服务器不保存任何数据,只作打破选举用,普通的服务器即可,甚至可以部署在应用服务器上。配置成功之后若PRIMARY宕机或者出现异常,Replica Set会马上切换其中的一台SECORDARY为PRIMARY,这个过程大概在30秒之内,由Replica Set自动完成。
3、Config server标准配置就是3台,down掉一台只影响resharding,不影响数据的正常读写。
Mongos仅作路由,不保存数据。杀掉或重启对数据不会有任何影响,但是会丢失请求。mongos本身不支持failover,正在尝试在连接的client端通过配置进行mongos的failover。
4、mongos进程是不存在持久状态的,它的状态由config server决定,config server任何改变都会反应到所有mongos进程。
5、在每个Shard里保存的容器(Collection),会包含不同的Chunk(片),每个chunk是collection里一组连续的数据,chunk的信息包括:collection, minKey, maxKey,每个chunk里的Key都是minKey到maxKey的范围内。对于config server 主要保存的信息就是各个chunk的信息。每个config server都包含一整套chunk信息。
6、在sharded系统上的操作分两种类型,一种是targeted(指定shard的),一种是global(全局的);其实很容易理解,凡是包含key的find,insert,update操作是targeted的,不包含的find,insert,update是global的,sort操作都是全局的。
详情参考官方文档:http://www.mongodb.org/display/DOCS/Sharding+Introduction#ShardingIntroduction-OperationTypes
附Blog一篇:
分享到:
相关推荐
MongoDB数据库分布式架构演进,申明:本资源归原作者所有。
MongoDB是一种基于分布式文件存储的开源数据库系统,它在处理大量数据时表现出高效、可扩展性和高可用性。MongoDB采用JSON(JavaScript Object Notation)文档格式存储数据,这种格式灵活且易于理解,使得它在大数据...
总结,本发明提供了一种利用MongoDB分布式集群架构的日志系统,结合分片技术实现了日志数据的有效管理和高效处理。通过对分片策略的优化,系统能够适应不断增长的数据量,同时保持高可用性和性能,为大规模日志分析...
(1) 分片集使用PSA架构 (2) 配置集使用单节点副本集 (3) 请在报告中使用文字和截图详细描述MongoDB分片集群搭建及配置的主要步骤: - 搭建配置集服务器(Mongod) - 搭建分片集服务器(Mongod) - 搭建路由...
6. 负载均衡:MongoDB的平衡器会定期检查数据分布,当某分片负载过高或空闲时,会自动迁移数据以保持平衡。 7. 查询路由:客户端通过路由进程查询数据,路由进程根据分片键将请求转发到正确分片。 总结,MongoDB的...
### MongoDB大型分布式部署详解 #### 一、MongoDB大型分布式部署概述 MongoDB是一种非常流行的NoSQL数据库系统,尤其适用于需要处理大量非结构化数据的应用场景。随着业务的增长和技术的发展,单机部署往往无法...
MongoDB分布式数据库安装部署和应用文档
### MongoDB分布式集群搭建详解 #### 一、集群与分布式概念 **集群(Cluster)**与**分布式(Distributed)**是两种常见的架构设计模式,用于提高系统的可用性、可伸缩性和性能。 1. **集群(Cluster)** - **定义**:...
总结来说,MongoDB的分布式集群设计旨在提供可扩展性、容错性和高可用性。理解这些核心概念对于有效管理和优化MongoDB集群至关重要,可以帮助开发者和运维人员更好地应对大数据场景下的挑战。通过合理配置和管理这些...
NULL 博文链接:https://zhaoshijie.iteye.com/blog/1314158
总结来说,MongoDB的分布式架构设计使其成为处理大数据的利器,尤其是对于需要快速访问和分析非结构化数据的应用场景。通过理解MongoDB的这些分布式特性和能力,开发者可以更好地构建高性能、可扩展的应用程序。
高性能分布式爬虫,基于Flask 数据库采用MongoDB 分布式采用Redis .zip
### Linux安装ElasticSearch与MongoDB分布式集群环境下数据同步 #### 概述 在现代的大数据处理场景下,为了提高数据处理效率以及更好地利用资源,通常会采用多种数据库技术组合的方式来构建系统架构。Elastic...
MongoDB是一种基于分布式文件存储的开源数据库系统,它的分布式集群是其最为重要的特性之一,尤其是ReplicaSet复制集/副本集,即MongoDB中的高可用性解决方案。 在MongoDB分布式集群中,副本集的概念是核心组成部分...
分布式架构是现代软件系统设计的核心概念,特别是在大数据处理、云计算以及高并发应用场景中。这份"分布式架构面试题汇总.zip"包含的资源很可能是为准备分布式系统相关面试的求职者提供的。接下来,我们将深入探讨...
MongoDB构建分布式文件存储的数据库MongoDB构建分布式文件存储的
NoSQL数据库(如MongoDB、Cassandra)和NewSQL数据库(如Google Spanner)为分布式架构提供了新的解决方案,它们通常牺牲部分ACID属性以换取更高的扩展性。 5. **分布式计算**:分布式计算允许将大型计算任务分解为...
基于Flask 数据库采用MongoDB 分布式采用Redis高性能分布式爬虫详细文档+资料齐全.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,...