grander 2020-4-29 14:15作者

对V86集群自动恢复无法完成需要人工干预场景,进行数据分片手动全同步 ...

字数 6444 阅读 186 评论 0 赞 0

需要手动全同步的情况,主要分为如下两种:
1、集群中表的某一个分片因某种原因自动恢复无法完成,此时使用正常的分片去覆盖异常的分片进行手动同步。
2、集群中表的某一个分片因某种原因主备片同时不可用(损坏或者同时都记录event),此时主备片的数据都是不可信的,
只能人工从主备分片中选择一个分片作为有效分片进行手动同步。

场景举例
三节点集群,集群IP:192.168.92.129,192.168.92.130,192.168.92.131
[root@rh73_01 ~]# gcadmin
CLUSTER STATE:  ACTIVE
CLUSTER MODE:   NORMAL

==============================================================
|           GBASE COORDINATOR CLUSTER INFORMATION            |
==============================================================
|   NodeName   |   IpAddress    |gcware |gcluster |DataState |
--------------------------------------------------------------
| coordinator1 | 192.168.92.129 | OPEN  |  OPEN   |    0     |
--------------------------------------------------------------
| coordinator2 | 192.168.92.130 | OPEN  |  OPEN   |    0     |
--------------------------------------------------------------
| coordinator3 | 192.168.92.131 | OPEN  |  OPEN   |    0     |
--------------------------------------------------------------
==========================================================
|             GBASE DATA CLUSTER INFORMATION             |
==========================================================
|NodeName |   IpAddress    |gnode |syncserver |DataState |
----------------------------------------------------------
|  node1  | 192.168.92.129 | OPEN |   OPEN    |    1     |
----------------------------------------------------------
|  node2  | 192.168.92.130 | OPEN |   OPEN    |    1     |
----------------------------------------------------------
|  node3  | 192.168.92.131 | OPEN |   OPEN    |    0     |
----------------------------------------------------------

数据分片分布
[root@rh73_01 ~]# gcadmin showdistribution

              Distribution ID: 1 | State: new | Total segment num: 3

    Primary Segment Node IP         Segment ID         Duplicate Segment node IP
====================================================================================
|       192.168.92.129         |       1          |        192.168.92.130          |
------------------------------------------------------------------------------------
|       192.168.92.130         |       2          |        192.168.92.131          |
------------------------------------------------------------------------------------
|       192.168.92.131         |       3          |        192.168.92.129          |
====================================================================================


[gbase@rh73_02 ~]$ gcadmin showdmlevent
Event count:1
Event ID:    6
ObjectName: test.t1

Fail Data Copy:
------------------------------------------------------
SegName: n1 SCN: 262164  NodeIP: 192.168.92.129 FAILURE
SegName: n1 SCN: 262164  NodeIP: 192.168.92.130 FAILURE

129和130分片上表test.t1的主备n1分片都记录有event,同步时只能人工选择其中一个作为有效分片,建议选择数据条数多者为有效分片。

此处假定130上的n1分片为有效分片,手动同步覆盖到129节点。

============================================

手动同步步骤:

1、130上数据分片可用性校验
(1)130上使用gbase用户执行
/opt/gnode/server/bin/checksum test t1_n1
(2)130上使用gbase用户gncli登录数据库gnode层执行
select count(*) from test.t1_n1 where rowid%65536=1;

如果上面两处执行都没有报错,说明130节点上的n1分片是可用的。
下面使用130节点上test.t1表的n1分片覆盖129节点上的n1分片。

2、停自动启停和gcrecover服务,此处主要为了排除自动同步服务对手动同步的影响。
所有节点使用gbase用户执行
gcmonit.sh stop
gcluster_services gcrecover stop

3、130节点gbase用户gccli登录数据库执行
lock table test.t1 write;
再执行
select sleep(100000);
并保证此连接不断开。

4、129节点gbase用户执行命令备份test.t1表n1分片数据
mv /opt/gnode/userdata/gbase/test/metadata/t1_n1.* /home/gbase
mv /opt/gnode/userdata/gbase/test/sys_tablespace/t1_n1/ /home/gbase

5、129节点使用gbase用户做分片数据拷贝
scp -rp gbase@192.168.92.130:/opt/gnode/userdata/gbase/test/metadata/t1_n1.* /opt/gnode/userdata/gbase/test/metadata
执行完之后再执行
scp -rp gbase@192.168.92.130:/opt/gnode/userdata/gbase/test/sys_tablespace/t1_n1 /opt/gnode/userdata/gbase/test/sys_tablespace

6、129节点使用gbase用户gncli登录数据库执行
refresh table test.t1_n1;

7、清理event,129节点使用gbase用户执行
[gbase@rh73_02 sys_tablespace]$ python
Python 2.7.5 (default, Aug  2 2016, 04:20:16)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import gcware
>>> gcware.cleardmlfevent('test.t1')

8、刚才执行select sleep(100000);的130节点窗口ctrl+c,取消select sql并退出gccli登录,释放写锁。

9、表手动同步完成,所有节点上使用gbase用户执行
gcmonit.sh start
启动自动启停服务。

10、执行gcadmin进行集群状态查看以及表数据验证。


如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0 条评论

您需要登录后才可以评论 登录 | 立即注册

作者其他文章