Datastax OpsCenter 5.1 не может выполнить резервное копирование "All Keyspaces"
Недавно мы обновили серверы нашей компании (Datastax Enterprise 4.5.3) до DSE 4.6.0. Единственная проблема, с которой мы сталкиваемся, - это новая служба резервного копирования, в которой мы не можем создать резервную копию для "всех пространств ключей". Тем не менее, резервное копирование пространств клавиш по одному работает как шарм. Кажется, ошибка исходит от агента (ов) datastax, установленного на узлах, и я прилагаю столько деталей, сколько я могу вспомнить ниже.
Журнал событий OpsCenter:
Сбой резервного копирования всех пространств ключей: Сбой резервного копирования всех пространств ключей для следующих назначений: снимок
Снимок всех пространств ключей на узле
не выполнен: clojure.lang.Compiler$CompilerException: java.lang.ClassFormatError: Неверный метод Длина кода 96939 в файле класса clojure/core$eval87, компиляция:(NO_SOURCE_PATH:0:0) (<узел-IP>) Снимок всех пространств ключей на узле
не выполнен: clojure.lang.Compiler$CompilerException: java.lang.ClassFormatError: Неверный метод Длина кода 96939 в файле класса clojure/core$eval87, компиляция:(NO_SOURCE_PATH:0:0) (<узел-IP>)
Вышеуказанная ошибка (снимок всех пространств ключей...) немного длиннее, поскольку она возникает один раз для каждого доступного узла в кластере, и в конце появляется ошибка "Резервное копирование всех пространств ключей:...".
В то же время все агенты datastax выдают следующее сообщение об ошибке:
ОШИБКА [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-метод [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/routs[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] (Неизвестный источник) 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 (Неизвестный источник) 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/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-> Резервное копирование всех пространств ключей) в мой локальный кластер из 2 компьютеров (один Cassandra, один Analytics) с массивным набором данных меньшего размера, и он работает как чудо.
1 ответ
В OpsCenter 5.1 есть (известная) ошибка, которая приводит к сбою резервного копирования в определенных сценариях. К сожалению, похоже, у вас есть. Исправление будет в OpsCenter 5.1.1, которое скоро будет выпущено.
Обнаруженный вами обходной путь (резервное копирование для каждого пространства ключей) должен работать надежно.