获取 datastax-agent (DSE 4.0.2) 与 opscenter (4.1.2) 协同工作时出现问题,出现 IllegalArgumentException

获取 datastax-agent (DSE 4.0.2) 与 opscenter (4.1.2) 协同工作时出现问题,出现 IllegalArgumentException

我想问题是:为什么这不起作用?我有点困惑,因为关于代理本身的文档并不多,而且异常(似乎来自 Clojure)并不是特别有用。

  • 运行 DSE 4.0.2 的 3 节点集群(在 SLES 11 SP3、Oracle JRE 1.7.0_45 上)
  • Ubuntu 14.04 LTS 上的 OpsCenter 4.1.2
  • OpsCenter 能够毫无问题地连接到集群,但显然抱怨三个节点上的代理尚未连接;作为 SLES,OpsCenter 仪表板中的“修复”链接不起作用(因为 SLES 不使用 apt 或 yum)
  • /etc/cassandra/ 中的 Cassandra 配置(基于 strace,datastax-agent 正在寻找,尽管它看起来在此之后使用了 JMX,而不是读取 cassandra.yaml)

按照 DataStax OpsCenter 4.1 文档中的手动代理设置说明进行操作(基本上只是创建 address.yaml),并在所有三个节点上启动 datastax-agent。启动后不久,所有三个节点都出现相同的异常:

 INFO [StompConnection receiver] 2014-05-26 16:06:17,735 Starting up agent collection.
 INFO [StompConnection receiver] 2014-05-26 16:06:17,736 New JMX connection (127.0.0.1:7199)
ERROR [StompConnection receiver] 2014-05-26 16:06:17,749 failed calling listener
java.lang.IllegalArgumentException: No matching field found: getParentFile for class clojure.lang.Keyword
        at clojure.lang.Reflector.getInstanceField(Reflector.java:271)
        at clojure.lang.Reflector.invokeNoArgInstanceMember(Reflector.java:300)
        at opsagent.util.cassandra_util$find_base_dse_dir.invoke(cassandra_util.clj:50)
        at opsagent.util.cassandra_util$get_base_dse_dir.invoke(cassandra_util.clj:73)
        at opsagent.util.cassandra_util$tar_conf_location.invoke(cassandra_util.clj:89)
        at opsagent.util.cassandra_util$cassandra_conf_location.invoke(cassandra_util.clj:103)
        at opsagent.util.cassandra_util$get_cassandra_conf.invoke(cassandra_util.clj:123)
        at opsagent.opsagent$create_thrift_conf_vars.invoke(opsagent.clj:52)
        at opsagent.opsagent$post_interface_startup.doInvoke(opsagent.clj:95)
        at clojure.lang.RestFn.invoke(RestFn.java:421)
        at opsagent.conf$handle_new_conf.invoke(conf.clj:174)
        at opsagent.messaging$message_callback$fn__5242.invoke(messaging.clj:31)
        at opsagent.messaging.proxy$java.lang.Object$StompConnection$Listener$7f16bc72.onMessage(Unknown Source)
        at org.jgroups.client.StompConnection.notifyListeners(StompConnection.java:311)
        at org.jgroups.client.StompConnection.run(StompConnection.java:261)
        at java.lang.Thread.run(Unknown Source)

如果我尝试通过 OpsCenter 手动配置节点(在查看节点概览对话框时使用配置操作),我会得到类似(但更详细)的异常记录:

 INFO [qtp1593743543-20] 2014-05-26 16:08:54,436 New JMX connection (127.0.0.1:7199)
ERROR [qtp1593743543-20] 2014-05-26 16:08:54,453 Unhandled route Exception: java.lang.IllegalArgumentException: No matching field found: getParentFile for class clojure.lang.Keyword
                       Reflector.java:271 clojure.lang.Reflector.getInstanceField
                       Reflector.java:300 clojure.lang.Reflector.invokeNoArgInstanceMember
                    cassandra_util.clj:50 opsagent.util.cassandra-util/find-base-dse-dir
                    cassandra_util.clj:73 opsagent.util.cassandra-util/get-base-dse-dir
                    cassandra_util.clj:89 opsagent.util.cassandra-util/tar-conf-location
                   cassandra_util.clj:103 opsagent.util.cassandra-util/cassandra-conf-location
                   cassandra_util.clj:123 opsagent.util.cassandra-util/get-cassandra-conf
                           routes.clj:130 opsagent.http.routes/fn
                              core.clj:94 compojure.core/make-route[fn]
                              core.clj:40 compojure.core/if-route[fn]
                              core.clj:25 compojure.core/if-method[fn]
                             core.clj:107 compojure.core/routing[fn]
                            core.clj:2443 clojure.core/some
                             core.clj:107 compojure.core/routing
                          RestFn.java:139 clojure.lang.RestFn.applyTo
                             core.clj:619 clojure.core/apply
                             core.clj:112 compojure.core/routes[fn]
                             Var.java:415 clojure.lang.Var.invoke
                        middleware.clj:76 opsagent.http.middleware/wrap-application-error[fn]
                        middleware.clj:58 opsagent.http.middleware/wrap-content-type[fn]
                        middleware.clj:95 opsagent.http.middleware/wrap-content-error[fn]
                        middleware.clj:14 opsagent.http.middleware/wrap-request-logging[fn]
                    keyword_params.clj:32 ring.middleware.keyword-params/wrap-keyword-params[fn]
                            params.clj:58 ring.middleware.params/wrap-params[fn]
                             jetty.clj:18 ring.adapter.jetty/proxy-handler[fn]
                         (Unknown Source) ring.adapter.jetty.proxy$org.eclipse.jetty.server.handler.AbstractHandler$0.handle
                  HandlerWrapper.java:111 org.eclipse.jetty.server.handler.HandlerWrapper.handle
                          Server.java:349 org.eclipse.jetty.server.Server.handle
          AbstractHttpConnection.java:452 org.eclipse.jetty.server.AbstractHttpConnection.handleRequest
          AbstractHttpConnection.java:894 org.eclipse.jetty.server.AbstractHttpConnection.content
          AbstractHttpConnection.java:948 org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content
                      HttpParser.java:857 org.eclipse.jetty.http.HttpParser.parseNext
                      HttpParser.java:235 org.eclipse.jetty.http.HttpParser.parseAvailable
              AsyncHttpConnection.java:76 org.eclipse.jetty.server.AsyncHttpConnection.handle
           SelectChannelEndPoint.java:609 org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle
            SelectChannelEndPoint.java:45 org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run
                QueuedThreadPool.java:599 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob
                QueuedThreadPool.java:534 org.eclipse.jetty.util.thread.QueuedThreadPool$3.run
                         (Unknown Source) java.lang.Thread.run

答案1

Datastax OpsCenter 4.x 中存在一个错误,如果安装了 DSE,但/etc/cassandra将其用作配置目录,则可能导致代理启动期间出现问题。该问题应在 OpsCenter 的即将推出的版本中得到修复。

作为一种解决方法,请尝试创建一个/etc/dse目录并重新启动代理。

相关内容