十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ScyllaDB 节点无响应(Unresponsive Nodes)排查与修复:Swap 与内存预留实战指南

ScyllaDB 节点无响应(Unresponsive Nodes)排查与修复:Swap 与内存预留实战指南 ScyllaDB 节点无响应Unresponsive Nodes排查与修复Swap 与内存预留实战指南【免费下载链接】scylladbNoSQL data store using the Seastar framework, compatible with Apache Cassandra and Amazon DynamoDB项目地址: https://gitcode.com/GitHub_Trending/sc/scylladb导读本文面向 ScyllaDB 运维与 DBA围绕「节点无响应Unresponsive Nodes」这一典型故障给出从现象定位、根因分析swap 与内存预留到修复落地的完整闭环方案。你将掌握如何用top快速判断节点级还是 ScyllaDB 级故障、理解 ScyllaDB 默认预留 93% 内存的机制、通过--reserve-memory调整内存预留、以及使用scylla_swap_setup脚本或手工方式为生产环境配置合理的 swap 空间。文中所有操作均可直接在仓库对应的源码脚本中找到实现依据。问题现象与初步判断当集群中出现如下症状时即属于本文讨论的「节点无响应」故障ScyllaDB 节点被标记为 down无法建立新的 SSH 连接已有连接响应缓慢节点整体运行迟滞。需要区分两类不同性质的故障参见 unresponsive-nodes.rst现象指向的故障层级排查方向仅 ScyllaDB 进程自身报 downScyllaDB 级问题gossip、网络分区、节点间通信节点整体变慢、SSH 都难建立节点级OS 级问题内存、swap、CPU 争抢、OOM关键判断依据当节点作为一个整体开始变慢甚至 SSH 连接都困难时问题通常出在操作系统层面而非 ScyllaDB 本身。这是本 KB 文章给出的首要排查定位原则。根因swap 与内存管理的两种极端情况最常见的根因与 swap交换分区/交换文件直接相关存在两种相反的情况1. 系统配置了 swap但被实际使用如果系统启用了 swap 且发生换页ScyllaDB 的内存页可能被换出到磁盘。此后任何对这些内存的访问都要经历磁盘 I/O性能急剧下降节点表现为缓慢、无响应。2. 系统没有配置 swap没有 swap 时内核在内存压力下会反复尝试回收页面却始终无法成功最终陷入 CPU 忙循环CPU-hog拖垮 ScyllaDB 乃至所有其他进程的执行。这种无 swap场景往往比有 swap 但偶发使用更具破坏性。从源码看 ScyllaDB 的内存预分配模型理解上述根因需要先理解 ScyllaDB 的内存管理策略ScyllaDB 默认预分配节点 93% 的内存并且从不使用超过该额度剩余的 7% 留给操作系统和其他任务使用。仓库中的内存配置脚本 scylla_memory_setup 印证了这一管理模型——它通过写/etc/scylla.d/memory.conf内容形如MEM_CONF--lock-memory1或--memory4G、--reserve-memory...来固化启动参数其中--memory指定 ScyllaDB 使用的内存量如4G默认 all--reserve-memory指定为 OS 预留的内存当未指定--memory时生效--lock-memory锁定全部内存防止换出。在 Docker 部署场景下dist/docker/commandlineparser.py 同样提供了--reserve-memory参数如--reserve-memory 1G预留 1GB RAM说明该参数在容器化部署中同样可用。修复步骤一评估内存占用并优化节点负载理想状态下一个健康的系统不应该发生换页swap。因此首要任务是确认 7% 的预留是否被其他进程挤占使用top工具检查是否存在其他高内存消耗进程若存在非必需的高内存进程建议将其迁移到其他机器把内存归还给操作系统使用若存在必需的高内存进程如监控 Agent、备份代理等说明默认的 7% 预留可能不够需要按下文调整内存预留。关于 swap 的配置方式可参考仓库 KB 文章 How to Set up a Swap Space其推荐优先使用scylla_setup脚本内部调用scylla_swap_setup完成配置。修复步骤二调整 ScyllaDB 内存预留--reserve-memory当节点上存在必需的其他进程、默认预留不足时通过--reserve-memory增大 OS 预留量在RHEL 系发行版编辑/etc/sysconfig/scylla-server在Debian 系发行版编辑/etc/defaults/scylla-server。在启动参数中加入--reserve-memory [memory]例如预留 10GB--reserve-memory 10G该参数与--memory的配合关系可从 memory-usage.rst 中看到完整示例SCYLLA_ARGS--log-to-syslog 1 --log-to-stdout 0 --default-log-level info \ --collectd-address127.0.0.1:25826 --collectd1 --collectd-poll-period 3000 \ --network-stack posix --memory 2G --reserve-memory 2G注意该 KB 的提醒留给操作系统的内存量必须足以满足外部 ScyllaDB 模块external scylla modules的需求——如果预留过小外部模块同样可能引发内存压力。修复步骤三为生产环境配置 Swap经验法则见 set-up-swap.rst有 swap 但用不上好过需要 swap 时却没有。生产部署务必配置文件或分区形式的 swap。swap 大小建议取total_mem/3与16GB中的较小值节点内存total_mem建议 swap 大小18GB6GB240GB16GB方式 A使用脚本 scylla_swap_setup推荐官方推荐通过scylla_setup运行也可直接调用脚本。先查看帮助scylla_swap_setup --help usage: scylla_swap_setup [-h] [--swap-directory SWAP_DIRECTORY] [--swap-size SWAP_SIZE] Configure swap for ScyllaDB. optional arguments: -h, --help show this help message and exit --swap-directory SWAP_DIRECTORY specify swapfile directory --swap-size SWAP_SIZE specify swapfile size in GB执行配置指定目录与大小sudo scylla_swap_setup --swap-directory /tmp/swp --swap-size 500从源码 scylla_swap_setup 可以看到脚本内部的实际逻辑自动计算默认大小min(16GB, total_mem/3)即GB(16) if GB(16) memtotal/3 else memtotal/3与文档经验法则一致限制 swap 不超过磁盘可用空间的一半磁盘不足时中止在 ext4 文件系统上使用fallocate创建否则回退到dd将 swapfile 权限设为0600并执行mkswap -f生成 systemd swap unit带DefaultDependenciesno避免在云环境如 Azure 上产生依赖环并 enable/start。方式 B手工配置 Swap 文件通用 Linux 流程适用于任何 Linux 发行版以下示例添加 6GB swap可按需替换6G# 1. 创建 swap 文件 sudo fallocate -l 6G /swapfile # 2. 收紧权限仅 root 可读写 sudo chmod 600 /swapfile # 3. 格式化为 Linux swap 区域 sudo mkswap /swapfile # 4. 启用 swap sudo swapon /swapfile # 5. 持久化追加到 /etc/fstab /swapfile swap swap defaults 0 0 # 6. 验证 sudo swapon --show NAME TYPE SIZE USED PRIO /swapfile file 6024M 507.4M -1移除 Swap 文件# 1. 停用 swap sudo swapoff -v /swapfile # 2. 编辑 /etc/fstab删除 /swapfile swap swap defaults 0 0 行 # 3. 删除 swap 文件 sudo rm /swapfile小结从无响应到健康的完整检查清单定位层级SSH 都慢 → 节点级问题仅 ScyllaDB down → 优先查 ScyllaDB 自身查内存占用用top确认 7% OS 预留是否被挤占区分进程非必需进程迁移走必需进程则调大--reserve-memory如--reserve-memory 10G修改/etc/sysconfig/scylla-serverRHEL或/etc/defaults/scylla-serverDebian后重启生效配置 swap生产环境必须配置优先scylla_swap_setup大小取min(total_mem/3, 16GB)验证swapon --show确认 swap 生效并持续观察节点响应与内存压力。遵循以上步骤即可将「节点无响应」从 swap 与内存配置维度系统性消除。相关实现细节可继续阅读仓库中的 scylla_memory_setup、scylla_swap_setup 及 KB 文章 How to Set up a Swap Space、memory-usage.rst。【免费下载链接】scylladbNoSQL data store using the Seastar framework, compatible with Apache Cassandra and Amazon DynamoDB项目地址: https://gitcode.com/GitHub_Trending/sc/scylladb创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表