专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Go

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

发布时间:2011-06-29 18:25:18 文章来源:www.iduyao.cn 采编人员:星星草
第五部分 架构篇 第十二章 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 性能监控

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

  • ModernUI课程:定义一个Logo

    ModernUI教程:定义一个Logo ModernWindow的标题栏包含了一块区域用来显示自定义的窗体Logo: 这个窗体logo通过ModernWindow.LogoD...

  • Django忘记管理员账号和密码的解决方法

    Django忘记管理员账号和密码的解决办法 看着Django的教程学习搭建网站,结果忘记第一次创建的账号和密码了。结果搭建成功以后,一直...

  • GO语言小结(1)——基本知识

    GO语言总结(1)——基本知识 1、注释(与C++一样)   行注释://  块注释:/*   ...  */ 2、标识符   可以这么说,除了数字开头...

  • golang 惯用的文件读取方式

    golang 常用的文件读取方式 Golang 的文件读取方法很多,刚上手时不知道怎么选择,所以贴在此处便后速查。 一次性读取 小文件推荐一...

  • 查询深圳市通相关信息

    查询深圳通相关信息 用 HTTP.GET 从开放 API 中查询深圳通信息,然后将 JSON 数据存入结构体中,再格式化输出。 注意:获取的并不是实...

  • Go语言设计模式实践:结合(Composite)

    Go语言设计模式实践:组合(Composite) 关于本系列 这个系列首先是关于Go语言实践的。在项目中实际使用Go语言也有段时间了,一个体会就...

  • 列出索引和遍历目录

    列出目录和遍历目录 获取目录列表用 ioutil.ReadDir(),遍历目录用 filepath.Walk(),使用方法请参考文章示例。 示例代码: package ma...

  • io 包的惯用接口速记

    io 包的常用接口速记 我没有 C/C++ 基础,没有接口的概念,且从 Python 投奔而来,Python 的极简主义(一个结果往往只提供一个方法),让我在...

  • 代理服务扩充

    代理服务扩展 之前自己实现了一个代理服务,当时考虑的是只要支持SOCKS5就好了,因为我经常用CHROME,配合着SwitchySharp,体验还是很棒...

  • 文件的创造与打开

    文件的创建与打开 文件操作是个很重要的话题,使用也非常频繁,熟悉如何操作文件是必不可少的。Golang 对文件的支持是在 os package ...

热门推荐: