Cassandra nodetool repair 原理、操作详细解释

2024-01-04 00:59

本文主要是介绍Cassandra nodetool repair 原理、操作详细解释,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、为什么需要修复?

Cassandra 为了保证数据的可用性不丢失,一个数据往往多个节点备份。 当一个节点数据发生改变,其他备份节点节点可能因为宕机、网络不通畅,高负载导致长时间gc原因, 数据没有及时同步,会出现数据不一致的情况,这个时候需要进行node repair

在这里插入图片描述

二、Casandra 三种修复方式:

1、Hinted Handoff(写入修复)

数据在写入的时候没有完成同步,会在协调节点上记录hint log (留下日志记录)。 当备份节点恢复正常,可以写入的时候,系统根据日志记录,完成修复。

在这里插入图片描述

可以配置的参数(Cassandra.yaml)

•hinted_handoff_enabled

•max_hint_window_in_ms (默认3 小时)

•write_request_timeout_in_ms(默认1s)

2、读修复

Cassandra 根据读 Consistency Level , 读取相应的副本,并比较副本内容,返回最新版本数据。

如果副本之间内容不一致,后台就会启动读修复,以最新版本的数据为基准修复其他节点数据

在这里插入图片描述

3、反熵修复(手动修复)
3.1 主要使用的是 nodetool repair 命令
3.2 意义:

集群负载过大,频繁的宕机,或者删除数据,会导致数据不一致,读修复和写修复有时候不能维持集群的健康.

3.3 过程:

1)为每个副本构建 Merkle tree

2)比较Merkle tree , 发现不一致,进行修复
(merkle树的定义可以参考: https://www.cnblogs.com/s-lisheng/p/11301063.html)

在这里插入图片描述

三、Casandra 手动修复命令参数详解

1、Full repair vs incremental repair (-full vs -inc)
  • Full repair
    为所有sstable构建完全Merkle tree,做一次全面扫描, 对所有不一致数据数据进行修复
  • Incremental Repair:
    将数据分成repaired 和 unrepaired, 只修复unrepaired的数据33在这里插入图片描述
Parallel repair vs Sequential repair (-seq vs -par)
  • Sequential Repair

先为副本创建快照, 协调节点使用Merkle tree 依次比较各个副本,遇到差异使用快照对各个节点进行修复

特点: 对节点CPU资源占用较小,但是修复速度慢

  • Parallel Repair

同时为各个节点创建Merkle tree, 然后同时比较,对不一致节点数据进行修复

特点: 对节点CPU等资源占用较大, 但是修复速度快

3、 partitioner range repair (-pr)

概念:Token Ranges
[参考]

假设有一个集群:

(节点数:10; Token:100; 复制因子:3)

数据分布如下:

token1–10 : N1, N2, N3;

token:11–20 :N2, N3, N4;

token:21–30 :N3, N4, N5

在这里插入图片描述
N3 拥有token 数为 1-30 的数据,假设在N3 运行 nodetool repair, 它会修复token 1-30的数据

N4 拥有token 树为 11-40 的数据,如果在N4上运行nodetool repair, 它会修复token 11 - 40 的数据, 发现重复修复,效率降低了,所以需要使用 partitioner range repair

如果在N3上运行 nodetool repair -pr, 只会修复 token 为20 - 30 的数据,避免重复修复

使用方法: 这个命令必须在集群中每个节点上运行,否则会导致部分数据没有修复

四、Casandra 手动修复集群的建议

  • 定时运行 nodetool repair , 及时没有删除数据,服务器宕机等情况
  • 节点宕机之后,故障处理完毕,重新加入集群
  • 对某些数据进行修改之后(如删除), 但是这些数据不经常被读
  • 恢复丢失数据或者破损了的SSTable( 这种必须使用full repair)

参考网站:

Repairing nodes
Anticompaction in Cassandra 2.1

这篇关于Cassandra nodetool repair 原理、操作详细解释的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/567639

相关文章

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum

Java中HashMap的用法详细介绍

《Java中HashMap的用法详细介绍》JavaHashMap是一种高效的数据结构,用于存储键值对,它是基于哈希表实现的,提供快速的插入、删除和查找操作,:本文主要介绍Java中HashMap... 目录一.HashMap1.基本概念2.底层数据结构:3.HashCode和equals方法为什么重写Has