Create network standby tenant,OCP报错卡死,无法跳过或者回滚,问题复盘与解决办法

OCP版本:Version: 4.3.0-20240711151555observer版本:oceanbase-4.2.1.6-106000022024042414.el7.x86_64.rpm

使用的时企业版  OceanBase

bug原因:

在创建备租户时,因提示 The REDO logs of the primary tenant are complete. You do not need to restore a tenant.   所以,选择了REDO 方式进行创建,没有使用ARCHIVELOG方式

使用redo日志的方式创建备租户时,首先,会为主租户创建STANDBYRO 用户(目的,是为了主备同步数据,就好比mysql的主从同步也需要创建一个repl的用户来进行同步),随机给STANDBYRO 分配了pwd,但这个密码有时会有特殊字符,比如分配"6I-YAgb$z0" 或者 “*72JO+bSpT”,在OCP进行备租户创建,到第五步(Create standby tenant)时,就会报错,信息如:

2024-10-12 10:36:06.585 WARN 8 — [manual-subtask-executor14,79d4b9c5f285bb90,2da084d844b225e6] c.o.ocp.obsdk.connector.ConnectTemplate : [obsdk] update failed, sql:[CREATE STANDBY TENANT XXXX LOG_RESTORE_SOURCE = "SERVICE=XXX.XXX.XXX.XXX:2881 USER=STANDBYRO@XXX password=xxx RESOURCE_POOL_LIST=(‘pool_XXX_zone1_vjs’), PRIMARY_ZONE=“zone1”, LOCALITY=“FULL@zone1”], error message:[PreparedStatementCallback; SQL [CREATE STANDBY TENANT XXX LOG_RESTORE_SOURCE = “SERVICE=XXX.XXX.XXX.XXX:2881 USER=STANDBYRO@XXX PASSWORD=6I-YAgb$z0” RESOURCE_POOL_LIST=(‘pool_XXX_zone1_vjs’), PRIMARY_ZONE=“zone1”, LOCALITY=“FULL@zone1”]; (conn=533279) Incorrect arguments to get primary connection; nested exception is java.sql.SQLTransientConnectionException: (conn=533279) Incorrect arguments to get primary connection]
2024-10-12 10:36:06.589 INFO 8 — [manual-subtask-executor14,79d4b9c5f285bb90,2da084d844b225e6] c.o.ocp.obsdk.connector.ConnectTemplate : Last Trace Info:[YB4285804CB5-0006208E7BB6F528-0-0]
2024-10-12 10:36:06.592 ERROR 8 — [manual-subtask-executor14,79d4b9c5f285bb90,2da084d844b225e6] c.o.o.c.t.e.c.w.subtask.SubtaskExecutor : Incorrect arguments to get primary connection
java.sql.SQLException: Incorrect arguments to get primary connection
at com.oceanbase.jdbc.internal.protocol.AbstractQueryProtocol.readErrorPacket(AbstractQueryProtocol.java:2347)
at com.oceanbase.jdbc.internal.protocol.AbstractQueryProtocol.readPacket(AbstractQueryProtocol.java:2210)
at com.oceanbase.jdbc.internal.protocol.AbstractQueryProtocol.getResult(AbstractQueryProtocol.java:2098)
后面就不展示了.....................................

1728960547

然后,ocp此任务一直卡住,不能回滚,不能跳过。原因是STANDBYRO  随机分配的pwd有某些特殊字符,而不能被识别使用,所以卡死。

解决办法:

1.去OCP元数据库, obclient -h133.128.76.187 -P2881 -uroot@ocp_metadb -p   , task_instance表,根据OCP任务的task id 找到,用update 修改RUNNING 为FAILED,如update  ocp  . task_instance  set  state  = ‘FAILED’ where  id  =14044309;这样OCP任务页面,就有回滚的按键了,可以点击回滚。

2.去主租户修改STANDBYRO用户的密码,alter user STANDBYRO identified by “qqQQ11@@”;

3.去OCP凭证管理,找到主租户的STANDBYRO凭证,修改。

1728960312

4.再次发起创建备租户,就可以了。



请使用浏览器的分享功能分享到微信等