GBase 8a集群报错 Failed to get metadata: DETAIL: check nodes, no valid node for suffix

报错原因

数据的主备分片都处于故障状态(event标志),或者分片所在主备节点都处于不可用状态(OFFLINE或服务CLOSE)等,特别是单节点集群。可以通过gcadmin showdmlevent 查看到。

故障原因

一般是硬件故障触发,比如磁盘,网络,当出现意外断电,宕机,磁盘空间满等情况,会导致如上主备分片同时被设置event标识的情况。

解决方法

先确认集群gcadmin是否正常,如果有CLOSE和OFFLINE情况,先解决。

如果gcadmin看节点和服务正常,则检查数据是否有故障。

gcadmin showdmlevent 查看对应的表。 如果版本支持,可以用下面这个

[gbase@localhost ~]$ gcadmin showdmlevent testdb.t1 n1 10.0.2.107
Event count:0

参数是 gcadmin --help可以看到,如果有如下的信息即可使用
gcadmin showdmlevent [<tablename segname nodeip> | <max_fevent_num>] [f] 
testdb.t1 库名.表名
n1 分片,对应segname
10.0.2.107 对应nodeip

        8.  gcadmin showddlevent [<tablename segname nodeip> | <tablename nodeip> | <max_fevent_num>] [f] : show cluster ddl fail event,
                                                                                                            replicated table segname is [n0]
        9.  gcadmin showdmlevent [<tablename segname nodeip> | <max_fevent_num>] [f]                      : show current cluster dml fail event,                                                                                                                                        replicated table segname is [n0]
        10. gcadmin showdmlstorageevent [table ID segname nodeip] | <max_fevent_num>] [f]   

如果是单节点集群,【只能】清理掉event,无论是否损坏。

如果是多节点,需要人工排查该分片在不同节点上的完整度,比如通过

select * from XXX_nY where rowid%65536=0 判断数据是否正常。报错的分片肯定被抛弃。

select count(*) 查看行数,一般选择行数多的;

select max(XXXtime) 查看最新数据时间,一般选择时间更近的;

然后选择其中一个为正确的,清掉event后,人工进行同步。 请参考

GBase 8a集群报错 Failed to get metadata: DETAIL: check nodes, no valid node for suffix》有1条评论

评论已关闭。