尧图精选

ScyllaDB 集群横向扩容指南:向现有集群添加新节点(Out Scale / Bootstrap)

🕒 发布时间:2026/9/15 15:14:21 📁 来源:尧图网络
ScyllaDB 集群横向扩容指南向现有集群添加新节点Out Scale / Bootstrap【免费下载链接】scylladbNoSQL data store using the Seastar framework, compatible with Apache Cassandra and Amazon DynamoDB项目地址: https://gitcode.com/GitHub_Trending/sc/scylladb本文围绕 ScyllaDB 集群的横向扩容操作展开完整讲解向已有集群添加新节点Out Scale的前置检查、配置项含义、启动与验证流程以及数据流streaming与 cleanup 的最佳实践。读完本文你将掌握如何在多数据中心、多机架部署中安全地把一台新机器引导bootstrap进现有 ScyllaDB 集群并能通过nodetool status正确判读UJUp Joining与UNUp Normal状态从而避免数据丢失、数据复活data resurrection与机架级可用性风险。概述什么是 Bootstrapping当新节点加入集群时集群中的其他节点会把各自持有的数据流式传输stream到新节点上这一过程在 ScyllaDB 中称为bootstrapping引导。该操作可能相当耗时具体取决于集群中已有的数据量大小节点之间的网络带宽。从源码实现看ScyllaDB 的引导流程由 service/storage_service.cc 中的storage_service编排新节点启动后若尚未完成引导bootstrap_complete()为假会进入node_state::bootstrapping状态通过streaming::stream_reason::bootstrap触发bootstrap流程见 service/storage_service.cc由dht::range_streamer从其他节点拉取属于新节点的数据范围。这就是扩容期间旧节点负载上升、新节点出现UJ状态的根本原因。如果使用多可用区multi-availability-zone部署需要确保各可用区节点数量均衡避免单个可用区成为热点。前置条件添加节点前的检查清单检查集群中所有节点的状态只要集群中任意一个现有节点处于宕机down状态就不能添加新节点。添加节点前先在所有节点或任一节点上运行nodetool status确认所有节点均为UNUp Normal状态后再继续操作。收集集群信息登录集群中的任一节点收集以下信息作为新节点配置的依据需要收集的信息获取命令cluster_name集群名称grep cluster_name /etc/scylla/scylla.yamlseeds种子节点 IPgrep seeds: /etc/scylla/scylla.yamlendpoint_snitch拓扑感知策略grep endpoint_snitch /etc/scylla/scylla.yamlScyllaDB 版本scylla --versionauthenticator认证方式grep authenticator /etc/scylla/scylla.yaml这些信息必须与集群现有节点保持一致否则新节点可能无法加入或加入后行为异常。添加新节点的完整操作步骤第一步安装 ScyllaDB 并核对版本在要添加的新节点上安装 ScyllaDB安装指引见 Getting Started安装过程执行到scylla.yaml配置阶段即停止先不要启动服务。必须保证新节点的 ScyllaDB 版本与集群中其他节点一致尤其是patch release补丁版本必须完全相同。不建议使用不同版本的新节点加入集群。例如若集群部署版本为 2025.1.0则安装命令应为sudo yum install scylla-2025.1.0注意如果在完成配置前服务意外启动例如某些发行版安装后自动拉起服务会导致部分系统表记录了错误的引导状态单纯重启无法修复。此时必须按 What to do if a Node Starts Automatically节点自动启动的处理 中的流程处理停止服务 → 清理数据与 commitlog → 重新启动sudo systemctl stop scylla-server sudo rm -rf /var/lib/scylla/data sudo find /var/lib/scylla/commitlog -type f -delete sudo find /var/lib/scylla/hints -type f -delete sudo find /var/lib/scylla/view_hints -type f -delete sudo systemctl start scylla-server随后用nodetool status验证所有节点均已启动并加入集群。I/O 调度器配置提示对于硬件配置与现有节点完全相同的新节点建议跳过scylla_io_setup避免产生不必要的性能瓶颈。正确做法是在运行完scylla_setup之后从现有节点复制以下两个文件到新节点并重启scylla-server服务若已在运行/etc/scylla.d/io.conf/etc/scylla.d/io_properties.yaml相同硬件上应保持 I/O 调度器配置同步不同的 I/O 调度配置可能导致不必要的性能瓶颈。第二步配置/etc/scylla/scylla.yaml在每一个新节点上编辑/etc/scylla/scylla.yaml配置以下关键参数参数作用说明cluster_name指定集群名称必须与现有集群完全一致。它是防止机器加入错误逻辑集群的主要手段参见仓库中的 conf/scylla.yaml。注意已有集群的该值不可修改。listen_addressScyllaDB 用于与其他集群节点通信的 IP 地址。conf/scylla.yaml中默认值为localhost注释明确提示必须修改才能让多节点互相通信conf/scylla.yaml。若设置了broadcast_addresslisten_address可设为0.0.0.0。endpoint_snitch指定的 snitch拓扑感知策略。仓库 conf/scylla.yaml 列出了可选值单数据中心可用SimpleSnitch生产环境多数据中心/多机架推荐GossipingPropertyFileSnitch机架与数据中心信息来自cassandra-rackdc.properties通过 gossip 传播云环境可用Ec2Snitch、Ec2MultiRegionSnitch等。新节点的 snitch 必须与集群一致。注意集群插入数据后更换 snitch 必须执行完整 repair因为 snitch 影响副本放置位置。rpc_addressCQL 客户端连接的地址native transport。默认值为localhostconf/scylla.yaml。与listen_address不同它可以设为0.0.0.0但此时必须设置非0.0.0.0的broadcast_rpc_address。也可以使用rpc_interface按网卡名指定。seeds集群中一个现有节点的 IP 地址。新节点用它连接集群并学习集群拓扑与状态。仓库 conf/scylla.yaml 说明种子节点用于新节点启动时发现集群环拓扑节点加入集群后 seeds 列表不再起作用可以指定多个种子地址用逗号分隔例如IP1,IP2,IP3。关于seed_providerconf/scylla.yaml中seed_provider的class_name为org.apache.cassandra.locator.SimpleSeedProviderparameters下的seeds字段即上文所述种子地址conf/scylla.yaml。⚠️ 警告在现有数据中心内新增机架可能违反 RF-rack-valid 约束在一个已有数据中心的新机架中添加节点可能违反某些 keyspace 的RF-rack-valid复制因子-机架有效约束。所谓 RF-rack-valid是指对每个数据中心tablet 型 keyspace 的复制因子RF为 0、1或恰好等于该数据中心的机架数量——将 RF 设为机架数可确保单机架故障不会导致数据不可用定义见 conf/scylla.yaml。当出现以下任一情况时该约束会被强制执行若新节点的加入会违反约束节点将被拒绝加入keyspace 使用 tabletstablet 模式且包含物化视图Materialized View或二级索引Secondary Index配置中设置了rf_rack_valid_keyspaces选项对应scylla.yaml中的rf_rack_valid_keyspaces默认值为false设为true时会拒绝创建/修改为 RF-rack-invalid 的 keyspace见 conf/scylla.yaml。第三步启动新节点启动命令取决于部署方式原生系统Supported OS安装sudo systemctl start scylla-serverDocker 容器部署容器some-scylla已在运行docker exec -it some-scylla supervisorctl start scylla说明scylla.yaml还有大量与节点间通信相关的网络参数如broadcast_address、native_transport_port默认 9042、storage_port、api_port默认 10000 等详见仓库根目录的 conf/scylla.yaml。多节点、跨网络部署时请一并核对并做好防火墙策略文档明确提示不应将 CQL native transport 端口暴露到公网。第四步验证节点是否加入集群使用nodetool status验证新节点是否成功加入。由于集群中其他节点正在向新节点流式传输数据新节点会处于UJUp Joining在线/加入中状态。需等待其状态变为UNUp Normal在线/正常耗时取决于数据量大小与网络带宽。流式传输进行中新节点为 UJDatacenter: DC1 StatusUp/Down StateNormal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 192.168.1.201 112.82 KB 256 32.7% 8d5ed9f4-7764-4dbd-bad8-43fddce94b7c B1 UN 192.168.1.202 91.11 KB 256 32.9% 125ed9f4-7777-1dbn-mac8-43fddce9123e B1 UJ 192.168.1.203 124.42 KB 256 32.6% 675ed9f4-6564-6dbd-ca08-43fddce952de B1流式传输完成新节点转为 UNDatacenter: DC1 StatusUp/Down StateNormal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 192.168.1.201 112.82 KB 256 32.7% 8d5ed9f4-7764-4dbd-bad8-43fddce94b7c B1 UN 192.168.1.202 91.11 KB 256 32.9% 125ed9f4-7777-1dbn-mac8-43fddce9123e B1 UN 192.168.1.203 124.42 KB 256 32.6% 675ed9f4-6564-6dbd-ca08-43fddce952de B1第五步在旧节点上执行 cleanup当新节点状态变为UN后需要在除新节点之外的所有旧节点上运行nodetool cleanupcleanup会删除那些已经流式传输给新节点、旧节点不再拥有的 keys键。为什么 cleanup 至关重要为了防止数据复活data resurrection必须在添加节点后、任何节点被 decommission退役或移除之前完成 cleanup。但 cleanup 可能消耗大量资源可参考以下降低影响的原则Tip 1一次添加多个节点时在所有节点都添加完成后再在除最后一个添加的节点之外的所有节点上执行 cleanupTip 2把 cleanup 推迟到低峰时段执行但必须确保在任何节点被 decommission 或移除前成功完成Tip 3一次只在一个节点上运行 cleanup降低对整个集群的影响。第六步在旧节点上最终确认在任一旧节点上再次运行nodetool status等待新节点输出为UNUp Normal此时扩容操作即告完成。第七步接入监控与运维体系可选如果使用ScyllaDB Monitoring请更新监控栈配置以纳入新节点如果使用ScyllaDB Manager请在新节点上安装Manager Agent并确保 Manager 可以访问该节点。常见问题与故障排查要点新节点一直停留在 UJ 状态通常是数据量过大或网络带宽不足导致 streaming 耗时较长属正常现象若长时间无进展检查节点间网络连通性与防火墙。节点启动后直接失败或无法加入优先核对cluster_name、seeds、endpoint_snitch是否与集群一致以及listen_address/rpc_address的 IP 配置是否正确仓库默认值为localhost多节点部署必须修改见 conf/scylla.yaml。服务在配置完成前意外启动按 clear-data.rst 的流程停止服务、清理数据目录后重新引导。新机架节点被拒绝加入检查 keyspace 是否使用 tablets 并包含物化视图/二级索引或是否启用了rf_rack_valid_keyspaces默认false见 conf/scylla.yaml评估 RF-rack-valid 约束是否被违反。小结向 ScyllaDB 集群添加新节点Out Scale本质上是一个引导 流式传输 清理三步流程先严格核对版本与集群信息、正确配置scylla.yaml的五个核心参数再启动节点并耐心等待 streaming 完成UJ→UN最后在所有旧节点上执行nodetool cleanup防止数据复活。理解bootstrap在 service/storage_service.cc 中的编排逻辑与rf_rack_valid_keyspaces等新约束能帮助你更安全地规划机架、数据中心层面的扩容避免可用性风险。【免费下载链接】scylladbNoSQL data store using the Seastar framework, compatible with Apache Cassandra and Amazon DynamoDB项目地址: https://gitcode.com/GitHub_Trending/sc/scylladb创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →