obd 部署的报错 disk is hung

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】obd部署的服务, 报错然后查询就超时;麒麟v10虚拟机上部署的
【复现路径】问题出现前后相关操作
【附件及日志】[2024-09-29 18:02:22.243731] ERROR detect_palf_hang_failure_ (ob_failure_detector.cpp:356) [634204][T1_Occam][T1][Y0-0000000000000000-0-0] [lt=19][errcode=-4392] disk is hung(msg=“clog disk may be hung, add failure event”, clog_disk_hang_event={type:PROCESS HANG, module:LOG, info:clog disk hang, sen: 0, level:FATAL})
[2024-09-29 18:02:22.370330] ERROR issue_dba_error (ob_log.cpp:1875) [634187][OmtNodeBalancer][T1][YB42AC106E7B-0006233EC1F9FF57-0-0] [lt=40][errcode=-4388] Unexpected internal error happen, please checkout the internal errcode(errcode=-4009, file=“ob_tx_data_functor.cpp”, line_no=391, info=“unexpected io error”)
[2024-09-29 18:02:22.370505] WDIAG [STORAGE.TRANS] check_with_tx_data (ob_trans_part_ctx.cpp:5951) [634187][OmtNodeBalancer][T1][YB42AC106E7B-0006233EC1F9FF57-0-0] [lt=110][errcode=-4009] do data check function fail.(ret=-4009, ret=“OB_IO_ERROR”, *this={this:0x14cb3726b250, trans_id:{txid:12246}, tenant_id:1, is_exiting:false, trans_expired_time:1727604171773576, cluster_version:17180000520, trans_need_wait_wrap:{receive_gts_ts_:[mts=0], need_wait_interval_us:0}, stc:[mts=1727604141774837], ctx_create_time:1727604141773591})
[2024-09-29 18:02:22.370538] WDIAG [STORAGE.TRANS] check_with_tx_data (ob_trans_ctx_mgr_v4.cpp:1378) [634187][OmtNodeBalancer][T1][YB42AC106E7B-0006233EC1F9FF57-0-0] [lt=32][errcode=-4009] failed to check tx status(ret=-4009, ret=“OB_IO_ERROR”)
[2024-09-29 18:02:22.370551] WDIAG [STORAGE.TRANS] check_with_tx_data (ob_tx_ctx_table.cpp:352) [634187][OmtNodeBalancer][T1][YB42AC106E7B-0006233EC1F9FF57-0-0] [lt=12][errcode=-4009] check with tx data failed(ret=-4009, ret=“OB_IO_ERROR”, tx_id={txid:12246})
[2024-09-29 18:02:22.370563] WDIAG [STORAGE] check_with_tx_data (ob_tx_table.cpp:702) [634187][OmtNodeBalancer][T1][YB42AC106E7B-0006233EC1F9FF57-0-0] [lt=11][errcode=-4009] check tx data in tables failed(ret=-4009, ret=“OB_IO_ERROR”, ls_id_={id:1}, read_tx_data_arg={tx_id:{txid:12246}, read_epoch:0, tx_data_mini_cache:})
[2024-09-29 18:02:22.371549] WDIAG [SERVER] after_func (ob_query_retry_ctrl.cpp:947) [634187][OmtNodeBalancer][T1][YB42AC106E7B-0006233EC1F9FF57-0-0] [lt=15][errcode=-4009] [RETRY] check if need retry(v={force_local_retry:true, stmt_retry_times:0, local_retry_times:0, err_:-4009, err_:“OB_IO_ERROR”, retry_type:0, client_ret:-4009}, need_retry=false, THIS_WORKER.can_retry()=false, v.ctx_.multi_stmt_item_={is_part_of_multi_stmt:false, seq_num:0, sql:"", batched_queries:NULL, is_ps_mode:false, ab_cnt:0})
[2024-09-29 18:02:23.487042] ERROR issue_dba_error (ob_log.cpp:1875) [634577][TimezoneMgr][T1][YB42AC106E7B-0006233EC5E9FF4C-0-0] [lt=92][errcode=-4388] Unexpected internal error happen, please checkout the internal errcode(errcode=-4009, file=“ob_tx_data_functor.cpp”, line_no=391, info=“unexpected io error”)
[2024-09-29 18:02:23.487197] WDIAG [STORAGE.TRANS] check_with_tx_data (ob_trans_part_ctx.cpp:5951) [634577][TimezoneMgr][T1][YB42AC106E7B-0006233EC5E9FF4C-0-0] [lt=105][errcode=-4009] do data check function fail.(ret=-4009, ret=“OB_IO_ERROR”, *this={this:0x14cb3726b250, trans_id:{txid:12246}, tenant_id:1, is_exiting:false, trans_expired_time:1727604171773576, cluster_version:17180000520, trans_need_wait_wrap:{receive_gts_ts_:[mts=0], need_wait_interval_us:0}, stc:[mts=1727604141774837], ctx_create_time:1727604141773591})
[2024-09-29 18:02:23.487234] WDIAG [STORAGE.TRANS] check_with_tx_data (ob_trans_ctx_mgr_v4.cpp:1378) [634577][TimezoneMgr][T1][YB42AC106E7B-0006233EC5E9FF4C-0-0] [lt=36][errcode=-4009] failed to check tx status(ret=-4009, ret=“OB_IO_ERROR”)
[2024-09-29 18:02:23.487246] WDIAG [STORAGE.TRANS] check_with_tx_data (ob_tx_ctx_table.cpp:352) [634577][TimezoneMgr][T1][YB42AC106E7B-0006233EC5E9FF4C-0-0] [lt=10][errcode=-4009] check with tx data failed(ret=-4009, ret=“OB_IO_ERROR”, tx_id={txid:12246})
[2024-09-29 18:02:23.487257] WDIAG [STORAGE] check_with_tx_data (ob_tx_table.cpp:702) [634577][TimezoneMgr][T1][YB42AC106E7B-0006233EC5E9FF4C-0-0] [lt=10][errcode=-4009] check tx data in tables failed(ret=-4009, ret=“OB_IO_ERROR”, ls_id_={id:1}, read_tx_data_arg={tx_id:{txid:12246}, read_epoch:0, tx_data_mini_cache:})
[2024-09-29 18:02:23.488113] WDIAG [SERVER] after_func (ob_query_retry_ctrl.cpp:947) [634577][TimezoneMgr][T1][YB42AC106E7B-0006233EC5E9FF4C-0-0] [lt=15][errcode=-4009] [RETRY] check if need retry(v={force_local_retry:true, stmt_retry_times:0, local_retry_times:0, err_:-4009, err_:“OB_IO_ERROR”, retry_type:0, client_ret:-4009}, need_retry=false, THIS_WORKER.can_retry()=false, v.ctx_.multi_stmt_item_={is_part_of_multi_stmt:false, seq_num:0, sql:"", batched_queries:NULL, is_ps_mode:false, ab_cnt:0})

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

