如何设定 Cassandra Cluster 在多个节点上

⚡ 智能摘要

Cassandra Cluster 将多个节点分组,使数据分散存储,避免单个机器承载所有数据。本页将介绍集群组件、分区器和令牌环、先决条件、连接节点的配置设置以及如何验证结果。

  • 🧩 Cluster 结构体: 节点组成数据中心,数据中心组成集群,集群作为一个数据库运行。
  • 🎯 分区器角色: 分区键的哈希值生成一个令牌,该令牌决定哪个节点存储该行。
  • 🌱 种子节点: 种子节点是新节点首先与之建立联系的节点;它们不是主节点。
  • ⚙️ 主要设置: cluster_name、seeds、listen_address 和 rpc_address 必须在 cassandra.yaml 中保持一致。
  • 🚀 启动顺序: 首先启动种子节点,一次启动一个,然后再加入剩余的节点。
  • 验证: nodetool status 应该将每个节点都列为 UN,且所有权大致相等。

设置 Cassandra Cluster 在多个节点上

什么是 Cassandra Cluster?

A Cassandra 集群是整个 Cassandra 数据库。 这 Cassandra 集群包含许多不同层的存储单元,每一层都包含其他层。

大型组织,例如 Amazon像Facebook这样的公司需要管理海量数据。因此,这些机构无法将如此庞大的数据存储在单台机器上。这时,他们就会使用数据库,例如…… Cassandra 采用分布式架构。

这些组织将海量数据存储在多个节点上。这些节点彼此通信。为此, Cassandra 集群已建立。

  • Cluster 它本质上是一组节点,这样节点之间就可以轻松地相互通信。
  • 协调节点是接收客户端请求并代表该客户端与副本通信的节点。任何节点都可以充当任何请求的协调节点。

分区器

分区器决定数据在集群上的分布方式。分区器使用哈希函数在集群上分配数据。它使用分区键来计算哈希。该哈希称为 象征. 数据以此代币为基础进行分发。

默认分区器是 Murmur3Partitioner,它会生成均匀分布在固定范围内的令牌。每个节点拥有该范围内的一个或多个范围,这些范围的集合构成了…… 令牌环因为赋值是通过哈希而不是值来实现的,所以添加节点只会移动它所接管的范围,而不会重新排列整个数据集。

先决条件 Cassandra Cluster

集群设置有以下要求。

  1. 您应该有多台机器(物理机或虚拟机)作为节点。
  2. 网络中的节点必须能够相互通信。节点间通信的 7000 端口、启用 TLS 时使用的 7001 端口以及客户端连接的 9042 端口必须开放。
  3. 每个节点上都应该安装Linux。它是平台。 Cassandra 已在以下平台进行测试和支持。
  4. Apache Cassandra 必须在每个节点上安装相同版本。版本混用无法完成模式协议。
  5. 一个受支持的 JDK 必须在每台机器上安装,并设置 JAVA_HOME。
  6. 时钟必须与 NTP 同步。 Cassandra 通过时间戳解决冲突的写入操作,因此时钟漂移会在不知不觉中产生错误的结果。

最后一个要求最常被忽略,它会导致数据问题,而不是启动失败。

.

如何安装 Cassandra Cluster 在Linux上

Cassandra 必须在每台机器上安装此软件,然后任何机器才能加入集群。以下屏幕截图来自 DataStax Enterprise 图形安装程序,这是编写本教程时的常用方法。该安装程序已不再向公众分发,因此首先介绍当前的方法,然后才提供向导以供参考。

当前方法: 安装 Apache Cassandra 在每个节点上以相同的方式打包或二进制 tarball,然后验证每个节点是否都能独立启动,然后再尝试将它们连接起来。

tar -xzf apache-cassandra-x.y.z-bin.tar.gz -C /opt/
export CASSANDRA_HOME=/opt/apache-cassandra-x.y.z
$CASSANDRA_HOME/bin/cassandra -f

单个节点正常启动后,将其停止,清除其数据目录,然后继续执行下面的集群配置部分。

步骤1) 运行 Cassandra 企业版安装。 Linux 在终端中运行安装程序。将显示以下页面。

安装 Cassandra Cluster 在Linux上

此页面不提供任何必要信息。它仅提供有关 Cassandra 版本。因此请跳过此页并按下一步按钮。

步骤2) 接受许可协议。点击“下一步”按钮后,将显示以下页面。

安装 Cassandra Cluster 在Linux上

本页提供有关以下软件包和子软件包的信息: Cassandra 即将安装的软件。下方会询问许可协议。勾选“我接受协议”复选框,然后点击“下一步”按钮。

步骤3) 安装构建器并单击“下一步”。单击“下一步”按钮后,您将看到以下页面。

安装 Cassandra Cluster 在Linux上

此页面询问您有关安装选项的信息。

  1. 首先,它会询问安装目录。默认情况下,它安装在主目录中。
  2. 接下来,它会询问安装类型,选择简单安装。
  3. 接下来,它会询问是否更新系统,请勾选“否”。
  4. 接下来,它会询问默认接口。有两个选项,您可以安装在本地主机上,也可以选择 IP 地址。请选择 IP 地址进行安装。
  5. 按下一步按钮。

