我们最近将公司服务器 (Datastax Enterprise 4.5.3) 升级到 DSE 4.6.0。我们面临的唯一问题是新的备份服务,我们无法为“所有密钥空间”创建备份。然而,一个接一个地备份键空间就像一个魅力。该错误似乎来自安装在节点上的 datastax-agent(s),我在下面附上了尽可能多的细节。
OpsCenter 事件日志:
备份所有键空间失败:备份以下目标的所有键空间失败:快照
节点 < node-IP > 上所有键空间的快照失败:clojure.lang.Compiler$CompilerException: java.lang.ClassFormatError: Invalid method Code length 96939 in class file clojure/core$eval87, compile:(NO_SOURCE_PATH:0:0) (<节点-IP>)
节点 < node-IP > 上所有键空间的快照失败:clojure.lang.Compiler$CompilerException: java.lang.ClassFormatError: Invalid method Code length 96939 in class file clojure/core$eval87, compile:(NO_SOURCE_PATH:0:0) (<节点-IP>)
上述错误(所有键空间的快照...)稍长一些,因为集群上的每个可用节点都会出现一次,最后会出现“所有键空间的备份失败:...”错误。
同时,所有 datastax-agents 都显示以下错误消息:
错误 [qtp1549990111-47] 2015-02-13 18:35:50,887 未处理的路由 异常:clojure.lang.Compiler$CompilerException: java.lang.ClassFormatError:类中的方法无效代码长度 96939 文件 clojure/core$eval87,编译:(NO_SOURCE_PATH:0:0) Compiler.java:6567 clojure.lang.Compiler.analyzeSeq Compiler.java:6361 clojure.lang.Compiler.analyze Compiler.java:6616 clojure.lang.Compiler.eval Compiler.java:6608 clojure.lang.Compiler.eval Compiler.java:6582 clojure.lang.Compiler.eval core.clj:2852 clojure.core/eval routes.clj:58 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:93 opsagent.http.middleware/wrap-application-error[fn] middleware.clj:75 opsagent.http.middleware/wrap-content-type[fn] 中间件.clj:112 opsagent.http.middleware/wrap-content-error[fn] 中间件.clj:31 opsagent.http.middleware/wrap-request-logging[fn] 中间件.clj:17 opsagent.http.middleware/wrap-opscenter-id-check[fn] 中间件.clj:123 opsagent.http.middleware/wrap-version-header[fn] keyword_params.clj:32 ring.middleware.keyword-params/wrap-keyword-params[fn] params.clj:58 ring.middleware.params/wrap-params[fn] jetty.clj:19 opsagent.http.jetty/proxy-handler[fn] (来源不明) opsagent.http.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 Caused by: java.lang.ClassFormatError: Invalid method Code length 96939 in 类文件 clojure/core$eval87 (未知来源) java.lang.ClassLoader.defineClass1 (未知来源) java.lang.ClassLoader.defineClass (未知来源) java.lang.ClassLoader.defineClass DynamicClassLoader.java:46 clojure.lang.DynamicClassLoader.defineClass Compiler.java:4663 clojure.lang.Compiler$ObjExpr.getCompiledClass Compiler.java:3819 clojure.lang.Compiler$FnExpr.parse Compiler.java:6558 clojure.lang.Compiler.analyzeSeq 信息 [qtp1549990111-47] 2015-02-13 18:35:50,888 HTTP::post /ops/take-snapshot {:req-id "c13bb101-2f9e-4880-8b1f-efc178f49b3e"} - 500
以上适用于 2 个数据中心(Datastax 默认值、Cassandra/Analytics DC 和 DseSimpleSnitch)中的 5 个节点的生产集群。分析 DC 与 Spark 和 CFS 一起使用。我已经尝试了相同的程序(升级路径 4.5.3->4.6.0-> 备份所有密钥空间)到我的本地 2 机器集群(一个 Cassandra,一个 Analytics),数据集要小得多,它就像一个魅力。
OpsCenter 5.1 中有一个(已知的)错误会导致备份在特定情况下失败。不幸的是,看起来你有 . 该修复程序将在即将发布的 OpsCenter 5.1.1 中。
您发现的解决方法(按密钥空间备份)应该可以可靠地工作。