【问题标题】:Cassandra pod fails after kubernetes node restartKubernetes 节点重启后 Cassandra pod 失败
【发布时间】:2020-07-05 22:38:33
【问题描述】:

我已使用 Kubernetes Operator 说明在我的 kubernetes 环境中成功安装了 dse:

使用 nodetool 我检查了所有 pod 是否都成功加入了环

问题是,当我重新启动其中一个 kubernetes 节点时,在该节点上运行的 cassandra pod 永远不会恢复:

[root@node1 ~]# kubectl exec -it -n cassandra cluster1-dc1-r2-sts-0 -c cassandra nodetool status
Datacenter: dc1
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving/Stopped
-- Address Load Tokens Owns (effective) Host ID Rack
UN 10.244.166.132 153.82 KiB 1 77.9% 053cc18e-397c-4abe-bb1b-d48a3fef3c93 r3
DS 10.244.104.1 136.09 KiB 1 26.9% 8ae31e1c-856e-44a8-b081-c5c040b535b9 r1
UN 10.244.135.2 202.8 KiB 1 95.2% 06200794-298c-4122-b8ff-4239bc7a8ded r2

[root@node1 ~]# kubectl get pods -n cassandra
NAME READY STATUS RESTARTS AGE
cass-operator-56f5f8c7c-w6l2c 1/1 Running 0 17h
cluster1-dc1-r1-sts-0 1/2 Running 2 17h
cluster1-dc1-r2-sts-0 2/2 Running 0 17h
cluster1-dc1-r3-sts-0 2/2 Running 0 17h

我查看了日志,但我无法找出问题所在。

“kubectl logs”命令返回以下日志:

INFO  [nioEventLoopGroup-2-1] 2020-03-25 12:13:13,536 Cli.java:555 - address=/192.168.0.11:38590 url=/api/v0/probes/liveness status=200 OK
INFO  [epollEventLoopGroup-6506-1] 2020-03-25 12:13:14,110 Clock.java:35 - Could not access native clock (see debug logs for details), falling back to Java system clock
WARN  [epollEventLoopGroup-6506-2] 2020-03-25 12:13:14,111 Slf4JLogger.java:146 - Unknown channel option 'TCP_NODELAY' for channel '[id: 0x8a898bf3]'
WARN  [epollEventLoopGroup-6506-2] 2020-03-25 12:13:14,116 Loggers.java:28 - [s6501] Error connecting to /tmp/dse.sock, trying next node
java.io.FileNotFoundException: null
        at io.netty.channel.unix.Errors.throwConnectException(Errors.java:110)
        at io.netty.channel.unix.Socket.connect(Socket.java:257)
        at io.netty.channel.epoll.AbstractEpollChannel.doConnect0(AbstractEpollChannel.java:732)
        at io.netty.channel.epoll.AbstractEpollChannel.doConnect(AbstractEpollChannel.java:717)
        at io.netty.channel.epoll.EpollDomainSocketChannel.doConnect(EpollDomainSocketChannel.java:87)
        at io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.connect(AbstractEpollChannel.java:559)
        at io.netty.channel.DefaultChannelPipeline$HeadContext.connect(DefaultChannelPipeline.java:1366)
        at io.netty.channel.AbstractChannelHandlerContext.invokeConnect(AbstractChannelHandlerContext.java:545)
        at io.netty.channel.AbstractChannelHandlerContext.connect(AbstractChannelHandlerContext.java:530)
        at io.netty.channel.ChannelOutboundHandlerAdapter.connect(ChannelOutboundHandlerAdapter.java:47)
        at io.netty.channel.AbstractChannelHandlerContext.invokeConnect(AbstractChannelHandlerContext.java:545)
        at io.netty.channel.AbstractChannelHandlerContext.connect(AbstractChannelHandlerContext.java:530)
        at io.netty.channel.ChannelDuplexHandler.connect(ChannelDuplexHandler.java:50)
        at io.netty.channel.AbstractChannelHandlerContext.invokeConnect(AbstractChannelHandlerContext.java:545)
        at io.netty.channel.AbstractChannelHandlerContext.connect(AbstractChannelHandlerContext.java:530)
        at io.netty.channel.ChannelDuplexHandler.connect(ChannelDuplexHandler.java:50)
        at com.datastax.oss.driver.internal.core.channel.ConnectInitHandler.connect(ConnectInitHandler.java:57)
        at io.netty.channel.AbstractChannelHandlerContext.invokeConnect(AbstractChannelHandlerContext.java:545)
        at io.netty.channel.AbstractChannelHandlerContext.connect(AbstractChannelHandlerContext.java:530)
        at io.netty.channel.AbstractChannelHandlerContext.connect(AbstractChannelHandlerContext.java:512)
        at io.netty.channel.DefaultChannelPipeline.connect(DefaultChannelPipeline.java:1024)
        at io.netty.channel.AbstractChannel.connect(AbstractChannel.java:276)
        at io.netty.bootstrap.Bootstrap$3.run(Bootstrap.java:252)
        at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
        at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404)
        at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:375)
        at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.lang.Thread.run(Thread.java:748)
