针对双向复制的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/bashcd /gfs01/tt/tmp/echo "
set serveroutput on
spool awk_ttckpthistory.log
call ttckpthistory;
spool off
"|ttisql ocs;ckptbytes&#61;&#96;awk -F"," &#39;{a&#43;&#61;$16}END{print a}&#39; awk_ttckpthistory.log&#96;maxtime&#61;&#96;awk -F"," &#39;{ gsub(/<|>|-|:| |Command/,""); print $0 }&#39; awk_ttckpthistory.log | awk -F"," &#39;{if($4 !&#61; null ) print $0}&#39; | awk -F"," &#39;{y1&#61; substr($1,1,4); m1&#61;substr($1,5,2); d1&#61;substr($1,7,2);h1&#61;substr($1,9,2);M1&#61;substr($1,11,2);s1&#61;substr($1,13,2); time1 &#61; strftime("%s",mktime(y1" "m1" "d1" "h1" "M1" "s1));{print time1}}&#39;|head -n 1&#96;
mintime&#61;&#96;awk -F"," &#39;{ gsub(/<|>|-|:| |Command/,""); print $0 }&#39; awk_ttckpthistory.log | awk -F"," &#39;{if($4 !&#61; null ) print $0}&#39; | awk -F"," &#39;{y1&#61; substr($1,1,4); m1&#61;substr($1,5,2); d1&#61;substr($1,7,2);h1&#61;substr($1,9,2);M1&#61;substr($1,11,2);s1&#61;substr($1,13,2); time1 &#61; strftime("%s",mktime(y1" "m1" "d1" "h1" "M1" "s1));{print time1}}&#39;|tail -n 1&#96;difresult&#61;$(($maxtime-$mintime))sumbytes&#61;$(($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服务&#xff0c;主要是为了确保tt当前的连接都被断开。
$ttdaemonadmin -stopserver
4、调用过程确保更改都被写入两个数据库&#xff0c;在备机上操作。tt用户&#xff08;哪个库需要被碎片整理就在哪个库上执行&#xff09;
此处是gfs02主机上的tt需要被碎片整理&#xff0c;所以就在gfs02上执行。
>call ttRepSubscriberWait(NULL,NULL,&#39;ocs&#39;,&#39;gfs01&#39;, 100);
参数1&#xff1a;需要操作的复制器的名称&#xff0c;为空表示所有的复制器。
参数2&#xff1a;需要操作的复制器的所有者&#xff0c;为空表示所有复制器的所有者。
参数3&#xff1a;订阅数据库的DS名称&#xff0c;为空表示订阅主机的所有DS。
参数4&#xff1a;订阅数据库的主机名&#xff0c;为空表示所有的订阅数据库的主机。
参数5&#xff1a;等待时间&#xff0c;单位秒。-1表示永久等待。就是等待订阅数据库同步完成的时间。
5、停复制器&#xff0c;只能停备机的复制器&#xff0c;主机的复制器必须要保证是起着的&#xff0c;这样后面的duplicate操作才能进行。&#xff08;tt用户&#xff09;
stop the main ocs server replicator .
$ttadmin -reppolicy manual ocs
$ttadmin -repstop ocs
6、卸载内存&#xff08;备机tt&#xff09;
unload the tt database memory
$ttadmin -ramPolicy manual ocs
$ttadmin -ramUnload ocs
7、备机上destroy数据库
$ttdestroy ocs
8、通过主机上的ocs克隆到备机&#xff08;备机上执行&#xff09;
ttRepAdmin -duplicate -from ocs -host gfs01 -UID ocs -PWD ocs -setMasterRepStart ocs
-setMasterRepStart 在数据从源端到目标端传送的时候&#xff0c;保证不会丢失更新。
9、启动复制器&#xff08;备机 tt&#xff09;
start replicator and modify the replication policy
$ttadmin -repstart ocs
$ttadmin -reppolicy always ocs
10、内存加载策略&#xff08;备机 tt&#xff09;
Modify memory loading policy
$ttadmin -ramPolicy always ocs
11、起tt服务
ttdaemonadmin -startserver
12、检查表数据一致性&#xff0c;验证用户、权限、数据一致性
Check for table data consistency
13、验证tt同步情况
启动复制器后&#xff0c;需要验证tt的同步情况&#xff0c;必须数据同步后才能切机&#xff1b;
Command> call ttlogholds;
ttstatus;
14、手工checkpoint
操作完成后需要手工调整checkpoint&#xff0c;错开checkpoint时间点&#xff0c;错开IO&#xff0c;避免IO争用&#xff0c;如果是本地SSD&#xff0c;可以不用做这个操作&#xff1b;
15、操作完成后恢复crontab&#xff0c;考虑job是否补跑&#xff0c;启动网管等&#xff1b;
业务确认。