Недавно мы обновили серверы нашей компании (Datastax Enterprise 4.5.3) до DSE 4.6.0. Единственная проблема, с которой мы сталкиваемся, - это новый Служба резервного копирования, в котором мы не можем создать резервную копию «Все пространства ключей». Тем не менее, резервное копирование пространств ключей по одному работает как шарм. Ошибка, похоже, исходит от агента (ов) datastax, установленного на узлах, и я привожу столько деталей, сколько могу вспомнить ниже.
Журнал событий OpsCenter:
Ошибка резервного копирования всех пространств ключей: сбой резервного копирования всех пространств ключей для следующих мест назначения: моментальный снимок
Не удалось сделать снимок всех пространств ключей на узле <node-IP>: clojure.lang.Compiler $ CompilerException: java.lang.ClassFormatError: недопустимый метод Длина кода 96939 в файле класса clojure / core $ eval87, компиляция: (NO_SOURCE_PATH: 0: 0) (<IP-адрес узла>)
Не удалось сделать снимок всех пространств ключей на узле <node-IP>: clojure.lang.Compiler $ CompilerException: java.lang.ClassFormatError: недопустимый метод Длина кода 96939 в файле класса clojure / core $ eval87, компиляция: (NO_SOURCE_PATH: 0: 0) (<IP-адрес узла>)
Вышеупомянутая ошибка (моментальный снимок всех пространств ключей ...) немного длиннее, так как она появляется один раз для каждого доступного узла в кластере, и в конце отображается ошибка «Резервное копирование всех пространств ключей: ...».
При этом все агенты datastax-agent выдают следующее сообщение об ошибке:
ERROR [qtp1549990111-47] 2015-02-13 18:35:50,887 Unhandled route Exception: clojure.lang.Compiler$CompilerException: java.lang.ClassFormatError: Invalid method Code length 96939 in class file clojure/core$eval87, compiling:(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] 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.keyword-params/wrap-keyword-params[fn] params.clj:58 ring.middleware.params/wrap-params[fn] jetty.clj:19 opsagent.http.jetty/proxy-handler[fn] (Unknown Source) 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 class file clojure/core$eval87 (Unknown Source) java.lang.ClassLoader.defineClass1 (Unknown Source) java.lang.ClassLoader.defineClass (Unknown Source) 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 INFO [qtp1549990111-47] 2015-02-13 18:35:50,888 HTTP: :post /ops/take-snapshot {:req-id "c13bb101-2f9e-4880-8b1f-efc178f49b3e"} - 500
Вышесказанное относится к производственному кластеру из 5 узлов в 2 центрах обработки данных (значения по умолчанию Datastax, контроллеры домена Cassandra / Analytics и DseSimpleSnitch). Аналитика DC работает со Spark и CFS. Я пробовал ту же процедуру (путь обновления 4.5.3-> 4.6.0-> Резервное копирование всех пространств ключей) в моем локальном кластере из двух машин (одна Cassandra, одна Analytics) с гораздо меньшим набором данных, и она работает как шарм.
В OpsCenter 5.1 есть (известная) ошибка, которая приводит к сбою резервного копирования в определенных сценариях. К сожалению, похоже, что у вас есть. Исправление будет в OpsCenter 5.1.1, который скоро будет выпущен.
Обнаруженный вами обходной путь (резервное копирование пространства ключей) должен работать надежно.