Docker Cassandra未能初始化,错误为;无法添加表';成员角色';到不存在的键空间';系统认证'&引用;

Docker Cassandra未能初始化,错误为;无法添加表';成员角色';到不存在的键空间';系统认证'&引用;,docker,cassandra,fleet,database,nosql,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. I

我正在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]
我找不到关于这个特定错误的任何信息,我真的不知道为什么会发生这种情况。我能找到的最接近的信息是,如果您没有使用默认的
AllowAllAuthenticator
,则需要特别配置
system\u auth
表,但我正在使用此表。我没有在cassandra.yaml文件中更改它


有人知道为什么会发生这种情况吗?

是否有可能您使用的是
CassandraAuthorizer
,而没有使用
密码验证器
?我认为这可能不起作用,并导致这个特定的错误

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

authenticator: PasswordAuthenticator
authorizer: CassandraAuthorizer

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

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

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

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

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

我的cassandra.yaml文件具有
身份验证程序:AllowAllAuthenticator
授权程序:AllowAllAuthorizer
。我认为这些是默认设置。我在安装过程中没有更改它们。但我确实觉得这很奇怪,因为其他人提到,甚至不应该使用这些设置创建
system\u auth
。是否会自动在其他地方设置它们?有趣的是,我同意,除非您显式地设置它们,否则我不希望出现system_auth表。卡桑德拉的哪个版本?版本是2.2.0。我想我可以尝试更新到2.2.1。使用AllowAllAuthorizer和AllowAllAuthenticator时不会创建系统验证密钥空间。问题是为什么Cassandra在给定配置的情况下试图创建role_members表。您是否更改了这些文件中的任何内容,或者是直接打开了它?我没有直接更改cassandra.yaml文件。我在dockerfile中设置了一些cassandra环境变量,然后cassandra使用这些变量更新该文件。我设置的变量有
ENV CASSANDRA_SEEDS
ENV CASSANDRA_CLUSTER_NAME
ENV CASSANDRA_DC
ENV CASSANDRA_RACK
ENV CASSANDRA_ENDPOINT_SNITCH