Cassandra не может инициализироваться с ошибкой "Невозможно добавить таблицу 'role_members' в несуществующее пространство ключей 'system_auth'"

Я управляю кластером Cassandra в контейнерах Docker, используя флот для управления. Я могу запустить кластер и запустить его, но если я сброшу юниты флотом, а затем снова включу, контейнеры выйдут из строя. Журналы Кассандры имеют эту запись при втором запуске.

Cannot add table 'role_members' to non existing keyspace 'system_auth'.
Fatal configuration error; unable to start server.  See log for stacktrace.
INFO  20:59:34 InetAddress /172.17.8.102 is now DOWN
ERROR 20:59:34 Fatal configuration error
org.apache.cassandra.exceptions.ConfigurationException: Cannot add table 'role_members' to non existing keyspace 'system_auth'.
        at org.apache.cassandra.service.MigrationManager.announceNewColumnFamily(MigrationManager.java:284) ~[apache-cassandra-2.2.0.jar:2.2.0]
        at org.apache.cassandra.service.MigrationManager.announceNewColumnFamily(MigrationManager.java:275) ~[apache-cassandra-2.2.0.jar:2.2.0]
        at org.apache.cassandra.service.StorageService.maybeAddTable(StorageService.java:1046) ~[apache-cassandra-2.2.0.jar:2.2.0]
        at org.apache.cassandra.service.StorageService.doAuthSetup(StorageService.java:1034) ~[apache-cassandra-2.2.0.jar:2.2.0]
        at org.apache.cassandra.service.StorageService.joinTokenRing(StorageService.java:967) ~[apache-cassandra-2.2.0.jar:2.2.0]
        at org.apache.cassandra.service.StorageService.initServer(StorageService.java:698) ~[apache-cassandra-2.2.0.jar:2.2.0]
        at org.apache.cassandra.service.StorageService.initServer(StorageService.java:581) ~[apache-cassandra-2.2.0.jar:2.2.0]
        at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:291) [apache-cassandra-2.2.0.jar:2.2.0]
        at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:481) [apache-cassandra-2.2.0.jar:2.2.0]
        at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:588) [apache-cassandra-2.2.0.jar:2.2.0]

Я не могу найти никакой информации об этой конкретной ошибке, и я действительно не знаю, почему это происходит. Самая близкая информация, которую я могу найти, - то, что system_auth Таблица должна быть настроена специально, если вы не используете по умолчанию AllowAllAuthenticator, но я использую это. Я не изменил его в файле cassandra.yaml.

Кто-нибудь знает, почему это может происходить?

3 ответа

Решение

Это оказалось довольно уникальной проблемой конфигурации, которая у меня была. Я картировал /var/lib/cassandra на хосте /var/lib/cassandra внутри моего докера Но я также случайно отображал /var/lib/cassandra/data в автоматически сгенерированный каталог Docker на хосте. Таким образом, когда я останавливал и перезапускал контейнеры, каталог данных исчезал, а Cassandra не работала, когда пыталась воссоздать данные из каталога commitlog.

Я получил проблему, просто следуя учебнику Datastax "Инициализация кластера из нескольких узлов (единый центр обработки данных)".

Я решил ту же проблему, удалив весь контент /var/lib/cassandra а не только содержание /var/lib/cassandra/system/

Зачем? Я думаю, что Крис получил реальный источник проблемы: при перезапуске сервис C* обнаружил, что commitLog заполнен и восстановлен, пытаясь восстановить обнаруженные там коммиты, потерпев неудачу из-за другой конфигурации и другой структуры таблицы...

Возможно ли, что вы используете CassandraAuthorizer без использования PasswordAuthenticator? Я думаю, что это может не сработать и вызвать эту конкретную ошибку.

system_auth не относится к AllowAllAuthenticatorнужно использовать PasswordAuthenticator вместо. Если вы настраиваете cassandra.yaml следующим образом:

authenticator: PasswordAuthenticator
authorizer: CassandraAuthorizer

А затем перезапустите cassandra, он должен создать пространство ключей system_auth для вас. Если вы не хотите устанавливать авторизацию, вы всегда можете использовать AllowAllAuthorizer вместо. Более подробную информацию можно найти здесь.

Другие вопросы по тегам