Сбой Cassandra sstableloader при загрузке снимка таблицы "Не удается подключиться" - PullRequest
0 голосов
/ 27 января 2020

при использовании sstableloader загрузите новую таблицу из моментального снимка пространства ключей в другом кластере, ошибка

Шаги для воссоздания:

  1. создать эту таблицу
  2. cp файлы моментальных снимков во временный каталог temp_dir.
  3. sstableloader load (ошибка отсутствует)

Кто-нибудь знает, в чем проблема? Как я могу это исправить? Спасибо.

Деталь, как:

sstableloader --nodes vm_cdb01 -u dba -p xxx /xxx/temp_dir/snapshot_directory
WARN  21:21:42,124 Small cdc volume detected at /cdc_raw; setting cdc_total_space_in_mb to 1773.  You can override this in cassandra.yaml
WARN  21:21:42,302 Only 45.202GiB free across all data volumes. Consider adding more capacity to your cluster or removing obsolete snapshots
All host(s) tried for query failed (tried: vm-cdb01/10.28.60.76:9042 (com.datastax.driver.core.exceptions.TransportException: [vm-cdb01/xx.xxx.76] Cannot connect))
com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: vm-cdb01/xx.xxx.76:9042 (com.datastax.driver.core.exceptions.TransportException: [vm-cdb01/xx.xxx.76] Cannot connect))
        at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:233)
        at com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:79)
        at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1424)
        at com.datastax.driver.core.Cluster.init(Cluster.java:163)
        at com.datastax.driver.core.Cluster.connectAsync(Cluster.java:334)
        at com.datastax.driver.core.Cluster.connectAsync(Cluster.java:309)
        at com.datastax.driver.core.Cluster.connect(Cluster.java:251)
        at org.apache.cassandra.utils.NativeSSTableLoaderClient.init(NativeSSTableLoaderClient.java:73)
        at org.apache.cassandra.io.sstable.SSTableLoader.stream(SSTableLoader.java:159)
        at org.apache.cassandra.tools.BulkLoader.load(BulkLoader.java:80)
        at org.apache.cassandra.tools.BulkLoader.main(BulkLoader.java:48)
Exception in thread "main" org.apache.cassandra.tools.BulkLoadException: com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: vm-cdb01/xx.xxx.76:9042 (com.datastax.driver.core.exceptions.TransportException: [vm-cdb01/xx.xxx.76] Cannot connect))
        at org.apache.cassandra.tools.BulkLoader.load(BulkLoader.java:93)
        at org.apache.cassandra.tools.BulkLoader.main(BulkLoader.java:48)
Caused by: com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: vm-cdb01/xx.xxx.76:9042 (com.datastax.driver.core.exceptions.TransportException: [vm-cdb01/xx.xxx.76] Cannot connect))
        at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:233)
        at com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:79)
        at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1424)
        at com.datastax.driver.core.Cluster.init(Cluster.java:163)
        at com.datastax.driver.core.Cluster.connectAsync(Cluster.java:334)
        at com.datastax.driver.core.Cluster.connectAsync(Cluster.java:309)
        at com.datastax.driver.core.Cluster.connect(Cluster.java:251)
        at org.apache.cassandra.utils.NativeSSTableLoaderClient.init(NativeSSTableLoaderClient.java:73)
        at org.apache.cassandra.io.sstable.SSTableLoader.stream(SSTableLoader.java:159)
        at org.apache.cassandra.tools.BulkLoader.load(BulkLoader.java:80)
        ... 1 more

1 Ответ

0 голосов
/ 27 января 2020

То, что кто-то считал sstableloader достаточно простым для запуска, мне показалось довольно нелепым. Это делает предположения, которые должны быть покрыты переключателями программ. Прошло много времени с тех пор, как я запустил sstableloader, но из-за того, как он работает, я закончил тем, что создал сценарий оболочки для этой работы - особенно если вы хотите скопировать, скажем, несколько таблиц из нескольких пространств ключей в разные места. На высоком уровне мой скрипт выполняет команду:

sstableloader -u $ {targetUser} -pw $ {cassandraCopyTargetPassword} -d $ {targetHost} pwd

Все, что вам нужно поставка для цели. Если вы используете порт, отличный от порта по умолчанию, вам нужно указать «-p ####». Я заметил, что у вас есть что-то "выключено" для вашего значения "-p" (порт) - например, путь к каталогу.

Теперь, что касается того, что он на самом деле загружает, вот где я думаю, что весь процесс разваливается - и кто-то должен обратиться к нему, так как это нелепо, каковы предположения (опять же, вместо переключателей).

sstableloader проверяет, в каком каталоге вы находитесь - это должно напрямую совпадать с пространством ключей и таблицей, в которой будет находиться таблица TARGET.

Например, в исходном коде, давайте предположим, что я хочу скопировать все sstables скажем, из каталога / opt / cassandra / data / sourceKeyspace / sourceTable, НО, который будет отображен в targetKeyspace / targetTable в системе TARGET. Мне нужно создать каталог, который соответствует targetKeyspace / targetTable где-нибудь на исходном хосте. Например, я мог бы создать этот каталог как / tmp / targetKeyspace / targetTable (он не обязательно должен быть в / tmp, но он так же хорош, как и любой другой). Затем я изменил бы каталоги в этом месте, создал бы мягкие ссылки из этого каталога на все sstables в / opt / cassandra / data / sourceKeyspace / sourceTable) и запустил sstableloader, предоставив имя целевого каталога, созданного выше (или pwd, если вы сидите в целевой директории, как я делаю со своим скриптом). Запутанно, если не сказать больше.

Опять же, идея о том, что это хорошая идея о том, как заставить это работать, мне не под силу. В любом случае, надеюсь, это поможет вам работать.

...