Cassandra无法初始化错误"无法添加表格' role_members'到现有的密钥空间' system_auth'"

时间:2015-09-10 21:05:57

标签: docker cassandra fleet database nosql

我在Docker容器中运行Cassandra集群,使用fleet进行管理。我可以启动并运行群集,但是如果我将这些单元带入机群然后再次备份,则容器会失败。 Cassandra日志在第二次启动时有此条目。

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 个答案:

答案 0 :(得分:0)

您是否可以在不使用CassandraAuthorizer的情况下使用PasswordAuthenticator?我认为这可能不起作用并导致这个特殊错误。

system_auth不适用于AllowAllAuthenticator,您需要使用PasswordAuthenticator。如果您按以下方式配置cassandra.yaml:

authenticator: PasswordAuthenticator
authorizer: CassandraAuthorizer

然后重新启动cassandra,它应该为您创建system_auth键空间。如果您不想设置授权,则可以始终使用AllowAllAuthorizer。可以找到更多信息here

答案 1 :(得分:0)

这是我遇到的一个相当独特的配置问题。我将主机上的/var/lib/cassandra映射到我的docker容器中的/var/lib/cassandra。但我也无意中将/var/lib/cassandra/data映射到主机上自动生成的Docker目录。因此,当我停止并重新启动容器时,数据目录将消失,Cassandra会在尝试从commitlog目录重新创建数据时失败。

答案 2 :(得分:0)

我在Datastax “初始化多节点集群(单一数据中心)”教程之后遇到了问题。

我解决了同样的问题,删除了/var/lib/cassandra的全部内容,而不仅仅是/var/lib/cassandra/system/的内容

为什么呢? 我认为Kris得到了真正的问题来源:当重新启动时,C *服务发现commitLog已满并通过尝试重建在那里找到的提交而恢复,由于不同的配置和不同的表结构而失败...