灾备(Disaster Recovery)
当一个(或多个)服务器节点上的 JetStream 消息持久化发生不可恢复的故障时,有两种恢复场景:
从保持完好的法定人数节点自动恢复
从现有的流快照(备份)手动恢复
对于 R1 (仅1个副本)流,数据仅持久化在一个服务器节点上。如果该服务器节点无法恢复,则从备份恢复是唯一的选择。
自动恢复
在以下条件下,NATS 会自动创建替代的流副本:
受影响的流配置了 R3(或更高)的副本
剩余完好的节点(流副本)满足最低 RAFT 法定人数:floor(R/2) + 1
流的集群中有可用节点用于放置新副本
受影响的节点已从流的域 RAFT 元组中移除(例如使用
nats server raft peer-remove命令)
手动恢复
无论复制配置如何,都可以为任何流主动创建快照(也称为备份)。
备份默认包括:
流配置和状态
流持久消费者配置和状态
所有消息负载数据,包括时间戳和头部等元数据
备份
使用 nats stream backup CLI 命令可以创建流及其持久消费者的快照。
作为账户所有者,如果你希望备份账户中的所有流,可以使用 nats account backup 命令。
输出
在备份操作期间,流会进入一种状态,其配置无法更改,并且不会根据流保留策略驱逐任何数据。
可以使用 --no-progress 选项禁用终端进度条显示,届时它将改为输出日志行。
恢复
可以使用 nats stream restore 命令将现有备份(如上所述)恢复到相同或新的 NATS 服务器(或集群)。
如果备份目录中有多个流,它们将全部被恢复。
输出
/data/js-backup/ORDERS.tgz 文件也可以解压缩到已停止的 NATS 服务器的数据目录中。
可以使用 --no-progress 选项禁用终端进度条显示,届时它将改为输出日志行。
交互式 CLI
在通过交互方式使用 nats CLI 配置服务器的环境中,你并没有一个用于重新创建服务器的期望状态。这不是管理服务器的理想方式,我们推荐使用配置管理,但许多人会采用这种方法。
在这种情况下,你可以将配置备份到一个目录中,以便日后从该目录恢复配置。文件存储支持的数据也可以被备份。
这会备份流和消费者的配置。
在同一过程中,也可以通过传递 --data 参数来备份数据,这将创建类似 /data/js-backup/stream_ORDERS.tgz 的文件。
之后可以恢复数据,对于流,我们支持就地编辑流配置以匹配备份中的内容。
nats account restore 工具不支持恢复数据,可以使用前面概述的 nats stream restore 命令执行相同的过程,该命令也会恢复流和消费者的配置及状态。
在恢复时,如果服务器中已存在同名同账户的流,你将收到 Stream {name} already exist 错误。
最后更新于