本文介紹了直連 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:
SELECTt4.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 t1JOIN __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 BYt1.resource_pool_id,t2.unit_config_id,t3.unit_id;
-
在 OceanBase 數據庫 V4.x 版本中,查看租戶資源池配置的 SQL:
SELECTt4.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 t1JOIN __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 BYt1.resource_pool_id,t2.unit_config_id,t3.unit_id;
-
適用版本
OceanBase 數據庫 V2.x,V3.x,V4.x 版本。