ocp集群添加空间Add OB zone,报错Make dir for ob

【 使用环境 】 测试环境
【 OB or 其他组件 】oceanbase
【 使用版本 】4.2.1.10
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作

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

2025-03-21 15:05:39.529 INFO 3178015 — [manual-subtask-executor13,2a8bef967cf1eb9a,84a16b2cc0bf9825] c.o.o.c.t.e.runner.JavaSubtaskRunner : Retry subtask, id=3021182, context=Context{parallelIdx=0, stringMap={zone5.idc=default_idc, ob_log_disk_path=/data/log1, task_instance_id=3020362, task_operation=retry, ob_run_path=/home/admin/oceanbase, zone_name=zone5, service_version=4.2.1.10, ob_install_path=/home/admin/oceanbase, ob_sql_port=2881, cluster_id=2, ob_disk_path_style=DEFAULT, ob_svr_port=2882, sub_task_instance_name=Make dir for ob, zone5.region=sys_region, sub_task_instance_id=3021182, cluster_name=mop, target_server_status=RUNNING, startup_option_string=log_disk_percentage=0,workers_per_cpu_quota=10,log_disk_size=0M,data_disk_usage_limit_percentage=90,80,memory_limit_percentage=90,80,datafile_size=0M,system_memory=2G,0M,stack_size=512K,datafile_disk_percentage=0,50,memory_limit=0M,cpu_count=0, mix_rpm_names={“zone5”:“oceanbase-ce-4.2.1.10-110000072024112010.el8.x86_64.rpm”}, subtask_splitter=host_ids, service_name=mop:1736836528, target_zone_status=RUNNING, host.1000003.zone=zone5, ob_cluster_id=1736836528, service_type=OB_CLUSTER, dep_rpm_names={“zone5”:[“oceanbase-ce-libs-4.2.1.10-110000072024112010.el8.x86_64.rpm”,“oceanbase-ce-utils-4.2.1.10-110000072024112010.el8.x86_64.rpm”]}, ob_run_user=admin, target_cluster_status=RUNNING, latest_execution_start_time=2025-03-21T15:05:39.521+08:00, ob_data_disk_path=/data/1, mix_obs_rpm={}}, listMap={root_server_ips=[192.168.1.194, 192.168.1.151], server_ids=[1000010], exists_server_addrs=[192.168.1.251:2882, 192.168.1.194:2882, 192.168.1.151:2882, 192.168.1.197:2882], host_ids=[1000003], exists_running_server_addrs=[192.168.1.251:2882, 192.168.1.194:2882, 192.168.1.151:2882, 192.168.1.197:2882], zone_names=[zone5]}}, executor=192.168.1.152

2025-03-21 15:05:39.532 INFO 3178015 — [manual-subtask-executor13,2a8bef967cf1eb9a,84a16b2cc0bf9825] c.o.o.c.agent.HostAgentServiceImpl : Finding OCP agent: hostId=1000003

2025-03-21 15:05:39.535 INFO 3178015 — [manual-subtask-executor13,2a8bef967cf1eb9a,84a16b2cc0bf9825] c.o.o.c.a.p.HostAgentProcessServiceImpl : Getting all OCP agent processes on host 1000003

2025-03-21 15:05:39.544 INFO 3178015 — [manual-subtask-executor13,2a8bef967cf1eb9a,84a16b2cc0bf9825] c.o.o.e.internal.template.HttpTemplate : POST request to agent, url:http://192.168.1.45:62888/api/v1/ob/install/cleanDirectories, request body:ObClusterInstallRequest(obClusterName=mop, obVersion=null, obPath=ObPath(installPath=/home/admin/oceanbase, dataPath=/data/1, logPath=/data/log1, diskPathStyle=DEFAULT, runPath=/home/admin/oceanbase), runUser=null), params:null

2025-03-21 15:05:39.549 ERROR 3178015 — [manual-subtask-executor13,2a8bef967cf1eb9a,84a16b2cc0bf9825] c.o.o.c.t.e.c.w.subtask.SubtaskExecutor : 1

