OB集群通过ODP连接,如何获取到客户端实际IP地址

【 使用环境 】测试环境
【 OB or 其他组件 】OB/ODP/ODC/OCP
【 使用版本 】OB 425,ODP 431,OCP 435,ODC 422
【问题描述】为定位具体哪些客户端连接执行的操作,上述组件中如何获取真实客户端IP地址。
1.分别使用OBClient命令行通过虚机连接,通过ODC连接,查询GV$OB_SESSION中查看,可以看到通过OBClient连接的user_client_ip字段为虚机主机IP,通过ODC连接的该字段为某一网络设备IP并非真实主机的IP。
2.是否有其他手段或者方式获取到客户端真实的IP地址。

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

@论坛小助手

根据您提供的问题描述,您希望在 OceanBase 集群通过 ODP 连接时获取客户端的实际 IP 地址。以下是对您的问题的详细回答:

问题描述

在您的测试环境中,您使用了 OBClient 命令行和 ODC 连接 OceanBase 集群,并且发现:

  • 通过 OBClient 连接时,GV$OB_SESSION 表中的 user_client_ip 字段显示的是虚机主机 IP。
  • 通过 ODC 连接时,user_client_ip 字段显示的是某个网络设备的 IP,而不是真实客户端的 IP。

解决方案

1. 通过 OBProxy 获取客户端真实 IP 地址

如果您使用的是 OBProxy 作为代理服务,可以通过配置 OBProxy 来获取客户端的真实 IP 地址。OBProxy 支持记录客户端的真实 IP 地址,您可以在 OBProxy 的配置文件中启用相关选项。

配置步骤:

  1. 打开 OBProxy 的配置文件 config.ini
  2. 查找或添加以下配置项:
    [obproxy]
    enable_record_client_ip = true
    
  3. 重启 OBProxy 服务以使配置生效。

2. 使用 ODP 获取客户端真实 IP 地址

如果您使用的是 ODP(OceanBase Data Proxy),可以尝试以下方法来获取客户端的真实 IP 地址:

配置步骤:

  1. 打开 ODP 的配置文件 odp.conf
  2. 查找或添加以下配置项:
    [odp]
    record_client_ip = true
    
  3. 重启 ODP 服务以使配置生效。

3. 查询 GV$OB_CLIENT_IP 视图

OceanBase 提供了一个系统视图 GV$OB_CLIENT_IP,您可以查询这个视图来获取客户端的真实 IP 地址。

查询示例:

SELECT * FROM GV$OB_CLIENT_IP;

备注

  • 如果您已经启用了上述配置但仍然无法获取到真实 IP 地址,建议检查网络设备的配置,确保没有进行 IP 地址的转换或伪装。
  • 如果您使用的是特定的网络设备或负载均衡器,可能需要在这些设备上进行额外的配置以传递客户端的真实 IP 地址。

参考文档

希望以上信息对您有所帮助。如有其他问题,请随时联系 OceanBase 的技术支持团队。

详情请参考:

  1. HELP
  2. ha_low_thread_score
  3. 向量检索实践教程概述
  4. ha_mid_thread_score
  5. 系统视图总览
  6. 遇到问题如何向技术支持同学提问
  7. ha_high_thread_score
  8. 基于 OceanBase 构建智能问答机器人
  9. ALTER USER

可以看看这个帖子