11.6. 从持久性卷恢复集群
如果仍存在,您可以从持久性卷(PV)中恢复 Kafka 集群。
您可能希望进行此操作,例如:
- 命名空间被意外删除
- 整个 OpenShift 集群都会丢失,但 PV 仍然保留在基础架构中
11.6.1. 从命名空间删除中恢复 复制链接链接已复制到粘贴板!
有可能从命名空间删除恢复,因为持久性卷和命名空间之间的关系。PersistentVolume (PV)是位于命名空间外的存储资源。PV 使用一个位于命名空间中的 PersistentVolumeClaim (PVC)挂载到 Kafka pod 中。
PV 的重新声明(reclaim)策略指定了在删除命名空间时如何执行操作的集群。如果 reclaim 策略被设置为:
- 删除 (默认),当在一个命名空间中删除 PVC 时 PV 会被删除
- Retain,当删除命名空间时 PV 不会删除。
如果确保在命名空间被意外删除时可以从 PV 中进行恢复,需要使用 persistentVolumeReclaimPolicy 属性在 PV 规格中将策略从 Delete 重置为 Retain:
另外,PV 可以继承关联的存储类的重新声明策略。存储类用于动态卷分配。
通过为存储类配置 reclaimPolicy 属性,使用存储类的 PV 会使用适当的重新声明策略创建。使用 storageClassName 属性为 PV 配置存储类。
如果您使用 Retain 作为 reclaim 策略,但要删除整个集群,则需要手动删除 PV。否则,它们不会被删除,可能会对资源造成不必要的开支。
11.6.2. 恢复丢失 OpenShift 集群 复制链接链接已复制到粘贴板!
当集群丢失时,如果集群在基础架构中保留,您可以使用磁盘/卷中的数据恢复集群。恢复过程与删除命名空间相同,假设 PV 可以恢复,且被手动创建。
11.6.3. 从持久性卷恢复已删除的集群 复制链接链接已复制到粘贴板!
这个步骤描述了如何从持久性卷(PV)中恢复删除的集群。
在这种情况下,主题 Operator 会标识 Kafka 中存在的主题,但 KafkaTopic 资源不存在。
当您获得重新创建集群的步骤时,有两个选项:
当您可以恢复所有
KafkaTopic资源时,请使用 选项 1。因此,在集群启动前必须恢复
KafkaTopic资源,以便 Topic Operator 不会删除对应的主题。当无法恢复所有
KafkaTopic资源时,请使用 选项 2。在这种情况下,您在没有 Topic Operator 的情况下部署集群,删除 Topic Operator 主题存储元数据,然后使用 Topic Operator 重新部署 Kafka 集群,以便可以从对应的主题重新创建
KafkaTopic资源。
如果没有部署 Topic Operator,则只需要恢复 PersistentVolumeClaim (PVC)资源。
开始前
在这一流程中,PV 挂载到正确的 PVC 中,以避免数据崩溃。为 PVC 指定一个 volumeName,它必须与 PV 的名称匹配。
如需更多信息,请参阅:
此流程不包括 KafkaUser 资源的恢复,必须手动重新创建。如果需要保留密码和证书,在创建 KafkaUser 资源前必须重新创建 secret。
流程
检查集群中 PV 的信息:
oc get pv
oc get pvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为带有数据的 PV 会显示信息。
显示对此流程很重要的列示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - NAME 显示每个 PV 的名称。
- RECLAIM POLICY 显示 PV 被保留。
- CLAIM 显示指向原始 PVC 的链接。
重新创建原始命名空间:
oc create namespace myproject
oc create namespace myprojectCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重新创建原始 PVC 资源规格,将 PVC 链接到适当的 PV:
例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑 PV 规格以删除绑定原始 PVC 的
claimRef属性。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在示例中,删除了以下属性:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 部署 Cluster Operator。
oc create -f install/cluster-operator -n my-project
oc create -f install/cluster-operator -n my-projectCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重新创建集群。
根据您是否有足够的
KafkaTopic资源来重新创建集群,请按照以下步骤操作。选项 1: 如果您拥有丢失集群之前存在的 所有
KafkaTopic资源,包括内部主题,如从__consumer_offsets的提交偏移:重新创建所有
KafkaTopic资源。在部署集群前重新创建资源非常重要,否则主题 Operator 将删除主题。
部署 Kafka 集群。
例如:
oc apply -f kafka.yaml
oc apply -f kafka.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
选项 2: 如果您没有丢失集群前存在的所有
KafkaTopic资源:与使用第一个选项一样部署 Kafka 集群,但部署前从 Kafka 资源中删除
topicOperator属性。如果在部署中包含 Topic Operator,主题 Operator 将删除所有主题。
从 Kafka 集群删除内部主题存储主题:
oc run kafka-admin -ti --image=registry.redhat.io/amq7/amq-streams-kafka-32-rhel8:2.2.2 --rm=true --restart=Never -- ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --topic __strimzi-topic-operator-kstreams-topic-store-changelog --delete && ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --topic __strimzi_store_topic --delete
oc run kafka-admin -ti --image=registry.redhat.io/amq7/amq-streams-kafka-32-rhel8:2.2.2 --rm=true --restart=Never -- ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --topic __strimzi-topic-operator-kstreams-topic-store-changelog --delete && ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --topic __strimzi_store_topic --deleteCopy to Clipboard Copied! Toggle word wrap Toggle overflow 命令必须与用于访问 Kafka 集群的监听程序和身份验证类型对应。
使用
topicOperator属性重新部署 Kafka 集群以重新创建KafkaTopic资源来启用主题 Operator。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 1
- 此处我们显示了默认配置,该配置没有额外属性。您可以使用 第 12.2.45 节 “
EntityTopicOperatorSpec模式参考” 中描述的属性指定所需的配置。
列出
KafkaTopic资源来验证恢复:oc get KafkaTopic
oc get KafkaTopicCopy to Clipboard Copied! Toggle word wrap Toggle overflow