虚拟集群信创改造实施
v9.5.3.27版本
删除VC2,要保证vc没有在使用,比如有库
gcadmin rmvc vc2
--删除库后rmvc执行,提示select count(*) from gbase.nodedatamap where data_distribution_id=2 result is not 0-无妨
ps -ef|grep opt
kill -9 xxx 强杀进程号或者gcluster_services all stop
删除192.** 目录
36/37安装集群,过程略。见文档《多VC安装》
目标VC创建数据--自己测试用
use vc vc1;
create database db1;
use db1;
create table t1(a int) distributed by ('a');
insert into t1 values(1),(2),(3),(4),(5),(7);
select * from gbase.table_distribution;
4.2 import vc
(1)生成创建 VC 的配置示范文件
gcadmin importvc e import_vc.xml
-- <imported_vc_gcluster_ip ip_list="192.168.5.36"/> 源端管理节点IP
$ vi import_vc.xml
-------
<?xml version='1.0' encoding="utf-8"?>
<import_vc_parameter>
<source_vc_name name="vcsource"/>
<target_vc_name name="vcsource"/>
<imported_vc_gcluster_ip ip_list="192.168.5.36"/>
<imported_vc_os_dba_user_name os_user_name="gbase"/>
<imported_vc_os_dba_password os_password="Z2Jhc2Uy"/>
<imported_vc_db_user_name db_user_name="root"/>
<imported_vc_db_password db_password="''"/>
<importing_os_dba_user_name os_user_name="gbase"/>
<importing_os_dba_password os_password="Z2Jhc2Uy"/>
<importing_db_user_name db_user_name="root"/>
<importing_db_password db_password="''"/>
<import_vc_timeout timeout="60"/>
<import_vc_include_large_data_info include_large_data_info="0"/>
</import_vc_parameter>
----------------------------------
>>> import base64
>>> base64.b64encode('gbase2')
'Z2Jhc2Uy'
>>>
(2)配置import_vc.xml,执行导入集群
gcadmin importvc import_vc.xml
要保证集群状态正常,导入过程中会重启集群
--执行导入报错:gcadmin addnodes to cluster error: [14]->[GC_AIS_ERR_EXIST]
重新执行导入成功了
执行导入报错:
需修改执行节点gcware目录下脚本gadm_python_tools.py 注释掉509然后执行
导入,此时在源管理节点生成/tmp/imported_vc_info,拷贝到执行导入的管理节点/tmp,然后修改imported_vc_info 的gcware版本号,两个集群的gcware版本号一致(x86版本号,即c111049)
然后再修改gadm_python_tools.py,将1928行注释掉并将1929行改成sys.exit(0),
确认其gcware等信息变为了导入集群的gcware
# less /opt/192.168.5.78/gnode/config/cluster_common.cnf
2)保证字符集相同,比如两边都是gbk;本次importvc报错,是由于源是utf8,目标是GBK,需要修改配置文件,复合节点修改两个文件/opt/192.168.5.33/gcluster/config,数据节点修改一个文件/opt/192.168.5.34/gnode/config,然后重启gcluster_services;/tmp/imported_vc_info也要改。
--把gclusterdb库删除或者一开始8台机器直接按照gbk安装也能避免
导入成功后查询,源端VC没有了,目标端出现导入的vc
导入以后的操作:
8)新加入vc管理节点没有gclustered数据库(但是gn层有)需要手工删除
$ gncli -uroot -h192.168.5.36
等价于gccli -uroot -h192.168.5.37 -P5050
[gbase@vmm2 192.168.5.34]$ source gbase_profile
use gclusterdb;
show tables;
drop table gclusterdb.dual;
drop table gclusterdb.rebalancing_status_n1;
drop table gclusterdb.rebalancing_status_n2;
$ gccli
select * from gbase.table_distribution;
delete gbase.table_distribution where data_distribution_id=3;
select * from gbase.nodedatamap;
delete gbase.nodedatamap where data_distribution_id=3;--可以不做
----------------------
将源集群的复合节点改成纯数据节点:
停新导入VC复合节点的gcware/gcluste相关服务以及gcware和gcluster服务的相关目录部分内容(删目录要小心、要留下gcluster下的gcrcman之类的目录)、新导入VC节点的gnode/config目录下的pexpect.py和gadm_python_tools.py删掉、环境配置文件(.gbase_profile也要删一些gcware和gcluster的);
----
对照其他数据节点杀掉多余进程:
ps -ef|grep opt
不要gcluster&gcware进程,只要gnode进程,还要拉起gcmonit & gcmmonit
$ gcluster_services all stop
$ gcware_services all stop
$ gcluster_services gbase start
$ gcluster_services syncserver start
现在只有gnode/server/bin/gc_sync_server & gbased进程
/opt/192.168.5.36/gcluster/server/bin
只保留以下3个文件
gcrcman_node.py
gcrcman.py
gcrcmans
mv gcrcman* 222
/opt/192.168.5.36/gcware
只保留以下2个文件
include
lib64
拷贝gnode/sever/bin下的gcmonit、gcmmonit以及gnode/config/gcmonit.cnf、gccmonit.cnf
--拷贝过去属主是gbase
scp /opt/192.168.5.37/gnode/server/bin/gcm* gbase@192.168.5.36:/opt/192.168.5.36/gnode/server/bin/
scp /opt/192.168.5.37/gnode/config/gcm* gbase@192.168.5.36:/opt/192.168.5.36/gnode/config
修改gcmonit.conf & gcmmonit.conf对应ip
~/.gbase_profile改成和其余GNODE一样
/opt/192.168.5.36/gbase_profile拷贝其他GNODE,并改成对应ip
改完后退出重新进,确认echo $GCLUSTER_BASE为空
-----否则报错:/bin/bash: /opt/192.168.5.36/gcluster/server/bin/gcluster_services: No such file or directory
/opt/192.168.5.36/gnode/server/bin/gcmonit --start
--Starting gcmonit success!
会自动拉起gcmmonit进程,提示--Starting gcmmonit success!以及gbased、gc_sync_server
------------------------------------镜像集群就停止接下来步骤了
--在目标集群操作
拆分成freenode
gcadmin rmvc vcsource
迁移数据:
将freenode节点加入到指定VC
vi 2.xml --只写拆分后的ip
cd /opt/gcinstall
gcadmin addnodes 2.xml vc1
gcadmin showcluster vc vc1
创建distribution--区别当前vc的distribution
每个distribution只能存在一种OS
vi 2.xml --只写拆分后的ip
gcadmin distribution 2.xml p 1 d 1 vc vc1
要加dba_os_password
--报错:Error: execute cmd [ssh gbase@192.168.5.36 '. /opt/192.168.5.36/gbase_profile && python /opt/192.168.5.36/gnode/userdata/gnode_sys_tbl_src/gadm_cp_sys_tbl.py extract_restart root nopwd 192.168.5.36'] failed, error no [126]
extract data packet at node [192.168.5.36] failed
cp_sys_tbl copy data packet to node [192.168.5.36] failed
原因是/opt/192.168.5.36/gbase_profile显示为directory,文件尾多了~
gcadmin showdistribution node vc vc1
关闭管理节点
gccli
use vc vc1;
initnodedatamap;
rebalance instance to 4;
如果不初始化直接rebalance,报错:table can't be rebalanced when only one distribution rule
select * from gclusterdb.rebalancing_status;
-查看同步
select * from gbase.table_distribution;
-查看表分布
优先迁移复制表
对所有的表执行update操作
select tbName from gbase.table_distribution where dbname='db1' and isReplicate='YES' into outfile '/tmp/0918.txt';
[root@vmm1 tmp]# cat 0918.txt |awk -F '' '{print "update gclusterdb.rebalancing_status set priority =1 where table_name = \47" $0 "\47 and db_name = \47db1\47;"}' > 22.txt
[root@vmm1 tmp]# less 22.txt
update gclusterdb.rebalancing_status set priority =1 where table_name = 't1' and db_name = 'db1';
gccli -uroot -Dvc_sjxt.hds_temp < 22.txt
确认修改成功
select count(1) from rebalancing_status where priority=1;
确认复制表都已经迁过去了
gbase> select count(1) from gclusterdb.rebalancing_status where priority=1 and distribution_id =13;
--0
select count(1) from gclusterdb.rebalancing_status where priority=1 and distribution_id =15;
监控同步情况
gccli -ugbase -pgbase20110531 -Dvc1.gclusterdb -e"select status,count(1) from gclusterdb.rebalancing_status group by status;"
gccli -ugbase -pgbase20110531 -Dvc1.gclusterdb -e"select * from gclusterdb.rebalancing_status where status='RUNNING';"
----------------------------
rebalance做完,新建表会建在新的disid。
删除旧分片信息,保证老的disid查询没有表
(1)删除hashmap
gbase> use vc vc_sjxt;
gbase> refreshnodedatamap drop 13;
整个集群不能有DDL
gcadmin refreshnodedatamapdrop 2;
(2)删除distribution
gcadmin rmdistribution 1 vc vc1
指定数据节点从vc中移除,变为freenode,保留vcname
gcadmin rmnodes 2.xml vc1
2.xml只填写要删除的14个数据节点
将freenode从集群移除
gcadmin rmnodes 2.xml
检查
gcadmin showcluster vc vc1
删除VC
gcadmin rmvc vc2
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25044
- 42023-09-25浏览数:18519
- 52020-05-11浏览数:17526