第五部分 架构篇 第十二章 MongoDB Replica Sets 架构(简介)

1、Replication简介

MongoDB Replication即是在多个服务器中同步复制数据,数据复制的目的为提供冗余和提高数据的可用性,数据复制的操作即在不同的数据库服务器上保存多份复制的数据集,以此来避免单机故障进而丢失数据,复制机制也允许你恢复硬件故障和服务中断,进而起到数据的容灾和备份作用。

在MongoDB中,一个复制集就是一组mongod实例,一个mongod实例作为primary也就是所谓的master服务,接收所有的写操作,其他的mongod实例作为secondaries也就是所谓的slave服务,它们的业务来自于primary,以便于得到和primary相同的数据集。

1.1、Primary(master)

primary服务接收来自客户端的所有些操作,一个复制集架构中仅仅只能有一个primary服务,因为仅仅只允许一个复制集的成员接收写操作,复制集架构提供严格规定所有的读必须来自primary,MongoDB通过oplog日志来支持数据的变更。

以下是基于primary的复制集基础架构图:

1.2、secondaries(slave)

secondaries服务复制primary的主日志(oplog)来对它们的数据集进行操作,Secondaries数据集反映的是primary数据集,如果primary服务不可达,Replica Set架构会自动选择一个Secondaries来作为Primary,默认情况下,客户端从Primary进行读操作,然而客户端可以直接发送读操作给一个Secondaries服务来获取数据。客户端从Secondaries服务读取的数据不一定反映的是Primary的数据。

以下是基于Secondaries的复制集架构:

1.3、Arbiter(仲裁者)

基于上述的两种架构,你可以可以在其中添加一个额外的mongod实例作为replica set架构的仲裁者(arbiter),arbiter不会持有一个数据集,arbiter仅仅在当primary不可达时,要选择一个Secondary来作为primary的选举中投票使用,如果你的replica set架构有很多的成员,添加一个arbiter在primary的初级选举中会获得更多的票数,Arbiter不需要专门的硬件来支持。

以下是添加Arbiter的Replica Set架构:

注意:一个arbiter将永远都是一个arbiter,也就是说在一个Replica Set架构中一个仲裁者将永远是一个仲裁者,一个Primary可以变成一个Secondary,一个Secondary在重新的选举中也可以成为一个Primary。但是仲裁者在架构中不管发生都不能变化。

1.3.1、Replica Set Arbiter(复制集仲裁者)

在前面我们已经讲到了一个Arbiter(仲裁者)不会持有数据集的备份,也不能成为一个Primary服务来接收客户端的写操作,Replica Set也许在选择Primary有Arbiter(仲裁者)来增加选票,Aribter(仲裁者)允许复制集有不均匀的成员数量,它却没有像成员复制数据的开销。

注意:不要在和Primary服务以及Secondary服务成员同一台主机上运行一个Arbiter(仲裁者),仅仅添加一个Arbiter(仲裁者)作为一个Replica Set的固定成员,如果你添加一个Arbiter(仲裁者)作为一个Replica Set的临时成员,这个Replica Set也许在选举中造成投票不公平。

那么怎么在一个Replica Set架构中添加一个Arbiter(仲裁者)呢?

Arbiters(仲裁者)是一个mongod实例,作为Replica Set架构的一部分,但是它不会持有数据集,Arbiter(仲裁者)参与Primary的选举,以便打破选举中的绑架关系,如果一个Replica Set有均匀的成员,添加一个Arbiter(仲裁者)需要有一些极少的必备条件,它不需要硬件的支持,你可以在一个应用服务或者监控主机上部署一个Arbiter(仲裁者)服务。

注意事项:

  • 不要在一个Replica Set架构的成员的机器上部署一个Arbiter(仲裁者)服务。
  • Arbiter(仲裁者)不存储数据,但是当一个Arbiter(仲裁者)的mongod进程被添加到一个Replica Set架构中,Arbiter(仲裁者)会像其他任何一个mongod进程一样开始启动一个带有满容量的journal的数据文件集合。
  • Arbiter允许在一个Replica Set中设置一个投票选举的基数。如下图架构所示:

