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
вместо. Более подробную информацию можно найти здесь.