前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何迁移SSDB数据到Tendis解决方案

如何迁移SSDB数据到Tendis解决方案

原创
作者头像
温球良
发布2020-09-29 20:44:00
2.7K2
发布2020-09-29 20:44:00
举报
文章被收录于专栏:腾讯云游戏解决方案团队

1.前言

SSDB是一个高性能的KV存储数据库,个人开发作品,已开源。凭借其兼容redis协议、支持数据硬盘存储、简单易用等特性在业界有一定知名度。SSDB主要解决场景是Redis的存储问题,底层基于LevelDB作存储,可以大幅降低数据存储成本,具体产品介绍可查看其官网介绍。

Tendis是腾讯云推出一款Redis混合存储版产品,100%兼容原生的redis cluster协议,满足海量数据低成本存储同时兼顾Redis使用习惯。对于大部分中小客户来说,redis使用很频繁,同时缓存数据量也与日俱增,面临的数据成本也在不断增加。Tendis的推出正是为解决此类客户痛点的产品。具体产品介绍可以参考官网文档

SSDB与Tendis的主要区别如下:

对比项

Tendis

SSDB

产品类型

云服务

开源

产品团队

腾讯云数据库产品专家团队

个人

产品迭代

业务方无需关注

个人精力有限,问题无法及时解决,需要业务方熟悉源码

redis兼容

redis-cluster协议兼容

redis协议兼容

存储类型

基于RocksDB打造

基于LevelDB打造

大数据量存储

PB级别,性能稳定

GB级别,当主从单实例数据规格达到100+GB时性能下降严重

存储层对性能损耗

小,架构决定,缓存层(redis)和存储层(rocksdb)分离,业务直接与缓存层交互

大,业务直接与LevelDB交互,存储层的一些机制如Compaction等对资源消耗比较严重,会阻塞业务读写,其它像数据同步及备份等也对结点影响比较大

上面只列举了部分对比项,实际在测试ssdb过程中发现最大的问题是有很多地方实现不太严谨,一旦数据量比较大后,对业务影响比较大,如LevelDB层的Compaction、内存OOM问题等是社区常见的问题 。需要业务方对SSDB源码很熟悉并作相应的改造才能满足一定的业务需求,这就对业务方提出更高要求,无法更好聚焦业务本身。这也是为何要设计SSDB数据迁移方案的原因。

2. 迁移说明

SSDB是基于LevelDB开发的一个兼容Redis协议的KV存储产品,产品架构模型和Redis标准单实例一样,即支持单主,也支持主从同步架构。Tendis属于集群模式,类似Redis Cluster架构。单实例版Redis和集群版Redis有些方面还是有区别的,如原来所有Key都分布在单master实例上,现在slot被分拆到集群中的多个节点实例,key被进一步打散,像原来的一些涉及事务及管道这块的逻辑可能会受一些影响。如果业务侧涉及事务和管道的代码逻辑比较多的话,需要考虑怎么适配到集群版实例上,这里涉及具体业务具体分析,暂不在本文展开介绍。其它一些非标准版redis支持命令,如keys和scan,在集群版上实现逻辑也是和单实例版不一样的,也需要特殊对待。

3.迁移准备

3.1 迁移工具

在迁移过程中,会依赖第三方开源同步工具ssdb-port。在开源工具基础上作了一些源码改造,以适配大Key及亿级别Key的同步效率,内部改造版下载地址Siphon-V2。 工具说明:

  • 基于Golang开发,本持原理是伪造成SSDB的Slave进行数据订阅并同步到其它平台
  • 工具启动时会自动连接到SSDB server, 然后进行key寻址,从起始位置开始同步,直至存量的数据全部同步完成后再同步增量数据,即工具启动后会建立一个长连接通道保持运行
  • 改造后的工具解决了原生版本存在同步效率低下问题,尤其是大Key同步,像hash数据和zset这类数据,大概提升12倍的同步效率