1.3.2、添加一个Arbiter(仲裁者)

  • 创建一个仲裁者的数据目录(如dbpath),mongod实例用这个目录来保存配置数据,该目录不会保存一个来自primary主日志复制的数据集合。如下所示:
mkdir /data/arb
  • 开启一个Arbiter服务,需要指定数据目录和Replica Set名称,如下所示:
mongod --port 30000 --dbpath /data/arb --replSet rs
  • 使用rs.addArb()方法将Arbiter服务添加到一个Replica Set,同时连接到Primary服务。
rs.addArb("m1.example.net:30000")

此时便在m1.example.net主机上运行了一个端口在30000的Arbiter(仲裁者)服务。

1.3.3、(Security)安全

Authentication(认证)

当Arbiter运行在一个需要认证的Replica Set的架构中时,Arbiter(仲裁者)交换凭据对该组成员进行身份验证,通过mongodb的加密认证进程,MongoDB认证交换加密的安全证书,此时Arbiter(仲裁者)服务需要一个key文件去验证Replica Set架构。

Communication(沟通)

在一个部署有Arbiter(仲裁者)的Replica Set架构中,仅仅只有Arbiter和其他成员的沟通,如选举投票、心跳、和配置数据的这些数据中不进行加密。

注意:当然如果你的MongoDB使用SSL部署,MongoDB将加密Replica Set架构中所有成员的沟通,关于SSL的MongoDB中应用在后面的章节会依依列出。

-------------------------------------------------------------MongoDB系列博文更新--------------------------------------------------------------------------------------------

第一部分 基础篇 第一章 走进MongoDB

第一部分 基础篇 第二章 安装MongoDB

第一部分 基础篇 第三章 MongoDB体系结构

第一部分 基础篇 第四章 MongoDB快速入门

第一部分 基础篇 第四章 MongoDB查询

第二部分 应用篇 第五章 MongoDB高级查询

第二部分 应用篇 第六章 MongoDB GridFS

第二部分 应用篇 第七章 MongoDB MapReduce

第三部分 管理篇 第八章 MongoDB服务管理

第三部分 管理篇 第九章 MongoDB shell之系统命令、用户命令

第三部分 管理篇 第九章 MongoDB shell之eval、进程

第四部分 性能篇 第十章 MongoDB 索引

第四部分 性能篇 第十一章 MongoDB 性能监控

时间: 2024-12-21 08:02:39

第五部分 架构篇 第十二章 MongoDB Replica Sets 架构(简介)的相关文章

第五部分 架构篇 第十四章 MongoDB Replica Sets 架构(自动故障转移/读写分离实践)

说明:该篇内容部分来自红丸编写的MongoDB实战文章. 1.简介 MongoDB支持在多个机器中通过异步复制达到故障转移和实现冗余,多机器中同一时刻只有一台是用于写操作,正是由于这个情况,为了MongoDB提供了数据一致性的保障,担当primary角色的服务能把读操作分发给Slave(详情请看前两篇关于Replica Set成员组成和理解). MongoDB高可用分为两种: Master-Slave主从复制:只需要在某一个服务启动时加上-master参数,而另外一个服务加上-slave与-so

第五部分 架构篇 第十三章 MongoDB Replica Sets 架构(成员深入理解)

在学习复制的概念之前,首先接着前面一章节的还有点未完结的内容做个简单的介绍,主要是自动故障转移.异步复制.以及附加功能,这些在此只做简单的介绍,在以后的相关章节中会专门深入学习. 1.自动故障转移 当Primary服务和架构中其他成员中断通信超过10秒,Replica Set将尝试选举其他成员成为一个新的Primary服务,获得多票数的Scondary将成为Primary. 架构如下: 说明: 在一个Replica Set架构中,如果Primary不可达,则会在除Primary之外的其他成员中自

