database

MongoDB里面的混合逻辑时钟

  在混合逻辑时钟这篇博客里,我介绍了关于混合逻辑时钟的基本知识,本文介绍一下MongoDB里面的混合逻辑时钟,参考Implementation of Cluster-wide Logical Clock and Causal Consistency in MongoDB。最后,还会介绍如何根据这个混合逻辑时钟解决MongoShake里面move chunk的问题。   混合逻辑时钟是MongoDB在3.6版本开始推出的。 ClusterTime   ClusterTime表示的就是节点的混合逻辑时钟(下面也叫“时钟”),其由<Time><Increment>组成,<Time>字段是32位的秒级粒度的机器的物理时钟,<Increment>是32位的自增计数,其遵循混合逻辑时钟里面所说…

Read more

浅谈数据库同步和迁移

  本文将主要首先聊一聊数据库同步和迁移两个话题,之后将会围绕这2个话题介绍一下阿里云最近开源的基于MongoDB和Redis的数据同步&迁移工具MongoShake和RedisShake,最后介绍一些用户的使用案例。 1. 同步   现在大部分数据都支持集群版的数据,也就是说一个逻辑单元中有多个db节点,不同节点之间通常通过复制的方式来实现数据的同步,比如Mysql的的基于binlog的主从同步,Redis的基于sync/psync机制的aof主从同步,MongoDB基于oplog的主从同步等等。这些机制支撑了一个单元下的数据冗余高可用和读写分离负载分担。   但仅仅一个逻辑单元内的数据同步对于很多业务通常不够用,很多业务需要跨逻辑单元的数据同步的能力,例如同城多机房,异地多数据中心同步等。容灾,多活是最常见的两种业务场…

Read more

MongoShake开源

1.背景   在当前的数据库系统生态中,大部分系统都支持多个节点实例间的数据同步机制,如Mysql Master/Slave主从同步,Redis AOF主从同步等,MongoDB更是支持3节点及以上的副本集同步,上述机制很好的支撑了一个逻辑单元的数据冗余高可用。   跨逻辑单元,甚至跨单元、跨数据中心的数据同步,在业务层有时候就显得很重要,它使得同城多机房的负载均衡,多机房的互备,甚至是异地多数据中心容灾和多活成为可能。由于目前MongoDB副本集内置的主从同步对于这种业务场景有较大的局限性,为此,我们开发了MongoShake系统,可以应用在实例间复制,机房间、跨数据中心复制,满足灾备和多活需求。   另外,数据备份是作为MongoShake核心但不是唯一的功能。MongoShake作为一个平台型服务,用户可以通过对接Mongo…

Read more