我们最近将公司服务器(Datastax Enterprise 4.5.3)升级到了 DSE 4.6.0。我们面临的唯一问题是新的备份服务,我们无法为“所有键空间”创建备份。不过,逐个备份键空间非常有效。错误似乎来自安装在节点上的 datastax-agent(s),我将在下面附上我能记得的尽可能多的详细信息。
OpsCenter 事件日志:
所有键空间备份失败:以下目标的所有键空间备份失败:快照
节点 <node-IP> 上所有键空间的快照失败:clojure.lang.Compiler$CompilerException:java.lang.ClassFormatError:类文件 clojure/core$eval87 中的方法代码长度无效,编译:(NO_SOURCE_PATH:0:0)(<node-IP>)
节点 <node-IP> 上所有键空间的快照失败:clojure.lang.Compiler$CompilerException:java.lang.ClassFormatError:类文件 clojure/core$eval87 中的方法代码长度无效,编译:(NO_SOURCE_PATH:0:0)(<node-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 路线.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/路由[fn] core.clj:2443 clojure.core/some core.clj:107 compojure.core/路由 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] middleware.clj:112 opsagent.http.middleware/wrap-content-error[fn] middleware.clj:31 opsagent.http.middleware/wrap-request-logging[fn] middleware.clj:17 opsagent.http.middleware/wrap-opscenter-id-check[fn] middleware.clj:123 opsagent.http.middleware/wrap-version-header[fn] keyword_params.clj:32 ring.middleware.关键字参数/wrap-关键字参数[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 服务器.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 (未知来源)java.lang.Thread.run 导致:java.lang.ClassFormatError:方法无效,代码长度为 96939 类文件 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/拍摄快照 {: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),数据集小得多,效果非常好。
答案1
OpsCenter 5.1 中有一个 (已知) 错误,会导致备份在特定情况下失败。很遗憾,您似乎遇到了这个问题。修复程序将在即将发布的 OpsCenter 5.1.1 中提供。
您发现的解决方法(每个键空间备份)应该可靠地工作。