3.2 Redis工具

用于连接登录Tendis实例,目前兼容Redis-4.x版本的协议。直接从官网下载redis源码包进行编译即可,参考官方编译安装教程。

3.2 环境准备

3.2.1 腾讯云账号

验证迁移方案依赖于腾讯云环境,需要提前申请一个腾讯云账号,用于申请相关腾讯云资源。账号申请方式请参考腾讯云官网教程

3.2.2 腾讯云CVM环境申请

迁移方案需要安装SSDB环境及相关迁移工具,需要申请一台CVM资源,作为数据源验证使用,规格: 2C4G, Centos 7.X或CentOS 8.X。

3.2.3 申请一个tendis实例

迁移方案需要依赖Tendis作为目的数据源,申请一个最低配规格Tendis实例(4分片/64GB内存/200GB磁盘),按流量计费。目前Tendis部署地域在北上广、香港。

3.2.4 redis安装

测试连接tendis实例依赖原生redis-cli, 需要下载redis源码包进行编译或直接下载redis-cli即可。目前Tendis兼容的Redis版本是: 4.x

3.2.5 SSDB安装

官网下载源码包,版本:1.9.8, 下载地址。下载完后将源码包ssdb-master.zip上传至CVM机器,解压编译安装。如下所示:

代码语言:txt
复制
unzip ssdb-master.zip
cd ssdb-master
make
make install
#默认安装在/usr/local/ssdb目录
cd /usr/local/ssdb
#启动ssdb-server
./ssdb-server -d ./ssdb.conf -s start

#进入ssdb命令行
./ssdb-cli

SSDB-Server配置文件内容如下:

代码语言:txt
复制
work_dir = ./var
pidfile = ./var/ssdb.pid
server:
	ip: 127.0.0.1
    #默认启动8888端口
	port: 8888
replication:
	binlog: yes
	sync_speed: -1
	slaveof:
logger:
	level: debug
	output: log.txt
	rotate:
		size: 1000000000
leveldb:
	cache_size: 500
	write_buffer_size: 64
	compaction_speed: 1000
	compression: yes

从上面步骤来看,SSDB编译启动方式和redis类似,上手简单。关于配置参数的设置,可以参考SSDB官网关于这块的说明,上面用的是默认参数。

3.2.5 迁移工具安装

下载迁移工具iphon-v2。把工具拷贝到CVM机器对应目录。工具使用方式如下:

代码语言:txt
复制
Usage:
	siphon sync [--pprof=0.0.0.0:6060] [--ncpu=N]  [--parallel=M]   --from=MASTER    --target=TARGET [--frompassword=MASTERPASSWORD] [--targetpassword=SLAVEPASSWORD] [--hashlen=len] [--dry=isdry]

Options:
	--pprof								Set pprof addr and port,like 0.0.0.0:6060 .
	-p M, --parallel=M                	Set the number of parallel, connection to redis. default is 10.
	-f MASTER, --from=MASTER          	Set host:port of master .
	-t TARGET, --target=TARGET        	Set host:port of target .
	-F MASTERPASSWORD, --frompassword	Set password of master .
	-T SLAVEPASSWORD, --targetpassword	Set password of target .
    -H LEN, --hashlen=len               Set Hash field append length .
    -d isdry, --dry=isdry               Just read from ssdb, not write target.

和原生的比,多了两个参数: -H-d

  • -H: 用于解决hash数据过大传效率问题, ssdb只支持hset命令不支持hmset命令,tendis支持hmset命令,此参数主要控制多少个hset聚合成一个hmset,如果ssdb中hash的field很多,通过这种聚合控制有利于提升数据传输效率,避免一次传输过多的hash field。
  • -d: 主要用于调试不写到目的端。

具体使用siphon-v2的命令如下:

