对V86集群自动恢复无法完成需要人工干预场景,进行数据分片手动全同步
需要手动全同步的情况,主要分为如下两种:
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进行集群状态查看以及表数据验证。



