Oracle Berkeley DB 的复制功能实现高可用的数据管理

Berkeley DB 的复制功能实现了分布式系统或冗余硬件系统中的高可用性和水平读取可扩展性。Berkeley DB HA 是一个具有自动故障切换功能的单主多副本系统。副本节点提供读取服务,主节点可以提供读写操作服务。副本节点以事务日志记录的形式接收来自主节点或其他副本节点的更新,并将更新应用于自身。每个副本节点将其状态通知主节点,主节点使用这一信息管理复制组中的一致性。副本系统中的每个节点都维护一个数据和日志的完整副本。这种架构提供了极为灵活的读取可扩展性、近乎瞬时的故障切换,并且可以实现近乎 100% 的正常运行时间。使用 Berkeley DB HA 的应用可以突破单一系统的处理限制,从容地管理故障,从而提供高可用性。

Berkeley DB HA 基础架构可以支持任何通信系统,不仅仅是 TCP/IP,这样可以显著提升嵌入式硬件系统的性能,同时实现冗余系统(如刀片系统)之间的内部高速自定义互连。但是,Berkeley DB 确实对管理 TCP/IP 网络上的复制组提供内置支持。

只有主节点才能修改数据库。应用在主节点执行创建、更新和删除请求,然后主节点自动将这些更改分发到应用要求的所有副本节点,以实现所要求的一致性。要求即刻一致的事务需要对一批节点进行同步,或者按照应用要求的其他条件进行同步。任何节点(主节点或副本节点)随时都可处理读取操作。副本节点随时都可以加入、离开、重新加入复制组,这样您可以随着节点的变化将解决方案调整到您需要的规模。主节点出现故障时,将调用选举算法来确定和推荐一个新的主节点。该解决方案:

  • 为不允许出现停机时间的应用提供了快速故障切换
  • 通过提供多个只读副本节点实现了读取可扩展性
  • 支持更高效的提交处理,通过提交到(快速)网络而非提交到(低速)磁盘,让应用提供持久性。
  • 不再对所有操作强制执行单一的一致性模式,为应用提供了更大的灵活性


Where Berkeley DB HA 适用于以下场合:

  • 基于 LAN 的小规模复制:为本地用户提供数据的基于数据中心的服务,如公司站点。该服务是通过几个位于同一数据中心并通过高速服务器 LAN 通信的服务器实现的。
  • 广域数据存储:全球范围的服务提供商,其存储的信息在全球任何地方均可访问。该服务是通过一组服务器实现的,这些服务器分散在全球各地的不同数据中心,通过高速的数据中心到数据中心的连接进行通信。
  • 主/从配置:用于在主从计算机间提供故障切换的简单安装。鉴于 HA 复制数据的各种环境,没有一套数据集管理和复制策略是合适的。Berkeley DB HA 让应用可以控制主节点与副本节点之间的数据一致性、事务持久性,以及其他决定数据的性能、强健性和可用性的各种设计选择。


使用分布式的两阶段表决协议来选择主节点,这样可以确保始终选出一个唯一的主节点。选举算法需要确保至少有简单多数的可选节点参与此过程。具有较新环境状态的参与节点将被选为主节点。可选节点可以处于以下任一状态:

  • 主节点:由简单多数可选节点选择的节点。处于此状态的节点可以处理读取事务和写入事务。
  • 副本节点:该节点通过复制流与主节点进行通信,使用复制流跟踪对主节点的更改。在后续部分中将对复制流做更详细的说明。复制节点只支持读取事务。


主节点将更改异步发送到副本节点,副本节点会尽可能快地处理这些更改。即使在事务进行的同时以及应用尝试将事务提交到主节点之前,更改也会快速传输到副本节点。如果事务随后在主节点上中止了,副本节点也将中止该事务。如果事务的持久性要求需要该事务,应用线程可能会等待一个或多个副本节点赶上这个特定事务。副本节点需要对这类事务作出显式确认响应,但这不会阻碍主节点上的进度,因为此时主节点还有资源继续其他事务性工作。

主节点对复制流的写入操作和副本节点上的读取(和重放)操作之间在某些方面是不同步的。只要应用创建了一个新日志条目,主节点就会立即将其写入到复制流。副本节点从复制流读取日志条目,一旦读到就重放更改,如果主节点要求,副本节点还会对提交操作的重放给出确认响应。

文章
 白皮书:利用 Berkeley DB 高可用性管理一致性 (PDF)
 白皮书:使用 Berkeley DB 实现高可用性应用 (PDF)
 白皮书:Berkeley DB Java 版的高可用性 (HA) (PDF)
 白皮书:Oracle Berkeley DB Java 版高可用性 — 大量配置和可扩展性测试 (PDF)