一、异常情况描述
项目所在地的新能源生产数据中心因为线路与UPS调整改造,数据服务器因为没停机就强行关机,造成kairosdb时序数据访问异常。
异常结论:1、共享存储磁盘阵列xfs文件系统有损坏,造成不能加载;
2、kairsodb使用的cassandra 的keyspaces有异常,造成不能加载;
二、软件部署架构图
1、系统配置与告警数据:mysq关系数据库
2、时序数据:KairosDB数据库
3、报表分析数据:KairosDB数据库
4、Cassandra:大数据系列中的宽列式数据库,基于sstable结构,结构与HBase类似,分布式机制采用gossip算法;
5、双机热备软件:Keepalived;
三、排查过程
1、共享存储的磁盘阵列没加载,开始经初步排查是因为前期keepalived 双机热备脚本本身有问题,把主机动态加载磁盘阵列的语句屏蔽了,如下图:
然而发现手动挂载失败,挂载报错,提示结构需要清理,如下图:
经网上查找,使用fsck命令可以清理,输入fsck /dev/sdb (磁盘阵列设备符),提示磁盘阵列类型为XFS filesystem,可以是用xfs_repair命令尝试修复。接着尝试输入xfs_repair /dev/sdb,然后提示错误--ERROR: The filesystem has valuable metadata changes in a log which needs to be replayed.
使用 xfs_repair -L /dev/sdb 命令再次进行修复,终于修复成功,并可以正常挂载 mount /dev/sdb /data
2、修复磁盘阵列xfs文件系统后,启动kairosdb还是报错,提示
05-12|14:08:21.341 [Ingest worker-9] ERROR [BatchHandler.java:192] - All host(s) tried for query failed (tried: /172.10.200.13:9042 (com.datastax.driver.core.exceptions.UnavailableException: Not enough replicas available for query at consistency ONE (1 required but only 0 alive))),内容大概意思就是没有足够的副本可供查询,需要1个,但是实际为0。
查看cassandra的数据目录/data/cassandra/data,竟然自动在kairosdb keyspaces(键空间,类似关系库下的数据库)下重新创建了一个实例,原来的数据文件实例访问不了。现象是整个kairosdb不能写入数据到cassandra,也查询不了数据。
经多次排除法测试,第一个问题是kairosdb的配置文件kairosdb.properties中的kairosdb.datastore.cassandra.replication的复制因子设置成了0的缘故,
此参数为kairosdb对应的cassandra分布式存储的复制因子个数,并且只有在kairosdb第一次启动需要创建keyspaces键空间时才起左右,上述Not enough replicas available for query at consistency ONE (1 required but only 0 alive)))就是因为该参数为0,所有在自动创建的keyspaces造成了不能访问,当然该参数在键空间已经存在的时候的情况,不起作用。修复方面有2个:
1)可以把该参数设置为1,然后清除kairosdb的keyspaces,重新启动cassandra和kairosdb即可;
2)通过cassandra的cql命令把kairosdb的keyspaces的复制因子修改为1,或用nosql manager for cassandra 在可视化下修改为1即可。
最后就是3.2T的keyspaces对应的数据的迁移修复,思路如下:
1、手动删除keyspaces下的自动创建的新实例id对应的相关文件夹;
2、通过nosql manager for cassandra修改键空间下的表id,如下图:
3、用cassandra bin下的nodetool工具重建索引和验证表对应的文件./nodetool rebuild_index(包括其他的表对应的文件夹)、./sstableverify kairosdb data_points(包括其他的表对应的文件夹),最后成功修复3.2T数据。
四、知识库补充
1、Cassandra可调节的一致性见文章(https://www.sohu.com/a/111111174_472869)
2、Cassandra nodetool常用操作见文章(https://blog.csdn.net/zhuwinmin/article/details/76063203)
3、Cassandra 宽列式数据库(与HBase同类型,sstable)学习网站(https://www.w3cschool.cn/cassandra/cassandra_drop_keyspace.html)