oceanbase容器重启后无法访问

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】4.2.1.10
【问题描述】创建容器时使用 obclient -h172.17.0.4 -uroot@test -A -Doceanbase -P2881 -p123456 可以直接进入,在重启容器后使用相同命令显示
ERROR 2002 (HY000): Can’t connect to OceanBase server on ‘172.17.0.4’ (115);

使用obd cluster display obcluster 命令后报Open ssh connection x
[ERROR] OBD-1013: root@172.17.0.4 connect failed: time out

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

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

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

日志采集场景: 集群无法连接
日志采集命令: obdiag gather scene run --scene=observer.cluster_down

推荐使用 obdiag 工具进行日志采集,并且将采集到的日志提供给我们以便确认问题所在。此命令会收集与集群状态、网络连接和 Observer 进程相关的日志信息,有助于分析 OceanBase 容器重启后无法访问的原因。

另外,为了确定具体的问题,在此需要您提供一些信息:

  1. 容器重启前是否有任何异常日志或错误提示?
  2. 您是否检查过容器的网络配置,例如 IP 地址和端口是否正确?
  3. 您能否确认 OceanBase 的相关服务(如 observer)在容器内是否正常启动?
  4. 是否有对系统资源(如磁盘空间、内存等)进行检查,是否存在资源耗尽的情况?
  5. 您使用的 OceanBase 数据库版本是什么?

附上敏捷诊断工具 obdiag 使用帮助链接

查看一下docker容器的ip是否发生变化。


好像没有

根据您提供的信息和图片内容,以下是一些可能的原因分析及解决方法:

1. 容器网络配置问题

  • 图片中的 IPAddress 显示为 172.17.0.2,而您在连接时使用的 IP 地址是 172.17.0.4。这表明您尝试连接的 IP 地址与容器实际分配的 IP 地址不一致。
  • 解决方法
    • 确认容器的实际 IP 地址是否为 172.17.0.4。可以通过以下命令检查容器的网络配置:
      docker inspect <container_id>
      
      或者直接查看容器内的网络配置:
      docker exec -it <container_id> ip addr
      
    • 如果容器的实际 IP 地址不是 172.17.0.4,请使用正确的 IP 地址进行连接。

2. OceanBase 服务未正常启动

  • 容器重启后,OceanBase 的 observer 进程可能没有正确启动,导致无法访问数据库。
  • 解决方法
    • 检查容器内 OceanBase 的 observer 进程是否正常运行:
      docker exec -it <container_id> ps aux | grep observer
      
    • 如果进程未启动,可以尝试手动启动:
      obd cluster start obcluster
      
    • 查看 observer 的日志以确认是否有启动错误:
      obd log observer
      

3. 端口映射或防火墙问题

  • 容器重启后,可能存在端口映射丢失或防火墙规则阻止了外部访问的情况。
  • 解决方法
    • 检查容器的端口映射是否正确:
      docker port <container_id> 2881
      
      输出应显示类似以下内容:
      0.0.0.0:2881->2881/tcp
      
    • 如果端口映射丢失,重新映射端口:
      docker run -p 2881:2881 ...
      
    • 检查主机上的防火墙规则,确保允许访问 172.17.0.4:2881

4. SSH 配置问题

  • 根据您提供的 obd cluster display obcluster 错误信息,Open ssh connection 失败可能是由于 SSH 配置不正确或密钥丢失。
  • 解决方法
    • 确保容器内的 SSH 服务已启动,并且您可以从主机通过 SSH 访问容器:
      ssh root@172.17.0.4
      
    • 如果无法通过 SSH 访问,请检查 SSH 配置文件 /etc/ssh/sshd_config 并重启 SSH 服务:
      service ssh restart
      

5. 资源耗尽问题

  • 容器重启后,可能存在磁盘空间不足或内存耗尽的问题,导致 OceanBase 无法正常启动。
  • 解决方法
    • 检查容器内的磁盘空间:
      docker exec -it <container_id> df -h
      
    • 检查容器内的内存使用情况:
      docker exec -it <container_id> free -m
      

总结

根据您的描述和提供的信息,最可能的原因是容器的 IP 地址发生变化或 OceanBase 服务未正常启动。建议按照上述步骤逐一排查问题。如果问题仍未解决,可以使用 obdiag 工具收集诊断信息并联系 OceanBase 技术支持团队获取进一步帮助。

更多信息请查看:

  1. 500.binlog_row_image-global.md
  2. 400.1rpc-connection-authentication.md
  3. enable_rpc_authentication_bypass
  4. DBA_OB_TRUSTED_ROOT_CERTIFICATE
  5. ob_tcp_invited_nodes
  6. standby_fetch_log_bandwidth_limit
  7. oceanbase.CDB_WR_SNAPSHOT
  8. oceanbase.DBA_WR_SNAPSHOT
  9. 4100.net_buffer_length-global.md

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

1 个赞

root@172.17.0.4 ssh连接失败问题需要排查一下网络问题
自己手动ssh试一下


好像完全连接不上,但是我的网络应该没问题

ip a看一下
你在你自己的容器内ping一下 172.17.0.4 估计是ip变化了

IP 172.17.0.2也是无法访问,重新拉取一个容器才没有问题

好像关闭容器之前都要手动obd cluster stop obcluster才行

正常启停都是先停集群的。尝试写死ip试试

1 个赞

不好意思,已经把先前那个容器删除了,谢谢您的耐心解答 :face_holding_back_tears: