AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 338035
Accepted
Stu
Stu
Asked: 2024-03-26 00:38:28 +0800 CST2024-03-26 00:38:28 +0800 CST 2024-03-26 00:38:28 +0800 CST

Cassandra 不会将数据复制到新的 DC

  • 772

我在一个数据中心有一个单节点 Cassandra 3.11.4 设置。

我知道这很糟糕而且是错误的,所以我尝试通过将数据移动到另一个数据中心的 3 节点设置来修复它。

拍摄快照并将其复制意味着太多的停机时间,因此我尝试将 3 个新节点添加到集群并让 Cassandra 复制数据。

system_distributed我的用户键空间以及的策略system_auth如下system_traces: {'class': 'NetworkTopologyStrategy', '(newdc)': '3', '(olddc)': '1'}

所有节点都能正常看到彼此(旧数据中心有 1 个节点,新数据中心有 3 个节点)。所有节点都报告 UN。所有节点都报告 100% 有效所有权。我可以从任何节点查询我的密钥空间并取回数据。新节点上的数据文件夹中有一个用于我的用户密钥空间的文件夹,但它是空的。新节点显示负载 <1MB,与原来的 600GB+ 相比似乎有点低。

当我nodetool rebuild -- (olddc)在任何新节点上执行此操作时,它几乎立即返回,没有任何消息。每个人都告诉我这个命令应该真正移动数据,但没有成功。

我怎样才能真正复制数据?

在日志中,我得到了Some ranges in (...all my ranges...) are already available, skipping streaming these ranges。可用,是的,但实际上我希望节点拥有数据!

nodetool status显示如下:

Datacenter: (new)
==================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address       Load       Tokens       Owns (effective)  Host ID                               Rack
UN  XX.XXX.X.110  775.49 KiB  256          100.0%            XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  Unknown
UN  XX.XXX.X.109  929.93 KiB  256          100.0%            XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  Unknown
UN  XX.XXX.X.108  710.75 KiB  256          100.0%            XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  Unknown
Datacenter: (old)
=============================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address       Load       Tokens       Owns (effective)  Host ID                               Rack
UN  XXX.XX.X.233  676.17 GiB  256          100.0%            XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  Unknown

重新启动了旧节点,现在nodetool rebuild出现以下信息:

nodetool: Unable to find sufficient sources for streaming range (-1652045364361720276,-1613609154633147610] in keyspace system_distributed

再次重新启动所有节点,现在一切似乎都正常了。

部分原因似乎是因为原始“集群”只有一个节点。不要这样做,他们说这样做会出问题,这可不是开玩笑。这不仅仅是冗余,事情根本就无法正常运转。

第二部分似乎是我们(两个外部)数据中心之间的连接不可靠。仅仅因为您的提供商说您有稳定的千兆连接并不意味着您应该相信他们。

如果您正在阅读本文,那么您可能遇到了同样的问题。

如果是这样,请阅读所有评论并按照 Mario 的出色建议排除其他问题。如果您仍然遇到这些奇怪的间歇性问题,请采取以下步骤:

  • 快速连续地重新启动所有节点(两个数据中心)。
  • 等待 24 小时。
  • 快速连续地重新启动所有节点(两个数据中心)。
  • 等待4个小时。
  • 再试一次。

(我不会自己回答这个问题,因为“解决方案”本质上相当于祈雨舞,完全不能令人满意。)

cassandra
  • 1 1 个回答
  • 115 Views

1 个回答

  • Voted
  1. Best Answer
    Erick Ramirez
    2024-04-23T16:18:08+08:002024-04-23T16:18:08+08:00

    单节点 DC 不是问题的根本原因。根据您描述的症状,我最好的猜测是新节点未正确添加到集群中。

    例如,如果您 (a) 将节点配置为种子,并且 (b) 未设置,auto_bootstrap: false则 (c) 它们将经历正常的引导序列而没有任何流式传输,因为 (d) 作为种子节点,它们没有任何内容可引导,因此 (e) 将“自动加入”集群。

    这句话是一个关键线索:

    在日志中,我得到Some ranges in (...all my ranges...) are already available, skipping streaming these ranges.

    这意味着节点认为它拥有所需的所有数据,因此不需要nodetool rebuild请求副本来传输任何数据。

    当节点认为它已成功引导时,它会在表中将所有键空间的所有令牌范围标记为“可用” system.available_ranges(system.available_ranges_v2在 C* 4.0 中,CASSANDRA-14406)。为了请求从副本重新流式传输数据nodetool rebuild,您需要删除相应的条目system.available_ranges或截断表。

    需要注意的是,如果网络不稳定,你将继续遇到其他问题。这也是你收到的原因Unable to find sufficient sources for streaming range ...。此错误表示与原始 DC 中的节点的连接中断。干杯!

    • 1

相关问题

  • 具有 1 个外部 IP 的 Cassandra 多数据中心配置

  • 迁移中的 Cassandra 升级/修复问题

  • Cassandra cqlsh 浏览器查询只能以字节为单位

  • 在 Cassandra 中使用许多(数千个)列族或键空间会有什么后果?

  • Cassandra 静态加密

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve