GBase 8a
运维管理
文章

安装和配置GVR工具步骤

发表于2025-04-05 09:51:5366次浏览0个评论

安装说明:
1)上传GVR工具和gccli工具安装包及至管理节点入口/opt/目录下
2)替换本安装步骤中的GGG为操作系统用户gbase的密码
3)替换本安装步骤中的PPP为sync_user数据库用户的密码
4)替换本安装步骤中的XXX为gbase数据库用户的密码


A GVR基本信息
节点IP:192.168.195.100
B 生产集群信息(sync_user/sync123)
集群规模:1coor + 2*2data 分布 p 1 d 1
节点类型    业务IP                数据IP
coor        192.168.195.10        10.168.195.10
data        192.168.195.101        10.168.195.101    10.168.195.102
data        192.168.195.103        10.168.195.103    10.168.195.104
C 灾备集群信息(sync_user/sync123)
集群规模:1coor + 1*2data 分布 p 2 d 1
节点类型    业务IP                数据IP
coor        192.168.195.20        10.168.195.20
data        192.168.195.201        10.168.195.201    10.168.195.202


准备内容:
1)根据ipmapping.csv模版整理生产、灾备IP映射列表;
2)根据IP映射列表整理生产、灾备node.list参数列表


一、生产GBase集群配置
1.1 配置脚本授权
# 上传配置脚本set_addibind.zip至管理节点入口/opt/gbase_workspace/scripts/目录下

[root@GBASEMA01 ~]# cd /opt/gbase_workspace/scripts
[root@GBASEMA01 ~]# unzip set_addibind.zip
[root@GBASEMA01 ~]# mv set_addibind.zip /tmp
[root@GBASEMA01 ~]# chown -R gbase:gbase set_addibind

1.2 配置bind数据库参数

[gbase@GBASEMA01 ~]$ cd /opt/gbase_workspace/scripts/set_addibind
#核对node.list列表(数据节点的数据IP 业务IP bindPort syncPort)
[gbase@GBASEMA01 set_addibind]$ cat node.list
#NodeIP调整为数据节点某一个私网IP
[gbase@GBASEMA01 set_addibind]$ gccli -udbperf -p -hNodeIP -P5050 -e "show variables like '%bind%'"    
[gbase@GBASEMA01 set_addibind]$ cexec data: 'cat /opt/10.*/gnode/config/gbase_8a_gbase.cnf | grep -i "additional"'
[gbase@GBASEMA01 set_addibind]$ cexec data: 'cat /opt/10.*/gnode/config/synctool.conf | grep -i "additional"'
[gbase@GBASEMA01 set_addibind]$ sh set_addibind.sh
[gbase@GBASEMA01 set_addibind]$ cexec data: 'cat /opt/10.*/gnode/config/gbase_8a_gbase.cnf | grep -i "additional"'
[gbase@GBASEMA01 set_addibind]$ cexec data: 'cat /opt/10.*/gnode/config/synctool.conf | grep -i "additional"'

1.3 重启集群服务

[gbase@GBASEMA01 set_addibind]$ cexec data: 'gcluster_services all stop'
[gbase@GBASEMA01 set_addibind]$ cexec data: 'gcluster_services all start'

1.4 检查集群服务及端口

[gbase@GBASEMA01 set_addibind]$ cexec data: 'ps -ef|grep -Ei "gclusterd|gbased" | grep -v grep'
[gbase@GBASEMA01 set_addibind]$ cexec data: 'netstat -tln| grep -E "5060|5061|6060|6061"|wc -l'
[gbase@GBASEMA01 set_addibind]$ gcadmin

1.5 创建同步用户并验证

[gbase@GBASEMA01 ~]$ gccli -ugbase -pXXX
create user sync_user identified by 'PPP';
grant select on *.* to sync_user;
grant show view on *.* to sync_user;
grant file on *.* to sync_user;
grant all on gclusterdb.* to sync_user;
grant all on tdb.* to sync_user;
show grants for sync_user;

# set_addibind.sh脚本内容

