kvrocks01 - kvrocks2redis迁移工具

1.前言

1.只支持单机kvrocks到单机redis的迁移

2.单机redis需要支持flushdb命令,若rename-command更改flushdb名称,需要更改回来
3.支持两个kvrocks中两个namespace间数据同步,数据可续传

4.kvrocks2redis工具要和kvrocks在同机器上,且同步过程中会产生大的aof文件,适用于小体量的同步迁移
5.如果想kvrocks到kvrocks同步,可以通过创建主从的方式,从节点支持设置slave-read-only no实现从可写操作,从而实现实时同步

2.编译 

1.git clone https://github.com/KvrocksLabs/kvrocks
  cd incubator-kvrocks
  git checkout v2.1.0
2.将下边的Dockerfile文件替换,即可编译,编译时间较久,需要的文件提前下载
# 容器中执行编译即可
# ./x.py  build --ghproxy -DENABLE_STATIC_LIBSTDCXX=OFF

'若编译kvrocks需要二进制文件更小,可以添加-DCMAKE_BUILD_TYPE=Release参数编译'

FROM centos:7

ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

WORKDIR /kvrocks

COPY . .
RUN yum install -y git make autoconf automake libtool python3 which
RUN yum -y install centos-release-scl \
    && yum -y install devtoolset-11-gcc devtoolset-11-gcc-c++ devtoolset-11-binutils \
    && echo "source /opt/rh/devtoolset-11/enable" >> ~/.bashrc
RUN mv cmake-3.17.1-Linux-x86_64.tar.gz /opt/  \
    && cd /opt && tar -zxvf cmake-3.17.1-Linux-x86_64.tar.gz \
    && ln -sf /opt/cmake-3.17.1-Linux-x86_64/bin/* /usr/bin/

3.迁移工具kvrocks2redis

'前提:'
1.redis需要支持flushdb命令
2.支持两个kvrocks中两个namespace间数据同步,数据可续传,缺点aof文件无限增长
3.备份数据可通过创建主从方式,从节点支持设置slave-read-only no可实现从可写操作


kvrocks2redis将首先尝试连接到kvrock实例以进行增量同步。
如果连接或增量同步失败,kvrocks2redis将把配置的数据目录中的完整Kvrocks数据解析到AOF文件。
如果可以进行增量同步,kvrocks2redis会将增量数据解析到AOF文件。另一个线程(名为redis writer)持续读取AOF并将AOF的内容发送给redis。

程序运行时,将生成以下文件:
xxx_appendonly.aof:解析后的数据将保存在此文件中。
xxx_last_next_offset.txt:表示redis编写器线程读取的AOF文件的位置。
last_next_seq.txt:表示kvrocks2redis解析的序列号,用于记录同步位置并检查是否可以执行增量同步。


'配置文件:'
################################ GENERAL #####################################

# The value should be INFO, WARNING, ERROR, FATAL.
#
# Default is INFO
loglevel INFO

# By default kvrocks2redis does not run as a daemon. Use 'yes' if you need it.
# Note that kvrocks2redis will write a pid file in /var/run/kvrocks2redis.pid when daemonized.
daemonize no

# The kvrocks working directory.
# Note that you must specify a directory here, not a file name.
data-dir /var/lib/kvrocks/db/

# Intermediate files are output to this directory when the kvrocks2redis program runs.
output-dir ./log/

# Sync kvrocks node. Use the node's Psync command to get the newest wal raw write_batch.
#
# kvrocks <kvrocks_ip> <kvrocks_port> [<kvrocks_auth>]
kvrocks 127.0.0.1 6668 zcx-test-kvrocks

# Enable cluster mode.
#
# Default: yes
cluster-enable no

################################ NAMESPACE AND Sync Target Redis #####################################
# Synchronize the specified namespace data to the specified Redis DB.
# Warning: It will flush the target redis DB data.
#
# namespace.{namespace} <redis_ip> <redis_port> [<redis_auth> <redis_db_number>]
# Default redis_db_number is 0
namespace.test01 10.xxx.xx.15 9989 zcx123zzz 0
namespace.test02 10.xxx.xx.15 9989 zcx123zzz 1

'启动命令'
kvrocks2redis -c kvrocks2redis.conf

4.kvrocks镜像(附加)

ubuntu 系统输入命令:sudo apt-get install vim-gtk
centos 系统输入命令:yum -y install vim*

'Dockerfile'
FROM kvrocks/kvrocks:latest

RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y vim-gtk
WORKDIR /kvrocks/
COPY kvrocks.conf kvrocks2redis.conf /tmp/
COPY kvrocks2redis redis-benchmark redis-cli  kvrocks-entrypoint.sh /usr/local/bin/
RUN mkdir -p kvrocks2redis store && chmod +x /usr/local/bin/kvrocks-entrypoint.sh
ENTRYPOINT ["kvrocks-entrypoint.sh"]


'kvrocks-entrypoint.sh'
#!/bin/bash
set -e
if [ ! -f "/kvrocks/conf/confexist" ];then

touch /kvrocks/conf/confexist

eval "cat <<EOF
 $(< /tmp/kvrocks.conf)
EOF
 "  > /kvrocks/conf/kvrocks.conf

eval " cat <<EOF
 $(< /tmp/kvrocks2redis.conf)
EOF
 "  > /kvrocks/kvrocks2redis/kvrocks2redis.conf

fi
exec /kvrocks/bin/kvrocks -c /kvrocks/conf/kvrocks.conf
exit 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值