本文介绍了直连 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 版本。