java.lang.ArrayIndexOutOfBoundsException: 1
at com.oceanbase.ocp.common.util.MapUtils.fromString(MapUtils.java:63)
at com.oceanbase.ocp.obops.cluster.param.ObStartupParameters.fromContextString(ObStartupParameters.java:75)
at com.oceanbase.ocp.service.task.business.cluster.MkdirForObTask.run(MkdirForObTask.java:42)
at com.oceanbase.ocp.core.task.runtime.Subtask.retry(Subtask.java:49)
at com.oceanbase.ocp.core.task.engine.runner.JavaSubtaskRunner.retry(JavaSubtaskRunner.java:76)
at com.oceanbase.ocp.core.task.engine.runner.JavaSubtaskRunner.doRun(JavaSubtaskRunner.java:35)
at com.oceanbase.ocp.core.task.engine.runner.JavaSubtaskRunner.run(JavaSubtaskRunner.java:26)
at com.oceanbase.ocp.core.task.engine.runner.RunnerFactory.doRun(RunnerFactory.java:76)
at com.oceanbase.ocp.core.task.engine.coordinator.worker.subtask.SubtaskExecutor.doRun(SubtaskExecutor.java:206)
at com.oceanbase.ocp.core.task.engine.coordinator.worker.subtask.SubtaskExecutor.redirectConsoleOutput(SubtaskExecutor.java:200)
at com.oceanbase.ocp.core.task.engine.coordinator.worker.subtask.SubtaskExecutor.lambda$submit$2(SubtaskExecutor.java:137)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

Set state for subtask: 3021182, operation:RETRY, state: FAILED

1 个赞

根据您提供的日志信息和错误描述,OCP 在尝试添加 OB Zone 时遇到了问题,具体错误为 java.lang.ArrayIndexOutOfBoundsException: 1。以下是可能的原因分析及解决方法:

问题分析

  1. 错误来源
    错误发生在 com.oceanbase.ocp.common.util.MapUtils.fromString 方法中,表明在解析字符串到 Map 的过程中出现了数组越界异常。这通常是因为输入的字符串格式不符合预期。

  2. 相关参数
    根据日志中的上下文信息,以下参数可能与问题相关:

    • ob_install_path=/home/admin/oceanbase
    • ob_data_disk_path=/data/1
    • ob_log_disk_path=/data/log1
  3. 可能原因

    • 配置文件或上下文中某些关键参数缺失或格式不正确。
    • OCP 在执行 Make dir for ob 子任务时,未能正确解析路径或参数。
    • 目标服务器上的目录权限或磁盘状态可能导致操作失败。

解决方法

1. 检查配置参数

确保所有与路径相关的参数(如 ob_install_pathob_data_disk_pathob_log_disk_path)均正确无误,并且符合目标服务器的实际磁盘布局。

  • 登录目标服务器(IP: 192.168.1.45),检查以下路径是否存在:
    ls -ld /home/admin/oceanbase
    ls -ld /data/1
    ls -ld /data/log1
    
  • 如果路径不存在,请手动创建并设置正确的权限:
    sudo mkdir -p /home/admin/oceanbase /data/1 /data/log1
    sudo chown -R admin:admin /home/admin/oceanbase /data/1 /data/log1
    

2. 检查 OCP 上下文参数

登录 OCP 控制台,检查任务上下文中的参数是否完整。特别是以下字段:

  • startup_option_string:确保其内容格式正确,例如:
    log_disk_percentage=0,workers_per_cpu_quota=10,log_disk_size=0M,data_disk_usage_limit_percentage=90,80,memory_limit_percentage=90,80,...
    
  • 如果发现参数缺失或格式错误,请修正后重新提交任务。

3. 检查 OCP Agent 日志

从日志中可以看到 OCP 向目标服务器发送了 HTTP 请求:

POST request to agent, url:http://192.168.1.45:62888/api/v1/ob/install/cleanDirectories

请检查目标服务器上 OCP Agent 的日志文件(通常位于 /var/log/ocp-agent/),寻找更详细的错误信息。

4. 手动测试目录清理功能

尝试手动调用 OCP Agent 的 API,验证目录清理功能是否正常。例如:

curl -X POST http://192.168.1.45:62888/api/v1/ob/install/cleanDirectories \
-H "Content-Type: application/json" \
-d '{
  "obClusterName": "mop",
  "obPath": {
    "installPath": "/home/admin/oceanbase",
    "dataPath": "/data/1",
    "logPath": "/data/log1",
    "diskPathStyle": "DEFAULT",
    "runPath": "/home/admin/oceanbase"
  }
}'

如果返回错误,请根据错误信息进一步排查。

5. 联系技术支持

如果以上步骤无法解决问题,建议收集以下信息后联系 OceanBase 技术支持:

  • 完整的日志文件(包括 OCP 和 OCP Agent 的日志)。
  • 当前集群的配置文件(脱敏后提供)。
  • 目标服务器的操作系统版本和磁盘布局。

总结

根据文档库中的信息,目前没有直接匹配此错误的具体解决方案。但通过上述步骤,您可以逐步定位问题根源。如果仍有疑问,建议提供更多上下文信息以便进一步分析。

更多信息请查看:

  1. OBProxy 常见问题
  2. 4000 ~ 4499
  3. 4500 ~ 4999
  4. 9000 ~ 9499
  5. ob_cannot_connected OB 服务器无法连接
  6. 8000 ~ 8999

