针对双向复制的tt数据进行碎片整理,有两个方式:
ttmigrate和ttrepadmin -duplicate
本文主要讲第二种使用克隆的方式进行碎片整理,前提是源库已经做过碎片整理了。
环境说明:
两台本地虚机,系统centos7.6,tt版本11.2.2.8.0:
复制器:
tt两个库都已经创建好用户ocs,密码ocs。
tt状态:
步骤:
tt备机碎片整理步骤
1、业务切换到主机(通过集群操作) root(如果本来就在主机则跳过此步)
Switch business to standby (through cluster operation)
确保切换成功
cli
service-migrate
check list :
检查清单
a、备机(root、tt、ocs用户下的crontab都检查下)
检查tt相关crontab,如果有停止掉,主要是避免连接。
业务确认。
b、备机
检查tt删除数据脚本,不能在备机运行。有可能是zmc清理,也有可能是crontab清理,需要确认如果是zmc清理,那么确认zmc是否是连的tt的浮动ip,如果是可以无需处理,否则需要停掉;如果是crontab清理,确保备机的定时任务不会运行。
业务确认。
c、备机
停备机的ocs进程,因为ocs进程会有连接连到tt,导致无法卸载tt内存。
业务确认。
d、备机
停备机的网管,确保网管不会连接备机的tt。
业务确认。
e、主机
停掉备机的复制器后,tt同步日志会在主节点积压,需要观察文件系统使用增长率,估算是否满足操作时间;
“get_ttlogfile_increase.sh”可以获取最近一个小时内的TT事务日志文件增长大小。
#!/usr/bin/bash
cd /gfs01/tt/tmp/
echo "
set serveroutput on
spool awk_ttckpthistory.log
call ttckpthistory;
spool off
"|ttisql ocs;
ckptbytes=`awk -F"," '{a+=$16}END{print a}' awk_ttckpthistory.log`
maxtime=`awk -F"," '{ gsub(/<|>|-|:| |Command/,""); print $0 }' awk_ttckpthistory.log | awk -F"," '{if($4 != null ) print $0}' | awk -F"," '{y1= substr($1,1,4); m1=substr($1,5,2); d1=substr($1,7,2);h1=substr($1,9,2);M1=substr($1,11,2);s1=substr($1,13,2); time1 = strftime("%s",mktime(y1" "m1" "d1" "h1" "M1" "s1));{print time1}}'|head -n 1`
mintime=`awk -F"," '{ gsub(/<|>|-|:| |Command/,""); print $0 }' awk_ttckpthistory.log | awk -F"," '{if($4 != null ) print $0}' | awk -F"," '{y1= substr($1,1,4); m1=substr($1,5,2); d1=substr($1,7,2);h1=substr($1,9,2);M1=substr($1,11,2);s1=substr($1,13,2); time1 = strftime("%s",mktime(y1" "m1" "d1" "h1" "M1" "s1));{print time1}}'|tail -n 1`
difresult=$(($maxtime-$mintime))
sumbytes=$(($ckptbytes/$difresult*3600/1024/1024))
echo "Transaction logfile increase is:"$sumbytes" MB"
2、查看状态 主备机 tt
Check the main ocs server TT database status
$ ttstatus
3、停tt服务,主要是为了确保tt当前的连接都被断开。
$ttdaemonadmin -stopserver
4、调用过程确保更改都被写入两个数据库,在备机上操作。tt用户(哪个库需要被碎片整理就在哪个库上执行)
此处是gfs02主机上的tt需要被碎片整理,所以就在gfs02上执行。
>call ttRepSubscriberWait(NULL,NULL,'ocs','gfs01', 100);
参数1:需要操作的复制器的名称,为空表示所有的复制器。
参数2:需要操作的复制器的所有者,为空表示所有复制器的所有者。
参数3:订阅数据库的DS名称,为空表示订阅主机的所有DS。
参数4:订阅数据库的主机名,为空表示所有的订阅数据库的主机。
参数5:等待时间,单位秒。-1表示永久等待。就是等待订阅数据库同步完成的时间。
5、停复制器,只能停备机的复制器,主机的复制器必须要保证是起着的,这样后面的duplicate操作才能进行。(tt用户)
stop the main ocs server replicator .
$ttadmin -reppolicy manual ocs
$ttadmin -repstop ocs
6、卸载内存(备机tt)
unload the tt database memory
$ttadmin -ramPolicy manual ocs
$ttadmin -ramUnload ocs
7、备机上destroy数据库
$ttdestroy ocs
8、通过主机上的ocs克隆到备机(备机上执行)
ttRepAdmin -duplicate -from ocs -host gfs01 -UID ocs -PWD ocs -setMasterRepStart ocs
-setMasterRepStart 在数据从源端到目标端传送的时候,保证不会丢失更新。
9、启动复制器(备机 tt)
start replicator and modify the replication policy
$ttadmin -repstart ocs
$ttadmin -reppolicy always ocs
10、内存加载策略(备机 tt)
Modify memory loading policy
$ttadmin -ramPolicy always ocs
11、起tt服务
ttdaemonadmin -startserver
12、检查表数据一致性,验证用户、权限、数据一致性
Check for table data consistency
13、验证tt同步情况
启动复制器后,需要验证tt的同步情况,必须数据同步后才能切机;
Command> call ttlogholds;
ttstatus;
14、手工checkpoint
操作完成后需要手工调整checkpoint,错开checkpoint时间点,错开IO,避免IO争用,如果是本地SSD,可以不用做这个操作;
15、操作完成后恢复crontab,考虑job是否补跑,启动网管等;
业务确认。