sys 租户的 LS(日志流)在 zone3 的副本(xx.46)状态异常,导致 Locality 变更任务卡住

【 使用环境 】测试环境
【 OB or 其他组件 】Observer
【 使用版本 】4.3.5.5
【问题描述】
操作原因: 发现OCP监控中有一个节点监控曲线一直贴地板

日志中有报错:
WDIAG [RS] is_sys_ls_leader_ (ob_tenant_info_loader.cpp:274) [4075438][T1002_TenantInf][T1002][Y0-0000000000000000-0-0] [lt=8][errcode=-4719] failed to get palf role(ret=-4719, ret=“OB_LS_NOT_EXIST”)

SYS租户查看select * from CDB_OB_LS_LOCATIONS where tenant_id=1;
±----------±------±-----------±---------±---------±------±---------±------------------------------------------------------+
| TENANT_ID | LS_ID | SVR_IP | SVR_PORT | SQL_PORT | ZONE | ROLE | MEMBER_LIST |
±----------±------±-----------±---------±---------±------±---------±------------------------------------------------------+
| 1 | 1 | xx.xx.xx.44 | 2882 | 2881 | zone1 | LEADER | xx.xx.xx.44:2882:1,xx.xx.xx.45:2882:1,xx.xx.xx.46:2882:1 |
| 1 | 1 | xx.xx.xx.45 | 2882 | 2881 | zone2 | FOLLOWER | NULL |
±----------±------±-----------±---------±---------±------±---------±------------------------------------------------------+

感觉是zone3的xx.46这个机器出了问题, 但是select TENANT_NAME,LOCALITY from DBA_OB_TENANTS where tenant_id = 1; 看上去没问题
然后就想着把zone3重建一下:
结果发现删也删不掉, 加也加不回去
select * from DBA_OB_TENANT_JOBS order by 1;请问现在该怎么处理?

1 个赞

先看当前卡住的任务
SELECT * FROM DBA_OB_TENANT_JOBS WHERE JOB_TYPE=‘ALTER_TENANT_LOCALITY’ ORDER BY START_TIME\G
状态是 INPROGRESS,说明有一个改 locality 的任务一直跑着,必须先处理这个异常副本,再让任务跑完或清理。
清理异常副本
ALTER SYSTEM REMOVE REPLICA
LS = 1
SERVER = ‘xx.xx.xx.46:2882’
PAXOS_REPLICA_NUM = 2
TENANT = ‘sys’;
刷新位置缓存、触发修复
ALTER SYSTEM FLUSH LOCATION CACHE;

ALTER SYSTEM REPAIR LS LS_ID=1 TENANT_ID=1;
检查 LS 位置信息是否正常
SELECT TENANT_ID, LS_ID, SVR_IP, ZONE, ROLE
FROM CDB_OB_LS_LOCATIONS
WHERE TENANT_ID=1;
再尝试修改 locality(先降副本、再加回)
ALTER TENANT sys
LOCALITY = ‘FULL{1}@zone1, FULL{1}@zone2’;
ALTER TENANT sys
LOCALITY = ‘FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3’;
如果任务还是卡着
SELECT JOB_ID, JOB_STATUS, PROGRESS, START_TIME
FROM DBA_OB_TENANT_JOBS
WHERE JOB_TYPE=‘ALTER_TENANT_LOCALITY’;

打卡打卡

这个问题涉及到xx和OB的平衡,根据我的经验,适当调整TENANT会有帮助。