您的问题可能存在误解,实际上据我所知,“disk is hung”这个错误通常表明磁盘出现了挂起状态,可能是由于磁盘本身的问题或者是存储系统的其他部分出现了故障。从您提供的日志来看,确实存在磁盘相关的错误信息,这提示我们问题可能出在磁盘 I/O 上。

针对您遇到的情况,建议您检查以下几个方面:

  1. 磁盘健康状况:首先确认磁盘是否健康,可以使用 smartctl 工具来检查磁盘的状态。例如:

    sudo smartctl -a /dev/sda | grep -i "self-test"
    

    这条命令可以帮助您检查磁盘的自检状态,确认是否有硬件层面的问题。

  2. 磁盘空间和 I/O 性能:确认磁盘是否有足够的空间以及 I/O 性能满足需求。虽然没有直接提到磁盘空间的具体要求,但是根据 [3],部署 OceanBase 数据库时对磁盘空间有一定的要求,比如“仅部署 OceanBase 数据库时机器可用磁盘空间不小于 19 GB”,如果磁盘空间不足可能会导致类似的问题。

  3. 系统日志:查看系统日志 (/var/log/messages/var/log/syslog),看看是否有其他关于磁盘 I/O 的错误信息,这些信息有助于进一步定位问题。

  4. 文件系统检查:运行文件系统检查工具如 fsck 来检查文件系统的完整性,有时候文件系统的损坏也会导致类似的错误。

  5. 磁盘负载:检查磁盘的负载情况,使用 iostatiotop 等工具观察磁盘的 I/O 情况,看是否存在 I/O 饱和的情况。