image
是有权限的

根据您提供的图片 OCR 提取内容和问题描述,似乎您正在验证目标服务器上的目录权限是否正确。以下是对当前情况的分析和建议:


已知信息

  1. OCR 提取内容
    虽然 OCR 提取的内容部分模糊,但仍可辨认出关键信息:

    • 目录权限为 drwxrwxrwx,表示该目录对所有用户(owner、group、others)均具有读、写、执行权限。
    • 目录名为 [yr(可能为 /home/admin/oceanbase 或其他相关路径的缩写)。
  2. 日志中的路径
    根据之前的日志信息,涉及的关键路径包括:

    • 安装路径:/home/admin/oceanbase
    • 数据路径:/data/1
    • 日志路径:/data/log1
  3. 用户反馈
    您提到“是有权限的”,表明目标服务器上的目录权限设置无误。


问题分析

尽管目录权限看起来没有问题,但仍然可能存在以下潜在原因导致任务失败:

1. 路径拼接错误

OCP 在解析路径时可能发生错误,例如路径中包含多余的空格或特殊字符。请确保上下文中的路径参数与实际路径完全一致。

2. 磁盘状态异常

即使目录权限正确,但如果磁盘已满或存在只读挂载等问题,也可能导致操作失败。请检查目标服务器的磁盘状态:

df -h /data/1
df -h /data/log1
mount | grep /data

3. OCP Agent 版本兼容性

如果 OCP 和 OCP Agent 的版本不匹配,可能导致某些功能调用失败。请确认目标服务器上 OCP Agent 的版本与 OCP 控制台版本一致。

4. 上下文中参数缺失

日志中提到 startup_option_string 参数,如果其格式不正确或某些字段缺失,可能导致解析失败。请检查并补充完整参数。


解决方法

1. 验证路径一致性

登录目标服务器,确保以下路径与 OCP 上下文中的配置一致:

ls -ld /home/admin/oceanbase
ls -ld /data/1
ls -ld /data/log1

如果路径名称或权限有差异,请修正后重新提交任务。

2. 检查磁盘状态

运行以下命令,确保磁盘空间充足且未被只读挂载:

df -h /data/1
df -h /data/log1
mount | grep /data

如果发现磁盘已满或只读挂载,请清理空间或修复挂载问题。

3. 更新 OCP Agent

确认目标服务器上的 OCP Agent 版本是否与 OCP 控制台版本匹配。如果不匹配,请升级 OCP Agent:

# 检查当前版本
ocp-agent --version

# 下载并安装最新版本
wget https://<ocp-repo-url>/ocp-agent-latest.tar.gz
tar -xzvf ocp-agent-latest.tar.gz
cd ocp-agent
./install.sh

4. 补充完整参数

在 OCP 控制台上,检查任务上下文中的 startup_option_string 参数是否完整。例如:

log_disk_percentage=0,workers_per_cpu_quota=10,log_disk_size=0M,data_disk_usage_limit_percentage=90,80,memory_limit_percentage=90,80,...

如果发现缺失字段,请补充后重新提交任务。


总结

虽然目录权限看似无误,但路径拼接错误、磁盘状态异常或参数缺失等问题仍可能导致任务失败。建议按照上述步骤逐一排查,并在必要时提供更多上下文信息以便进一步分析。如果仍有疑问,欢迎随时联系 OceanBase 技术支持团队。

具体信息可参考以下文档:

  1. 600.orm-protocol.md
  2. 700.upgrade-obproxy.md
  3. 560.ob_ivf_nprobes.md
  4. 7700.enable_pg.md
  5. 700.use-memleak.md
  6. 15900.ob_esi_rpc_port.md
  7. 5850.ob_encoding_granularity.md
  8. 400.1rpc-connection-authentication.md
  9. 7300.ob_enable_rich_error_msg-global.md
  10. 7300.enable_ob_esi_process.md

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

这里的权限是root,您这里是要使用admin部署吗?如果选择了自定义设置,操作系统属主用户应该写admin

助手分析的透彻啊

操作的用户是admin,不过我目录的权限给了所有用户读写权限,我前面试了就算设置了目录拥有者为root 也是会失败的的,这个任务失败的原因又看不到,不知道到底问题出现在哪里

如果是要使用admin用户部署,这里的owner应该设置为admin:admin

参考下这个

新建分布式集群

https://www.oceanbase.com/docs/common-ocp-1000000002381080

或者使用默认方式

新增 Zone

https://www.oceanbase.com/docs/common-ocp-1000000002381106

新增server的时候可以进行目录检查的,最好做一下