安装和配置GVR工具步骤
安装说明:
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_addibind1.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]$ gcadmin1.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_addibind2.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]$ gcadmin2.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 /opt3.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.xml3.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 grep3.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_addibind4.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 grep4.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 $@
评论
热门帖子
- 12023-05-09浏览数:20656
- 22023-09-25浏览数:13720
- 32020-05-11浏览数:13461
- 42019-04-26浏览数:12803
- 52023-07-04浏览数:12157