Apache > ZooKeeper
 

ZooKeeper 快照和恢复指南

Zookeeper 旨在承受机器故障。Zookeeper 集群可以自动从临时故障(例如机器重启)中恢复。对于 N 个成员的集群,它还可以容忍高达 (N-1)/2 的永久故障,原因包括硬件故障或磁盘损坏等。当某个成员永久故障时,它将失去对集群的访问权限。如果集群永久丢失超过 (N-1)/2 个成员,它将灾难性地失败并失去法定人数。一旦失去法定人数,集群就无法达成共识,因此无法继续接受更新。

为了从这种灾难性故障中恢复,Zookeeper 提供了快照和恢复功能,以从快照中恢复集群。

  1. 快照和恢复通过管理服务器 API 在连接的服务器上运行
  2. 快照和恢复受速率限制,以保护服务器免于过载
  3. 快照和恢复需要对具有所有权限的根路径进行身份验证和授权。支持的认证模式为摘要、x509 和 IP。

快照

恢复集群需要来自 ZooKeeper 集群的快照。用户可以定期从具有最高 zxid 的活动服务器获取快照,并将数据流式传输到本地或外部存储/文件系统(例如 S3)。

# The snapshot command takes snapshot from the server it connects to and rate limited to once every 5 mins by default
curl -H 'Authorization: digest root:root_passwd' http://hostname:adminPort/commands/snapshot?streaming=true --output snapshotFileName

恢复

恢复集群需要一个快照作为输入流。恢复可用于恢复法定人数丢失的集群或使用种子数据构建全新的集群。

所有成员都应使用相同的快照进行恢复。以下为建议步骤

# The restore command takes a snapshot as input stream and restore the db of the server it connects. It is rate limited to once every 5 mins by default
curl -H 'Content-Type:application/octet-stream' -H 'Authorization: digest root:root_passwd' -POST http://hostname:adminPort/commands/restore --data-binary "@snapshotFileName"