【问题标题】:Hazelcast issues after injecting istio envoy注入 istio envoy 后的 Hazelcast 问题
【发布时间】:2021-02-12 07:53:53
【问题描述】:

我在启用 istio 后遇到了 hazelcast 问题,我想知道如何解决这个问题。

我有 K8s 集群并且我最近安装了 istio。 当尝试使用 hazelcast 将特使添加到部署中时,我遇到了一个奇怪的问题,即在滚动升级期间我有很多连接错误。我应该提到最终部署是好的,但这个错误表明有问题。

我注意到,当我滚动升级到部署时,如果没有 Envoy,我会看到以下内容:

[10.16.17.72]:5701 [dev] [4.0.1] Initialized new cluster connection between /10.16.17.72:45025 and /10.16.5.8:5701
[10.16.5.8]:5701 [dev] [4.0.1] Initialized new cluster connection between /10.16.5.8:5701 and /10.16.17.72:45025

[10.16.17.72]:5701 [dev] [4.0.1] Connection[id=1, /10.16.17.72:45025->/10.16.5.8:5701, qualifier=null, endpoint=[10.16.5.8]:5701, alive=false, connectionType=MEMBER] closed. Reason: Connection closed by the other side
[10.16.17.72]:5701 [dev] [4.0.1] Could not connect to: /10.16.5.8:5701. Reason: SocketException[Connection refused to address /10.16.5.8:5701]
......
[10.16.17.72]:5701 [dev] [4.0.1] Removing connection to endpoint [10.16.5.8]:5701 Cause => java.net.SocketException {Connection refused to address /10.16.5.8:5701}, Error-Count: 5
[10.16.17.72]:5701 [dev] [4.0.1] Member [10.16.5.8]:5701 - 945ec2c8-fc56-4624-aab3-de9823d4886a is suspected to be dead for reason: No connection

这里发生的是:

  • 新 pod 启动并加入集群。
  • old-pod:5701 到 new-pod:xxx 之间的连接初始化(2 个方向)
  • 新 pod 抱怨它无法到达旧 pod (connectionType=MEMBER),并且在 5 次尝试后 将其视为已死亡并将其从集群中删除
  • 滚动升级完成后移除旧的 pod。

现在,当我在注入 Envoy 时做同样的事情,所以我在这个 pod 部署中有 2 个容器时,我注意到以下几点:

[10.16.3.244]:5701 [dev] [4.0.1] Initialized new cluster connection between /10.16.3.244:5701 and **/127.0.0.6:48287**
[10.16.5.16]:5701 [dev] [4.0.1] Initialized new cluster connection between /10.16.5.16:59827 and /10.16.3.244:5701

[10.16.5.16]:5701 [dev] [4.0.1] Connection[id=1, /10.16.5.16:59827->/10.16.3.244:5701, qualifier=null, endpoint=[10.16.3.244]:5701, alive=false, connectionType=MEMBER] closed. Reason: Connection closed by the other side

但随后我收到数百万条消息,如下所示:

[10.16.5.16]:5701 [dev] [4.0.1] Connection[id=2, /10.16.5.16:33659->/10.16.3.244:5701, qualifier=null, endpoint=[10.16.3.244]:5701, alive=false, connectionType=NONE] closed. Reason: Connection closed by the other side

第一个“连接关闭”消息是 MEMBER 类型,并且与我们在初始化消息中提到的相同连接 (10.16.5.16:59827 --> 10.16.3.244:5701)

但其余消息来自 10.16.5.16 上的随机端口到旧 pod。 我认为这是因为初始化消息表明初始化了新的集群连接 /10.16.3.244:5701 and **/127.0.0.6:48287** 它将连接配置到错误的主机:端口而不是 10.16.5.16:59827。

滚动升级完成相同,但日志中包含数百万条来自该类型的消息。

我已经复制了同样的内容,也看到了不匹配的端口:

I 2021-02-09T08:18:40.163Z  [10.16.5.22]:5701 [dev] [4.0.1] Initialized new cluster connection between /10.16.5.22:49213 and /10.16.5.21:5701
I 2021-02-09T08:18:40.158Z  [10.16.5.21]:5701 [dev] [4.0.1] Initialized new cluster connection between /10.16.5.21:5701 and /10.16.5.22:46274

我怎样才能防止这种情况发生?为什么获取 remoteAddress 的这一部分得到不同的端口? 到目前为止,我已经尝试了以下方法:

  • 升级到 4.1.1,没有任何变化
  • 添加了 JHIPSTER_SLEEP ,没有帮助
  • 更新了部署以确保代理在应用程序之前启动,没有帮助。

有什么想法吗?

谢谢 陈

【问题讨论】:

  • 这种情况只发生在滚动升级期间吗?您是否已将 hazelcast 部署为 StatefulSet 或 Deployment?
  • 是的,仅在重新部署期间,这就是部署。
  • 您使用的滚动策略是什么?根据 hz 文档,在将 hazelcast 部署为 Deployment 时,您可能需要检查滚动策略以避免脑裂。想知道这是否是导致这里出现任何问题的原因。

标签: kubernetes hazelcast istio


【解决方案1】:

Hazelcast 的滚动升级是一项企业功能,您需要许可证密钥。如果您已经有一个,那么您应该通过 Hazelcast 支持检查这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 2023-03-09
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    相关资源
    最近更新 更多