1

环境细节: 工作灯:6.2

应用服务器:Liberty 8.5.5.0

操作系统:Windows Server 2008 r2

我正在尝试在 Worklight 6.2 中实现 Operational Analytics 的集群拓扑。以下是步骤

  1. 创建了两个自由服务器实例 analytics1 和 analytics2。

  2. 将 analytics.war 文件复制到两台服务器的应用程序文件夹中。

  3. 在analytis1服务器的server.xml中,我已经配置为主节点了。

    jndiEntry jndiName="analytics/nodetype" value="master"
    jndiEntry jndiName="analytics/shards" value="2"
    jndiEntry jndiName="analytics/replicas_per_shard" value="2"

  4. 在 analytics2 服务器的 server.xml 0f 中,我已配置为数据节点。

    jndiEntry jndiName="analytics/nodetype" value="data"
    jndiEntry jndiName="analytics/masternodes" value="XX.XX.XX.XX:9600"

此拓扑中未填充数据。

如果将其作为单个节点尝试,即没有将节点类型设置为主节点或数据,则显示分析结果。

以下是我的日志跟踪

    [10/11/14 23:23:30:351 GST] 00000021 com.ibm.ws.webcontainer.servlet                              I SRVE0242I: [analytics] [/analytics] [data]: Initialization successful.
[10/11/14 23:24:11:920 GST] 00000021 org.apache.wink.server.internal.RequestProcessor             E An unhandled exception occurred which will be propagated to the container.
[10/11/14 23:24:11:955 GST] 00000021 com.ibm.ws.webcontainer.util.ApplicationErrorUtils           E SRVE0777E: Exception thrown by application class 'org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction.onFirstPhaseResult:276'
org.elasticsearch.action.search.SearchPhaseExecutionException: Failed to execute phase [query], all shards failed
    at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction.onFirstPhaseResult(TransportSearchTypeAction.java:276)
    at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction.start(TransportSearchTypeAction.java:147)
    at org.elasticsearch.action.search.type.TransportSearchQueryThenFetchAction.doExecute(TransportSearchQueryThenFetchAction.java:59)
    at org.elasticsearch.action.search.type.TransportSearchQueryThenFetchAction.doExecute(TransportSearchQueryThenFetchAction.java:49)
    at org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:63)
    at org.elasticsearch.action.search.TransportSearchAction.doExecute(TransportSearchAction.java:108)
    at org.elasticsearch.action.search.TransportSearchAction.doExecute(TransportSearchAction.java:43)
    at org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:63)
    at org.elasticsearch.client.node.NodeClient.execute(NodeClient.java:92)
    at org.elasticsearch.client.support.AbstractClient.search(AbstractClient.java:212)
    at org.elasticsearch.action.search.SearchRequestBuilder.doExecute(SearchRequestBuilder.java:1043)
    at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:85)
    at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:59)
    at com.ibm.elasticsearch.util.ESUtility.genericFacet(ESUtility.java:155)
    at com.ibm.elasticsearch.util.ESUtility.genericFacet(ESUtility.java:139)
    at com.ibm.elasticsearch.util.ESUtility.genericFacet(ESUtility.java:210)
    at com.ibm.elasticsearch.rest.Common.getGadgets(Common.java:51)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
4

1 回答 1

0

问题是主节点没有数据节点就无法显示数据,数据节点不先连接主节点就无法运行。我认为这不起作用,因为您的两个节点一开始就没有通信。

Karikalan 的评论是正确的,为什么您的数据节点上的“masternodes”JNDI 属性设置为 localhost?这意味着当数据节点启动时,它将尝试在“localhost:9600”处寻找一个主节点,这将不起作用,因为它只是将它指向自己。尝试将“localhost:9600”更改为拥有主节点的服务器的 IP 地址。

此外,如果您只计划拥有两个节点,那么我不建议您使用单独的主节点和数据节点。如果有几个其他节点需要管理(几个我的意思是 5 个以上的节点),主节点会有所帮助。只有 2 个节点,一个作为主节点,一个作为数据节点会浪费资源。您应该将两个节点都设置为“主节点和数据”节点(这可以通过简单地不设置“分析/节点类型”JNDI 属性来实现)。然后将每台服务器上的“masternodes”JNDI 属性设置为指向另一台服务器。

编辑:

您可以尝试以下方法:

  1. 停止两台服务器
  2. 删除每个服务器的“analyticsData”数据文件夹(它与您的 server.xml 位于同一文件夹中)
  3. 为了安全起见,暂时将每个分片的副本值设置为 1
  4. 先启动主节点,访问主节点的控制台
  5. 启动数据节点并访问数据节点的控制台
  6. 尝试将数据发送到分析集群
于 2014-10-11T16:43:07.423 回答