ZooKeeper 快照和恢复指南
Zookeeper 旨在承受机器故障。Zookeeper 集群可以自动从临时故障(例如机器重启)中恢复。对于 N 个成员的集群,它还可以容忍高达 (N-1)/2 的永久故障,原因包括硬件故障或磁盘损坏等。当某个成员永久故障时,它将失去对集群的访问权限。如果集群永久丢失超过 (N-1)/2 个成员,它将灾难性地失败并失去法定人数。一旦失去法定人数,集群就无法达成共识,因此无法继续接受更新。
为了从这种灾难性故障中恢复,Zookeeper 提供了快照和恢复功能,以从快照中恢复集群。
- 快照和恢复通过管理服务器 API 在连接的服务器上运行
- 快照和恢复受速率限制,以保护服务器免于过载
- 快照和恢复需要对具有所有权限的根路径进行身份验证和授权。支持的认证模式为摘要、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
恢复
恢复集群需要一个快照作为输入流。恢复可用于恢复法定人数丢失的集群或使用种子数据构建全新的集群。
所有成员都应使用相同的快照进行恢复。以下为建议步骤
- 在恢复开始前阻止客户端端口或客户端安全端口上的流量
- 如果适用,使用快照管理服务器命令获取最新数据库状态的快照
- 对于每个服务器
- 将 dataDir 和 dataLogDir 中的文件移动到其他位置,以防止在恢复后服务器重新启动时覆盖已恢复的数据库
- 使用恢复管理服务器命令恢复服务器
- 在恢复完成之后取消阻止客户端端口或客户端安全端口上的流量
# 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"