#!/bin/bash
###############################################################################
##creator : tujunbing                                                        
##create time: 2024-06-01                                                    
##Decription: Set the additional for gbase cluster   
##Method: sh set_addibind.sh
##Version: 1.0                                                               
###############################################################################

#配置文件路径
configDir=/opt/gbase_workspace/scripts/config
#脚本路径
scriptsDir=/opt/gbase_workspace/scripts/set_addibind


#读取配置信息(未使用)
config()
{
	gbaseMode=`cat ${configDir}/config |grep ^GBaseMode |awk -F= '{print $2}' | awk '{print $1}'`
	instanceType=`cat ${configDir}/config |grep ^InstanceType |awk -F= '{print $2}' | awk '{print $1}'`
#	userName=`cat ${configDir}/config |grep ^UserName |awk -F= '{print $2}' | awk '{print $1}'`
#	userPasswd=`cat ${configDir}/config |grep ^Password |awk -F= '{print $2}' | awk '{print $1}'`
	#客户端命令
	gccli_command="gccli -u${userName} -p${userPasswd}"
}

set_addibind()
{
	#数据IP 业务IP SYNC端口 GNode端口
	while read dataip busszieip syncport gnport
	do
		echo " >> ${dataip} ${busszieip} ${syncport} ${gnport}"
		ssh -n ${dataip} "cp /opt/${dataip}/gnode/config/gbase_8a_gbase.cnf /opt/${dataip}/gnode/config/gbase_8a_gbase.cnf.$(date +%Y%m%d)"
		ssh -n ${dataip} "sed -i '/bind_address_additional/d;/port_additional/d' /opt/${dataip}/gnode/config/gbase_8a_gbase.cnf"
		ssh -n ${dataip} "sed -i '/gbasedump/i\bind_address_additional=${busszieip}\\nport_additional=${gnport}' /opt/${dataip}/gnode/config/gbase_8a_gbase.cnf"
		
		ssh -n ${dataip} "cp /opt/${dataip}/gnode/config/synctool.conf /opt/${dataip}/gnode/config/synctool.conf.$(date +%Y%m%d)"
		ssh -n ${dataip} "sed -i '/BIND_ADDRESS_ADDITIONAL/d;/SERVER_PORT_ADDITIONAL/d' /opt/${dataip}/gnode/config/synctool.conf"
		ssh -n ${dataip} "sed -i '/SERVER_PORT/a\BIND_ADDRESS_ADDITIONAL=${busszieip}\\nSERVER_PORT_ADDITIONAL=${syncport}' /opt/${dataip}/gnode/config/synctool.conf"
		
	done <  ${scriptsDir}/node.list
}


rollback_parms()
{
	#数据IP 业务IP SYNC端口 GNode端口
	while read dataip busszieip syncport gnport
	do
		gbase_back_cnf=/opt/${dataip}/gnode/config/gbase_8a_gbase.cnf.$(date +%Y%m%d)
		ssh -n ${dataip} "if [ -f ${gbase_back_cnf} ];then cp ${gbase_back_cnf} /opt/${dataip}/gnode/config/gbase_8a_gbase.cnf; fi"
		
		sync_back_cnf=/opt/${dataip}/gnode/config/synctool.conf.$(date +%Y%m%d)
		ssh -n ${dataip} "if [ -f ${sync_back_cnf} ];then cp ${sync_back_cnf} /opt/${dataip}/gnode/config/synctool.conf; fi"
		
	done <  ${scriptsDir}/node.list
}


check_input()
{
	inputval=$1
	if [ "${inputval}" == 'undo' ];then
		rollback_parms
	else
		set_addibind
	fi
}


main()
{
	config
	check_input $1
}

main $@

node.list文件样例:

数据节点的数据IP 业务IP bindPort syncPort

10.168.195.101 192.168.195.101 6060 5060
10.168.195.102 192.168.195.101 6061 5061


二、灾备GBase集群配置
2.1 配置脚本授权
# 上传配置脚本set_addibind.zip至管理节点入口/opt/gbase_workspace/scripts/目录下

