一、主从复制

1、主从复制是一个简单的数据库同步备份的集群技术,如下图:要明确的知道主服务器与从服务器,且从服务器要明确的知道主服务器的存在。

2、在MongoDB中在启动数据库服务时,可以用master参数来指定主服务器,如下图:bind_ip是主数据库所在服务器IP

而用slave参数可以指定从服务器,如下图:source参数用于指定主服务器

以上两个数据库的关系如下图:这样过后,在主数据库中的操作就会立马在从数据库中进行复制。

3、常用配置参数

  • --only:用于配置从服务器,指定复制某个数据库。默认是复制全部数据库。
  • --slavedelay:用于配置从服务器,指定从主服务器同步数据的延迟(单位是秒)。
  • --fastsync:用于配置从服务器,把内存中的数据马上写回主服务器数据库,然后从服务器进行复制。
  • --autoresync:用于配置从服务器,如果从服务器是在主服务器运行一端时间之后才挂上来的,那么指定了此项参数后,从服务器会同步挂接上来之前那段时间主服务器中的数据;如果没有此参数,那么只会从当前挂接时间进行主从复制。
  • --oplogSize:用于配置主服务器,配置主服务器的日志大小。日志会把主服务器的操作都记录下来,从服务器从主服务器的日志中读取数据,然后在自己的数据库中操作一次来完成主从复制。主服务器数据库操作记录存储在local数据库的oplog.$main集合中,它的每一个文档都会保存一个服务器的操作。

4、利用shell动态添加和删除从服务器

如下图所示,这是在上面那台从服务器中shell界面的操作结果,可以得知从服务器关于主服务器的信息全部保存在从服务器的local数据库的sources集合中。所以只要对该集合进行操作就可以动态的配置从服务器。

删除这台从服务器配置的主服务器,如下图:

为从服务器挂接主服务器,如下图:

二、副本集

1、如下图所示有一个数据库集群,集群中有三台数据库服务器,一台活跃服务器和两台备份服务器。当活跃服务器A发生故障时,会根据权重算法从备份服 务器B和C中选出B作为新的活跃服务器,而当A恢复时当成备份服务器,继续加入到整个数据库集群中工作,这就是MongoDB的副本集。

2、配置一个副本集

首先采用如下图的三个配置配置启动三台数据库服务器,三台服务器相互指向下一个服务器形成一个环。

然后就需要初始化副本集。进入到这三台数据库服务器中任何一个的admin数据库,执行如下图的操作来初始化副本集:这里没有设置这三台服务器的权重,MonggoDB推选活跃服务器的策略是随机的。

分别进入到这三台服务器的shell界面,如下:可以发现端口号为3333的服务器被推选成了活跃服务器,而其它两台就是备份服务器

在活跃服务器shell中可以使用“rs.status()”来查看副本集的状态。

此时如果把端口3333的活跃服务器关掉后,如下图所示:端口为2222的服务器就成为了活跃服务器。如果又把端口为3333的服务器启动,可以发现端口3333的服务器就成为了备份服务器。

3、节点

  • standard:常规节点,参与投票,有可能成为活跃节点。如上的三台服务器都没有设置此参数,默认就是常规节点。
  • passive:副本节点,参与投票,但不能成为活跃节点。
  • arbiter:仲裁节点,只是参与投票,不复制节点,也不能成为活跃节点。

4、高级参数

  • priority:设置权重。可设置0到1000之间,0代表的是副本节点,1到1000是常规节点。
  • arbiterOnly:true表示设置仲裁节点。
  • 用法:在前面的初始化副本集中,只设置了_id和host两个key,此时就可以加上priority与arbiterOnly等key来初始化副本集。

5、优先级

如下图所示,本来A是活跃节点,B和C为副本集,B节点是在1秒之前进行复制更新的,C节点是在5秒之前进行复制更新的,A宕机之后会自动选择B为活跃节点(复制更新时间离宕机时间最近)。这种优先级优先于权重,会先考虑时间的优先级。

6、读写分离操作

注意:默认情况下非活跃服务器(副本节点)是不能进行数据库读操作的。如下图:

如果要设置副本节点也可以进行读操作,那么可以设置slaveOkay参数为true。但是此属性在shell中无法完成,这个特性是被写到MongoDB的高级驱动程序中的。

