参考
https://docs.datastax.com/en/cassandra/3.0/cassandra/operations/opsRepairNodesTOC.html
前提:
每个数据副本N,写一致性级别是W,读一致性级别是R
##Hinted Handoff(提示移交):写修复
写操作是会发送N个写请求,但是只统计W个。对于另外N-W个节点,如果写失败,则记录hint。
hint内容
- target ID:目标节点
- hint ID:数据时间戳
- message ID:Cassandra版本
- blob:数据
写时修复包括五种情况:
-
一致性级别不满足
当用户指定的一致性级别不满足,或协调者挂了,则抛出UnavailableException异常。 -
一致性级别Any
将hint写入协调者节点也当做写成功。 -
失效检测机制已经标记节点挂掉
当Cassandra配置中hinted handoff打开,丢失的写操作在协调者节点以hint的格式存储一段时间T,hint保存在协调者本地hints目录,每十秒更新一次。当节点恢复之后,将hints中的每个hint写到恢复的节点上。如果节点超过max_hint_window_in_ms(3小时)还没恢复,停止写新的hints。
-
还未标记挂掉
当节点还没来得及被标记挂掉,当写操作超过write_request_timeout_in_ms(10秒),协调者节点返回一个TimeOu