[root@GBASEMA01 ~]# cd /opt/gbase_workspace/scripts
[root@GBASEMA01 ~]# unzip set_addibind.zip
[root@GBASEMA01 ~]# mv set_addibind.zip /tmp
[root@GBASEMA01 ~]# chown -R gbase:gbase set_addibind

2.2 配置bind数据库参数

[gbase@GBASEMA01 ~]$ cd /opt/gbase_workspace/scripts/set_addibind
#核对node.list列表(数据节点的数据IP 业务IP bindPort syncPort)
[gbase@GBASEMA01 set_addibind]$ cat node.list
#NodeIP调整为数据节点某一个私网IP
[gbase@GBASEMA01 set_addibind]$ gccli -udbperf -p -hNodeIP -P5050 -e "show variables like '%bind%'"    
[gbase@GBASEMA01 set_addibind]$ cexec data: 'cat /opt/10.*/gnode/config/gbase_8a_gbase.cnf | grep -i "additional"'
[gbase@GBASEMA01 set_addibind]$ cexec data: 'cat /opt/10.*/gnode/config/synctool.conf | grep -i "additional"'
[gbase@GBASEMA01 set_addibind]$ sh set_addibind.sh
[gbase@GBASEMA01 set_addibind]$ cexec data: 'cat /opt/10.*/gnode/config/gbase_8a_gbase.cnf | grep -i "additional"'
[gbase@GBASEMA01 set_addibind]$ cexec data: 'cat /opt/10.*/gnode/config/synctool.conf | grep -i "additional"'

2.3 重启集群服务

[gbase@GBASEMA01 set_addibind]$ cexec data: 'gcluster_services all stop'
[gbase@GBASEMA01 set_addibind]$ cexec data: 'gcluster_services all start'

2.4 检查集群服务及端口

[gbase@GBASEMA01 set_addibind]$ cexec data: 'ps -ef|grep -Ei "gclusterd|gbased" | grep -v grep'
[gbase@GBASEMA01 set_addibind]$ cexec data: 'netstat -tln| grep -E "5060|5061|6060|6061"|wc -l'
[gbase@GBASEMA01 set_addibind]$ gcadmin

2.5 创建被同步业务库

[gbase@GBASEMA01 ~]$ gccli -ugbase -pXXX
create database if not exists tdb;
show databases;

2.6 创建同步用户并验证

[gbase@GBASEMA01 ~]$ gccli -ugbase -pXXX
create user sync_user identified by 'PPP';
grant select on *.* to sync_user;
grant show view on *.* to sync_user;
grant file on *.* to sync_user;
grant all on gclusterdb.* to sync_user;
grant all on tdb.* to sync_user;
show grants for sync_user;


三、GVR工具安装部署
3.1 创建操作系统用户

[root@GBASEMA01 ~]# useradd gbase
[root@GBASEMA01 ~]# echo gbase:GGG|chpasswd
[root@GBASEMA01 ~]# chage -M 99999 gbase
[root@GBASEMA01 ~]# chown -R gbase:gbase /opt

3.2 gccli工具安装

[root@GBASEMA01 ~]# su - gbase
[gbase@GBASEMA01 ~]$ cd /opt; ll
[gbase@GBASEMA01 opt]$ tar -xvf gccli_*
[gbase@GBASEMA01 opt]# cd gccli_install
[gbase@GBASEMA01 gccli_install]# chmod 744 gccli_install.sh
[gbase@GBASEMA01 gccli_install]# sh gccli_install.sh gccli_standalone.tar.bz2
[gbase@GBASEMA01 gccli_install]# echo -e 'export GBASE_HOME=/opt/gccli_install/gcluster/server\nPATH=$GBASE_HOME/bin:$PATH' >> ~/.bash_profile
[gbase@GBASEMA01 gccli_install]# source ~/.bash_profile
[gbase@GBASEMA01 gccli_install]# gccli -usync_user -pPPP -h192.168.195.10 -e "select version()"
[gbase@GBASEMA01 gccli_install]# gccli -usync_user -pPPP -h192.168.195.20 -e "select version()"

