• 叙永农业网
  • 您的位置:首页 >> 金融理财 >> 正文

    MongoDB副本集同步原理

    发表时间:2019-09-22 信息来源:www.altirahusa.com 浏览次数:1460

     

    MongoDB的同步原理,官方文档较少,在线信息不算太多,以下是官方文档,在线资料和测试日志的组合,整理出来的东西。

    因为MongoDB的每个分片也是副本集,所以您只需要同步副本集的原则。

    通常,MongoDB副本集同步包含两个主要步骤:

    首先,通过init sync同步全部数据,并通过复制不断重播主节点上的oplog同步增量数据。完成全部同步后,成员将STARTUP2转换为SECONDARY

    1.1初始化同步过程

    简单地说,它是遍历主节点上所有数据库的所有集合,将数据复制到自己的节点,然后从完全同步开始到周期结束时重新读取oplog并重放。

    初始同步完成后,辅助节点将为主节点上的local.oplog.rs创建一个tailable游标,并不断从主节点获取新写入的oplog并将其应用于自身。

    1.2初始化同步方案

    辅助节点需要高级吗?发生以下情况时的全面同步:

    这三个场景相互对应(场景2和场景3没有看到官方网站文件写的,请参考张有东大神博客)

    1.3对疑惑的解释

    1.3.1当同步全部数据时,是否会覆盖源数据的oplog,导致全部同步失败?

    在3.4及更高版本中,没有。

    下图说明了3.4全面同步的改进(图片来自张有东博客):

    官方文件是:

    2.1同步oplog的过程

    在完整的同步结束后,辅助服务器开始从结束时间点创建一个tailable游标,从同步源连续提取oplog并将应用程序重放到自身。此过程未由线程完成。 Mongodb将拉动以提高同步效率。 oplog和重放oplog被分配给不同的线程以供执行。

    具体的主题和作用如下(暂时没有在官方文件中找到,来自张有东大神的博客):

    生产者线程:此线程不断从同步源中提取oplog并将其添加到BlockQueue队列。 BlockQueue存储240MB的oplog数据。超过此阈值时,必须等到replBatcher使用oplog。拉。

    replBatcher线程:该线程负责逐个从生产者线程的队列中获取oplog,并将其放入由自己维护的队列中。此队列最多可包含5000个元素,元素的总大小不超过512MB。当队列已满时,您需要等待。消耗了oplogApplication

    oplogApplication将获取replBatch线程当前队列的所有元素,并根据docId将元素分散到不同的replWriter线程(如果存储引擎不支持文档锁,根据集合名称),replWriter线程应用所有oplog对自己;等待所有oplog一旦应用,oplogApplication线程将所有oplog序列写入local.oplog.rs集合。

    对于上面的描述,绘制图片以便于理解:

    可以通过db.serverStatus()。metrics.repl查询生产者缓冲区和应用线程的统计信息。

    2.2过程问题的解释

    2.2.1为什么oplog的播放必须创建如此多的线程?

    像mysql一样,一个线程做一件事,拉oplog是单线程的,其他线程回放;多个播放线程加速。

    2.2.2为什么我需要一个replBatcher线程来传输?

    当oplog重放,维护顺序以及遇到诸如create,drop等DDL命令时,这些命令不能与其他添加,删除和更改命令组合使用。这些控件由replBatcher执行。

    2.2.3如何解决主节点oplog重播无法赶上的主要问题?

    方法1:设置更多数量的播放线程

    方法2:增加oplog的大小

    方法3:将writeOpsToOplog步骤分散到多个replWriter线程中以便并发执行,并看到官方开发人员日志已经实现了这个(版本3.4.0-rc2)

    2.3备注

    初始同步单线程复制数据,效率相对较低,生产环境应尽量避免初始同步的出现,需要合理配置oplog。

    添加新的?节点,您可以通过物理复制避免初始同步?模式,将主服务器上的dbpath复制到新节点,然后直接启动。

    当辅助同步延迟是由于高主要并发写入时,db的sizeBytes值。 serverStatus()。指标。 REPL。缓冲区保持接近maxSizeBytes,可以通过调整辅助节点上的replWriter并发线程数来改进它。

    3.1同步日志的初始化

    将日志级别详细程度设置为1,然后过滤日志

    猫mg.log | egrep'clone |指数| oplog'> b.log

    最后,取出一些过滤后的日志。

    3.4.21新加入节点日志

    3.6.12添加新节点日志

    4.0.11添加新节点日志

    3.2复制日志

    参考:

    作者:hs2021

    阅读原文

    本文是云栖社区的原创内容,未经许可不得转载。

    阿里云云栖社区

    0.6

    2019.08.26 13: 40

    字1377

    MongoDB的同步原理,官方文档较少,在线信息不算太多,以下是官方文档,在线资料和测试日志的组合,整理出来的东西。

    因为MongoDB的每个分片也是副本集,所以您只需要同步副本集的原则。

    通常,MongoDB副本集同步包含两个主要步骤:

    首先,通过init sync同步全部数据,并通过复制不断重播主节点上的oplog同步增量数据。完成全部同步后,成员将STARTUP2转换为SECONDARY

    1.1初始化同步过程

    简单地说,它是遍历主节点上所有数据库的所有集合,将数据复制到自己的节点,然后从完全同步开始到周期结束时重新读取oplog并重放。

    初始同步完成后,辅助节点将为主节点上的local.oplog.rs创建一个tailable游标,并不断从主节点获取新写入的oplog并将其应用于自身。

    1.2初始化同步方案

    辅助节点需要高级吗?发生以下情况时的全面同步:

    这三个场景相互对应(场景2和场景3没有看到官方网站文件写的,请参考张有东大神博客)

    1.3对疑惑的解释

    1.3.1当同步全部数据时,是否会覆盖源数据的oplog,导致全部同步失败?

    在3.4及更高版本中,没有。

    下图说明了3.4全面同步的改进(图片来自张有东博客):

    官方文件是:

    2.1同步oplog的过程

    在完整的同步结束后,辅助服务器开始从结束时间点创建一个tailable游标,从同步源连续提取oplog并将应用程序重放到自身。此过程未由线程完成。 Mongodb将拉动以提高同步效率。 oplog和重放oplog被分配给不同的线程以供执行。

    具体的主题和作用如下(暂时没有在官方文件中找到,来自张有东大神的博客):

    生产者线程:此线程不断从同步源中提取oplog并将其添加到BlockQueue队列。 BlockQueue存储240MB的oplog数据。超过此阈值时,必须等到replBatcher使用oplog。拉。

    replBatcher线程:该线程负责逐个从生产者线程的队列中获取oplog,并将其放入由自己维护的队列中。此队列最多可包含5000个元素,元素的总大小不超过512MB。当队列已满时,您需要等待。消耗了oplogApplication

    oplogApplication将获取replBatch线程当前队列的所有元素,并根据docId将元素分散到不同的replWriter线程(如果存储引擎不支持文档锁,根据集合名称),replWriter线程应用所有oplog对自己;等待所有oplog一旦应用,oplogApplication线程将所有oplog序列写入local.oplog.rs集合。

    对于上面的描述,绘制图片以便于理解:

    可以通过db.serverStatus()。metrics.repl查询生产者缓冲区和应用线程的统计信息。

    2.2过程问题的解释

    2.2.1为什么oplog的播放必须创建如此多的线程?

    像mysql一样,一个线程做一件事,拉oplog是单线程的,其他线程回放;多个播放线程加速。

    2.2.2为什么我需要一个replBatcher线程来传输?

    当oplog重放,维护顺序以及遇到诸如create,drop等DDL命令时,这些命令不能与其他添加,删除和更改命令组合使用。这些控件由replBatcher执行。

    2.2.3如何解决主节点oplog重播无法赶上的主要问题?

    方法1:设置更多数量的播放线程

    方法2:增加oplog的大小

    方法3:将writeopstoplog步骤分散到多个replwriter线程中并发执行,并查看官方的开发日志是否实现了该步骤(版本3.4.0-rc2)。

    2.3注意事项

    初始同步单线程复制数据,效率相对较低,生产环境应尽量避免初始同步的出现,需要合理配置oplog。

    添加新的?节点,可以通过物理复制避免初始同步吗?模式,将主节点上的dbpath复制到新节点,然后直接启动。

    当二级同步延迟是由于主并发写操作量大而引起时,db的sizebytes值。服务器状态()。韵律学。雷普尔缓冲区一直接近maxsizebytes,可以通过调整辅助服务器上replwriter并发线程的数量来改进它。

    3.1同步日志初始化

    将日志级别详细性设置为1,然后筛选日志

    cat mg.log egrep'克隆索引oplog'>;b.log

    最后,取出一些过滤后的日志。

    3.4.21新建连接节点日志

    3.6.12添加新节点日志

    4.0.11添加新节点日志

    3.2复制日志

    参考文献:

    作者:hs2021

    阅读原文

    本文是云起社区的原始内容,未经许可不得转载。

    MongoDB的同步原理,官方文档较少,在线信息不算太多,以下是官方文档,在线资料和测试日志的组合,整理出来的东西。

    因为MongoDB的每个分片也是副本集,所以您只需要同步副本集的原则。

    通常,MongoDB副本集同步包含两个主要步骤:

    首先,通过init sync同步全部数据,并通过复制不断重播主节点上的oplog同步增量数据。完成全部同步后,成员将STARTUP2转换为SECONDARY

    1.1初始化同步过程

    简单地说,它是遍历主节点上所有数据库的所有集合,将数据复制到自己的节点,然后从完全同步开始到周期结束时重新读取oplog并重放。

    初始同步完成后,辅助节点将为主节点上的local.oplog.rs创建一个tailable游标,并不断从主节点获取新写入的oplog并将其应用于自身。

    1.2初始化同步方案

    辅助节点需要高级吗?发生以下情况时的全面同步:

    这三个场景相互对应(场景2和场景3没有看到官方网站文件写的,请参考张有东大神博客)

    1.3对疑惑的解释

    1.3.1当同步全部数据时,是否会覆盖源数据的oplog,导致全部同步失败?

    在3.4及更高版本中,没有。

    下图说明了3.4全面同步的改进(图片来自张有东博客):

    官方文件是:

    2.1同步oplog的过程

    在完整的同步结束后,辅助服务器开始从结束时间点创建一个tailable游标,从同步源连续提取oplog并将应用程序重放到自身。此过程未由线程完成。 Mongodb将拉动以提高同步效率。 oplog和重放oplog被分配给不同的线程以供执行。

    具体的主题和作用如下(暂时没有在官方文件中找到,来自张有东大神的博客):

    生产者线程:此线程不断从同步源中提取oplog并将其添加到BlockQueue队列。 BlockQueue存储240MB的oplog数据。超过此阈值时,必须等到replBatcher使用oplog。拉。

    replBatcher线程:该线程负责逐个从生产者线程的队列中获取oplog,并将其放入由自己维护的队列中。此队列最多可包含5000个元素,元素的总大小不超过512MB。当队列已满时,您需要等待。消耗了oplogApplication

    oplogApplication将获取replBatch线程当前队列的所有元素,并根据docId将元素分散到不同的replWriter线程(如果存储引擎不支持文档锁,根据集合名称),replWriter线程应用所有oplog对自己;等待所有oplog一旦应用,oplogApplication线程将所有oplog序列写入local.oplog.rs集合。

    对于上面的描述,绘制图片以便于理解:

    可以通过db.serverStatus()。metrics.repl查询生产者缓冲区和应用线程的统计信息。

    2.2过程问题的解释

    2.2.1为什么oplog的播放必须创建如此多的线程?

    像mysql一样,一个线程做一件事,拉oplog是单线程的,其他线程回放;多个播放线程加速。

    2.2.2为什么我需要一个replBatcher线程来传输?

    当oplog重放,维护顺序以及遇到诸如create,drop等DDL命令时,这些命令不能与其他添加,删除和更改命令组合使用。这些控件由replBatcher执行。

    2.2.3如何解决主节点oplog重播无法赶上的主要问题?

    方法1:设置更多数量的播放线程

    方法2:增加oplog的大小

    方法3:将writeOpsToOplog步骤分散到多个replWriter线程中以便并发执行,并看到官方开发人员日志已经实现了这个(版本3.4.0-rc2)

    2.3备注

    初始同步单线程复制数据,效率相对较低,生产环境应尽量避免初始同步的出现,需要合理配置oplog。

    添加新的?节点,您可以通过物理复制避免初始同步?模式,将主服务器上的dbpath复制到新节点,然后直接启动。

    当辅助同步延迟是由于高主要并发写入时,db的sizeBytes值。 serverStatus()。指标。 REPL。缓冲区保持接近maxSizeBytes,可以通过调整辅助节点上的replWriter并发线程数来改进它。

    3.1同步日志的初始化

    将日志级别详细程度设置为1,然后过滤日志

    猫mg.log | egrep'clone |指数| oplog'> b.log

    最后,取出一些过滤后的日志。

    3.4.21新加入节点日志

    3.6.12添加新节点日志

    4.0.11添加新节点日志

    3.2复制日志

    参考:

    作者:hs2021

    阅读原文

    本文是云栖社区的原创内容,未经许可不得转载。

    澳门金沙国际官网

  • 热门标签

  • 日期归档

  • 友情链接:

    叙永农业网 版权所有© www.altirahusa.com 技术支持:叙永农业网 | 网站地图