如果以上步骤都不能解决问题,建议您联系硬件供应商或数据中心的技术支持团队,因为这可能是硬件层面的问题。同时,也可以考虑更换一块新的磁盘来排除硬件故障的可能性。

更多信息请查看:

  1. 错误码
  2. 什么是 obd
  3. 快速启动 OceanBase 数据库
  4. 通过白屏部署 OceanBase 集群
  5. 单机部署 OceanBase 数据库
  6. 安装并配置 obd
  7. 通过 ODC 连接 OceanBase 数据库
  8. 升级 OceanBase 数据库

文件系统或者磁盘问题,检查下/var/log/messages

检查下磁盘空间 df -h

[root@localhost ~]# smartctl -a /dev/sda2
smartctl 7.1 2019-12-30 r5022 [x86_64-linux-4.19.90-89.11.v2401.ky10.x86_64] (local build)
Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Vendor: VMware
Product: Virtual disk
Revision: 2.0
Compliance: SPC-4
User Capacity: 536,870,912,000 bytes [536 GB]
Logical block size: 512 bytes
LU is fully provisioned
Rotation Rate: 15000 rpm
Device type: disk
Local Time is: Tue Oct 8 14:29:45 2024 CST
SMART support is: Unavailable - device lacks SMART capability.

=== START OF READ SMART DATA SECTION ===
Current Drive Temperature: 0 C
Drive Trip Temperature: 0 C

Error Counter logging not supported

Device does not support Self Test logging

