You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单节点Cassandra容器持续插入24小时后无响应求助

Cassandra单节点容器部署写入超时无响应问题排查与解决

问题背景

Cassandra以单节点容器形式与其他微服务一同部署,数据通过gocql驱动从业务微服务持续写入,写入速率120~150次/秒,单条数据约1MB(含JSON与Blob),同时存在读取操作。

环境配置

系统硬件

  • CPU:13th Gen Intel(R) Core(TM) i9-13900K / 12代Intel CPU(测试复现环境)
  • 内存:32GB / 64GB(测试复现环境)
  • 存储:1TB NVMe SSD

Docker Compose配置

ia_cassandradb:
    image: cassandra:4.1.6
    container_name: ia_cassandradb
    hostname: ia_cassandradb
    restart: unless-stopped
    ipc: "none"
    read_only: true
    security_opt:
    - no-new-privileges
    command: |
      /bin/bash -c "
      cp -r /etc/cassandra/* /etc/cassandra_tmp/.
      cp /etc/cassandra/cassandra_bk.yaml /etc/cassandra_tmp/cassandra.yaml
      if [[ $DEV_MODE == true ]]
      then
        sed -i '/client_encryption_options:/{n;s/.*/  enabled: false/}' /etc/cassandra_tmp/cassandra.yaml
      else
        cd /run/secrets/Cassandra
        rm -rf /etc/cassandra_tmp/dse-truststore.jks /etc/cassandra_tmp/secrets.p12 /etc/cassandra_tmp/certkey-keystore.jks
        keytool -keystore /etc/cassandra_tmp/dse-truststore.jks -storetype PKCS12 -importcert -file 'cacert.pem' -alias cacert -storepass cassandra -noprompt
        openssl pkcs12 -export -in DataStore_Server_server_certificate.pem -inkey DataStore_Server_server_key.pem -name localhost -out /etc/cassandra_tmp/secrets.p12 -password pass:cassandra
        keytool -importkeystore -deststorepass cassandra -destkeystore /etc/cassandra_tmp/certkey-keystore.jks -srckeystore /etc/cassandra_tmp/secrets.p12 -srcstoretype PKCS12 -srcstorepass cassandra
      fi
      while true; do nodetool clearsnapshot --all; nodetool compact; nodetool cleanup; sleep 600; done &
      /usr/local/bin/docker-entrypoint.sh
      "
    networks:
    - net_iso
    environment:
      AppName: "DataStore"
      CASSANDRA_CONF: /etc/cassandra_tmp
      DEV_MODE: ${DEV_MODE}
    volumes:
      # Mount for influxdb data directory and configuration
    - ./Certificates/Server_Certs/:/run/secrets/Cassandra:rw
    - vol_cassandra_tmp:/tmp
    - vol_cassandra_log:/opt/cassandra/logs
    - vol_cassandra_etc:/etc/cassandra_tmp
    - ${EII_INSTALL_PATH}/data/cassandra:/var/lib/cassandra/data
    - ../config_files/cassandra/cassandra.yaml:/etc/cassandra/cassandra_bk.yaml:ro

问题现象

初始写入速度正常,数小时后写入变慢,24小时左右出现写入失败、Cassandra无响应(无法通过cqlsh连接),手动重启容器可恢复服务,且在不同硬件配置环境下均复现。


排查与解决方案

1. 修复定时运维任务的资源占用问题

当前启动脚本每10分钟执行一次nodetool clearsnapshot --all; nodetool compact; nodetool cleanup,三个操作均为IO/CPU密集型任务,频繁执行会持续抢占Cassandra处理读写的资源:

  • 移除nodetool compact定时执行:压缩操作需根据数据碎片情况手动触发,或设置为每周一次的低峰期执行。
  • 删除nodetool cleanup:单节点集群中该操作无意义(用于移除非本节点的token数据)。
  • 延长clearsnapshot执行周期:改为每日执行一次。
    修改后的定时任务示例:
while true; do nodetool clearsnapshot --all; sleep 86400; done &

2. 优化Cassandra核心参数配置

针对当前写入负载调整cassandra.yaml和jvm.options:

  • 堆内存设置:在jvm.options中,将堆内存设为系统内存的1/41/2(32GB内存环境建议8GB12GB):
    -Xms8G
    -Xmx8G
    
  • 读写缓存调整:在cassandra.yaml中:
    • 增大key_cache_size_in_mb至512MB,提升热点数据读取性能。
    • 若存在大量重复行读取,设置row_cache_size_in_mb为256MB~512MB;写入为主则保持默认关闭。
    • 提升commitlog_total_space_in_mb至8GB,避免commitlog频繁刷盘阻塞IO。

3. 添加容器资源限制

当前配置未限制容器资源,Cassandra可能耗尽主机CPU/内存导致无响应,在docker-compose.yaml的ia_cassandradb服务中添加:

deploy:
  resources:
    limits:
      cpus: '8.0'
      memory: 16G
    reservations:
      cpus: '4.0'
      memory: 8G

可根据主机实际配置调整数值,平衡Cassandra资源需求与主机其他服务的资源占用。

4. 优化存储挂载与IO性能

  • 用iostat -x 1监控磁盘IO,若%util持续接近100%,说明磁盘IO已达瓶颈,需排查存储设备性能或优化写入策略。
  • 给数据目录挂载添加noatime选项,减少磁盘元数据写入:
    - ${EII_INSTALL_PATH}/data/cassandra:/var/lib/cassandra/data:rw,noatime
    

5. 调整gocql客户端配置

客户端配置不合理会导致连接池耗尽或请求堆积:

  • 调整连接池大小,设置PoolConfig.Hosts.MaxConns为20~30,匹配写入速率。
  • 启用超时设置:Timeout设为10秒,ConnectTimeout设为5秒,避免连接长期占用。
  • 配置有限次数的重试机制,防止失败请求堆积。

6. 完善监控与日志分析

  • 开启JMX监控,定期采集nodetool status、nodetool tpstats、nodetool compactionstats等指标,追踪读写队列、压缩任务状态。
  • 分析/opt/cassandra/logs/system.log,查找OOM、IO超时、压缩失败等关键错误,定位问题根源。

内容的提问来源于stack exchange,提问作者Sathyendran Vellaisamy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 18:45:04