暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【OceanBase诊断调优】—— 直连普通租户时遇到报错:Tenant not in this server

数据库工兵营 2024-05-21
62

本文介绍了直连 OceanBase 数据库中的普通租户时,出现报错:ERROR 5150 (HY000) : Tenant not in this server
 的处理方法。

问题描述

在 n-n
 或者 n-n-n (n>1)
 的部署架构中,使用 2881 端口 直连 OceanBase 集群的普通租户,可能出现报错:ERROR 5150 (HY000) : Tenant not in this server
 。

问题原因

在或者 (n>1) 的部署架构中,创建的租户可能只在 Zone 下其中一个 OBServer Node 上配置了对应 unit 资源。

例如部署架构如下:Zone1 的第一个 Node 和 Zone2 的第二个 Node 有对应的 unit 资源。那么通过 OBServer 的 2881 端口直连时,必须要求连接的 OBServer上有对应租户的 unit 才可以连接;如果直连 OBServer 2881 端口,连接的 OBServer 上却没有对应租户的 unit,那么就会出现以上截图的问题。

解决方法

  • 方法一:可以给该OceanBase集群关联OBProxy集群,通过2883代理连接对应的租户。

  • 方法二:可以先通过下面的 SQL 查看该租户的 unit 分布的 OBServer Nodes,再通过正确的 Node 进行直连该租户。查看租户资源池配置可通过以下 SQL 查询。

    • 在 OceanBase 数据库 V2.x,V3.x 版本中,查看租户资源池配置的 SQL:

      SELECT
      t4.tenant_id,
      t4.tenant_name,
      t1.name resource_pool_name,
      t2.name unit_config_name,
      t2.max_cpu,
      t2.min_cpu,
      round(t2.max_memory 1024 1024 1024) max_mem_gb,
      round(t2.min_memory 1024 1024 1024) min_mem_gb,
      t3.unit_id,
      t3.zone,
      concat(t3.svr_ip, ':', t3.svr_port) observer
      FROM
      __all_resource_pool t1
      JOIN __all_unit_config t2 ON (t1.unit_config_id = t2.unit_config_id)
      JOIN __all_unit t3 ON (t1.resource_pool_id = t3.resource_pool_id)
      LEFT JOIN __all_tenant t4 ON (t1.tenant_id = t4.tenant_id)
      -- WHERE t4.tenant_id = 1001
      ORDER BY
      t1.resource_pool_id,
      t2.unit_config_id,
      t3.unit_id;

    • 在 OceanBase 数据库 V4.x 版本中,查看租户资源池配置的 SQL:

      SELECT
      t4.tenant_id,
      t4.tenant_name,
      t1.name resource_pool_name,
      t2.name unit_config_name,
      t2.max_cpu,
      t2.min_cpu,
      round(t2.memory_size 1024 1024 1024) mem_gb,
      t3.unit_id,
      t3.zone,
      concat(t3.svr_ip, ':', t3.svr_port) observer
      FROM
      __all_resource_pool t1
      JOIN __all_unit_config t2 ON (t1.unit_config_id = t2.unit_config_id)
      JOIN __all_unit t3 ON (t1.resource_pool_id = t3.resource_pool_id)
      LEFT JOIN __all_tenant t4 ON (t1.tenant_id = t4.tenant_id)
      -- WHERE t4.tenant_id = 1001
      ORDER BY
      t1.resource_pool_id,
      t2.unit_config_id,
      t3.unit_id;

适用版本

OceanBase 数据库 V2.x,V3.x,V4.x 版本。


文章转载自数据库工兵营,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论