MongoDB 的replication机制除了最普通的Master/Slave模式之外,更强大的就是其支持自动故障转移的Replica Sets模式了。相对于其问题多多的auto-sharding机制,Replica Sets还是相对比较稳定。

作为MongoDB使用大户,Foursquare(简称4sq) 在MongoDB使用上有相当丰富的经验,下面是4sq的一篇文章,描述了Replica Sets机制在4sq 中的几种架构方式。

原文链接:Fun with MongoDB replica sets

1.在原有的Master/Slave 机制上添加一台arbiter

4sq 在早期有一些Master/Slave的MongoDB架构,但这种模式不能实现自动的故障转移,需要在发生故障时手动进行切换。在Replica Sets出现后,这种结构被迁移成为三台机器的Replica Sets:一台Primary,一台Secondary,一台Arbiter。

迁移过程:

修改Master和slave的配置,添加如下几项,并重启MongoDB。

replSet = auxdb
fastsync = true
rest = true

fastsync 使得重启动可以使用到原来的数据文件,重启会非常快。然后再在Primary上用rs.add 和 rs.addArb 将Secondary和Arbiter添加上。就算完成了。

2.一个 Primary用于写,多个Secondary用于读和一个Secondary用于备份

在写多读少的应用中,4sq主要使用了Replica Sets来实现读写分离。通过在连接时指定slaveOk,将读操作放到Secondary上,Primary只承担写操作。同时指定一台priority为0,hidden为true的Secondary来进行备份(这样设置后此机器在读写中都不可见,并且不会被选举为Primary)

3.MongoDB经典配置,上层是Auto-Sharding,每个Sharding结点又是一个Replica Sets

虽然4sq在这上面吃过亏,但很明显他们已经吸取了教训并且在更合理更小心的使用Auto-Sharding这一诱人的功能。

注意:如果 一个 Primary,一个Secondary,一个Arbiter的时候,不能指定slaveOk,因为用slaveOk指定读写分离后,写全部到primary,读全部到secondary,如果primary宕掉,secoryary就变成primary,而此时就没有secondary,也就没法读。

最新文章

  1. JavaScript getComputedStyle
  2. jar包制作
  3. CM_RESOURCE_LIST structure
  4. [转]WIN7系统安装Apache 提示msvcr110.DLL
  5. Chorme 快捷键
  6. maven lean install 的时候出错 Failed to clean project
  7. Struts2的配置和一个简单的例子
  8. call是什么?一次说个明白
  9. 一口一口吃掉Hibernate(五)——一对多单向关联映射
  10. ubuntu中文乱码解决
  11. 雅礼 noip2018 模拟赛day3 T2
  12. 298. Binary Tree Longest Consecutive Sequence最长连续序列
  13. jQuery的介绍
  14. linux上 安装软件
  15. HTTP Status 400 - description The request sent by the client was syntactically incorrect.
  16. PCA图
  17. JAVA各种系统架构图及其简介
  18. 页面的缓存设置与meta的作用详细解释
  19. Jquery 在多个相同标签click的问题
  20. MySQL实现允许远程用户登录(使用Navicat for MySQL工具)

热门文章

  1. Zeller公式推导及C#代码示例(待完善)
  2. T-SQL over()函数在单个表中的聚合
  3. Scrum Meeting---Two(2015-10-26)
  4. iOS - Swift NSLocale 本地化信息
  5. php提示:Call to undefined function curl_init
  6. VIM跳到指定行
  7. [css] 垂直居中方法
  8. hibernate的注解属性mappedBy详解
  9. maven 启动 报错 Fatal error compiling: 无效的目标发行版
  10. OpenCV3编程入门笔记(3)线性滤波、非线性滤波、图像深度、通道