DataStax Academy FAQ

DataStax Academy migrated to a new learning management system (LMS) in July 2020. We are also moving to a new Cassandra Certification process so there are changes to exam bookings, voucher system and issuing of certificates.

Check out the Academy FAQ pages for answers to your questions:


question

wdeng avatar image
wdeng asked ·

节点因为硬件故障挂了,清除这个挂掉的节点以后怎样把它重新加到集群里来?

我想请问下,有一个Cassandra 3.11.4的三个节点的集群,复制因子是3。之前有个节点挂了,状态为DN,当时使用nodetool removenode清除这个挂掉的节点了,没有清数据直接起来加入集群后,发现数据紊乱,立即将这个节点nodetool decommission了,然后清除数据重新启动,加入集群后发现此节点数据不完整,查看nodetool status显示owns 100%,但是load明显有问题,请问应该怎么处理啊?


清除了此节点的saved_caches、data_file_directories以及commitlog_directory文件夹,是还有地方要删除才能启动吗?

repaircleanupremoveaddfailure
10 |1000 characters needed characters left characters exceeded

Up to 8 attachments (including images) can be used with a maximum of 1.0 MiB each and 10.0 MiB total.

1 Answer

wdeng avatar image
wdeng answered ·

挂掉的节点如果是DN状态的话,说明在其他节点看来这个节点还仍然在集群中存在,使用nodetool removenode以后,这个DN状态的节点会消失。之后如果你要把它重新加入Ring环的话,需要至少把它磁盘上的系统keyspace里的数据全部清空,(记住commitlog,hints,saved_caches也最好清干净,避免干扰),这样它在重新加入Ring并且bootstrap的时候,会认为自己是一个全新的节点,会跟其他的种子节点联系,重新把自己system keyspace里的数据生成(这个系统keyspace的数据量很少,几乎几秒钟之内就可以生成)。因为你是三个节点,副本数也是三,每个节点都有100%的完整数据,所以这种一个节点故障的情况不用担心数据丢失。把这个节点重新加入环以后运行nodetool repair,可以让这个节点保证跟其他两个节点上的数据内容完全同步,有一点要注意:如果你在cassandra.yaml里设置auto_bootstrap=false的话,在repair完成之前这个节点一直是会缺数据的,暂时你的数据读可能会出现问题,直到repair完成。要避免这个暂时的读问题,可以用LOCAL_QUORUM或者QUORUM一致性级别,这样即使读到暂时缺数据的这个节点也没关系。


nodetool status显示owns只是表示token ownership里面这个节点占多少比例,你这种n=3,RF=3的情况,每个节点都会显示100%。挂掉节点并清除了本地的数据之后,如果你没有使用auto_bootstrap=true的话,那么它上面数据的修复是需要你手动触发的,除非你使用一些自动的流程比如Cassandra-reaper这样的程序。如果你使用DSE的话,OpsCenter里有一个Repair Service也是做这个事情的,DSE6以上的版本还可以利用NodeSync来做自动修复。


这个修复场景,这个文档里有一个完整的流程:https://docs.datastax.com/en/ddac/doc/datastax_enterprise/operations/opsReplaceNode.html,可以看一下将来参考。

Share
10 |1000 characters needed characters left characters exceeded

Up to 8 attachments (including images) can be used with a maximum of 1.0 MiB each and 10.0 MiB total.