Aliyun Code

首页  >   chuyu / tfs

项目语言:c

创建者:chuyu 创建时间:2012年04月22日

工具使用说明

目前同步相关工具共有五个,四个同步工具和一个crc比较工具。工具具体说明如下:

transfer_block

描述
迁移块工具,以block为单位,直接向源集群dataserver读index文件和data文件,并写入到目标集群的dataserver中。若目标集群已经存在block,工具会自动删除该block后再迁移。一般用于将源集群迁移至一个新集群,该工具可以快速将大量数据迁移至新新集群。
用法
Usage:./transfer_block –s src_addr –n dest_addr –f dest_ds_list –b block_list [-w traffic_threshold] [-t thread count] [-l log_file] [-p pid_file] [-d] [-h]
参数说明: -s:源集群ns_addr
-n:目标集群ns_addr
-f:目标集群ds列表文件。指定一个本地文件名(自己创建的)作为列表文件,先选择目标集群的一部分ds,然后将这部分ds的ip:port写入该本地文件中。列表文件中一个ip:port为一行数据,注意需要带port。数据将迁到目标集群的这部分ds上,再由目标集群做数据的复制均衡

-b:源集群迁移的block列表文件。指定一个本地文件名(自己创建的)作为block列表文件,把要迁移的block写入该本地文件中,格式为一个block_id为一行数据。
-w:读流量阈值,一次读数据的size,默认为1024。
-t:线程数,默认为1。
-l:日志文件名,默认为tranblk.log
-p:pid文件名,默认为tranblk.pid
-d:设为守护进程
-h:打印help信息
其它:
当集群容量较大时,transfer_block通常分到目标集群的ds上,再用split_block_tool工具将block分为几份,分别在这些ds上运行。
另外,transfer_block以后一般使用compare_crc工具校验。

sync_by_blk

描述
同步块数据工具,以文件为单位,将block中的文件列表拉出来,再调用客户端读写接口完成同步。每次同步前都需要比较两个集群的文件状态再做处理。
用法
Usage: ./sync_by_blk –s src_addr –d dest_addr –f block_list [-t thread_count][ -e] [-u] [-g log_file] [-l log_level] [-h]
参数说明
-s:源集群ns_addr
-n:目标集群ns_addr
-f:源集群要同步的block列表文件。指定一个本地文件名(自己创建的)作为block列表文件,把要同步的block的blockid写入该本地文件中,格式为一个block_id为一行数据。
-e:强一致,crc不同的文件也会同步过去。否则默认crc不同文件的文件只打印warn信息。
-u:删除源集群上没有而目标集群上有的文件
-t:线程数,默认为1。
-g:日志文件名,默认为logs/sync_report.log
-l:日志级别,可设debug/info/warn/error
-h:打印help信息

sync_by_log

描述
基于ds日志同步某天处理的文件,以文件为单位,将某天日志文件中的写与删日志提取出来,并同步日志中涉及的文件,调用客户端读写接口实现同步。每次同步前都需要比较两个集群的文件状态再做处理。
用法
Usage: ./sync_by_log –s src_addr –d dest_addr –f ds_log [-t thread_count][ -e] [-u] [-g log_file] [-l log_level] [-h]
参数说明
-s:源集群ns_addr
-n:目标集群ns_addr
-f:源集群dataserver的部分日志文件。scripts下面有提取日志的脚本sync,专门提取dataserver的写与删日志。
-e:强一致,crc不同的文件也会同步过去。否则默认crc不同文件的文件只打印warn信息。
-u:删除源集群上没有而目标集群上有的文件
-t:线程数,默认为1。
-g:日志文件名,默认为logs/sync_report.log
-l:日志级别,可设debug/info/warn/error
-h:打印help信息
其它:
一般配合scripts下的start_sync_log, sync使用
start_sync_log是分发脚本,它将sync和sync_by_log拷贝至ds的logs目录下,并启动sync脚本。在真正使用时直接启动这个脚本即可。
sync则提取某天日志后,启动sync_by_log
启动脚本方法为
./start_sync_log source_ns_ip dest_ns_ip log_path [sync day] [force_flag] [modify_time] [thread_count]"
source_ns_ip: source_ns_addr
dest_ns_ip:dest_ns_addr[[BR]] log_path:ds log path
sync day: the day of log to be synced, ex, 20120406, default is yesterday
force flag: yes or no, need strong consistency, default is no
modify time: modify time, change after modify time will be ignored
thread count: thread count, default is 2

sync_by_file

描述
基于ds日志同步某天处理的文件,以文件为单位,将某天日志文件中的写与删日志提取出来,并同步日志中涉及的文件,调用客户端读写接口实现同步。每次同步前都需要比较两个集群的文件状态再做处理。
用法
Usage: ./sync_by_file –s src_addr –d dest_addr –f file_list [-t thread_count][ -e] [-u] [-g log_file] [-l log_level] [-h]
参数说明
-s:源集群ns_addr
-n:目标集群ns_addr
-f:文件名列表,指定一个本地文件名(自己创建的)作为文件名列表文件,把要同步的文件的文件名写入该本地文件中,格式为一个文件名一行。
-e:强一致,crc不同的文件也会同步过去。否则默认crc不同文件的文件只打印warn信息。
-u:删除源集群上没有而目标集群上有的文件
-t:线程数,默认为1。
-g:日志文件名,默认为logs/sync_report.log
-l:日志级别,可设debug/info/warn/error
-h:打印help信息

compare_crc

描述
比较block列表或者file列表中的文件crc ,基于文件。生成4个结果文件,分别为succ_file(crc相同),fail_file(crc不同),error_file(源文件不存在),unsync_file(目标集群中不存在的文件)
用法
Usage:
./compare_crc -o old_ns_ip:port -n new_ns_ip:port -f file_list -m modify_time -t thread_count [-h]
./compare_crc -o old_ns_ip:port -n new_ns_ip:port -b block_list -m modify_time -t thread_count [-h]
参数说明
-o:源集群ns_addr
-n:目标集群ns_addr
-f:文件名列表,指定一个本地文件名(自己创建的)作为文件名列表文件,把要比较的文件的文件名写入该本地文件中,格式为一个文件名一行。
-b:要比较的block列表文件。指定一个本地文件名(自己创建的)作为block列表文件,把要比较的block的blockid写入该本地文件中,格式为一个block_id为一行数据。
-m:文件的modify_time在传入的modify_time之后的忽略。
-t:线程数,默认为1。
-h:打印help信息

常见同步工具用法

迁移到一个新的集群

  1. 选择目标集群部分ds做为迁移的种子机器,拉取源集群的block列表,使用transfer_block工具将block迁移到目标集群。<br/>
  2. 使用comparc_crc工具比较迁移的block,看是否迁移成功,保存未迁移成功的文件列表。
  3. 使用sync_by_file工具同步未迁移成功的文件。
  4. 使用sync_by_log迁移从第一步起那天至迁移完成中间的增量数据,若数据量较小,当天就可以迁完的,则可以跳过这步。
  5. 切换至新集群
  6. 使用sync_by_blk工具全量同步一把,注意modify_time传入切换当天的时间。
  7. 最后可以拿compare_crc工具再比较一次,同步未成功的数据。注意modify_time传入切换当天的时间。

现有集群同步

  1. 主副集群出现不一致的情况,使用sync_by_blk工具迁移。