You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

重启服务器后ClickHouse服务无法启动,请求排查解决

重启服务器后ClickHouse服务无法启动,请求排查解决

看起来你遇到了ClickHouse崩溃后无法重启的棘手问题,先别慌,我们从你提供的崩溃日志入手一步步分析:

首先整理你给出的核心崩溃日志,方便后续排查:

2024.03.10 16:15:23.798502 [ 110215 ] {} <Fatal> BaseDaemon: ########## Short fault info ############
2024.03.10 16:15:23.798552 [ 110215 ] {} <Fatal> BaseDaemon: (version 23.12.2.59 (official build), build id: 7F4C1A822F9C67A4D137A58F9A95BD4B0F1B6A8A, git hash: 17ab210e76170917215be8cc3ae07d465a341d42) (from thread 110196) Received signal 6
2024.03.10 16:15:23.798584 [ 110215 ] {} <Fatal> BaseDaemon: Signal description: Aborted
2024.03.10 16:15:23.798591 [ 110215 ] {} <Fatal> BaseDaemon:
2024.03.10 16:15:23.798608 [ 110215 ] {} <Fatal> BaseDaemon: Stack trace: 0x00007fa96aaa800b 0x00007fa96aa87859 0x0000000016eacf24 0x0000000016eca40d 0x000000000c9786e8 0x0000000012de0bb3 0x0000000012e083e7 0x0000000012eb2a92 0x00000000109cab4d 0x00000000109dd644 0x00000000109e1117 0x00000000109d847e...

日志里的关键信息:你的ClickHouse版本是23.12.2.59,进程收到了信号6(SIGABRT)——这通常意味着程序触发了断言失败、内存访问违规导致内核终止进程,或是磁盘/数据损坏引发的崩溃。

下面是具体的排查和解决步骤:

  • 第一步:排查基础磁盘与权限问题
    先排除最容易忽略的环境问题:

    1. df -h检查磁盘是否已满,ClickHouse磁盘满时会直接崩溃且无法启动;用df -i检查inode是否耗尽。
    2. 检查ClickHouse数据目录权限,默认路径是/var/lib/clickhouse/,执行sudo ls -ld /var/lib/clickhouse/,确保所有者和组是clickhouse:clickhouse,如果不对用sudo chown -R clickhouse:clickhouse /var/lib/clickhouse/修复。
    3. 清理残留锁文件:如果之前崩溃残留了PID锁,执行sudo rm -f /var/run/clickhouse/clickhouse-server.pid,再尝试重启服务。
  • 第二步:强制恢复数据启动ClickHouse
    如果是数据损坏导致启动时崩溃,可以尝试强制恢复:

    1. 在ClickHouse数据目录下创建恢复标记文件:sudo touch /var/lib/clickhouse/flags/force_restore_data,这个文件会让ClickHouse启动时跳过部分数据一致性检查,尝试恢复损坏的表。
    2. 尝试启动服务:sudo systemctl start clickhouse-server,如果能启动,立刻备份重要表的数据(比如用INSERT INTO OUTFILE ...或者clickhouse-backup工具)。
  • 第三步:定位崩溃核心模块(核心转储分析)
    日志里的栈跟踪不完整,我们可以通过系统核心转储定位问题:

    1. coredumpctl list clickhouse-server查看最近的核心转储记录,找到对应崩溃时间的条目,记录核心文件路径。
    2. 用GDB分析核心转储:gdb /usr/bin/clickhouse-server <核心文件路径>,输入bt full查看完整栈跟踪,就能知道是哪个函数触发的崩溃(比如MergeTree存储引擎、内存分配或是某个查询组件)。
  • 第四步:跳过损坏表临时启动服务
    如果确定是某张表损坏导致无法启动,可以临时跳过该表:

    1. 编辑ClickHouse主配置文件/etc/clickhouse-server/config.xml,在<yandex>标签内添加:
      <tables>
          <table_name>
              <name>your_broken_table_name</name>
              <skip>1</skip>
          </table_name>
      </tables>
      
    2. 或者启动时直接加参数:sudo clickhouse-server --skip-broken-tables,启动后尽快备份其他正常表的数据,再修复或重建损坏表。
  • 第五步:修复损坏的表数据
    如果是MergeTree表损坏,尝试以下修复方式:

    1. 先备份该表的元数据和数据:sudo cp -r /var/lib/clickhouse/data/default/your_broken_table /tmp/your_broken_table_backup
    2. clickhouse-local导出可恢复的数据:
      clickhouse-local --query "SELECT * FROM file('/var/lib/clickhouse/data/default/your_broken_table/*') FORMAT CSV" > /tmp/your_table_backup.csv
      
    3. 删除损坏的表:DROP TABLE your_broken_table,重建表结构后从备份文件导入数据。
  • 第六步:检查系统资源限制
    ClickHouse对文件描述符等资源要求很高,检查/etc/security/limits.conf中是否有以下配置:

    clickhouse soft nofile 262144
    clickhouse hard nofile 262144
    clickhouse soft nproc 131072
    clickhouse hard nproc 131072
    

    如果没有,添加后执行ulimit -n 262144临时生效,再重启服务。

如果以上步骤都无法解决,考虑升级到同大版本的最新小版本(比如23.12.7.5)——你当前用的23.12.2.59可能存在已知的崩溃bug,升级后再尝试启动。

备注:内容来源于stack exchange,提问作者mohammadjavadkh

火山引擎 最新活动