代码语言:txt
复制
#-p:并发线程数控制,-f:指定ssdb-server地址,-t:指定目的端tendis地址, -T:指定tendis实例密码
./siphon_v2  sync  -p 1 -f 127.0.0.1:8888 -t 172.16.16.47:6379 -T tendis@pwd

4. 迁移测试

4.1 SSDB数据模拟

登录ssdb-server, 用命令先写几条数据。如下所示:

代码语言:txt
复制
[root@VM-16-44-centos]# cd /usr/local/ssdb
[root@VM-16-44-centos ssdb]# ./ssdb-cli
ssdb (cli) - ssdb command line tool.
Copyright (c) 2012-2016 ssdb.io

'h' or 'help' for help, 'q' to quit.

ssdb-server 1.9.8

ssdb 127.0.0.1:8888> hset myhash k1 v1
ok
(0.000 sec)
ssdb 127.0.0.1:8888> hset myhash k2 v2
ok
(0.000 sec)
ssdb 127.0.0.1:8888> hset myhash k3 v3
ok
(0.000 sec)

4.2 启动迁移工具

新开启一个新的终端登录CVM, 并执行如下命令启动迁移工具。

代码语言:txt
复制
./siphon_v2  sync  -p 1 -f 127.0.0.1:8888 -t 172.16.16.47:6379 -T tendis@pwd

启动后,可以看到一些控制台输出,如下所示:

siphon_start.png
siphon_start.png

图中红框部分标识的是全量数据同步过程:

  • Copy Start: 表示开始启动全量数据同步
  • Copy Stop: 表示全量数据同步结束

4.3 Tendis数据查看

再开启一个新的终端登录CVM,登录Tendis实例查看刚全量数据同步结果。

代码语言:txt
复制
[root@VM-16-44-centos ~]# redis-cli -h 172.16.16.47 -p 6379 -a tendis@pwd
Warning: Using a password with '-a' option on the command line interface may not be safe.
172.16.16.47:6379> hget myhash k1
"v1"
172.16.16.47:6379> hget myhash k2
"v2"
172.16.16.47:6379> hget myhash k3
"v3"
172.16.16.47:6379>

从上面结果来看,Tendis已经把ssdb-server中刚插入的数据同步完成。

4.4 增量数据同步

对于增量数据,迁移工具是先进行全量数据同步,然后进程不退出,等待新数据的生成并进行增量同步到Tendis。

5. 迁移总结 

本文只模拟了少量数据的同步过程,实际在业务迁移过程中,还有很多问题需要考虑,如下:

  • 业务数据特性,如hash、zset等value大小问题,生产迁移时需要考虑当一个hash有几万甚至几十万的field时的迁移流程
  • 业务逻辑开发,原有的ssdb如果是单实例模式的话,需要考虑迁移到redis-cluster时有些逻辑兼容性问题,如跨slot事务、pipeline管道等
  • 业务迁移问题,具体涉及生产迁移时,还需要考虑业务暂停、用户公告、数据迁移、数据校验等一系列问题

腾讯云在业务数据生产迁移方面已积累了大量的经验,同时也有很多工具已开放给客户使用,如DTS服务。如您需要数据迁移方面的咨询与帮助,可随时咨询腾讯云客服获得对应服务。

undefined

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.前言
  • 2. 迁移说明
  • 3.迁移准备
    • 3.1 迁移工具
      • 3.2 Redis工具
        • 3.2 环境准备
          • 3.2.1 腾讯云账号
          • 3.2.2 腾讯云CVM环境申请
          • 3.2.3 申请一个tendis实例
          • 3.2.4 redis安装
          • 3.2.5 SSDB安装
          • 3.2.5 迁移工具安装
      • 4. 迁移测试
        • 4.1 SSDB数据模拟
          • 4.2 启动迁移工具
            • 4.3 Tendis数据查看
              • 4.4 增量数据同步
              • 5. 迁移总结 
              相关产品与服务
              云数据库 Redis®
              腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档