【客户的写请求全部发送至主节点】

Primary.

The primary receives all write operations.

Secondaries.

Secondaries replicate operations from the primary to maintain an identical data set. Secondaries may have additional configurations for special usage profiles. For example, secondaries may be ​​non-voting​​ or ​​priority 0​​.

https://docs.mongodb.com/manual/core/replica-set-oplog/

【主节点的操作日志 是从节点的数据源】

The ​​oplog​​ (operations log) is a special ​​capped collection​​ that keeps a rolling record of all operations that modify the data stored in your databases. MongoDB applies database operations on the ​​primary​​ and then records the operations on the primary’s oplog. The ​​secondary​​ members then copy and apply these operations in an asynchronous process. All replica set members contain a copy of the oplog, in the ​​local.oplog.rs​​collection, which allows them to maintain the current state of the database.

 

 

mongodb分布式集群架构

MongoDB集群包括一定数量的mongod(分片存储数据)、mongos(路由处理)、config server(配置节点)、clients(客户端)、arbiter(仲裁节点:为了选举某个分片存储数据节点那台为主节点)。

 

 

mongo 原理  Replica Set Oplog_数据块

1、shards:一个shard为一组mongod,通常一组为两台,主从或互为主从,这一组mongod中的数据时相同的,具体可见《mongodb分布式之数据复制》。数据分割按有序分割方式,每个分片上的数据为某一范围的数据块,故可支持指定分片的范围查询,这同google的BigTable 类似。数据块有指定的最大容量,一旦某个数据块的容量增长到最大容量时,这个数据块会切分成为两块;当分片的数据过多时,数据块将被迁移到系统的其他分片中。另外,新的分片加入时,数据块也会迁移。 

  

2、mongos:可以有多个,相当于一个控制中心,负责路由和协调操作,使得集群像一个整体的系统。mongos可以运行在任何一台服务器上,有些选择放在shards服务器上,也有放在client 服务器上的。mongos启动时需要从config servers上获取基本信息,然后接受client端的请求,路由到shards服务器上,然后整理返回的结果发回给client服务器。 

  

3、config server:存储集群的信息,包括分片和块数据信息。主要存储块数据信息,每个config server上都有一份所有块数据信息的拷贝,以保证每台config server上的数据的一致性。 

  

4、shard key:为了分割数据集,需要制定分片key的格式,类似于用于索引的key格式,通常由一个或多个字段组成以分发数据,比如: 

  

{ name : 1 } 

{ _id : 1 } 

{ lastname : 1, firstname : 1 } 

{ tag : 1, timestamp : -1 } 

  

mongoDB的分片为有序存储(1为升序,-1为降序),shard key相邻的数据通常会存在同一台服务

(数据块)上。 

 

 

三、mongodb分布式部署方式

服务器部署可以有多种方式。首先,每台config server、mongos、mongod都可以是单独的服务器,但这样会导致某些服务器的浪费,比如config server。下图为物理机共享的集群部署,不需要额外加机器。

 

 

 

mongo 原理  Replica Set Oplog_mongodb_02