分类目录归档:博客

扩展你的复制集:MongoDB 4.0中从节点的非阻塞读操作

MongoDB 4.0增加了一个能力,在副本处理写操作的同时可以由从节点(secondary)读取数据。为了理解这个的重要性,让我们看看4.0版本之前从节点是如何处理的。

背景

从一开始,MongoDB就是这样设计的:当主节点上有一系列的写入操作时,每个从节点必须以相同的顺序体现出这些操作。如果[......]

阅读全文

打破WiredTiger的Logjam(下篇):无等待解决方案

本文的上篇探讨了WiredTiger中WAL的原始算法,该算法用于合并写操作以达到最小化I/O的目的。它没有使用耗时的锁,而是分两个阶段使用CAS原子操作来实现。只要每个核运行的线程不太多,这个算法就可以非常好地工作。但当线程数超过该限制时,它为了避免锁而依赖于忙等待的机制会导致logjam——鉴于[......]

阅读全文

打破WiredTiger的Logjam(上篇):预写式日志(The Write-Ahead Log)

你无法优化代码;优化是针对特定的条件来实现的。当条件改变时,你的优化反而可能会变为瓶颈。这时仔细审查你对这些条件的假设,其中也许就蕴藏着解决方案的关键。

WiredTiger的WAL(write-ahead log)正说明了这一原则。它是高性能存储引擎中的一个关键代码路径,我曾经对其进行了大量优化[......]

阅读全文

一次MongoDB故障的复盘

前段时间笔者的客户遇到了一个主从延迟导致的业务故障,故障的原因本来是较为简单易查的,但是由于客户环境的安全、保密性要求,监控和指标只能间接获知,信息比较片段化与迟缓。

不过这反而致使整个排查过程变得更加有分享和借鉴价值。在这里分享给大家希望可以让大家避免踩坑。

当时涉及到了主从延迟,慢查询,cu[......]

阅读全文

使用mlaunch和m快速搭建MongoDB测试集群

不知道大家在使用MongoDB的时候有没有遇到突然想要一个集群但是手边又没有的时候?特别是我已经升级到4.0了,突然想要一个3.2的集群怎么办?然后去下载,改配置文件,启动,修改复制集,添加分片,一番折腾弄好了连自己想干什么都忘了。
本文中我们就来聊一聊如何使用mlaunch和m两个工具快速搭建一个MongoDB测试集群。[......]

阅读全文

MongoDB 无法启动,WiredTiger 如何恢复数据(二)?

之前写过一篇MongoDB 无法启动,如何恢复数据的文章,介绍了几种从无法启动的 MongoDB 节点恢复数据的方法,主要包括:

  1. 如果配置了副本集多节点,则从其他节点恢复(强烈建议重要的数据至少要存2份)
  2. 从最近的备份集恢复,一般重要的生产数据,需要对数据进行持续的全量/增量备份
  3. repair[......]

阅读全文