【 使用环境 】 测试环境
【 OB or 其他组件 】oceanbase
【 使用版本 】4.2.1.10
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!
【 使用环境 】 测试环境
【 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
根据您提供的日志信息和错误描述,OCP 在尝试添加 OB Zone 时遇到了问题,具体错误为 java.lang.ArrayIndexOutOfBoundsException: 1
。以下是可能的原因分析及解决方法:
错误来源
错误发生在 com.oceanbase.ocp.common.util.MapUtils.fromString
方法中,表明在解析字符串到 Map 的过程中出现了数组越界异常。这通常是因为输入的字符串格式不符合预期。
相关参数
根据日志中的上下文信息,以下参数可能与问题相关:
ob_install_path=/home/admin/oceanbase
ob_data_disk_path=/data/1
ob_log_disk_path=/data/log1
可能原因
Make dir for ob
子任务时,未能正确解析路径或参数。确保所有与路径相关的参数(如 ob_install_path
、ob_data_disk_path
和 ob_log_disk_path
)均正确无误,并且符合目标服务器的实际磁盘布局。
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
登录 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,...
从日志中可以看到 OCP 向目标服务器发送了 HTTP 请求:
POST request to agent, url:http://192.168.1.45:62888/api/v1/ob/install/cleanDirectories
请检查目标服务器上 OCP Agent 的日志文件(通常位于 /var/log/ocp-agent/
),寻找更详细的错误信息。
尝试手动调用 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"
}
}'
如果返回错误,请根据错误信息进一步排查。
如果以上步骤无法解决问题,建议收集以下信息后联系 OceanBase 技术支持:
根据文档库中的信息,目前没有直接匹配此错误的具体解决方案。但通过上述步骤,您可以逐步定位问题根源。如果仍有疑问,建议提供更多上下文信息以便进一步分析。
更多信息请查看:
是有权限的
根据您提供的图片 OCR 提取内容和问题描述,似乎您正在验证目标服务器上的目录权限是否正确。以下是对当前情况的分析和建议:
OCR 提取内容
虽然 OCR 提取的内容部分模糊,但仍可辨认出关键信息:
drwxrwxrwx
,表示该目录对所有用户(owner、group、others)均具有读、写、执行权限。[yr
(可能为 /home/admin/oceanbase
或其他相关路径的缩写)。日志中的路径
根据之前的日志信息,涉及的关键路径包括:
/home/admin/oceanbase
/data/1
/data/log1
用户反馈
您提到“是有权限的”,表明目标服务器上的目录权限设置无误。
尽管目录权限看起来没有问题,但仍然可能存在以下潜在原因导致任务失败:
OCP 在解析路径时可能发生错误,例如路径中包含多余的空格或特殊字符。请确保上下文中的路径参数与实际路径完全一致。
即使目录权限正确,但如果磁盘已满或存在只读挂载等问题,也可能导致操作失败。请检查目标服务器的磁盘状态:
df -h /data/1
df -h /data/log1
mount | grep /data
如果 OCP 和 OCP Agent 的版本不匹配,可能导致某些功能调用失败。请确认目标服务器上 OCP Agent 的版本与 OCP 控制台版本一致。
日志中提到 startup_option_string
参数,如果其格式不正确或某些字段缺失,可能导致解析失败。请检查并补充完整参数。
登录目标服务器,确保以下路径与 OCP 上下文中的配置一致:
ls -ld /home/admin/oceanbase
ls -ld /data/1
ls -ld /data/log1
如果路径名称或权限有差异,请修正后重新提交任务。
运行以下命令,确保磁盘空间充足且未被只读挂载:
df -h /data/1
df -h /data/log1
mount | grep /data
如果发现磁盘已满或只读挂载,请清理空间或修复挂载问题。
确认目标服务器上的 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
在 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 技术支持团队。
具体信息可参考以下文档:
(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)
这里的权限是root,您这里是要使用admin部署吗?如果选择了自定义设置,操作系统属主用户应该写admin
助手分析的透彻啊
操作的用户是admin,不过我目录的权限给了所有用户读写权限,我前面试了就算设置了目录拥有者为root 也是会失败的的,这个任务失败的原因又看不到,不知道到底问题出现在哪里
如果是要使用admin用户部署,这里的owner应该设置为admin:admin
新增server的时候可以进行目录检查的,最好做一下