Skip to content

pika_port 同步 pika 3.0 数据到 todis

rockeet edited this page Jun 8, 2023 · 1 revision

执行 pika_port 主机磁盘空间要够大,会 copy source 的一份数据


本文目的是使用 pika_port 完成数据导入 todis, 通过 pika_port 完成主从同步。 测试环境为 centos7.3。

如需自己启动一个 pika3.0.16 版本,参照 测试环境启动 pika3.0.16 服务

1、硬件需求

涉及到 4 台主机

  • pika_port:执行 pika_port 具体操作主机
  • source: 导出数据的 pika 所在主机
  • dest: 导入数据的 todis 所在主机
  • dcompact: 导入数据的 todis 使用的 dcompact

2、获取 pika_port

2.1 下载编译好的二进制程序(centos7)

我们为 centos7 预编译了 pika_port,您可以直接下载使用:

yum install glog rsync gflags -y

wget https://todis-tar-and-tools.oss-cn-qingdao.aliyuncs.com/tools/pika_port.gz
gzip -d pika_port.gz
chmod +x pika_port

2.2 自己编译操作

如果你的主机有任何执行问题,可能是不兼容,请参照以下步骤自行编译(参考文档)。

yum install -y git gcc-c++ libstdc++-devel glog-devel
git clone https://github.com/Axlgrep/pika-tools.git
cd ./pika-tools/pika-port/
sh build3.sh

3、启动一台 todis 服务

具体操作参考 https://github.com/topling/todis/wiki/todis-on-centos7

4、pika-port 导入数据用法

pika-port 输出以下内容表示已基本完成磁盘 sst 数据同步。

I0531 18:13:45.426935 10317 binlog_receiver_thread.cc:41] Master Binlog Sender: 10.0.14.205 connecting
I0531 18:13:45.426977 10317 pika_port.cc:212] Start Sync...
I0531 18:13:45.427027 10317 master_conn.cc:258] BinlogReceiverThread AccessHandle succeeded, My server id: 2, Master auth server id: 2

pika_port 进行增量同步是持续性的,不会断的,这个时候可以在源库上使用 info replication 查看slave 的 lag 来确定延迟。

127.0.0.1:6379> info replication
# Replication(MASTER)
role:master
connected_slaves:1
slave0:ip=10.0.14.182,port=9223,state=online,sid=4,lag=115871612

pika_port 参数

# /root/pika_port -h
Usage: 
        Pika_port_3 reads data from pika 3.0 and send to redis or pika
        -h     -- show this help
        -t     -- local host ip(OPTIONAL default: 127.0.0.1)
        -p     -- local port(OPTIONAL)
        -i     -- master ip(OPTIONAL default: 127.0.0.1)
        -o     -- master port(REQUIRED)
        -m     -- forward ip(OPTIONAL default: 127.0.0.1)
        -n     -- forward port(REQUIRED)
        -x     -- forward thread num(OPTIONAL default: 1)
        -y     -- forward password(OPTIONAL)
        -z     -- max timeout duration for waiting pika master bgsave data (OPTIONAL default 1800s)
        -f     -- binlog filenum(OPTIONAL default: local offset)
        -s     -- binlog offset(OPTIONAL default: local offset)
        -w     -- password for master(OPTIONAL)
        -r     -- rsync dump data path(OPTIONAL default: ./rsync_dump)
        -l     -- local log path(OPTIONAL default: ./log)
        -b     -- max batch number when port rsync dump data (OPTIONAL default: 512)
        -d     -- daemonize(OPTIONAL)
        -e     -- exit(return -1) if dbsync start(OPTIONAL)
        example: ./pika_port -t 127.0.0.1 -p 12345 -i 127.0.0.1 -o 9221 -m 127.0.0.1 -n 6379 -x 7 -f 0 -s 0 -w abc -l ./log -r ./rsync_dump -b 512 -d -e

同步 source 到 dest

这里写入 shell 方便修改记录参数; 如果是大量数据请自行修改参数 -r-l 用于修改存储数据的文件夹位置。

[root@todis-client ~]# vim source_to_todis.sh 
#!/bin/bash

pika_port_bin=/root/pika_port
pika_port_ip=10.0.14.195
pika_port_port=9223
source_ip=10.0.14.192
source_port=6379
source_pass=5a7a417f57f24492a9b1773353d34284
dest_ip=10.0.14.194
dest_port=6379

rm rsync_dump/ log/ -rf

${pika_port_bin} -t ${pika_port_ip} -p ${pika_port_port} -i ${source_ip} -o ${source_port} -m ${dest_ip} -n ${dest_port} -f 0 -s 0 -w ${source_pass}
sh source_to_todis.sh

参考:pika_port 官方文档