服务器重启后无法启动OceanBase集群

【 使用环境 】 测试环境
【 OB or 其他组件 】
【 使用版本 】4.2.0
【问题描述】

服务器因cpu过载,进行了重启。
通过obd 命令启动集群,一直无法启动成功。

【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

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

3 个赞

根据您提供的日志信息,问题主要集中在“Failed to alloc block from io device”,这表明在尝试分配磁盘块时遇到了问题,可能是由于磁盘空间不足或磁盘损坏导致的。此外,您提到服务器因CPU过载进行了重启,这可能进一步影响到了存储设备的状态。以下是针对这个问题的一些建议:

  1. 检查磁盘空间:首先确认是否有足够的磁盘空间来启动OceanBase集群。可以通过执行df -h命令来查看磁盘使用情况。如果磁盘空间不足,您需要清理不必要的文件或增加磁盘容量。

  2. 检查磁盘健康状态:使用smartctl -a /dev/sdX(替换sdX为实际的磁盘设备名)命令来检查磁盘的SMART状态,确认磁盘是否存在硬件故障。如果磁盘存在问题,可能需要更换磁盘。

  3. 调整内存配置:如果内存不足也可能导致启动失败。您可以尝试调整集群的内存配置。具体操作是使用obd cluster edit-config <deploy name>命令打开配置文件,调整memory_limitsystem_memory的值 [1]。通常情况下,memory_limit/3 ≤ system_memory ≤ memory_limit/2。对于OceanBase数据库4.x版本,memory_limit不能低于6GB。

  4. 释放缓存:如果内存不足但存在可以释放的cached内存,可以尝试释放缓存来增加可用内存。执行以下命令之一:

    sudo sysctl -w vm.drop_caches=1
    # 或
    sudo echo 1 > /proc/sys/vm/drop_caches
    
  5. 查看日志详细信息:如果上述步骤未能解决问题,建议查看更详细的日志信息。您可以使用obd display-trace <cluster name>命令来获取更多的诊断信息 [1]

  6. 使用obdiag工具:推荐使用OceanBase敏捷诊断工具obdiag来收集诊断信息,以便于进一步分析问题原因。详情参见链接:https://ask.oceanbase.com/t/topic/35605619。

综上所述,首先应检查磁盘空间和健康状态,然后根据需要调整内存配置或释放缓存。如果问题依旧存在,建议使用obdiag工具进一步诊断。 [1]

更多信息请查看:

  1. 错误码
  2. 使用命令行部署 OCP
  3. 使用命令行部署 obconfigserver
  4. BOOTSTRAP
4 个赞

发一下obd.log和observer.log的日志 尽量发一个全的日志 有助于分析
也可以按照论坛小助手说的 obdiag分析
obdiag rca run --scene=log_error

这个日志也发一下
/var/log/messages

3 个赞

看起来是无法从磁盘分配空间了,

df -h 看下

发下yaml配置文件
发下完整的observer.log

3 个赞

磁盘可能是有问题,我能如何清理?
我现在分配了足够磁盘给他了,但是我看又没实际生效。

3 个赞

现在启动后是这样的

2 个赞

image

1 个赞

看着配置文件没有全部发完 尽量obd.log和observer.log的日志 全部都发一下
启动ocp-express报错了 日志发过来具体分析

1 个赞

obseverlog.zip (47.1 MB)

这里是日志

1 个赞

日志已经上传

1 个赞

根据您提供的信息,您已经分配了足够的磁盘空间给OceanBase集群,但从日志来看,似乎并没有实际生效。这可能是因为OceanBase集群尚未正确识别到新的磁盘空间分配。以下是一些可能的原因和解决方案:

1. 确认磁盘挂载情况

首先确保新分配的磁盘空间已经被正确挂载到OceanBase集群所需的目录。您可以使用df -h命令来检查磁盘挂载情况,并确认是否已经挂载到预期的位置。例如,OceanBase集群通常会将数据存储在/data目录下,因此请确保该目录有足够的空间。

2. 重新初始化集群

如果磁盘已经正确挂载,但集群仍然无法识别新的磁盘空间,您可以尝试重新初始化集群。具体步骤如下:

# 停止集群
obd cluster stop <cluster_name>