步骤4) 设置节点并单击“下一步”。单击“下一步”按钮后,将显示以下页面。

安装 Cassandra Cluster 在Linux上

此页面询问有关节点设置的信息。

  1. 首先,选择节点类型“Cassandra 节点'。
  2. 接下来,在“Ring Name”中输入您的集群名称。 Cluster 同一集群中所有节点的名称应该相同。
  3. 接下来,选择种子节点。种子节点是其他非种子节点启动时所联系的节点。
  4. 提供此信息后,按下一步按钮。

步骤5) 安装监控代理。点击“下一步”按钮后,将显示以下页面。此页面会要求您输入代理的安装 IP 地址。

  1. 监控控制台需要代理,所有节点都可以在一个地方被观察到。
  2. 提供此信息后,按下一步按钮。

安装 Cassandra Cluster 在Linux上

步骤6) 点击“下一步”进行安装。点击“下一步”按钮后,将显示以下页面。

安装 Cassandra Cluster 在Linux上

现在安装程序已准备好安装。按下一步按钮。

步骤7) 等待安装过程完成。点击“下一步”按钮后,将显示以下页面。

安装 Cassandra Cluster 在Linux上

安装程序将开始安装。

步骤8) 点击“完成”按钮。安装完成后,将显示以下页面。在同一页面上,您会看到默认显示的选项已勾选。

安装 Cassandra Cluster 在Linux上

配置 cassandra.yaml 以加入节点

仅安装并不能创建集群。节点只有在 cassandra.yaml 文件中的四个设置一致时才能相互发现,而大多数集群配置问题都出在这个文件上。

cluster_name: 'Guru99 Cluster'
seed_provider:
  - class_name: org.apache.cassandra.locator.SimpleSeedProvider
    parameters:
      - seeds: "192.168.1.10,192.168.1.11"
listen_address: 192.168.1.10
rpc_address: 0.0.0.0
broadcast_rpc_address: 192.168.1.10
endpoint_snitch: GossipingPropertyFileSnitch
  • 集群名称 必须在每个节点上都匹配。不匹配是节点拒绝加入的最常见原因。
  • 种子 列出起始节点与其通信的联系点。每个数据中心两到三个种子节点就足够了;将每个节点都设为种子节点会阻止自动引导。ping.
  • 监听地址 这是其他节点用来访问此节点的地址。它必须是一个真实的、可路由的地址,绝不能是 localhost。
  • 端点告密者 告诉 Cassandra 机架和数据中心布局。戈西ping通常选择 PropertyFileSnitch,其值在 cassandra-rackdc.properties 中设置。

数据存在后更改告密者或集群名称需要额外的步骤,因此两者都应该在第一个节点启动之前确定。

开始 Cassandra Node

安装后 Cassandra 在每个节点上启动服务器,并按照以下步骤操作。顺序很重要:先启动种子节点,一次启动一个,等待每个节点报告运行正常后再启动下一个。同时启动多个节点可能会导致令牌范围冲突。

步骤1) 去 Cassandra 安装目录并启动服务器。

bin/cassandra -f

开始 Cassandra Node

执行此命令后, Cassandra 服务器即将启动。以下是屏幕截图: Cassandra 服务器正在启动。

开始 Cassandra Node

大约一分钟后服务器就会启动。逐个启动每个节点服务器。启动所有节点服务器后,您的 Cassandra 集群已可供使用。

步骤2) 通过检查任意一个节点的环来验证每个节点是否都已加入。

nodetool status
nodetool describecluster

每个节点都应该显示状态 UN表示“运行正常”和“已启动”,并且“拥有”列应显示大致相等的百分比。describecluster 输出中只有一个模式版本,表明所有节点都同意该模式。

三种症状涵盖了大多数故障。从未出现的节点通常是集群名称不匹配或端口 7000 被阻塞。节点卡在…… UJ加入操作仍在传输数据,只是在大型集群上需要一些时间。所有权严重不均表明存在配置错误,可能是节点被放置在了错误的机架或数据中心。

如果环网络运行正常,则每个键空间的复制设置决定数据如何在其中分布,如以下部分所述: Cassandra 键空间 教程和 Cassandra 建筑 分解。

常见问题

三个,与标准的三副本因子相符。这样,即使一个节点因维护或故障而停机,QUORUM 的读写操作也能继续进行。

不。种子节点仅在启动和通信期间用作连接点。它们像其他节点一样存储数据,丢失一个种子节点不会影响正在运行的集群。

安装相同版本,将其指向现有种子,然后启动。它会通过流式传输其令牌范围自动引导。之后在其他节点上运行 nodetool cleanup 命令。

根据数据量、副本因子和吞吐量目标,AI 会生成一个合理的初始节点数。但需要通过负载测试来验证,因为压缩和修复开销与工作负载密切相关。

是的。将 system.log 与 cassandra.yaml 一起提供通常可以很快发现原因,最常见的是集群名称不匹配、端口被阻塞或 listen_address 被设置为 localhost。

总结一下这篇文章: