【 使用环境 】生产环境
【 OB or 其他组件 】ob
【 使用版本 】4.1_bp1_hf1
【问题描述】all in one 4.1_bp1_hf1 想离线升级到4.1_bp2,执行到这步
obd cluster upgrade myoceanbase -c oceanbase-ce -V 4.1.0.1 --usable=d03fafa6fa8ceb0636e4db05b5b5f6c3ac225,c3f797aae1ce258ec9be77898b94e4e7a501c
报错
[ERROR] Tenant XX does not meet rolling upgrade conditions (zone number greater than 2).
查看日志
[2023-07-04 20:54:26.598] [DEBUG] – execute sql: select a.tenant_name, a.tenant_id, zone_list from oceanbase.DBA_OB_TENANTS as a left join (
[2023-07-04 20:54:26.598] [DEBUG] select zone_list, tenant_id from oceanbase.DBA_OB_RESOURCE_POOLS ) as b
[2023-07-04 20:54:26.598] [DEBUG] on a.tenant_id = b.tenant_id where a.tenant_name not like ‘META$%’. args: None
[2023-07-04 20:54:26.600] [ERROR] Tenant xin does not meet rolling upgrade conditions (zone number greater than 2).
执行上面sql,如附件所示,请问要如何解决,谢谢
【附件】
轮转升级要求租户分布多个zone。
谢谢,那要怎么改呢?
和系统租户一样改成三个zone就好
谢谢,可以提供具体的sql语句吗?改了好几次了都不行,感觉是个bug
先查询一下select * from oceanbase.DBA_OB_TENANTS where tenant_id = 1004;看下结果
在我看来你这个应该是资源池没设置对,设置了3个资源池在三个zone上。你应该创建一个包含3个zone的资源池。可以参考这个 https://www.oceanbase.com/docs/community-observer-cn-10000000000901661
primary_zone是zone1;zone2;zone3,我是通过ocp express页面创建的租户,不应该就是默认的吗,还需要手动调整资源池?
你把select * from oceanbase.DBA_OB_RESOURCE_POOLS where tenant_id = 1004;以及创建租户的页面贴一下吧
RESOURCE_POOL_ID | NAME | TENANT_ID | CREATE_TIME | MODIFY_TIME | UNIT_COUNT | UNIT_CONFIG_ID | ZONE_LIST | REPLICA_TYPE |
±-----------------±-------------------±----------±---------------------------±---------------------------±-----------±---------------±----------±-------------+
| 1002 | pool_xin_zone3_bhs | 1004 | 2023-06-15 14:35:57.607683 | 2023-06-15 14:35:57.710247 | 1 | 1003 | zone3 | FULL |
| 1003 | pool_xin_zone1_ojh | 1004 | 2023-06-15 14:35:57.616140 | 2023-06-15 14:35:57.707073 | 1 | 1002 | zone1 | FULL |
| 1004 | pool_xin_zone2_oxn | 1004 | 2023-06-15 14:35:57.622486 | 2023-06-15 14:35:57.709189 | 1 | 1004 | zone2 | FULL |
±-----------------±-------------------±----------±---------------------------±---------------------------±-----------±---------------±----------±-----------
核对了一下,你这种情况是满足多数派的,但是升级脚本里忽略了这种情况:即多个资源池每个资源池一个zone。我会替个issue给内部同学。
至于怎么处理的话,目前你可以按我前面说的参考官网文档把这个租户的资源池修改成多zone的一个资源池
收到,老师方便加钉钉指导下吗,不用图形界面修改租户资源有点看不懂
私信我dingding号吧
你先试试这个sql。 ALTER RESOURCE POOL MERGE (‘pool_xin_zone3_bhs’,‘pool_xin_zone1_ojh’,‘pool_xin_zone2_oxn’) INTO (‘pool_xin’);
执行完再看下select * from oceanbase.DBA_OB_RESOURCE_POOLS where tenant_id = 1004;
如果确认所有租户都满足多数派,那么还有一种方式是vi ~/.obd/plugin/oceanbase-ce/4.0.0.0/upgrade_check.py 注释掉下面的代码
这个场景会在最近的版本修复(obd 2.2.0 跟开源ob4.2一起发 预计8月初)
目前还没有修复,obd 2.3.0 ob4.2.0,我的租户也是ocp express创建的,通过下面的方法可以跳过错误
修改~/.obd/plugins/oceanbase-ce/4.2.0.0/upgrade_check.py
for tenant in tenants:
zone_list = tenant.get('zone_list', '').split(';')
if len(zone_list) < 3:
# 修改为warn,return注释掉
stdio.warn('Tenant %s does not meet rolling upgrade conditions (zone number greater than 2).' % tenant.get('tenant_name'))
# return
不过目前,我还是卡主了,原因未知
zone number greater than 2 这个问题已经在 obd 2.3.1中解决。 问题原因是 创建租户时候每个zone都指定了一个资源池导致的。