背景记录
数据库集群(cassandra)因为长时间未维护,导致部分节点服务停止,重启问题节点服务后,两个节点开始二级索引重建工作。
因业务急需,创建新的图库(nsf1~3,顺序创建),创建过程中,hugegraph多次创建失败,(默认创建33张表,但后台5节点创建的表数量不一致,无任何节点创建成功),无奈下只能去数据库后台删除nsf1,登陆集群2个seed节点进行删库工作,提示删除成功。等待集群自行同步。
问题描述
第二天发现数据库中有两个节点服务挂掉,尝试重启后失败,无法正常启动。查看报错日志推测seed节点删库操作并未同步到问题节点,导致服务挂掉。
查看官网,问题原因是磁盘上存储的模式属性与 Cassandra 认为的集群的当前属性之间存在不一致。
解决方案
-
分别登陆两台问题节点,修改jvm.optimon 使服务能够启动(目的是无需从备份恢复即可启动节点的方法)
添加 -Dcassandra.ignore_corrupted_schema_tables=true到/cassandra/conf/jvm.options -
重启cassandra
systemctl restart dse -
确定服务启动后,进入数据库后台,删除导致报错的库表
/cassandra/bin/cqlsh ip port
desc keypaces;
drop keypaces nsfocus1(若报错,则尝试执行多次,直至删除为止,若多次仍未删除,也可以再次重启服务)
- 若删除成功,则将第1步中添加的内容删除,重新启动服务,若还是未删除,则继续第3步操作直至删除成功。
- 最后查看集群各节点日志,通过nodetool status验证集群服务,网络等。
杂记:
当前集群节点通过nodesync同步,但是同步有延迟,可临时修改同步速率,避免重启。
查看同步速率:nodetool nodesyncservice getrate
设置同步速率:nodetool nodesyncservice setrate value_in_kb_sec
设置同步速率:18M
nodetool nodesyncservice setrate 18432
手动启用nodesync
nodesync validation submit keyspace_name.table_name
例:
nodesync validation submit dse_insights.tokens
本集群因数据较大(>10T),综合考虑多方面实际情况(读写较为频繁),因此采用了repair模式进行集群同步。未采用nodesync