3.3 GVR工具配置维护

[gbase@GBASEMA01 ~]$ cd /opt
[gbase@GBASEMA01 opt]$ tar -xvf GBase_Visio_Rsynctool-9.5.3.10_build8
[gbase@GBASEMA01 opt]$ mv GBase_Visio_Rsynctool-9.5.3.10_build8 gvr_95310b8
[gbase@GBASEMA01 opt]$ cd gvr_95310b8
[gbase@GBASEMA01 gvr_95310b8]$ scp -r ipmapping /opt/sync/
[gbase@GBASEMA01 gvr_95310b8]$ sed -i 's#tmp#opt#g' application.yml
[gbase@GBASEMA01 gvr_95310b8]$ sed -i 's/^.*ipMappingTemplate.*$/    ipMappingTemplate: \/opt\/sync\/ipmapping/g' application.yml
[gbase@GBASEMA01 gvr_95310b8]$ sed -i 's#tmp#opt#g' logback.xml

3.4 GVR服务启动

[gbase@GBASEMA01 gvr_95310b8]$ sh rsync.sh status
[gbase@GBASEMA01 gvr_95310b8]$ sh rsync.sh start
[gbase@GBASEMA01 gvr_95310b8]$ sh rsync.sh status
[gbase@GBASEMA01 gvr_95310b8]$ ps -ef|grep sync | grep -v grep

3.5 登录GVR工具
#1) 浏览器访问 http://192.168.195.100:1526
#2) 输入用户名gbase、密码gbase、验证码,登录系统

3.6 配置数据源
#1) GVR页面中点击 “主备库数据同步 > 数据源管理” 功能菜单,点击【添加】按钮,按生产、灾备环境GBase集群信息添加数据源信息,可以通过【测试连接】验证账户,通过【show gcluster nodes】与【show nodes】按钮确认添加的数据源的IP信息
------------------------------------------------------------------------------------
 环境类型    数据源名称    数据库地址        数据库端口    用户名        密码
 生产        DEMO-PRD    192.168.195.10    5258        sync_user    PPP
 灾备        DEMO-DRS    192.168.195.20    5258        sync_user    PPP
------------------------------------------------------------------------------------
 
3.7 配置数据同步任务
#1) GVR页面中点击 “主备库数据同步 > 同步任务管理” 功能菜单,点击【添加】按钮,配置同步任务信息

------------------------------------------------------------------------------------------------------------------------------------
 任务名称                            计算节点端口    任务类型    主库数据源    备库数据源    同步对象
 DEMO系统主备tdb库数据全量同步任务    5050            按库同步    DEMO-PRD    DEMO-DRS    表、存过、函数、视图
************************************************************************************************************************************
 数据同步模式    集群同步模式    备库是否建表    数据回读校验    是否预同步    是否表覆盖    同步并行度    是否删除备库多余表
    全量        2先同步主分片        是            验证:是/正式:否        否            是            20                是
************************************************************************************************************************************
 IP映射列表
    环境类型    DATAIP            BUSSZIEIP        SYNCPORT    GNPORT
    生产        10.168.195.101    192.168.195.101    6060        5060
                10.168.195.102    192.168.195.101    6061        5061
                10.168.195.103    192.168.195.103    6060        5060
                10.168.195.104    192.168.195.103    6061        5061
    
    灾备        10.168.195.201    192.168.195.201    6060        5060
                10.168.195.202    192.168.195.201    6061        5061
------------------------------------------------------------------------------------------------------------------------------------                
任务名称                            计算节点端口    任务类型    主库数据源    备库数据源    同步对象
DEMO系统主备tdb库数据增量同步任务    5050            按库同步    DEMO-PRD    DEMO-DRS    表、存过、函数、视图
************************************************************************************************************************************
 数据同步模式    集群同步模式    备库是否建表    数据回读校验    是否预同步    是否表覆盖    同步并行度    是否删除备库多余表    日志等级
    增量        2先同步主分片        是            验证:是/正式:否        否            是            20                否            
