灾备(Disaster Recovery)

当一个(或多个)服务器节点上的 JetStream 消息持久化发生不可恢复的故障时,有两种恢复场景:

  • 从保持完好的法定人数节点自动恢复

  • 从现有的流快照(备份)手动恢复

triangle-exclamation

自动恢复

在以下条件下,NATS 会自动创建替代的流副本:

  • 受影响的流配置了 R3(或更高)的副本

  • 剩余完好的节点(流副本)满足最低 RAFT 法定人数:floor(R/2) + 1

  • 流的集群中有可用节点用于放置新副本

  • 受影响的节点已从流的域 RAFT 元组中移除(例如使用 nats server raft peer-remove 命令)

手动恢复

无论复制配置如何,都可以为任何流主动创建快照(也称为备份)。

备份默认包括:

  • 流配置和状态

  • 流持久消费者配置和状态

  • 所有消息负载数据,包括时间戳和头部等元数据

备份

使用 nats stream backup CLI 命令可以创建流及其持久消费者的快照。

circle-info

作为账户所有者,如果你希望备份账户中的所有流,可以使用 nats account backup 命令。

输出

在备份操作期间,流会进入一种状态,其配置无法更改,并且不会根据流保留策略驱逐任何数据。

circle-info

可以使用 --no-progress 选项禁用终端进度条显示,届时它将改为输出日志行。

恢复

可以使用 nats stream restore 命令将现有备份(如上所述)恢复到相同或新的 NATS 服务器(或集群)。

circle-info

如果备份目录中有多个流,它们将全部被恢复。

输出

/data/js-backup/ORDERS.tgz 文件也可以解压缩到已停止的 NATS 服务器的数据目录中。

可以使用 --no-progress 选项禁用终端进度条显示,届时它将改为输出日志行。

交互式 CLI

在通过交互方式使用 nats CLI 配置服务器的环境中,你并没有一个用于重新创建服务器的期望状态。这不是管理服务器的理想方式,我们推荐使用配置管理,但许多人会采用这种方法。

在这种情况下,你可以将配置备份到一个目录中,以便日后从该目录恢复配置。文件存储支持的数据也可以被备份。

这会备份流和消费者的配置。

在同一过程中,也可以通过传递 --data 参数来备份数据,这将创建类似 /data/js-backup/stream_ORDERS.tgz 的文件。

之后可以恢复数据,对于流,我们支持就地编辑流配置以匹配备份中的内容。

nats account restore 工具不支持恢复数据,可以使用前面概述的 nats stream restore 命令执行相同的过程,该命令也会恢复流和消费者的配置及状态。

circle-exclamation

最后更新于