利用认证扩展Cassandra集群的正确方法

时间:2014-03-31 15:55:31

标签: java cassandra datastax cassandra-2.0

启动新节点并将其添加到配置为使用身份验证的Cassandra群集后,我获得了以下堆栈跟踪:

java.lang.RuntimeException: org.apache.cassandra.exceptions.AlreadyExistsException: Cannot add already existing column family "credentials" to keyspace "system_auth"
    at org.apache.cassandra.cql3.QueryProcessor.process(QueryProcessor.java:242)
    at org.apache.cassandra.auth.PasswordAuthenticator.process(PasswordAuthenticator.java:266)
    at org.apache.cassandra.auth.PasswordAuthenticator.setupCredentialsTable(PasswordAuthenticator.java:214)
    at org.apache.cassandra.auth.PasswordAuthenticator.setup(PasswordAuthenticator.java:171)
    at org.apache.cassandra.auth.Auth.setup(Auth.java:132)
    at org.apache.cassandra.service.StorageService.joinTokenRing(StorageService.java:830)
    at org.apache.cassandra.service.StorageService.initServer(StorageService.java:583)
    at org.apache.cassandra.service.StorageService.initServer(StorageService.java:482)
    at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:345)
    at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:462)
    at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:552)
Caused by: org.apache.cassandra.exceptions.AlreadyExistsException: Cannot add already existing column family "credentials" to keyspace "system_auth"
        at org.apache.cassandra.service.MigrationManager.announceNewColumnFamily(MigrationManager.java:209)
        at org.apache.cassandra.cql3.statements.CreateTableStatement.announceMigration(CreateTableStatement.java:114)
        at org.apache.cassandra.cql3.statements.SchemaAlteringStatement.execute(SchemaAlteringStatement.java:71)
        at org.apache.cassandra.cql3.QueryProcessor.processStatement(QueryProcessor.java:188)
        at org.apache.cassandra.cql3.QueryProcessor.process(QueryProcessor.java:222)
        at org.apache.cassandra.cql3.QueryProcessor.process(QueryProcessor.java:234)
        ... 10 more

这是有道理的,因为之前的节点之一已经创建了它。

鉴于system_auth列族已存在,将新节点联机的正确方法是什么?另外,当群集的大小增加时,如何满足增加system_auth表的复制因子?

1 个答案:

答案 0 :(得分:1)

虽然我还没有找到任何关于该错误的具体内容,但如果您正确说明它可能是一个警告,它应该已经存在。我假设节点已启动并加入集群,确定无法使用。

回答你的问题:

  

鉴于system_auth列族已存在,将新节点联机的正确方法是什么?

     

此外,当群集的大小增加时,如何满足增加system_auth表的复制因子的作用?

我无法在此答案上发布多个链接,但是搜索Datastax文档以添加节点将为您提供添加节点的一般步骤,这些节点与使用身份验证的节点是否相同,唯一的区别是身份验证cassandra.yaml中的设置

以下文档中介绍了如何使用复制配置system_auth密钥空间:

http://www.datastax.com/documentation/datastax_enterprise/4.5/datastax_enterprise/sec/secConfSysAuthKeyspRepl.html