zoukankan      html  css  js  c++  java
  • [ mongoDB ] mongoDB replSet 添加节点注意事项

    mongoDB replSet(复制集群)

    MongoDB支持多个机器中通过异步复制达到故障转移和实现冗余。多机器中同一时刻只有一台是用于写操作。正式由于这个情况,为mongoDB提供了数据一致性的保障。担当primary角色的机器能把读操作分发给slave。

    部署Replica Sets

    当读的压力越来越大时,可能会考虑添加slave节点机,分摊读压力。通常我们有两种方式添加节点。

    一)通过oplog添加节点

    oplog是主从操作日志。mongoDB的 Replice Set架构是通过一个日志来存储写操作,就是oplog。oplog.rs是一个固定长度的capped collection,他存储在local数据库中,用于记录Replice Set 操作日志(写)。

    我们可以通过db.oplog.rs.find()查看其具体操作内容,或者使用printReplicationInfo()查看oplog元数据信息,printSlaveReplicationInfo查看slave的同步状态。

    使用这种方式添加节点就好比通过oplog模拟了Primary的“整个”操作过程,(是整个完整的么?)以完成内容复制。

    问题:

    由于oplog是一个固定长度的capped collection,那么他并非完整的记录了primary的所有操作,因为日志中存储的信息有可能已经刷新过了。那么这个时候我们就要利用第二种方式了。

    二)--fastsync和oplog配合使用

    我们会想,直接将primary(或者当前集群中的某一slave)的数据文件复制出来,然后新节点直接指定到该数据文件目录(--dbpath),然后将复制到添加到集群(rs.add)过程中primary的操作通过oplog日志追加不就好了么?

    实际上,这就是方式二的做法。

    1)获取一个复制集成员的物理文件来初始化数据

    scp -r /data/r /data/newSlave

    特别注意,由于复制时被复制的物理文件尚未“离线”(r文件夹中持有mongoDB的锁),这个锁也会被复制到newSlave中,引起数据同步失败!

    2)启用新节点

    3)在primary中添加节点(rs.add)

    ----------------------------------------------------

    Capped Collection

    capped collection 是性能出色的有着固定大小的集合,以LRU(least recently used)规则和插入顺序进行age-out处理,自动维护集合中对象的插入顺序,在创建时要预先指定大小。如果空间用完,新添加的对象将会取代集合中最旧的对象。

  • 相关阅读:
    WPF关于改变ListBoxItem的颜色的注意事项以及如何找到ListBox中的ItemsPanel
    WPF中关于配置文件的读取
    C++虚函数和虚函数表
    gdb调试技巧
    libevent和基于libevent的网络编程
    Reactor模式详解
    Ubuntu Linux 下文件名乱码(无效的编码)的快速解决办法
    Linux进程间通信——使用共享内存
    Linux进程间通信——使用信号量
    布隆过滤器(Bloom Filter)详解
  • 原文地址:https://www.cnblogs.com/huangfox/p/2443853.html
Copyright © 2011-2022 走看看