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 原理、操作详细解释的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/viskaz/article/details/111613029
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/567639

相关文章

Python FastMCP构建MCP服务端与客户端的详细步骤

《PythonFastMCP构建MCP服务端与客户端的详细步骤》MCP(Multi-ClientProtocol)是一种用于构建可扩展服务的通信协议框架,本文将使用FastMCP搭建一个支持St... 目录简介环境准备服务端实现(server.py)客户端实现(client.py)运行效果扩展方向常见问题结

Spring Boot 整合 Apache Flink 的详细过程

《SpringBoot整合ApacheFlink的详细过程》ApacheFlink是一个高性能的分布式流处理框架,而SpringBoot提供了快速构建企业级应用的能力,下面给大家介绍Spri... 目录Spring Boot 整合 Apache Flink 教程一、背景与目标二、环境准备三、创建项目 & 添

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

Nacos注册中心和配置中心的底层原理全面解读

《Nacos注册中心和配置中心的底层原理全面解读》:本文主要介绍Nacos注册中心和配置中心的底层原理的全面解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录临时实例和永久实例为什么 Nacos 要将服务实例分为临时实例和永久实例?1.x 版本和2.x版本的区别

Java进程CPU使用率过高排查步骤详细讲解

《Java进程CPU使用率过高排查步骤详细讲解》:本文主要介绍Java进程CPU使用率过高排查的相关资料,针对Java进程CPU使用率高的问题,我们可以遵循以下步骤进行排查和优化,文中通过代码介绍... 目录前言一、初步定位问题1.1 确认进程状态1.2 确定Java进程ID1.3 快速生成线程堆栈二、分析

Java中的登录技术保姆级详细教程

《Java中的登录技术保姆级详细教程》:本文主要介绍Java中登录技术保姆级详细教程的相关资料,在Java中我们可以使用各种技术和框架来实现这些功能,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录1.登录思路2.登录标记1.会话技术2.会话跟踪1.Cookie技术2.Session技术3.令牌技

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

Macos创建python虚拟环境的详细步骤教学

《Macos创建python虚拟环境的详细步骤教学》在macOS上创建Python虚拟环境主要通过Python内置的venv模块实现,也可使用第三方工具如virtualenv,下面小编来和大家简单聊聊... 目录一、使用 python 内置 venv 模块(推荐)二、使用 virtualenv(兼容旧版 P

Python使用Code2flow将代码转化为流程图的操作教程

《Python使用Code2flow将代码转化为流程图的操作教程》Code2flow是一款开源工具,能够将代码自动转换为流程图,该工具对于代码审查、调试和理解大型代码库非常有用,在这篇博客中,我们将深... 目录引言1nVflRA、为什么选择 Code2flow?2、安装 Code2flow3、基本功能演示

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.