第五部分 架构篇 第十九章 MongoDB Sharding 架构( mongos)

1.mongos mongos是用户和集群间的交互点,其职责是隐藏分片内部的复杂性并向用户提供一个简洁的单服务器接口,这个抽象层中也存在一些缝隙,不过大多数情况下mongos允许你把一个集群当做一台服务器. 使用集群时,应该连接一个mongos并向它发送所有的读写操作,无论如何,你都不应该直接访问分片(但如果想的话能做到). mongos会将所有用户请求转发到恰当的分片上,如果用户插入一份文档,mongos会查看文档的片键,对照数据块,并把文档发送到持有相应块的分片上. 举个例子,比如说我们要插

第五部分 架构篇 第十六章 MongoDB Sharding 架构(理解分片)

1.简介 这是一种将海量的数据水平扩展的数据库集群系统,数据分表存储在sharding的各个节点上,使用者通过简单的配置就可以很方便地构建一个分布式的MongoDB集群. 那么首先我们应该理解何为分片(sharding)以及它的基本工作模式. 2.什么是分片 分片(sharding)是MongoDB用来将大型集合分割到不同服务器(或者说一个集群)上所采用的方法,尽管分片起源于关系型数据库分区,但它(像MongoDB大部分方面一样)完全是另外一回事. 和你可能使用过的任何分区方案相比,MongoD

第五部分 架构篇 第十五章 MongoDB Replica Sets 架构(动态增加删除结点)

1.Replica Set增加结点 MongoDB Replica Set不仅提供高可用性的解决方案,它也同时提供负载均衡的解决方案,增减Replica Sets结点在实际应用中非常普遍,比如当应用的读压力暴增时,3台结点的环境已经不能满足需求,那么就需要增加一些结点将压力平均分配一下,当应用的压力小时,可以减少一些结点来减少硬件资源的成本,总是是一个长期且持续的工作. 官方给我们提供了2个方案用于增加结点,一种是通过oplog来增加结点,一种是通过数据库快照(--fastsync)和oplog

明解C语言 入门篇 第十二章答案

练习12-1 /* 用表示学生的结构体来显示高尾的信息 */ #include <stdio.h> #define NAME_LEN 64 /* 姓名的字符数 */ /*=== 表示学生的结构体 ===*/ struct student { char name[NAME_LEN]; /* 姓名 */ int height; /* 身高 */ float weight; /* 体重 */ long schols; /* 奖学金 */ }; int main(void) { struct stud

C primer plus 第五版十二章习题

看完C prime plus(第五版)第十二章,随带完成了后面的习题. 1.不使用全局变量,重写程序清单12.4的程序. 先贴出12.4的程序,方便对照: 1 /* global.c --- 使用外部变量 */ 2 #include <stdio.h> 3 int units = 0; //一个外部变量 4 void critic(void); 5 int main(void) 6 { 7 extern int units; 8 9 printf ("How many pounds

疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条

http://blog.csdn.net/terryzero/article/details/3797782 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条 标签: swing编程java任务timerstring 2009-01-16 21:12 6722人阅读 评论(0) 收藏 举报  分类: J2SE(63)  版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天讲了Swing基本的控件,今天开始讲特殊控件.一天讲2个吧,首先讲用JProgressBar,Pro

【.NET Core项目实战-统一认证平台】第十二章 授权篇-深入理解JWT生成及验证流程

原文:[.NET Core项目实战-统一认证平台]第十二章 授权篇-深入理解JWT生成及验证流程 [.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章介绍了基于Ids4密码授权模式,从使用场景.原理分析.自定义帐户体系集成完整的介绍了密码授权模式的内容,并最后给出了三个思考问题,本篇就针对第一个思考问题详细的讲解下Ids4是如何生成access_token的,如何验证access_token的有效性,最后我们使用.net webapi来实现一个外部接口(本来想用JAVA来实现的,