# 删除集群数据
rm -rf /data/*

# 重新初始化集群
obd cluster init <cluster_name>

3. 调整配置文件

如果重新初始化集群后仍然存在问题,您可以尝试调整集群的配置文件,确保配置文件中的磁盘路径设置正确。使用以下命令编辑配置文件:

obd cluster edit-config <cluster_name>

在配置文件中,确保data_dirredo_dir指向正确的磁盘路径。例如:

data_dir: /data
redo_dir: /data

4. 检查日志文件

如果以上步骤仍然无法解决问题,建议查看集群的日志文件,以获取更详细的错误信息。您可以使用以下命令查看日志:

tail -f /data/observer.log

5. 使用obdiag工具

最后,推荐使用OceanBase敏捷诊断工具obdiag来收集诊断信息,以便于进一步分析问题原因。详情参见链接:https://ask.oceanbase.com/t/topic/35605619。

示例命令

假设您已经分配了新的磁盘空间,并将其挂载到/data目录,您可以按照以下步骤操作:

# 检查磁盘挂载情况
df -h

# 停止集群
obd cluster stop test-ob-62

# 删除集群数据
rm -rf /data/*

# 重新初始化集群
obd cluster init test-ob-62

# 编辑配置文件
obd cluster edit-config test-ob-62

# 在配置文件中设置正确的磁盘路径
data_dir: /data
redo_dir: /data

# 启动集群
obd cluster start test-ob-62

总结

  1. 确认磁盘挂载情况:使用df -h命令检查磁盘挂载情况。
  2. 重新初始化集群:停止集群、删除数据、重新初始化。
  3. 调整配置文件:确保配置文件中的磁盘路径设置正确。
  4. 检查日志文件:查看集群日志文件获取详细错误信息。
  5. 使用obdiag工具:收集诊断信息以便进一步分析问题原因。

希望这些步骤能帮助您解决问题。如果问题依然存在,请提供更多详细信息以便进一步诊断。

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

1 个赞

user:
username: admin
password: JWIKu1PXrUNi51couY
port: 22
oceanbase-ce:
version: 4.2.0.0
release: 101000032023091319.el7
package_hash: 176ae96ab6ea606c860e0a9db09f8046eec0ceba
172.16.17.3:
zone: zone1
172.16.17.4:
zone: zone2
172.16.17.5:
zone: zone3
servers:

  • 172.16.17.3
  • 172.16.17.4
  • 172.16.17.5
    global:
    appname: fjjfoceanbase
    root_password: XY2zBc6J7mBnnt0Y_@0307
    mysql_port: 2881
    rpc_port: 2882
    data_dir: /data
    redo_dir: /redo
    home_path: /home/admin/fjjfoceanbase/oceanbase
    devname: ens192
    datafile_size: 150G
    log_disk_size: 100G
    memory_limit: 36G
    ocp_meta_tenant_max_cpu: ‘1’
    ocp_meta_tenant_memory_size: 2G
    ocp_agent_monitor_password: qwvIryGU0q
    proxyro_password: SxvtQOAULf
    ocp_meta_password: tN0Td7waHY
    ocp_meta_tenant_log_disk_size: 7G
    enable_syslog_recycle: true
    enable_syslog_wf: false
    max_syslog_file_count: 4
    system_memory: 3G
    cpu_count: 16
    production_mode: false
    obproxy-ce:
    version: 4.2.0.0
    package_hash: b3ead2f667d69fe3195fd22002de83df6eb19382
    release: 7.el7
    servers:
  • 172.16.17.3
  • 172.16.17.4
  • 172.16.17.5
    global:
    prometheus_listen_port: 2884
    listen_port: 2883
    home_path: /home/admin/fjjfoceanbase/obproxy
    obproxy_sys_password: 18F5r01Tbk
    skip_proxy_sys_private_check: true
    enable_strict_kernel_release: false
    enable_cluster_checkout: false
    rs_list: 172.16.17.3:2881;172.16.17.4:2881;172.16.17.5:2881
    observer_sys_password: SxvtQOAULf
    cluster_name: fjjfoceanbase
    observer_root_password: XY2zBc6J7mBnnt0Y_@0307
    depends:
  • oceanbase-ce
    obagent:
    version: 4.2.0
    package_hash: 30793df12dc6b8ec5ccdc93262e5e9f1d51ed50a
    release: 3.el7
    servers:
  • 172.16.17.3
  • 172.16.17.4
  • 172.16.17.5
    global:
    monagent_http_port: 8088
    mgragent_http_port: 8089
    home_path: /home/admin/fjjfoceanbase/obagent
    http_basic_auth_user: admin
    http_basic_auth_password: CFPJmCAi9G
    ob_monitor_status: active
    depends:
  • oceanbase-ce
    ocp-express:
    version: 4.2.0
    package_hash: ccec08112a29067633797d20685b6e6d70e890d9
    release: 100000042023073111.el7
    servers:
  • 172.16.17.2
    global:
    port: 8180
    home_path: /home/admin/fjjfoceanbase/ocpexpress
    java_bin: java
    logging_file_max_size: 100MB
    logging_file_total_size_cap: 1GB
    admin_passwd: I8rF2#_z
    memory_size: 872M
    depends:
  • obagent
  • oceanbase-ce
  • obproxy-ce

1001租户,1005租户clog空间满了,clog有自动清理机制,不能手动删除

yaml文件中 log_disk_size 先尝试扩容为150G ,再重启试下

修改方式:obd cluster edit-confog 部署名称 --修改参数

收到,我试下。
但是启动时用 start命令,它提示我要用reload

截图看下,直接reload也可以

reload还是报这个。
我用 obd cluster edit-config 修改的 yaml

然后reload
image

看了下server好像没有生效配置

启动报错的情况下,数据库现在能连接了。

ocp_meta_tenant_log_disk_size 也调整下,按同样的方式调整为10G,再试下

如果不生效,带参数启动下

进入ob安装路径 bin目录下
./bin/observer -o “log_disk_size=150G,ocp_meta_tenant_log_disk_size=10G,log_disk_utilization_threshold=95,log_disk_utilization_limit_threshold=98”

或者

./bin/observer -o “log_disk_size=150G,ocp_meta_tenant_log_disk_size=10G,log_disk_utilization_threshold=95,log_disk_utilization_limit_threshold=98”

如果报错libmariadb.so.3: cannot open shared object file修复方式:#将 OceanBase 数据库的 LIB 加到环境变量 LD_LIBRARY_PATH 中,按实际路径替换下面路径即可。echo ‘export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/oceanbase-ce/lib/’ >> ~/.bash_profileexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/oceanbase-ce/lib/

这个用什么命令调?