MongoDB 学习笔记(七):主从复制与副本集的更多相关文章

  1. MongoDB 学习笔记之 分片和副本集混合运用

     分片和副本集混合运用: 基本架构图: 搭建详细配置: 3个shard + 3个replicat set + 3个configserver + 3个Mongos shardrsname Primary ...

  2. MongoDB学习笔记(五)--复制集 && sharding分片

    主从复制                                                                                       主从节点开启 主节 ...

  3. MongoDB学习笔记(六)--复制集+sharding分片 && 总结

    复制集+sharding分片                                                               背景 主机 IP 服务及端口 Server A ...

  4. MongoDB学习笔记七:管理

    [启动和停止MongoDB]『从命令行启动』执行mongod,启动MongoDB服务器.mongod有很多可配置的启动选项:在命令行运行mongod --help可以查看所有选项.一些主要选项如下: ...

  5. MongoDB学习笔记(四)--索引 && 性能优化

    索引                                                                                             基础索引 ...

  6. MongoDB的主从复制和副本集

    mongoDB的两个特性主从复制和副本集,实现了数据的同步备份 一.主从复制 主从复制是一个简单的数据库同步备份的集群技术.例如主服务器宕机了,可以直接使用从服务器,主服务器恢复后在进行同步,保证了业 ...

  7. MongoDB主从复制和副本集

    MongoDB有主从复制和副本集两种主从复制模式,主从复制最大的问题就是无法自动故障转移,MongoDB副本集解决了主从模式无法自动故障转义的特点,因此是复制的首选.对于简单的主从复制无法自动故障转移 ...

  8. MongoDB学习笔记系列

    回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...

  9. mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)

    最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...

  10. MongoDB学习笔记系列~目录

    MongoDB学习笔记~环境搭建 (2015-03-30 10:34) MongoDB学习笔记~MongoDBRepository仓储的实现 (2015-04-08 12:00) MongoDB学习笔 ...

随机推荐

  1. tp5 权限设置

    ============================== <?php/** * Created by PhpStorm. * User: 14155 * Date: 2018/11/10 * ...

  2. 《 javascript 设计模式与开发实践 》 ---发布-订阅模式 代码小问题

    定义公共事件: 删除事件优化:

  3. 0926mysql中MRR的用法

    转自 http://blog.itpub.net/22664653/viewspace-1673682  [MySQL]MySQL5.6新特性之Multi-Range Read 2015-05-27 ...

  4. Rails 异常处理 &amp;&amp; 性能

    Rails 异常处理 的多种处理方法 1.  routes match '*path', via: :all, to: 'controller#action' 2.  application.rb 的 ...

  5. Java中Void占位符的測试及个人理解

    Java对Void类的说明是:Void 类是一个不可实例化的占位符类,它保持一个对代表 Java keyword void 的 Class 对象的引用. 代表的是: 代表主要的 Java 类型 voi ...

  6. HDU 1143 Tri Tiling

    链接:http://acm.hdu.edu.cn/showproblem.php? pid=1143 Tri Tiling Time Limit: 2000/1000 MS (Java/Others) ...

  7. Jquery-Uncaught ReferenceError: $ is not defined报错

    在我的jsp页面上有这些js代码: //载入数据 $(document).ready(function() { var param={}; param.page=3; param.size=10; $ ...

  8. AVL树、splay树(伸展树)和红黑树比较

    AVL树.splay树(伸展树)和红黑树比较 一.AVL树: 优点:查找.插入和删除,最坏复杂度均为O(logN).实现操作简单 如过是随机插入或者删除,其理论上可以得到O(logN)的复杂度,但是实 ...

  9. 字符流、字节流、二进制及其在HTTP协议传输

    一.二进制.字节.字符流概念 字(Byte)节是长度单位.位(bit)也是长度单位.计算机通信和存储的时候都是以010101这样的二进制数据为基础的二进制数有两个特点:它由两个基本字符0,1组成,二进 ...

  10. Linux查找并杀死僵尸进程

    1.查看系统是否有僵尸进程 使用Top命令查找,当zombie前的数量不为0时,即系统内存在相应数量的僵尸进程. 2.定位僵尸进程 使用命令ps -A -ostat,ppid,pid,cmd |gre ...