执行smartctl 命令时 message 会打印
Oct 8 14:28:38 localhost rasdaemon[2730882]: rasdaemon: diskerror_eventstore: 0x558c8f5e35d8
Oct 8 14:28:38 localhost rasdaemon[2730882]: rasdaemon: register inserted at db
Oct 8 14:28:38 localhost rasdaemon[2730882]: overriding event (1161) ras:mc_event with new print handler
Oct 8 14:28:38 localhost rasdaemon[2730882]: overriding event (1158) ras:aer_event with new print handler
Oct 8 14:28:38 localhost rasdaemon[2730882]: overriding event (116) mce:mce_record with new print handler
Oct 8 14:28:38 localhost rasdaemon[2730882]: overriding event (1162) ras:extlog_mem_event with new print handler
Oct 8 14:28:38 localhost rasdaemon[2730882]: overriding event (1276) devlink:devlink_health_report with new print handler
Oct 8 14:28:38 localhost rasdaemon[2730882]: overriding event (998) block:block_rq_complete with new print handler
Oct 8 14:28:38 localhost rasdaemon[2730882]: Calling ras_mc_event_opendb()
Oct 8 14:28:38 localhost rasdaemon[2730882]: <…>-2730903 [001] 0.474639: block_rq_complete: 2024-10-08 14:28:38 +0800 8:0 N () 18446744073709551615 + 0 [critical target error]
Oct 8 14:28:38 localhost rasdaemon[2730882]: rasdaemon: diskerror_eventstore: 0x558c8f5e35d8
Oct 8 14:28:38 localhost rasdaemon[2730882]: rasdaemon: register inserted at db
Oct 8 14:28:38 localhost rasdaemon[2730882]: <…>-2730903 [001] 0.474639: block_rq_complete: 2024-10-08 14:28:38 +0800 8:0 N () 18446744073709551615 + 0 [critical target error]
Oct 8 14:28:38 localhost rasdaemon[2730882]: rasdaemon: diskerror_eventstore: 0x558c8f5e35d8
Oct 8 14:28:38 localhost rasdaemon[2730882]: rasdaemon: register inserted at db
Oct 8 14:28:38 localhost rasdaemon[2730882]: <…>-2730903 [001] 0.474639: block_rq_complete: 2024-10-08 14:28:38 +0800 8:0 N () 18446744073709551615 + 0 [critical target error]
Oct 8 14:28:38 localhost rasdaemon[2730882]: rasdaemon: diskerror_eventstore: 0x558c8f5e35d8
Oct 8 14:28:38 localhost rasdaemon[2730882]: rasdaemon: register inserted at db
Oct 8 14:28:38 localhost rasdaemon[2730882]: <…>-2730903 [001] 0.474639: block_rq_complete: 2024-10-08 14:28:38 +0800 8:0 N () 18446744073709551615 + 0 [critical target error]
Oct 8 14:28:38 localhost rasdaemon[2730882]: rasdaemon: diskerror_eventstore: 0x558c8f5e35d8
Oct 8 14:28:38 localhost rasdaemon[2730882]: rasdaemon: register inserted at db
Oct 8 14:28:38 localhost rasdaemon[2730882]: <…>-2730903 [001] 0.474639: block_rq_complete: 2024-10-08 14:28:38 +0800 8:0 N () 18446744073709551615 + 0 [critical target error]
Oct 8 14:28:38 localhost rasdaemon[2730882]: rasdaemon: diskerror_eventstore: 0x558c8f5e35d8
Oct 8 14:28:38 localhost rasdaemon[2730882]: rasdaemon: register inserted at db
Oct 8 14:28:38 localhost rasdaemon[2730882]: <…>-2730903 [001] 0.474639: block_rq_complete: 2024-10-08 14:28:38 +0800 8:0 N () 18446744073709551615 + 0 [critical target error]

根据您提供的 smartctl 命令输出结果以及系统日志信息,我们可以得出以下结论:

  1. 磁盘类型:您使用的磁盘是虚拟磁盘(Virtual disk),由 VMware 提供。这意味着这是一个虚拟机上的虚拟磁盘,而非物理磁盘。
  2. SMART 支持:该磁盘不支持 SMART 功能,因此无法通过 smartctl 获取详细的磁盘健康信息。
  3. 系统日志:系统日志中出现了多次 [critical target error] 的警告信息,这表明在磁盘 I/O 操作过程中遇到了严重错误。

结合这些信息,我们可以推测问题可能出在以下几个方面:

1. 虚拟磁盘配置问题

虚拟磁盘可能配置不当或者存在某些问题,导致 I/O 操作失败。您可以尝试以下步骤来排查:

  • 检查虚拟机磁盘配置:确保虚拟磁盘的配置正确无误,例如磁盘大小、类型等。
  • 重新创建虚拟磁盘:如果可能的话,尝试删除当前虚拟磁盘并重新创建一个新的虚拟磁盘,看是否能够解决问题。

2. 虚拟化软件问题

虚拟化软件(如 VMware)可能存在一些问题,导致磁盘 I/O 失败。您可以尝试以下步骤来排查:

  • 更新虚拟化软件:确保您的虚拟化软件(如 VMware)是最新的版本,并且没有已知的 bug。
  • 检查虚拟化软件日志:查看虚拟化软件的日志文件,看是否有相关的错误信息。

3. 系统内核配置问题

