我无法让 Pulsar 集群正确重启
Posted
技术标签:
【中文标题】我无法让 Pulsar 集群正确重启【英文标题】:I cannot get a Pulsar cluster to restart properly 【发布时间】:2021-12-07 19:04:07 【问题描述】:我目前正在使用 Apache Pulsar,它是从本地 Minikube 集群上的 helm chart 安装的。安装顺利,Apache Pulsar 运行良好。但是,每当我关闭/重新启动笔记本电脑时,我都无法让所有 pod 再次运行。我总是得到CrashLoopBackOff
状态。我尝试在重启机器时使用以下命令重启 Pulsar 集群 (minikube start
):
xyz-MBP:~ xyz$ minikube start
???? minikube v1.23.2 on Darwin 11.4
???? Kubernetes 1.22.2 is now available. If you would like to upgrade, specify: --kubernetes-version=v1.22.2
✨ Using the docker driver based on existing profile
???? Starting control plane node minikube in cluster minikube
???? Pulling base image ...
???? Restarting existing docker container for "minikube" ...
???? Preparing Kubernetes v1.19.0 on Docker 20.10.8 ...
???? Verifying Kubernetes components...
▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
▪ Using image kubernetesui/dashboard:v2.3.1
▪ Using image kubernetesui/metrics-scraper:v1.0.7
???? Enabled addons: storage-provisioner, default-storageclass, dashboard
❗ /usr/local/bin/kubectl is version 1.22.0, which may have incompatibilites with Kubernetes 1.19.0.
▪ Want kubectl v1.19.0? Try 'minikube kubectl -- get pods -A'
???? Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
现在,看起来它开始正常,但是当我稍后去查询 pod 的状态时,我得到以下信息:
xyz-MBP:pulsar xyz$ kubectl get pods -n pulsar
NAME READY STATUS RESTARTS AGE
pulsar-mini-bookie-0 0/1 CrashLoopBackOff 8 25h
pulsar-mini-bookie-init-kqx6j 0/1 Completed 0 25h
pulsar-mini-broker-0 0/1 CrashLoopBackOff 8 25h
pulsar-mini-grafana-555cf54cf-jl5xp 1/1 Running 1 25h
pulsar-mini-prometheus-5556dbb8b8-k5v2v 1/1 Running 1 25h
pulsar-mini-proxy-0 0/1 Init:1/2 1 25h
pulsar-mini-pulsar-init-h78xk 0/1 Completed 0 25h
pulsar-mini-pulsar-manager-6c6889dff-r6tmk 1/1 Running 1 25h
pulsar-mini-toolset-0 1/1 Running 1 25h
pulsar-mini-zookeeper-0 1/1 Running 1 25h
迷你代理永远不会退出初始化阶段,并且 bookie 和 broker 不断重试并立即进入CrashLoopBackOff
。然后,在挖掘 Bookie pod 的日志时,我看到了以下不熟悉的异常:
01:15:10.164 [main] ERROR org.apache.bookkeeper.bookie.Bookie - Cookie for this bookie is not stored in metadata store. Bookie failing to come up
01:15:10.170 [main] ERROR org.apache.bookkeeper.server.Main - Failed to build bookie server
另外,我从代理 pod 中得到一个异常:
01:21:44.733 [main-EventThread] ERROR org.apache.bookkeeper.proto.PerChannelBookieClient - Cannot connect to pulsar-mini-bookie-0.pulsar-mini-bookie.pulsar.svc.cluster.local:3181 as endpopint resolution failed
上述错误还有很多,但不想在此处转储整个日志。上面的错误是第一个出现的错误,我相信接下来的任何事情都只是上面的后果......如果我弄错了,请告诉我!
【问题讨论】:
【参考方案1】:集群需要按特定顺序关闭,否则您可能会损坏数据。 试试这个:
-
首先关闭代理。如果您有代理,请在代理之前将其关闭。
关闭 BookKeeper 节点。
关闭 Zookeeper 节点。
如果这没有帮助,我需要查看日志以更好地了解容器未启动的原因。
【讨论】:
当你说我们需要关闭设备时,那是什么命令?这是关闭 pod 的 kubectl 命令还是其他什么? 您可以停止或销毁 pod。 (请参阅 ***.com/questions/54821044/… )如果您这样做,请确保您正确持久化数据,以确保在删除 BookKeeper 或 Zookeeper pod 时也不会删除数据。老实说,从您的信息来看,您可能会从一些有关 Kubernetes 基础知识的视频教程中受益。如果没有这些背景知识,您将很难操作 Pulsar 以及 Kubernetes 上的任何分布式技术。【参考方案2】:解决方案:
-
您可以检查您的应用程序是否由于导致问题的应用程序崩溃而退出。运行以下命令应该可以让您了解容器日志中是否发生了这种情况:
kubectl 记录 pod-name --all-containers=true
如果您启用堆栈驱动程序日志记录,则可以使用以下过滤器获取容器日志:
Stackdriver V1:
resource.type="container"
resource.labels.pod_id="$POD_NAME"
Stackdriver V2:
resource.type="k8s_container"
resource.labels.pod_name="$POD_NAME"
-
您可以检查您的活性探测是否失败,这会导致崩溃。这些将在 pod 事件中。运行以下命令应该可以让您了解这是否正在发生:
kubectl 描述 pod "$POD_NAME"
如果您有堆栈驱动程序日志记录,则可以使用以下过滤器获取 pod 事件日志:
Stackdriver V1:
resource.type="gke_cluster"
logName="projects/$PROJECT_ID/logs/events"
jsonPayload.reason="不健康"
jsonPayload.involvedObject.name="$POD_NAME"
Stackdriver V2:
resource.type="k8s_pod"
logName="projects/$PROJECT_ID/logs/events"
jsonPayload.reason="不健康"
resource.labels.pod_name="$POD_NAME"
此问题的根本原因: 吊舱只是陷入了启动和崩溃的循环。
【讨论】:
我无法在该链接中找到任何可以让我了解如何执行您列出的步骤的内容。能具体一点吗? @Snoop,我已经更新了我的答案。检查并告诉我此解决方案是否能解决您的问题。 你能加入 pulsar slack 吗? 如果您使用的是旧的 Apache pulsar 版本,您能否尝试将您的 Apache pulsar 升级到最新版本(2.8.1)再试一次。以上是关于我无法让 Pulsar 集群正确重启的主要内容,如果未能解决你的问题,请参考以下文章
03_Apache Pulsar的Local与分布式集群构建Pulsar的分布式集群模式Pulsar的分布式集群模式构建启动测试