作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。
MySQL
PostgreSQL
Redis
Etcd
我们在前面介绍MongoDB的复制集的时候,介绍过Oplog,今天来详细介绍他。
一、 主从同步原理:Oplog 如何驱动数据一致性
复制集的核心目标是让所有节点(一个主节点,多个从节点)的数据最终保持一致。Oplog 是实现这一目标的唯一权威数据变更流。
1. 角色与流程
local.oplog.rs 集合。ts 字段的顺序(保证全局有序)应用到自己的数据集中。这个应用过程就是“重放”。local.oplog.rs。这使得每个健康的从节点都拥有一份完整的、与主节点内容相同(可能有微小延迟)的Oplog副本。这一点对于故障转移至关重要。2. 故障转移与选举
当主节点宕机时,复制集会触发选举,选出新的主节点。选举的关键依据之一就是 Oplog的新旧程度。
ts(时间戳)。3. 初始同步
当一个全新的节点加入复制集,或一个从节点的数据落后太多(所需的Oplog已在主节点被覆盖)时,会进行全量同步。
local 库外的所有数据(相当于 mongodump)。从应用程序读写数据的角度看,Oplog 是幕后英雄,它直接决定了数据的可靠性、一致性和读写分离的可能性。
1. 写操作 (Write Operations)
w: 1(默认):主节点写入Oplog成功后即返回。数据可能还未同步到任何从节点。如果此时主节点崩溃,可能导致数据丢失。w: “majority”:要求写操作已复制到大多数节点(包括主节点)的Oplog中后才返回。这能保证即使主节点故障,数据也已存在于新主节点的候选节点中,不会丢失。这是生产环境推荐的安全写法。j: true:要求写操作已写入磁盘日志(Journal)。与Oplog结合(w: “majority”, j: true)提供了最强的持久性保证。2. 读操作 (Read Operations)
readPreference 为 secondary 或 secondaryPreferred,可以将读请求路由到从节点,减轻主节点压力。rs.printSlaveReplicationInfo() 可以获知延迟时间。应用程序需要评估是否能容忍此延迟(如报表查询可以,实时交易可能不行)。readPreference: primary)。3. 数据一致性级别
Oplog 的有序性和 ts 时间戳,为 MongoDB 提供了实现因果一致性的基础。
afterClusterTime,确保其读操作能至少读到之前某个写操作之后的数据状态,即使该读发生在从节点上。复制集会利用 Oplog 的 ts 来保证这一点。