************************************************************************************************************************************
 IP映射列表
    环境类型    DATAIP            BUSSZIEIP        SYNCPORT    GNPORT
    生产        10.168.195.101    192.168.195.101    6060        5060
                10.168.195.102    192.168.195.101    6061        5061
                10.168.195.103    192.168.195.103    6060        5060
                10.168.195.104    192.168.195.103    6061        5061
    
    灾备        10.168.195.201    192.168.195.201    6060        5060
                10.168.195.202    192.168.195.201    6061        5061        
------------------------------------------------------------------------------------------------------------------------------------

3.8 配置定时调度策略
#1) GVR页面中点击 “主备库数据同步 > 定时调度策略” 功能菜单,点击【新增】按钮,配置定时调度策略

------------------------------------------------------------------------------------------------------------------------------------
 策略名称                                数据源名称    数据库地址        数据库端口    用户名        密码
 DEMO系统主备tdb库数据定时调度策略        DEMO-PRD    192.168.195.10    5258        sync_user    PPP
------------------------------------------------------------------------------------------------------------------------------------

3.9 配置数据校验任务
#1) GVR页面中点击 “主备库数据同步 > 校验任务管理” 功能菜单,点击【添加】按钮,配置校验任务信息

------------------------------------------------------------------------------------------------------------------------------------
 任务名称                        校验范围    主库数据源    备库数据源
 DEMO系统主备tdb库数据校验任务    全量表校验    DEMO-PRD    DEMO-DRS
------------------------------------------------------------------------------------------------------------------------------------


四、库表数据差异比对
4.1 配置脚本授权
# 上传配置脚本set_addibind.zip至管理节点入口/opt目录下

[root@GBASEMA01 ~]# cd /opt
[root@GBASEMA01 opt]# unzip set_addibind.zip
[root@GBASEMA01 opt]# mv set_addibind.zip /tmp
[root@GBASEMA01 opt]# chown -R gbase:gbase set_addibind

4.2 执行比对脚本

[root@GBASEMA01 ~]# su - gbase
[gbase@GBASEMA01 ~]$ cd /opt/set_addibind
#脚本参数:userName userPasswd masterIp slaveIp [dbName]
[gbase@GBASEMA01 set_addibind]$ sh check_table.sh sync_user PPP 192.168.195.10 192.168.195.20 &
[gbase@GBASEMA01 set_addibind]$ ps -ef | grep check_table.sh | grep -v grep

4.3 数据差异查看

[gbase@GBASEMA01 set_addibind]$ ps -ef | grep check_table.sh | grep -v grep
[gbase@GBASEMA01 set_addibind]$ cd /opt/set_addibind/log
#文件说明:表名 生产统计数 灾备统计数,当灾备统计数空时,说明无此表
[gbase@GBASEMA01 set_addibind]$ cat table_diff_*.log

 

# check_table.sh脚本内容

#!/bin/bash
###############################################################################
##creator : tujunbing                                                        
##create time: 2024-10-20                                                   
##Decription: count table for sync
##Method: sh check_table.sh
##Version: 1.0                                                               
###############################################################################

wd=$(cd `dirname $0`;pwd)

#统计并发数
parallel=10

#参数设置
userName=$1
userPasswd=$2
masterIp=$3
slaveIp=$4
dbName=$5


#读取配置信息
config()
{
	#客户端命令
	gccli_command="gccli -u${userName} -p${userPasswd}"
}

#检查主备表数据量
check_tables()
{
	#脚本参数检查
	if [ "" == "${masterIp}" ] || [ "" == "${slaveIp}" ] || [ "" == "${userName}" ] || [ "" == "${userPasswd}" ]; then 
		echo "Usage: sh $0 userName userPasswd masterIp slaveIp [dbName]. If dbName is null, it will be checked for all databases. "; 
		exit 1; 
	fi
	
	#数据库用户、密码检查
	check_password ${masterIp} 
	check_password ${slaveIp}
	
	#导出主库库表
	get_tables ${masterIp}
	
	#比对主备表数据量
	count_table ${masterIp} ${slaveIp}
}

