【问题标题】:Hazelcast +Sring Boot + Kubernetes - How to setup Client-Server topologyHazelcast +Spring Boot + Kubernetes - 如何设置客户端-服务器拓扑
【发布时间】:2021-03-24 14:51:15
【问题描述】:
我正在尝试了解如何使用 Hazelcast on Kubernete 在我的 Spring Boot 应用程序中配置 Client-Server,因为我们想要具有在不同 Spring Boot 应用程序之间共享缓存的能力(我已经能够使用 Kubernetes 设置嵌入式分布式缓存——这不是我们需要的)。
在 Spring Boot 单个应用程序(不在 Kubernetes 上)的情况下,我可以很容易地启动一个服务器,可以说是“localhost”,还可以启动连接到 localhost 的客户端。我也可以有多个服务器实例(成员),这将形成一个 Hazelcast 集群。
但是对于 Kubernetes,我知道我们需要有 2 个不同的 Spring Boot 应用程序,一个将充当服务器,另一个将是客户端访问缓存,但想知道客户端如何连接到服务器。因为在 Spring 的情况下,我们自动连接 HazelcastInstance,所以我将如何连接到在其自己的 Kubernetes Pod(和容器)中运行的服务器。
【问题讨论】:
标签:
spring-boot
kubernetes
hazelcast
【解决方案1】:
有一些 Kubernetes here 的部署指南,以及工作示例 here 和 here。
如果您的服务器 pod 正在加入,那么您几乎拥有它。客户端使用相同的发现机制。
将 hazelcast-kubernetes 插件添加到客户端的 pod 中,并将配置属性设置为与服务器上用于命名空间、dns 等的值相同的值。
【解决方案2】:
谢谢尼尔。正如你所指出的,它与我目前在 Kubernetes 上的嵌入式缓存中配置的方式相同。我正在使用服务名称和命名空间从 HazelcastClient 实例中发现并连接到服务器成员。
这是来自客户端 Spring Boot 应用程序的 HazelcastConfiguration:
@Bean
public HazelcastInstance hazelcastInstance() {
final ClientConfig config = new ClientConfig();
config.setClusterName("cluster-name");
if (enableOnK8s) {
config.getNetworkConfig().getKubernetesConfig().setEnabled(true)
.setProperty("namespace", namespaceValue)
.setProperty("service-name", serviceName);
}
return HazelcastClient.newHazelcastClient(config);
}
在 Hazelcast Server Spring Boot 应用程序上,配置与 Embedded Hazelcast 配置保持相同。