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数据迁移方案的原因。
SSDB是基于LevelDB开发的一个兼容Redis协议的KV存储产品,产品架构模型和Redis标准单实例一样,即支持单主,也支持主从同步架构。Tendis属于集群模式,类似Redis Cluster架构。单实例版Redis和集群版Redis有些方面还是有区别的,如原来所有Key都分布在单master实例上,现在slot被分拆到集群中的多个节点实例,key被进一步打散,像原来的一些涉及事务及管道这块的逻辑可能会受一些影响。如果业务侧涉及事务和管道的代码逻辑比较多的话,需要考虑怎么适配到集群版实例上,这里涉及具体业务具体分析,暂不在本文展开介绍。其它一些非标准版redis支持命令,如keys和scan,在集群版上实现逻辑也是和单实例版不一样的,也需要特殊对待。
在迁移过程中,会依赖第三方开源同步工具ssdb-port。在开源工具基础上作了一些源码改造,以适配大Key及亿级别Key的同步效率,内部改造版下载地址Siphon-V2。 工具说明:
用于连接登录Tendis实例,目前兼容Redis-4.x
版本的协议。直接从官网下载redis源码包进行编译即可,参考官方编译安装教程。
验证迁移方案依赖于腾讯云环境,需要提前申请一个腾讯云账号,用于申请相关腾讯云资源。账号申请方式请参考腾讯云官网教程
迁移方案需要安装SSDB环境及相关迁移工具,需要申请一台CVM资源,作为数据源验证使用,规格: 2C4G, Centos 7.X或CentOS 8.X。
迁移方案需要依赖Tendis作为目的数据源,申请一个最低配规格Tendis实例(4分片/64GB内存/200GB磁盘),按流量计费。目前Tendis部署地域在北上广、香港。
测试连接tendis实例依赖原生redis-cli, 需要下载redis源码包进行编译或直接下载redis-cli即可。目前Tendis兼容的Redis版本是: 4.x
。
官网下载源码包,版本:1.9.8
, 下载地址。下载完后将源码包ssdb-master.zip
上传至CVM机器,解压编译安装。如下所示:
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配置文件内容如下:
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官网关于这块的说明,上面用的是默认参数。
下载迁移工具iphon-v2。把工具拷贝到CVM机器对应目录。工具使用方式如下:
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
。
具体使用siphon-v2的命令如下:
#-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
登录ssdb-server, 用命令先写几条数据。如下所示:
[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)
新开启一个新的终端登录CVM, 并执行如下命令启动迁移工具。
./siphon_v2 sync -p 1 -f 127.0.0.1:8888 -t 172.16.16.47:6379 -T tendis@pwd
启动后,可以看到一些控制台输出,如下所示:
图中红框部分标识的是全量数据同步过程:
再开启一个新的终端登录CVM,登录Tendis实例查看刚全量数据同步结果。
[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中刚插入的数据同步完成。
对于增量数据,迁移工具是先进行全量数据同步,然后进程不退出,等待新数据的生成并进行增量同步到Tendis。
本文只模拟了少量数据的同步过程,实际在业务迁移过程中,还有很多问题需要考虑,如下:
腾讯云在业务数据生产迁移方面已积累了大量的经验,同时也有很多工具已开放给客户使用,如DTS服务。如您需要数据迁移方面的咨询与帮助,可随时咨询腾讯云客服获得对应服务。
undefined
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。