美文网首页
Cassandra Q&A

Cassandra Q&A

作者: 九仞 | 来源:发表于2018-06-12 15:27 被阅读65次

Cassandra集群节点从3个发展到8个,节点磁盘空间从500GB发展到2TB,总体感觉自从上了Cassandra就过上了好日子。不管是增加节点,还是扩容磁盘,很少因为Cassandra运维停止过应用服务,真的感受到了分布式存储的好处。下面记录运维时碰到的一些问题,包括在社区邮件列表看到的别人的问题。

  1. Q:Schema Mismatch问题
    A:多半是修改表结构触发竞争引起,逐个重启集群全部节点可以解决问题。
  2. Q:system_auth登录问题
    A:用户登录信息保存在system_auth表,默认安装方式,RF是1,也就是说如果集群有任务一个节点挂掉,都可能影响登录。解决方式是生产环境,一定要把这个RF改成大于1.
  3. Q:单个磁盘满了怎么办?
    A:随着数据越来越多,逐渐2TB的磁盘都快满了(阿里云普通磁盘最大2TB),作为系统运维的你是不是开始焦虑。换一个更大的磁盘需要硬盘格式化,以及大数据量复制,耗时不说,且有风险。Cassandra有没有解决方案?当然有,这是个常见的应用场景,Cassandra当然会考虑。方法就是数据目录可以设置多个,可以是不同的磁盘。注意参数data_file_directories(在cassandra.yaml),directories是复数形式,表示可以是多个目录。当初找到这个方案的时候真是欣喜若狂。但是随即有了疑问?就是加了新磁盘后,Cassandra怎么向这两个磁盘写数据呢,是轮询吗?如果是轮询,那么旧磁盘很快就满了,满了就写不成功了,怎么办?别担心。通过请教社区和看代码,得出结论,Cassandra在memtable往sstable文件写时,首先检查磁盘是否有足够的空间写入memtable里的数据,会把不符合条件的磁盘过滤掉。感兴趣的同学可以查看memtable.java里的flush()函数。
  4. Q:权限命名空间system_auth损坏,无法登陆怎么办?
    A:一个真实的案例。Thomas的服务器因为一次崩溃,丢失了system_auth keyspace。由于集群没有对外提供服务,就启用AllowAllAuthorizer执行免登陆模式。后来情况有变,需要使用用户名密码登陆。改成PasswordAuthentication认证方式后,不能登陆,因为系统里压根没有任何用户。怎么能不重装Cassandra系统而重建这个system_auth keyspace呢?
    只有满足如下三个条件,超级用户cassandra才会在启动时被创建。
    a. 缺省的role manager被设置。在cassandra.yaml,你应该能看到“role_manager: CassandraRoleManager”。这是默认配置。除非你使用了一个自定义的role manager,这个配置一般没问题。
    b. 表system_auth.users、system_auth.credentials和system_auth.permissions应该不存在(2.2版本之前)。不存在表示在schema里不存在,不是指磁盘上不存在。跟其他系统表不一样,这个表是可以删掉的。(事实上从早期版本升级时,这是个必要的步骤)
    c. 系统表system_auth.roles不应该有先前存在的角色。可以使用一个查询语句进行验证。使用CQL删掉存在的角色,或者在所有节点上删掉data目录和commit日志文件。
    如果上面三个条件都符合,超级用户还是不能创建,那么使用下面的步骤应该也是ok的。
停止Cassandra
修改yaml文件配置,启用PasswordAuthenticator
删除数据目录,使用命令“rm -rf data/system_auth/roles-*”
启动Cassandra
用如下命令登陆“cqlsh -u cassandra -p cassandra”

相关文章

网友评论

      本文标题:Cassandra Q&A

      本文链接:https://www.haomeiwen.com/subject/hlpwsftx.html