问题描述
我正在将spring-boot应用程序部署到kubernetes openshift。
在此应用程序中,我将Hazelcast用作我现在正在测试的缓存提供程序。 Hazelcast应该充当嵌入式缓存管理器,并与其他Pod形成p2p云。 (没有主人)。
作为一种发现机制,我使用hazelcast-kubernetes
,它是通过以下方式进行编程配置的:
@Bean
public HazelcastInstance configHazelcastInstance(HazelcastProperties properties) {
if (Strings.isNullOrEmpty(properties.getServicedns()) || Strings.isNullOrEmpty(properties.getNamespace()))
return Hazelcast.newHazelcastInstance();
Config cfg = new Config();
NetworkConfig networkConfig = cfg.getNetworkConfig();
JoinConfig joinConfig = networkConfig.getJoin();
joinConfig.getMulticastConfig().setEnabled(false);
joinConfig.getTcpIpConfig().setEnabled(false);
joinConfig.getAwsConfig().setEnabled(false);
joinConfig.getAzureConfig().setEnabled(false);
joinConfig.getEurekaConfig().setEnabled(false);
joinConfig.getGcpConfig().setEnabled(false);
joinConfig.getKubernetesConfig().setEnabled(true);
final HazelcastKubernetesdiscoveryStrategyFactory factory = new HazelcastKubernetesdiscoveryStrategyFactory();
final discoveryStrategyConfig strategyConfig = new discoveryStrategyConfig(factory);
strategyConfig.addProperty("service-dns",properties.getServicedns());
strategyConfig.addProperty("service-dns-timeout","10");
joinConfig.getdiscoveryConfig().adddiscoveryStrategyConfig(strategyConfig);
return Hazelcast.newHazelcastInstance(cfg);
}
我在应用程序启动时收到的消息为:
[main] WARN c.h.s.d.integration.discoveryService - [10.129.2.253]:5701 [dev] [3.12.9] DNS lookup for servicedns 'productizer.dev-product-configuration.svc.cluster.local' Failed
因此看来servicedns名称存在,但是hazelcast无法以某种方式解决它。
请问您可以建议下一步吗?
编辑: 与:
@Bean
public HazelcastInstance configHazelcastInstance(HazelcastProperties properties) {
if (Strings.isNullOrEmpty(properties.getServicedns()) || Strings.isNullOrEmpty(properties.getNamespace()))
return Hazelcast.newHazelcastInstance();
Config cfg = new Config();
NetworkConfig networkConfig = cfg.getNetworkConfig();
JoinConfig joinConfig = networkConfig.getJoin();
joinConfig.getMulticastConfig().setEnabled(false);
joinConfig.getKubernetesConfig().setEnabled(true);
joinConfig.getKubernetesConfig().setProperty("service-dns",properties.getServicedns());
joinConfig.getKubernetesConfig().setProperty("namespace",properties.getNamespace());
joinConfig.getKubernetesConfig().setProperty("service-dns-timeout","10");
log.info(joinConfig.toString());
return Hazelcast.newHazelcastInstance(cfg);
}
我得到:
2020-10-22T15:31:13,767Z [hz._hzInstance_1_dev.cached.thread-2] INFO com.hazelcast.nio.tcp.TcpIpConnector - [10.129.2.18]:5701 [dev] [3.12.9] Connecting to /10.128.2.214:5701,timeout: 10000,bind-any: true
2020-10-22T15:31:13,781Z [hz._hzInstance_1_dev.IO.thread-in-0] INFO c.hazelcast.nio.tcp.TcpIpConnection - [10.129.2.18]:5701 [dev] [3.12.9] Initialized new cluster connection between /10.129.2.18:58892 and /10.128.2.214:5701
2020-10-22T15:31:14,774Z [hz._hzInstance_1_dev.priority-generic-operation.thread-0] ERROR com.hazelcast.cluster - [10.129.2.18]:5701 [dev] [3.12.9] Node Could not join cluster. A Configuration mismatch was detected: Incompatible joiners! expected:,found: tcp-ip Node is going to shutdown Now!
在openshift上启动时。
c.f.p.c.HazelcastCacheConfiguration - JoinConfig{multicastConfig=MulticastConfig [enabled=false,multicastGroup=224.2.2.3,multicastPort=54327,multicastTimetoLive=32,multicastTimeoutSeconds=2,trustedInterfaces=[],loopbackModeEnabled=false],tcpIpConfig=TcpIpConfig [enabled=false,connectionTimeoutSeconds=5,members=[],requiredMember=null],awsConfig=AliaseddiscoveryConfig{tag='aws',enabled=false,usePublicIp=false,properties={}},gcpConfig=AliaseddiscoveryConfig{tag='gcp',azureConfig=AliaseddiscoveryConfig{tag='azure',kubernetesConfig=AliaseddiscoveryConfig{tag='kubernetes',enabled=true,properties={namespace=dev-product-configuration,service-dns-timeout=10,service-dns=productizer.dev-product-configuration.svc.cluster.local}},eurekaConfig=AliaseddiscoveryConfig{tag='eureka',discoveryConfig=discoveryConfig{discoveryStrategyConfigs=[],discoveryServiceProvider=null,nodeFilter=null,nodeFilterClass='null'}}
榛果广播:3.12.9
hazelcast-kubernetes:1.3.1
解决方法
您的配置不正确。应该是这样的:
joinConfig.getMulticastConfig().setEnabled(false);
joinConfig.getKubernetesConfig().setEnabled(true);
joinConfig.getKubernetesConfig().setProperty("service-dns",properties.getServiceDns());
joinConfig.getKubernetesConfig().setProperty("service-dns-timeout","10");
您无需创建HazelcastKubernetesDiscoveryStrategyFactory
。
更多信息,请访问: