Mongodb的replication主要有两种:主从和副本集(replica set)。主从的原理和mysql类似,主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。 
   现在mongodb官方建议用副本集替代主从复制,但是这不妨碍我们从主从复制入门,了解mongdob的replication。

什么是oplog:

  MongoDB 的Replication是通过一个日志来存储写操作的,这个日志就叫做oplog。 在默认情况下,oplog分配的是5%的空闲磁盘空间。通常而言,这是一种合理的设置。可以通过mongod --oplogSize来改变oplog的日志大小。 oplog是capped collection,因为oplog的特点(不能太多把磁盘填满了,固定大小)需要,MongoDB才发明了capped collection(the oplog is actually the reason capped collections were invented)。

  oplog的位置 oplog在local库: master/slave 架构下 local.oplog.$main。

主数据库配置(master.conf )

  1. # 数据库文件存储位置
  2. dbpath = /data/db/master
  3. # log文件存储位置
  4. logpath = /data/log/mongodb/master/mongodb.log
  5. # 使用追加的方式写日志
  6. logappend = true
  7. # 是否以守护进程方式运行
  8. fork = true
  9. # 端口号
  10. port =
  11. # 是否启用认证
  12. auth = true
  13. # 集群的私钥的完整路径,只对于Replica Set 架构有效(noauth = true时不用配置此项)
  14. keyFile = /usr/local/mongodb/mongodb-keyfile
  15. # diaglog选项 =off =W =R =both =W+some reads
  16. #diaglog =
  17. # 设置主从服务器
  18. master = true
  19. # 设置oplog的大小(MB)
  20. oplogSize=

从数据库配置(slave1.conf)

  1. # 数据库文件存储位置
  2. dbpath = /data/db/slave1
  3.  
  4. # log文件存储位置
  5. logpath = /data/log/mongodb/slave1/mongodb.log
  6.  
  7. # 使用追加的方式写日志
  8. logappend = true
  9.  
  10. # 是否以守护进程方式运行
  11. fork = true
  12.  
  13. # 端口号
  14. port =
  15.  
  16. # 是否启用认证
  17. auth = true
  18.  
  19. # 集群的私钥的完整路径,只对于Replica Set 架构有效(noauth = true时不用配置此项)
    keyFile = /usr/local/mongodb/mongodb-keyfile
  1. # diaglog选项 =off =W =R =both =W+some reads
  2. #diaglog =
  3.  
  4. # 设置主从服务器
  5. slave = true
  6.  
  7. # 用于从节点,指定从节点的复制来源(主节点的IP+端口),格式为:<host><:port>
  8. source = 127.0.0.1:

注意:

  如果使用认证的方式启动服务(auth = true),那么要在主从服务器配置私钥。

  1. // 在一台服务器上生成私钥
  2. openssl rand -base64 745 > mongodb-keyfile
  3.  
  4. // 修改私钥的权限为可读写
  5. chmod 600 mongodb-keyfile
  6.  
  7. // 将私钥拷贝到其余的服务器上
  8. scp mongodb-keyfile root@xxx.xxx.xxx.xxx:/usr/local/mongodb/

  然后配置私钥路径,启动服务。

启动数据库:

  1. /usr/local/mongodb/bin/mongod --config /usr/local/mongodb/master.conf
    /usr/local/mongodb/bin/mongod --config /usr/local/mongodb/slave1.conf

当启动slave后,slave端会自动进行初始化resync同步,可以在日志查看到同步信息:

  1. --03T11::46.396+ I NETWORK [thread1] waiting for connections on port
  2. --03T11::47.415+ I REPL [replslave] syncing from host:127.0.0.1:
  3. --03T11::47.458+ I REPL [replslave] resync: dropping database admin
  4. --03T11::47.458+ I REPL [replslave] resync: cloning database admin to get an initial copy
  5. --03T11::47.481+ I COMMAND [replslave] setting featureCompatibilityVersion to 3.4
  6. --03T11::47.482+ I STORAGE [replslave] copying indexes for: { name: "system.version", type: "collection", options: {}, info: { readOnly: false }, idIndex: { v: , key: { _id: }, name: "_id_", ns: "admin.system.version" } }
  7. --03T11::47.500+ I INDEX [replslave] build index on: admin.system.version properties: { v: , key: { version: }, name: "incompatible_with_version_32", ns: "admin.system.version" }
  8. --03T11::47.500+ I INDEX [replslave] building index using bulk method; build may temporarily use up to megabytes of RAM
  9. --03T11::47.504+ I INDEX [replslave] build index done. scanned total records. secs
  10. --03T11::47.504+ I REPL [replslave] resync: done with initial clone for db: admin
  11. --03T11::47.505+ I REPL [replslave] syncing from host:127.0.0.1:
  12. --03T11::48.506+ I REPL [replslave] sleep sec before next pass
  13. --03T11::49.506+ I REPL [replslave] syncing from host:127.0.0.1:
  14. --03T11::50.507+ I REPL [replslave] syncing from host:127.0.0.1:
  15. --03T11::51.507+ I REPL [replslave] syncing from host:127.0.0.1:
  16. --03T11::52.508+ I REPL [replslave] syncing from host:127.0.0.1:
  17. --03T11::53.509+ I REPL [replslave] syncing from host:127.0.0.1:
  18. --03T11::54.509+ I REPL [replslave] syncing from host:127.0.0.1:
  19. --03T11::55.510+ I REPL [replslave] syncing from host:127.0.0.1:
  20. --03T11::56.510+ I REPL [replslave] syncing from host:127.0.0.1:
  21. --03T11::58.493+ I REPL [replslave] syncing from host:127.0.0.1:
  22. --03T11::59.494+ I REPL [replslave] syncing from host:127.0.0.1:
  23. --03T11::00.495+ I REPL [replslave] syncing from host:127.0.0.1:
  24. --03T11::01.495+ I REPL [replslave] syncing from host:127.0.0.1:
  25. --03T11::02.496+ I REPL [replslave] syncing from host:127.0.0.1:

