OCP部署完成后,纳管meta DB失败,任务Take over primary OB Cluster失败

【 使用环境 】测试环境
【 OB or 其他组件 】OCP
【 使用版本 】4.2.1
【问题描述】OCP部署完成后,纳管meta DB失败,任务Take over primary OB Cluster失败
【复现路径】OCP按照官方文档部署,部署完成后自动触发Take over primary OB Cluster任务,任务失败,失败子任务为:install ocp agent
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

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

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

根据文档库中的信息,OCP部署完成后纳管meta DB失败,任务Take over primary OB Cluster失败,可能的原因及解决步骤如下:

  1. 检查OCP Agent安装情况

    • 确认OCP Agent是否已经正确安装在目标机器上。可以通过在目标机器上执行 ps -ef | grep ocp-agent 命令来检查OCP Agent进程是否存在。
    • 如果OCP Agent进程不存在,可以尝试重新安装OCP Agent。具体步骤可以参考OCP官方文档中的相关部分。
  2. 查看详细的错误日志

    • 在OCP平台上,进入“部署日志”模块,查看详细的日志信息,获取具体的失败原因。
    • 根据日志中的错误信息,定位问题所在。常见的错误包括网络连接问题、权限问题等。
  3. 使用预检查接口查看OBServer节点检查不通过的具体原因

    • 可以使用预检查接口查看OBServer节点检查不通过的具体原因。调用接口方法如下:
      curl -X POST --user admin:xxx \
      -H "Content-Type:application/json" \
      -d '{"rootSysPassword":"xxxxx",                   #必填,root@sys密码。
      "address":"xxxxx",                                 #必填,集群连接地址。
      "port":2888,                                           #必填,集群连接端口。
      "connectionMode": "proxy"                  #选填,连接模式,可选值 direct | proxy,缺省为direct。
      "clusterName": "xxx",                            #选填,当连接模式为 proxy 时必填。
      "obClusterId": xxx                                 #选填,当连接模式为 proxy 且被接管集群为备集群时必填。
      }' \
      "http://example.com:8080/api/v2/ob/clusters/takeOverPreCheck"
      
    • 根据返回的错误信息,进一步排查问题。
  4. 确认业务访问待接管OceanBase集群的方式

    • 确认业务访问待接管OceanBase集群的方式,确保接管集群对业务的影响最小。
    • 确认接管的集群从其他OCP中迁出,或者停掉其他的OCP。
  5. 重新触发纳管任务

    • 如果上述步骤均未解决问题,可以尝试重新触发纳管任务。在OCP平台上,找到相应的任务,点击“重试”按钮,重新执行纳管任务。

希望以上步骤能帮助您解决问题。如果问题仍然存在,建议联系OceanBase的技术支持团队获取进一步的帮助。

检索到的文档如下:

  1. Failover 容灾切换
  2. 卸载 OCP
  3. 使用图形化界面升级 OCP
  4. 注册 OCP 集群
  5. OceanBase 集群常见问题
  6. 使用图形化界面部署 OCP
  7. 0001 ~ 3999

报错关键字:failed to execute ssh command:sudo curl -s -k -o /tmp/ocp-agent-ce-4.2.1 ***

根据您提供的报错信息 failed to execute ssh command:sudo curl -s -k -o /tmp/ocp-agent-ce-4.2.1 ***,这表明在执行 SSH 命令时出现了问题。以下是一些可能的原因及解决步骤:

  1. 检查 SSH 连接

    • 确保目标机器上的 SSH 服务正常运行,并且可以从 OCP 服务器通过 SSH 访问目标机器。
    • 使用以下命令测试 SSH 连接:
      ssh <目标机器IP> "echo Hello"
      
    • 如果连接失败,检查 SSH 服务是否启动,防火墙设置是否允许 SSH 连接。
  2. 检查 sudo 权限

    • 确保目标机器上的用户具有执行 sudo 命令的权限。
    • 检查 /etc/sudoers 文件,确保目标用户可以无密码执行 sudo 命令。可以使用以下命令编辑 sudoers 文件:
      sudo visudo
      
    • 添加以下行(假设目标用户为 admin):
      admin ALL=(ALL) NOPASSWD:ALL
      
  3. 检查 curl 工具

    • 确保目标机器上安装了 curl 工具。
    • 使用以下命令检查 curl 是否安装:
      which curl
      
    • 如果未安装,使用以下命令安装 curl
      sudo yum install -y curl  # CentOS/RHEL
      sudo apt-get install -y curl  # Ubuntu/Debian
      
  4. 检查目标路径权限

    • 确保目标路径 /tmp 具有写权限。
    • 使用以下命令检查和修改权限:
      ls -ld /tmp
      sudo chmod 777 /tmp
      
  5. 检查网络连接

    • 确保目标机器可以访问 OCP 服务器上的资源。
    • 使用以下命令测试网络连接:
      curl -s -k -o /tmp/ocp-agent-ce-4.2.1 <OCP服务器URL>
      
    • 如果连接失败,检查网络配置和防火墙设置。
  6. 查看详细日志

    • 在 OCP 平台上,进入“部署日志”模块,查看详细的日志信息,获取具体的失败原因。
    • 根据日志中的错误信息,进一步排查问题。
  7. 重新触发纳管任务

    • 如果上述步骤均未解决问题,可以尝试重新触发纳管任务。在 OCP 平台上,找到相应的任务,点击“重试”按钮,重新执行纳管任务。