#导出主库库表
get_tables()
{
	current_time=`date +%F`
	dbversion=`${gccli_command} -h$1 -Ns -e "select @@version"`
	if [ `echo ${dbversion} | grep '^9.5' | wc -l ` -gt 0 ]; then
		tbstr="concat(vc_id,'.',dbname,'.',tbname)"
	else
		tbstr="concat(dbname,'.',tbname)"
	fi
	
	> ${wd}/log/table_list
	
	#导出库表列表
	if [ ! -n "${dbName}" ]; then 
		$gccli_command -h$1 -Ns -e "select ${tbstr} as tb from gbase.table_distribution where dbname not in ('information_schema','performance_schema','gbase','gclusterdb','gctmpdb','testperfdb') order by tb " -Ns > ${wd}/log/table_list
	else 
		
		sqlResult="$(${gccli_command} -h$1 -e 'use ${dbname}' 2>&1)"
		sqlResultLen="${#sqlResult}"
		if [ "${sqlResultLen}" -ne 0 ]; then
			echo " * ${sqlResult} * "
			exit 1
		else
			$gccli_command -h$1 -Ns -e "select ${tbstr} as tb from gbase.table_distribution where dbname = ${dbName} order tb " -Ns > ${wd}/log/table_list
		fi
	fi
}

#比对主备表数据量
count_table()
{
	current_time=`date +%F`
	
	rm -rf ${wd}/log/tmp
	mkdir -p ${wd}/log/tmp
	
	fifofile=$$.fifo
	mkfifo ${fifofile}
	exec 7<>${fifofile}
	rm -f ${fifofile}
	
	for((i=0;i<${parallel};i++)){
		echo >&7
	}
	
	while read line
	do
		read -u7
		{
			#$gccli_command -h$1 -Ns -e "select count(1) from ${line}" > ${wd}/log/tmp/${line}_$1.log 2>&1
			cnt_master=`$gccli_command -h$1 -Ns -e "select count(1) from ${line}" 2>&1`
			cnts_slave=`$gccli_command -h$2 -Ns -e "select count(1) from ${line}" 2>&1`
			if [ $? -gt 0 ];then
				cnts_slave=''
			fi
			echo ${line} $cnt_master $cnts_slave > ${wd}/log/tmp/${line}.log
			echo >&7
		}&
	done < ${wd}/log/table_list
	wait
	exec 7>&-

	cat ${wd}/log/tmp/*.log > ${wd}/log/table_count.txt
	cp ${wd}/log/table_count.txt ${wd}/log/table_count_${current_time}.log
	cat ${wd}/log/table_count_${current_time}.log | awk '{if($2 != $3){print $1,$2,$3}}' > ${wd}/log/table_diff_${current_time}.log
	
	rm -rf ${wd}/log/tmp/
	rm -rf ${wd}/log/table_count.txt
}


#校验密码有效性
check_password()
{
	userPasswdLen="${#userPasswd}"
	sqlResult=""
	sqlResultLen="" 
	
	if [ "${userPasswdLen}" -eq 0 ];then 
		sqlResult="null password"
		echo " * You didn't enter the password for DB user! * "
		exit 1
	else 
		sqlResult="$(${gccli_command} -u${userName} -p${userPasswd} -h$1 -e quit 2>&1)"
	fi
	
	sqlResultLen="${#sqlResult}"
	if [ "${sqlResultLen}" -ne 0 ]; then
		echo " * The password (${userPasswd}) is incorrect for ${userName} in $1}, the GBase 8a cannot be connected! * "
		exit 1
	fi 
}

#校验命令是否有效
isCmdExist() {
	local cmd="$1"
  	if [ -z "$cmd" ]; then
		echo "Usage isCmdExist yourCmd"
		return 1
	fi

	which "$cmd" >/dev/null 2>&1
	if [ $? -eq 0 ]; then
		return 0
	fi

	return 2
}


main()
{
	config
	check_tables
}

main $@

 

评论

登录后才可以发表评论