Tenant primary zone span regions 报错

【产品名称】OB 社区版

【产品版本】build_version: 3.1.1_4-8c615943cbd25a6f7b8bdfd8677a13a21709a05e(Oct 21 2021 10:33:14)

【问题描述】

新搭建的ob群集创建好之后,执行创建租户时语句报错:

mysql> create tenant obcp_t1 charset=‘utf8mb4’,replica_num=1,zone_list=(‘zone1,zone2,zone3’),primary_zone=‘zone2,zone3,zone1’,resource_pool_list=(‘mini_pool_t1’) set ob_tcp_invited_nodes=’%’;

ERROR 1235 (0A000): tenant primary zone span regions when GTS is on not supported

从报错字面来看,是创建租户时,primary zone不能跨region。

咨询了阿里技术支持同事,告知是2个zone必须在相同的region,然后才能指定primary zone 到不同的zone。比如zone1/zone2 在同一个region,可以指定zone1/zone2 为primary zone。

深入排查:

排查发现新群集由于是手动初始化,执行初始化语句是zone2/zone3没有指定region属性。

– //正常初始化群集语句

alter system bootstrap REGION “sys_region” ZONE “zone1” SERVER “1.1.1.1:5022”,REGION “sys_region” ZONE “zone2” SERVER “2.2.2.2:5022”,REGION “sys_region” ZONE “zone3” SERVER “3.3.3.3:5022”;

– //本次手动初始化语句,zone2/zone3少了region属性,导致zone1和zone2/zone3 归属不同的region

alter system bootstrap REGION “sys_region” ZONE “zone1” SERVER “1.1.1.1:5022”,ZONE “zone2” SERVER “2.2.2.2:5022”,“zone3” SERVER “3.3.3.3:5022”;

也可以通过下面语句来验证:

mysql> select * from __all_zone where name =‘region’;

±---------------------------±---------------------------±------±-------±------±---------------+

| gmt_create | gmt_modified | zone | name | value | info |

±---------------------------±---------------------------±------±-------±------±---------------+

| 2021-12-23 13:20:24.349978 | 2021-12-23 13:20:24.349978 | zone1 | region | 0 | sys_region |

| 2021-12-23 13:20:24.351031 | 2021-12-23 13:20:24.351031 | zone2 | region | 0 | default_region |

| 2021-12-23 13:20:24.351031 | 2021-12-23 13:20:24.351031 | zone3 | region | 0 | default_region |

±---------------------------±---------------------------±------±-------±------±---------------+

解决办法:

把zone2/zone3 改为和zone1一样的region。

mysql> alter system alter zone ‘zone2’ region ‘sys_region’;

Query OK, 0 rows affected (0.00 sec)

mysql> alter system alter zone ‘zone3’ region ‘sys_region’;

Query OK, 0 rows affected (0.00 sec)

mysql> select * from __all_zone where name =‘region’;

±---------------------------±---------------------------±------±-------±------±-----------+

| gmt_create | gmt_modified | zone | name | value | info |

±---------------------------±---------------------------±------±-------±------±-----------+

| 2021-12-23 13:20:24.349978 | 2021-12-23 16:06:24.853658 | zone1 | region | 0 | sys_region |

| 2021-12-23 13:20:24.351031 | 2021-12-23 16:06:30.097385 | zone2 | region | 0 | sys_region |

| 2021-12-23 13:20:24.351031 | 2021-12-23 16:06:34.389507 | zone3 | region | 0 | sys_region |

±---------------------------±---------------------------±------±-------±------±-----------+

3 rows in set (0.00 sec)

在执行创建租户语句就没问题了

mysql> create tenant obcp_t1 charset=‘utf8mb4’,replica_num=1,zone_list=(‘zone1,zone2,zone3’),primary_zone=‘zone2,zone3,zone1’,resource_pool_list=(‘mini_pool_t1’) set ob_tcp_invited_nodes=’%’;

Query OK, 0 rows affected (0.82 sec)

必须要保证有两个zone在同一个region,才能指定primary zone。例如,保证zone1和zone2在同一个region,可以指定zone1或zone2为primay zone。

1 个赞