希望以上步骤能帮助您解决问题。如果问题仍然存在,建议联系 OceanBase 的技术支持团队获取进一步的帮助。

详情请参考:

  1. host_agent_version_not_same 主机 OCP-Agent 版本与预期版本不一致
  2. upgrade_ocp_agent_failed OCP-Agent 升级失败
  3. obagent_dead Agent 服务不可用
  4. 重启 OCP
  5. OCP-Agent 运维脚本使用说明
  6. host_unavailable 主机心跳检测失败
  7. 使用 OBShell 扩容 OceanBase 集群
  8. 升级 OBShell
  9. 部署 OceanBase 集群
  10. 4000 ~ 4499

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

麻烦下载完整的任务日志发下

com.oceanbase.ocp.executor.exception.SshCommandFailedException: [SshClient]: failed to execute ssh command: sudo curl -s -k -o /tmp/ocp-agent-ce-4.2.1-20231208144448.el7.aarch64.rpm “http://xx,xx,xx,xx/api/v2/object-storage/sys-package/ocp-agent-ce-4.2.1-20231208144448.el7.aarch64.rpm”, exit code: 28
at com.oceanbase.ocp.executor.executor.SshExecutor.execute(SshExecutor.java:388)
at com.oceanbase.ocp.executor.executor.SshExecutor.lambda$downloadFile$2(SshExecutor.java:372)
at com.oceanbase.ocp.common.pattern.Retry.executeUntilWithLimit(Retry.java:74)
at com.oceanbase.ocp.common.pattern.Retry.executeUntilWithLimit(Retry.java:55)
at com.oceanbase.ocp.executor.executor.SshExecutor.downloadFile(SshExecutor.java:371)
at com.oceanbase.ocp.executor.executor.SshExecutor.installPackage(SshExecutor.java:226)
at com.oceanbase.ocp.service.compute.AgentInstallationTaskService.installOcpAgentRpm(AgentInstallationTaskService.java:221)
at com.oceanbase.ocp.service.compute.AgentInstallationTaskService$$FastClassBySpringCGLIB$$f7a6037f.invoke()
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386)
at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704)
at com.oceanbase.ocp.service.compute.AgentInstallationTaskService$$EnhancerBySpringCGLIB$$2126307.installOcpAgentRpm()
at com.oceanbase.ocp.service.task.business.host.InstallOcpAgentTask.run(InstallOcpAgentTask.java:63)
at c
om.oceanbase.ocp.core.task.engine.runner.JavaSubtaskRunner.execute(JavaSubtaskRunner.java:59)
at com.oceanbase.ocp.core.task.engine.runner.JavaSubtaskRunner.doRun(JavaSubtaskRunner.java:31)
at com.oceanbase.ocp.core.task.engine.runner.JavaSubtaskRunner.run(JavaSubtaskRunner.java:25)
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:193)
at com.oceanbase.ocp.core.task.engine.coordinator.worker.subtask.SubtaskExecutor.redirectConsoleOutput(SubtaskExecutor.java:187)
at com.oceanbase.ocp.core.task.engine.coordinator.worker.subtask.SubtaskExecutor.lambda$submit$2(SubtaskExecutor.java:124)
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:750)

Set state for subtask: 234, operation:EXECUTE, state: FAILED

在目标机器上手动跑下这个命令呢,看下报错

sudo curl -s -k -o /tmp/ocp-agent-ce-4.2.1-20231208144448.el7.aarch64.rpm “http://xx,xx,xx,xx/api/v2/object-storage/sys-package/ocp-agent-ce-4.2.1-20231208144448.el7.aarch64.rpm

大概知道原因了,是默认用了OCP的80端口,OCP实际对外监听是8080端口,所以计划改一下ocp.site.url的值,然后重启下。OCP是白屏安装的,需要重启,421的版本有对应的命令指南么,OBD上看也没有纳管OCP

你这个OCP使用OBD部署的吧

old cluster restart 部署集群名称 -c ocp-server-ce

是 obd部署的,但是obd cluster 没有显示ocp的集群名称

obd cluster list 看下呢

这个问题已经解决了,新版本的ODB虽然显示的只有OB的集群名称,但是重启的时候,也会把对应的OCP/OBProxy/OBServer 整个都重启