架构设计|基于 raft-listener 实现实时同步的主备集群
背景以及需求 线上业务对数据库可用性可靠性要求较高,要求需要有双 AZ 的主备容灾机制。 主备集群要求数据和 schema 信息实时同步,数据同步平均时延要求在 1s 之内,p99 要求在 2s 之内。 主备集群数据要求一致 要求能够在主集群故障时高效自动主备倒换或者手动主备倒换,主备倒换期间丢失的数据可找回。 为什么使用 Listener Listener:这是一种特殊的 Raft 角色,并不参与投票,也不能用于多副本的数据一致性。 原本的 NebulaGraph 中的 Listener 是一个 Raft 监听器,它的作用是将数据异步写入外部的 Elasticsearch 集群,并在查询时去查找 ES 以实现全文索引的功能。 这里我们需要的是 Listener 的监听能力,用于快速同步数据到其他集群,并且是异步的执行,不影响主集群的正常读写。 这里我们需要定义两个新的 Listener 类型: Meta Listener:用于同步表结构以及其他元数据信息 Storage Listener:用于同步 storaged 服务的数据 这样 storaged 服务和 metad 服务的 pa...