【问题标题】:jclouds connection refused during hazelcast clusteringhazelcast集群期间jclouds连接被拒绝
【发布时间】:2017-11-20 17:05:15
【问题描述】:

问题

  • 为什么要使用 localhost?
  • keystone 与它有什么关系?
    • 我似乎无法配置 keystone 端点

上下文

  • 应用:Spring Boot (1.5.6) REST API
  • 休眠 5.2
  • Hazelcast 3.9 - 仅作为二级缓存
  • hazelcast-jclouds 3.7.1
  • jclouds-compute 和 jclouds-allcompute 2.0.2
  • 适用于运行应用程序的虚拟机的 Openstack 云

设置

我的hazelcast.xml 配置如下:

        <discovery-strategies>
            <discovery-strategy class="com.hazelcast.jclouds.JCloudsDiscoveryStrategy" enabled="true">
                <properties>
                    <property name="modules">org.jclouds.logging.slf4j.config.SLF4JLoggingModule</property>
                    <property name="provider">openstack-nova</property>
                    <property name="endpoint">http://dev.nova.cloud.youdontknow.net:8774/v2/</property>
                    <property name="identity">redacted</property>
                    <property name="credential">cens0red</property>
                </properties>
            </discovery-strategy>
        </discovery-strategies>

问题

应用初始化失败。以下是一些日志花絮:

[TRACE] o.j.r.internal.RestAnnotationProcessor   : looking up default endpoint for org.jclouds.openstack.keystone.v2_0.AuthenticationApi.public abstract org.jclouds.openstack.keystone.v2_0.domain.Access org.jclouds.openstack.keystone.v2_0.AuthenticationApi.authenticateWithTenantNameAndCredentials(java.lang.String,org.jclouds.openstack.keystone.v2_0.domain.PasswordCredentials)[bnet-web, PasswordCredentials{username=redacted, password=*****}]
[TRACE] o.j.r.internal.RestAnnotationProcessor   : using default endpoint Optional.of(http://localhost:5000/v2.0/) for org.jclouds.openstack.keystone.v2_0.AuthenticationApi.public abstract org.jclouds.openstack.keystone.v2_0.domain.Access org.jclouds.openstack.keystone.v2_0.AuthenticationApi.authenticateWithTenantNameAndCredentials(java.lang.String,org.jclouds.openstack.keystone.v2_0.domain.PasswordCredentials)[bnet-web, PasswordCredentials{username=redacted, password=*****}]
[TRACE] o.j.rest.internal.InvokeHttpMethod       : << converted AuthenticationApi.authenticateWithTenantNameAndCredentials to POST http://localhost:5000/v2.0/tokens HTTP/1.1

以下是一些异常堆栈跟踪:

Caused by: com.hazelcast.core.HazelcastException: Failed to get registered addresses
at com.hazelcast.jclouds.JCloudsDiscoveryStrategy.discoverNodes(JCloudsDiscoveryStrategy.java:93)
at com.hazelcast.jclouds.JCloudsDiscoveryStrategy.discoverLocalMetadata(JCloudsDiscoveryStrategy.java:106)
at com.hazelcast.spi.discovery.impl.DefaultDiscoveryService.discoverLocalMetadata(DefaultDiscoveryService.java:91)

...

Caused by: org.jclouds.http.HttpResponseException: Connection refused: connect connecting to POST http://localhost:5000/v2.0/tokens HTTP/1.1
    at org.jclouds.http.internal.BaseHttpCommandExecutorService.invoke(BaseHttpCommandExecutorService.java:122)
    ...
    at com.sun.proxy.$Proxy147.authenticateWithTenantNameAndCredentials(Unknown Source)
    at org.jclouds.openstack.keystone.v2_0.functions.AuthenticatePasswordCredentials.authenticateWithTenantName(AuthenticatePasswordCredentials.java:43)

其他说明

看起来它正在使用org.jclouds.openstack.keystone.v2_0.KeystoneApiMetadata 中配置的默认keystone 地址 - 但我不知道这是怎么回事。

【问题讨论】:

    标签: spring-boot hazelcast openstack-nova jclouds


    【解决方案1】:

    通过查看代码,我认为hazlecast-jclouds 不准备管理通用 API。当连接到provider 时,您不需要指定端点,因为它是众所周知的(AWS 端点、Google、Azure 等),但是当使用诸如 OpenStack 或 CloudStack 等通用 API 时,您需要告诉 jclouds 在哪里连接。不幸的是,hazlecast-jclouds 似乎不支持为通用 API 配置自定义端点。

    不过,快速浏览一下代码就会发现它很容易添加。所考虑的属性在JCloudsDiscoveryStrategyFactory中定义,然后在ComputeServiceBuilder中读取到create the jclouds context

    我不熟悉 Hazlecast,但我想说添加“端点”属性的定义,然后,如果存在,通过调用 jclouds contextBuilder.endpoint(endpoitn) 方法来配置它应该可以解决问题。

    【讨论】:

    • 但是:我正在关注此自述文件:github.com/hazelcast/hazelcast-jclouds/blob/master/README.md 其中包含指向提供者的链接(此处:jclouds.apache.org/reference/providers/#compute),其中包括 openstack-nova - 所以它似乎应该得到支持?哦,顺便说一句,我想我可能应该调用属性openstack-nova.endpoint 编辑:不,这没有帮助。
    • 我刚刚创建了hazlecast-jclouds 的一个分支,其中包含我提到的修复程序。你能在我的叉子里试试这个分支,看看它是否有效? github.com/nacx/hazelcast-jclouds/tree/endpoint
    • 我会试一试 - 但请注意,虽然我使用该示例进行配置,但我并没有编写任何代码来直接访问 jclouds。我只是在 hazelcast 中配置它以进行集群,并将其用作休眠 2 级缓存。
    • 是的。我的更改将(希望)使 hazlecast 读取配置的端点属性而不是忽略它。
    • 优秀。我构建并安装了库并将我的应用程序的 pom 撞到3.7.2-SNAPSHOT。它现在使用指定的端点。但是有一个奇怪的日志指出:TRACE 3896 --- [ restartedMain] o.j.r.internal.RestAnnotationProcessor : using default endpoint Optional.of(http://dev.nova.cloud.blizzard.net:8774/v2/) for org.jclouds.openstack.keystone.v2_0.AuthenticationApi,所以这看起来很奇怪,因为这不是default。现在,我收到了一个 auth failed 错误,所以我相信这是进步 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2021-04-19
    • 1970-01-01
    • 2017-08-08
    • 2016-09-28
    • 1970-01-01
    • 2019-07-16
    相关资源
    最近更新 更多