2014-03-31 26 views
3

在启动和添加新节点到我的卡桑德拉群集配置为使用身份验证,我得到了下面的堆栈跟踪:正确的方式来扩展卡桑德拉集群使用验证

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表的复制因子?

+0

这个问题被标记为'卡桑德拉-2.0'所以如果哟你看[相关的源代码](http://grepcode.com/file/repo1.maven.org/maven2/org.apache.cassandra/cassandra-all/2.0.0/org/apache/cassandra/auth/ PasswordAuthenticator.java#208)它似乎在尝试创建它之前是否缺少列族(元数据== null)。您可能需要从Cassandra用户列表中寻求支持。 –

回答

1

尽管我没有找到任何关于该错误的具体信息,但它可能是一个警告,因为您正确地声明它应该已经存在。我假设节点已启动并加入群集。

回答您的问题:

什么是正确的方法,使新节点在线,鉴于system_auth列家族已经存在?

此外,随着集群大小的增加,如何应对增加system_auth表的复制因子?

我不是能张贴这个答案不止一个链接,但搜索Datastax文档添加节点会给你添加节点一般proceedure将使用身份验证是相同的羯羊或没有,唯一的区别是在cassandra.yaml

身份验证设置配置与复制system_auth密钥空间覆盖以下文档中:

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