当前位置: 首页 > 知识库问答 >
问题:

使用负载平衡器在AWS EKS上公开Hazelcast群集

乐正浩宕
2023-03-14

我们在AWS EKS kubernetes集群中运行了一个Hazelcast 3.12集群。

您知道如何将运行在AWS EKS kubernetes群集内部的具有多个pod的Hazelcast群集暴露到kubernetes群集外部吗?

Hazelcast集群有6个吊舱,暴露在kubernetes集群之外,具有LoadBalancer(AWS经典负载平衡器)类型的kubernetes“服务”。

当我从kubernetes集群外部运行Hazelcast客户端时,我能够使用AWS负载平衡器连接到Hazelcast集群。但是,当我尝试从Hazelcast映射中获取一些值时,客户端失败,出现以下错误:

java.io.IOException:没有可用连接到地址[172.17.251.81]: 5701com.hazelcast.client.spi.impl.SmartClientInvocationService.getOrTriggerConnect(SmartClientInvocationService.java:75

该错误涉及IP地址172.17.251.81。这是Hazelcast吊舱的内部kubernetes IP,我无法从kubernetes集群外部连接到该吊舱。我不知道为什么客户端尝试连接到此IP地址而不是负载平衡器公共IP地址。

另一方面,当我将hazelcast集群从6个pod缩放到1个pod时,我能够连接并获得地图值,没有任何问题。

如果您想查看kubernetes LoadBalancer服务配置

kind: Service
apiVersion: v1
metadata:
  name: hazelcast-elb
  labels:
    app: hazelcast
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-internal: "true"
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
spec:
  ports:
  - name: tcp-hazelcast-elb
    port: 443
    targetPort: 5701
  selector:
    app: hazelcast
  type: LoadBalancer

共有1个答案

金旺
2023-03-14

如果使用一个LoadBalancer服务公开所有POD,则需要使用Hazelcast Unisocket客户端。

hazelcast-client:
  smart-routing: false

如果要使用默认的智能客户端(这意味着性能更好),则需要使用单独的服务公开每个Pod,因为每个Pod都需要从Kubernetes集群外部访问。

在博客中阅读更多内容:如何在库伯内特斯建立自己的内部Hazelcast。

 类似资料:
  • 我想在Google容器引擎上运行docker映像的集群前面放置一个HTTP负载平衡器,这样我就可以使用HTTPS,而无需应用程序支持它。 我使用以下命令创建了一个容器集群: 然后,我创建了一个复制控制器,在集群上运行一个映像,该映像基本上是nginx,其中复制了静态文件。 如果我为此创建一个网络负载平衡器,一切都会正常工作。我可以转到我的负载平衡器IP地址并查看网站。但是,如果创建HTTP负载平衡

  • 假设我在一个集群中有3个ActiveMQ Artemis代理: 经纪人_01 在给定的时间点,我有每个经纪人的消费者数量: 经纪人有50名消费者 让我们假设在这个给定的时间点,有70条消息要发送到集群中的一个队列。 我们期望集群完成负载平衡,以便Broker_01将接收50条消息,Broker_0210条消息,Broker_0310条消息,但目前我们正在经历70条消息通过所有3个代理随机分发。 是

  • 我必须手动在MS Azure中创建Kubernetes群集,而不是使用AKS。因此: > 我在一个可用性集中创建了2个VM:一个用于k8s master,第二个用于k8s节点。 我创建了外部负载均衡器并将2个VM添加到后端池。 我使用kubes祈祷创建了k8s集群。 我创建了部署和负载均衡器服务: 但LoadBalancer服务外部IP始终处于挂起状态: 此外,telnet azure\u loa

  • 我遵循了GKE教程,使用beta Inrit类型创建HTTP负载均衡器,并且在使用nginx映像时工作正常。我的问题是为什么Inrit是必要的。 我可以创建一个容器引擎集群,然后创建一个使用库伯内特斯创建的实例组作为服务后端的HTTP负载均衡器,并且一切似乎都运行良好。当仅在部分流程中使用库伯内特斯似乎运行良好时,为什么我要经历使用Inete的所有麻烦?

  • 我正在使用编写负载均衡器。 负载平衡器侦听本地传输地址。就Netty而言,只创建了一个频道来监听该地址。然后,(单线程事件循环组的)单线程将传入的UDP数据包调度到工作线程池进行处理(这里,处理意味着执行负载平衡)。 在出站端,可以使用多个服务器。对于每个接收到的UDP数据包,关联的工作线程选择一个服务器,并将UDP数据包转发到此服务器。为了转发UDP数据包,需要一个通道。 我可以看到四种方法:

  • 我在AWS中的应用程序ELB后面有一个ec2实例。我想将SSL应用于ec2实例和负载平衡器。对于ec2实例,我购买了ssl并安装了它,它工作正常。对于负载平衡器,我将使用免费的AWS ACM证书并将其安装在负载平衡器上。这会有什么问题吗?i、 e.在ec2和elb上安装SSL。