系统内核配置可能存在问题,导致磁盘 I/O 操作失败。您可以尝试以下步骤来排查:

  • 检查内核参数:确保内核参数配置正确,特别是与磁盘 I/O 相关的参数。例如,您可以参考 [1] 中提到的一些内核参数配置,确保它们符合要求。
    fs.aio-max-nr=1048576
    net.core.somaxconn = 2048
    net.core.netdev_max_backlog = 10000
    net.core.rmem_default = 16777216
    net.core.wmem_default = 16777216
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_rmem = 4096 87380 16777216
    net.ipv4.tcp_wmem = 4096 65536 16777216
    net.ipv4.tcp_max_syn_backlog = 16384
    net.ipv4.tcp_fin_timeout = 15
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_slow_start_after_idle=0
    vm.swappiness = 0
    vm.min_free_kbytes = 2097152
    vm.overcommit_memory = 0
    fs.file-max = 6573688
    vm.max_map_count = 655360
    kernel.core_pattern = /data/core-%e-%p-%t
    

4. 磁盘 I/O 性能问题

磁盘 I/O 性能可能存在问题,导致 I/O 操作超时或失败。您可以尝试以下步骤来排查:

  • 检查磁盘 I/O 性能:使用 iostatiotop 等工具监控磁盘 I/O 性能,看是否存在 I/O 饱和的情况。
  • 调整磁盘 I/O 调度器:尝试更改磁盘 I/O 调度器,看是否能够改善 I/O 性能。

5. 系统日志分析

系统日志中出现了多次 [critical target error] 的警告信息,这表明在磁盘 I/O 操作过程中遇到了严重错误。您可以尝试以下步骤来排查:

  • 检查系统日志:查看 /var/log/messages/var/log/syslog 文件,看是否有其他相关的错误信息。
  • 联系技术支持:如果问题仍然无法解决,建议您联系虚拟化软件的技术支持团队,寻求进一步的帮助。

希望以上建议能够帮助您解决问题。如果还有其他疑问,请随时提问。

详情请参考:

  1. (可选)配置 sysctl.conf

(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)

与小助手的回复相似,从操作系统层面看的确是磁盘出现了错误,需要先解决磁盘错误的问题再部署OB

message中打印的 信息 [critical target error] 的警告信息 只有在执行smartctl时 才出现 oceanbase 报错的时候 没有出现 ; 就是vm虚拟磁盘有问题是吧

是的

重新找了个虚拟机部署了一次 /data/ /redo 放在不同的磁盘上了 还是会报
[2024-10-11 09:56:10.367320] ERROR [USING_LOG_PREFIX] detect_palf_hang_failure_ (ob_failure_detector.cpp:368) [4671][T1001_Occam][T1001][Y0-0000000000000000-0-0] [lt=5][errcode=-4392] clog disk may be hung, add failure event
[2024-10-11 09:56:10.425009] ERROR [USING_LOG_PREFIX] detect_palf_hang_failure_ (ob_failure_detector.cpp:367) [4521][T1_Occam][T1][Y0-0000000000000000-0-0] [lt=43][errcode=-4392] disk is hung(msg=“clog disk may be hung, add failure event”, clog_disk_hang_event={type:PROCESS HANG, module:LOG, info:clog disk hang event, level:FATAL}, clog_disk_last_working_time=1728611765330302, hung time=5094447)
[2024-10-11 09:56:10.465054] ERROR [USING_LOG_PREFIX] detect_palf_hang_failure_ (ob_failure_detector.cpp:367) [4807][T1002_Occam][T1002][Y0-0000000000000000-0-0] [lt=15][errcode=-4392] disk is hung(msg=“clog disk may be hung, add failure event”, clog_disk_hang_event={type:PROCESS HANG, module:LOG, info:clog disk hang event, level:FATAL}, clog_disk_last_working_time=1728611765321712, hung time=5143266)
[2024-10-11 09:56:11.355415] ERROR [COMMON] inner_aio (ob_io_manager.cpp:1359) [4655][T1_L0_G0][T1][YB427F000001-00062429AEB328BE-0-0] [lt=17][errcode=-4392] disk is hung(msg=“disk has fatal error”)

大概率是磁盘有问题了,你尝试下在没有使用这盘的其它机器上部署虚拟机 然后再部署OB,或者说换台硬件设备试下