INFO  [nioEventLoopGroup-2-2] 2020-03-25 12:13:14,118 Cli.java:555 - address=/192.168.0.11:38592 url=/api/v0/probes/readiness status=500 Internal Server Error

cassandra启动成功时也会出现错误java.io.FileNotFoundException: null

所以剩下的就是错误:

address=/192.168.0.11:38592 url=/api/v0/probes/readiness status=500 Internal Server Error

这对我来说没什么。

“kubectl describe”显示如下

Warning Unhealthy 4m41s (x6535 over 18h) kubelet, node2 Readiness probe failed: HTTP probe failed with statuscode: 500

在 cassandra 容器中只有这个进程在运行:

java -Xms128m -Xmx128m -jar /opt/dse/resources/management-api/management-api-6.8.0.20200316-LABS-all.jar --dse-socket /tmp/dse.sock --host tcp://0.0.0.0```

/var/log/cassandra/system.log 中我无法指出任何错误

【问题讨论】:

  • 请问,您能否描述失败的 pod 并使用输出更新您的问题?命令是kubectl describe pod POD_NAME。您还可以检查 pod lgs 并在此处发布相关信息,kubectl logs POD_NAME 其中 POD_NAME 是有问题的 pod 的名称。
  • 好的,谢谢。我添加了更多细节
  • 尝试为 Cassandra 提供超过 128MB 的堆。事实上,我认为 2GB 是最小的,并且(取决于预期的工作负载)它应该至少有 4GB-8GB。

标签: kubernetes cassandra datastax


【解决方案1】:

Andrea,错误“java.io.FileNotFoundException: null”是关于 Cassandra pod 启动和运行状况检查过程中的短暂错误的无害消息。

我能够重现您遇到的问题。如果您运行kubectl get pods,您应该会看到受影响的 pod 在“READY”列下显示 1/2,这意味着 Cassandra 容器没有在自动重启的 pod 中启动。只有管​​理 API 容器正在运行。我怀疑这是运营商的一个错误,我将与开发人员一起解决它。

作为一种解决方法,您可以运行 kubectl delete pod/<pod_name> 将您的 Cassandra 集群恢复到正常状态(在您的情况下为 kubectl delete pod/cluster1-dc1-r1-sts-0)。这将重新部署 pod 并自动重新挂载数据卷,而不会丢失任何内容。

【讨论】:

  • 在帮助个人的同时,我们还尝试为他人提供未来帮助的永久来源 - 因此,首选产生有形记录的答案。在提供 1:1 帮助之前,请阅读 this Meta post 并重新考虑努力记录答案。
  • 感谢分享元帖子,非常有用的指导。
  • 我的测试系统中的删除没有帮助恢复:
  • Andrea,我在发送上面的答案之前测试了kubectl delete pod/pod_name 的过程,它对我有用。如果需要,您可以在我的个人资料中找到我的联系信息,以便安排时间让我查看您的集群。在我们找出正确的解决方案后,我将在此线程中分享以供其他人将来帮助。
  • 感谢您的提议,但我不知道如何联系您,在个人资料中我没有看到任何邮件。
【解决方案2】:

当我启动 Cassandra 的节点上未运行 CoreDNS pod 时,我收到此错误。 DNS 解析无法正常工作。因此,调试网络连接可能会有所帮助。

【讨论】:

    猜你喜欢
    • 2019-10-30
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    相关资源
    最近更新 更多