resync:

  当slave端落后过多的时候需要进行resync。resync会在master上加一个全局的写锁,会阻塞其它的写操作,直到resync结束。可以使用数据库命令进行resync:

  1. use admin
  2. db.runCommand({"resync":1})

mongodb配置主从模式的更多相关文章

  1. 搭建高可用mongodb集群(一)——mongodb配置主从模式

    转载自:LANCEYAN.COM 在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写.海量数据高效存储.高可扩展性和高可用性这些难题.不过就是因为这些问题Nosql诞生了. NOSQ ...

  2. mongodb配置“主从”模式

    版本的mongodb不支持Master/slave模式了.推荐使用集群模式.大家都知道,集群模式需要多于三台的奇数台机器(奇数个进程测试有意义,实际意义不大)现在我的手头有两台主机,更合理的配置个人觉 ...

  3. MySql配置主从模式 Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

    今天在学习MyCat环境搭建的时候,在配置MySql的主从模式,发现slave在配置完毕后,配置的内容全部正确的情况下,报错了? Last_IO_Error: Fatal error: The sla ...

  4. mongodb集群配置主从模式

    测试环境 操作系统:CentOS 7.2 最小化安装 主服务器IP地址:192.168.197.21 master-node 从服务器IP地址:192.168.197.22 slave-node 关闭 ...

  5. rabbitmq配置镜像模式

    学习是spring cloud的时候用到了rabbitmq,在实际项目中也用到了,镜像模式是集群的基础上面配置的,就多了一个数据同步,rabbitmq存储消息用的是cookie,配置之前先同步cook ...

  6. redis的主从模式搭建及注意事项

    前言:本文先分享下如何搭建redis的主从模式配置,以及主从模式配置的注意事项.后续会继续分享如何实现一个高可用的redis服务,redis的Sentinel 哨兵模式及集群搭建. 安装: 1,yum ...

  7. CentOS双机中Docker下安装Mysql并配置互为主从模式

    CentOS双机中Docker下安装Mysql并配置互为主从模式 目录 1.搜索镜像... 1 2.拉取镜像... 1 3.绑定端口: 1 4.配置文件(修改/etc/mysql/my.cnf文件): ...

  8. activemq持久化配置,设置为主从模式(带复制的主从模式,应用mysql数据库)

    配置文件如下<!--    Licensed to the Apache Software Foundation (ASF) under one or more    contributor l ...

  9. Redis 单例、主从模式、sentinel 以及集群的配置方式及优缺点对比(转)

    摘要: redis作为一种NoSql数据库,其提供了一种高效的缓存方案,本文则主要对其单例,主从模式,sentinel以及集群的配置方式进行说明,对比其优缺点,阐述redis作为一种缓存框架的高可用性 ...

随机推荐

  1. oracle分析函数之ratio_to_report

    ratio_to_report主要完成对百分比的计算,语法为ratio_to_report(exp) over()也就是根据over窗口函数的作用区间,求出作用区间中的单个值在整个区间的总值的比重比如 ...

  2. 性能测试培训day1

    测试本质: 1构造测试数据和期望结果 2执行 3验证 自动化测试: 写完代码,单元测试测代码逻辑,单元测试搞清楚代码逻辑就行了(白盒测试)先静态,运行前用工具扫描BUG例如(a==11写成a=11), ...

  3. 详细了解为什么支持Postman Chrome应用程序已被弃用?

    本地postman chrome插件确实也无法正常使用,只有Postman官方自己的软件应用程序可以使用.笔者多少追溯终于知道原因,并紧急上线了不同操作系统版本的Postman应用程序. 为什么近期P ...

  4. ORM之连表操作

    ORM之连表操作 -----------------------------连表的正向操作------------------------- 在models.py中创建两张表UserType和User ...

  5. java 反射---学习笔记

    一.java的动态性 反射机制 动态编译 动态执行JavaScript代码 动态字节码操作 二.动态语言 动态语言 程序运行时,可以改变程序结构或变量类型,典型的语言:python.ruby.java ...

  6. 将json格式转为url参数格式的方法(xjl456852整理修改)

    测试页面: <html> <head> <script type="text/javascript" src="jquery-1.11.3. ...

  7. 拥抱变革(More Fearless Change)

    今天从大敏捷群中了解到Tid2017的一个讲演,一位敏捷教练,组织变革的专著的作者Linda的讲演. <More Fearless Change-Strategy for Making Your ...

  8. Oracle锁表数据查询及解决方法

    首先:查询数据那些表被锁定1. SELECT l.session_id sid, s.serial#, l.locked_mode,l.oracle_username, l.os_user_name, ...

  9. Linux下汇编语言学习笔记66 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  10. linux 常见名词及命令(六)

    查看软件安装位置 : dpkg -L 软件包名字 ubuntu环境的apache相关命令: 查看是否启动:ps -aux | grep httpd  或者 netstat -an | grep :80 ...