- 最新动态
- 功能总览
- 服务公告
- 产品介绍
-
GeminiDB Redis接口
- 产品介绍
- 计费说明
- 快速入门
-
用户指南
- 权限管理
- 购买GeminiDB Redis实例
- 实例连接及管理
-
数据迁移
- Redis数据迁移方案概览
- 使用DRS服务将GeminiDB Redis迁移到Redis(推荐)
- 阿里云数据库Redis/Tair到GeminiDB Redis的迁移
- 腾讯云Redis到GeminiDB Redis的迁移
- 使用DRS服务将自建Redis或者Redis集群迁移到GeminiDB Redis(推荐)
- 通过Redis-Shake迁移工具将自建Redis迁移到GeminiDB Redis
- 使用Redis-Shake工具将RDB文件/AOF文件 导入到GeminiDB Redis
- 使用数据导入功能将RDB文件恢复到GeminiDB Redis(推荐)
- Kvrocks到GeminiDB Redis的迁移
- Pika到GeminiDB Redis的迁移
- SSDB到GeminiDB Redis的迁移
- LevelDB到GeminiDB Redis的迁移
- RocksDB到GeminiDB Redis的迁移
- AWS ElasticCache for Redis数据库到GeminiDB Redis的迁移
- 迁移后Redis数据一致性校验
- 实例管理
- 变更实例
- 数据备份
- 数据恢复
- 诊断分析
- 账号与安全
- 参数管理
- 日志与审计
- 查看监控指标与配置告警
- GeminiDB Redis标签管理
- GeminiDB Redis用户资源配额
- 通过GeminiDB Redis实现MySQL内存加速
- 开发参考
- 最佳实践
- 性能白皮书
-
常见问题
- 高频常见问题
-
产品咨询
- GeminiDB Redis和开源Redis、其他开源Redis云服务有什么区别?
- 和开源Redis相比,GeminiDB Redis性能如何?
- GeminiDB Redis兼容Redis哪些版本,兼容哪些命令,客户端连接是否需要修改
- 自建Redis是否可以搬迁至GeminiDB Redis,需要注意什么
- 什么是GeminiDB Redis实例可用性
- GeminiDB Redis实例总容量是总内存吗,内存和容量之间是什么联系
- 购买GeminiDB Redis实例时,如何选择合适的节点规格和节点数量?
- 购买x GB的GeminiDB Redis的实例,优选主备还是集群?
- GeminiDB Redis持久化机制是怎样的,会丢数据吗
- GeminiDB Redis的内存淘汰策略是什么
- GeminiDB Redis是否支持布隆过滤器等modules
- 计费相关
-
数据库使用
- scan指定match参数,数据中确实存在匹配的key,为什么返回的是空
- 业务侧原本做了数据分片,切换到GeminiDB Redis后如何处理这部分逻辑
- GeminiDB Redis接口是否支持keys命令的模糊查询
- GeminiDB Redis是否支持多DB
- 对于scan类的操作,GeminiDB Redis接口与开源Redis 5.0的返回值顺序为什么有差异
- 针对某些不合法命令,GeminiDB Redis接口与开源Redis 5.0的报错信息为什么有差异
- 如何处理报错:CROSSSLOT Keys in request don't hash to the same slot
- GeminiDB Redis单次事务推荐包含的命令条数
- GeminiDB Redis集群版实例中,哪些命令需要使用hashtag
- 如何处理报错“ERR unknown command sentinel"
- 对于阻塞命令,GeminiDB Redis接口(主备实例)与开源Redis的返回值为什么可能有差异
- GeminiDB Redis存储扩容需要多久,对业务有影响吗?
- GeminiDB Redis多个节点同时扩容需要多长时间,对业务影响如何?
- GeminiDB Redis规格变更包含的在线变更和离线变更有什么区别,通常需要多长时间,对业务有哪些影响?
- GeminiDB Redis版本补丁升级包含的在线升级和离线升级有什么区别,通常需要多长时间,对业务有哪些影响?
- GeminiDB Redis备份文件是否可以下载到本地,是否支持线下恢复数据
- GeminiDB Redis数据备份工作机制是怎样的,对业务有哪些影响?
- 购买GeminiDB Redis 1U*2节点特惠型实例后,业务访问量比较少,但CPU占用率比较高,是什么原因?
- GeminiDB Redis监控面板上key数量下降又恢复至正常数量是什么原因?
- GeminiDB Redis节点CPU偶发冲高,可能是哪些原因
- GeminiDB Redis如何从5.0版本升级到6.2版本
- GeminiDB Redis什么时候进入只读
-
数据库连接
- 如何接入GeminiDB Redis
- 如何使用GeminiDB Redis提供的多个节点IP地址
- GeminiDB Redis提供的ELB的实现方式是怎样的
- 如何创建和连接弹性云服务器
- GeminiDB Redis实例购买成功后是否支持更换VPC
- 绑定了弹性公网IP但是连接不上数据库
- 内网如何访问GeminiDB Redis
- GeminiDB Redis自带的负载均衡地址是否能绑定公网IP?如何通过公网连接GeminiDB Redis实例?
- 设置了安全组,还需要设置负载均衡内网访问控制吗?
- 如何处理客户端连接池报错“Could not get a resource from the pool”
- 常见客户端报错及解决方法
- 备份与恢复
- 区域和可用区
-
数据迁移
- DRS上找不到GeminiDB Redis链路
- 报错ERR the worker queue is full, and the request cannot be excecuted
- 报错ERR the request queue of io thread is full, and the request cannot be excecuted
- 报错 read error, please check source redis log or network
- 报错 slaveping_thread.cc-ThreadMain-90: error: Ping master error
- 同步状态正向迁移速度太慢
- 同步状态正向迁移速度太快,报错:ERR server reply timeout, some responses may lose, but requests have been executed
- 4.0、5.0以及6.2版本的自建Redis能迁移至GeminiDB Redis吗?
- 自建Redis主备、集群实例如何迁移到GeminiDB Redis?
- 为什么阿里云Redis、腾讯云Redis等云服务不能使用DRS进行数据迁移?
- 自建主备Redis,迁移到GeminiDB Redis集群,需要考虑哪些因素?
- 迁移完成后数据量变少了,100GB的数据迁移到GeminiDB Redis只有20-30GB,数据是不是没迁移完?
- 内存加速
- 资源冻结/释放/删除/退订
- GeminiDB Influx接口
-
GeminiDB Cassandra接口
- 产品介绍
- 计费说明
- 快速入门
-
用户指南
- 权限管理
- 购买GeminiDB Cassandra实例
- 实例连接及管理
- 数据迁移
- 实例生命周期管理
- 变更实例
- 同城容灾
- 异地双活
- 数据备份
- 数据恢复
- 参数管理
- 日志与审计
- 查看监控指标与配置告警
- 企业项目
- GeminiDB Cassandra标签管理
- GeminiDB Cassandra用户资源配额
- 最佳实践
- 性能白皮书
- 常见问题
- GeminiDB (兼容DynamoDB API)实例
- HBase协议兼容版实例
- GeminiDB Mongo接口
- 技术白皮书
-
API参考
- 使用前必读
- API概览
- 如何调用API
- 快速入门
-
API v3(推荐)
- 查询API版本
- 接口版本和规格
-
实例管理
- 创建实例
- 删除实例
- 查询实例列表和详情
- 扩容实例存储容量
- 扩容实例的节点数量
- 缩容实例的节点数量
- 获取节点会话列表
- 查询实例节点会话统计信息
- 关闭实例节点会话
- 查询实例可变更规格
- 变更实例规格
- 修改实例的管理员密码
- 修改实例名称
- 变更实例安全组
- 数据库补丁升级
- 批量数据库补丁升级
- 创建冷数据存储
- 扩容冷数据存储
- 绑定/解绑弹性公网IP
- 切换实例SSL开关
- 重启实例
- 设置磁盘自动扩容策略
- 修改数据库端口
- 判断弱密码
- 修改副本集跨网段访问配置
- 删除扩容失败的节点
- 查询创建实例或扩容节点时需要的IP数量
- 查询磁盘自动扩容策略
- 变更实例存储容量
- 查询高危命令
- 修改高危命令
- 查询Redis实例的热key
- 设置Redis禁用命令
- 查询Redis禁用命令
- 删除Redis禁用命令
- 设置实例可维护时间段
- Redis主备切换
- 支持节点的开关机
- 查询GeminiDB Redis实例的大key
- 获取GeminiDB Redis的免密配置
- 支持修改GeminiDB Redis的免密配置
- 查询内存加速映射列表和详情
- 创建内存加速规则
- 解除内存加速映射
- 创建内存加速映射
- 修改内存加速规则
- 查询内存加速规则列表和详情
- 删除内存加速规则
- 开启/关闭实例数据导出
- 开启/关闭秒级监控
- 查询秒级监控配置
- 连接管理
- 备份与恢复
- 参数模板管理
- 管理数据库和账号
- 标签管理
- 日志管理
- 配额管理
- 容灾管理
- 任务管理
- 企业项目管理
- 实例负载均衡管理
- API v3(即将下线)
- 权限策略和授权项
- 附录
- SDK参考
- 场景代码示例
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
Pika到GeminiDB Redis的迁移
Pika是一个可持久化的大容量Redis存储服务,解决了Redis由于存储数据量巨大而导致内存不够用的容量瓶颈。但其集群管理功能较为薄弱,需要使用twemproxy或者codis实现静态数据分片。同时由于数据全部存储在磁盘中,相比于社区版Redis,性能明显下降。
GeminiDB Redis接口是一款兼容Redis生态的云原生NoSQL数据库,基于共享存储池的多副本强一致机制,保证数据的安全可靠。GeminiDB Redis接口实现了冷热分离,解决了缓存(cache)与数据库(Data Base,DB)之间交互访问的问题,提高了程序可读性与程序运行效率。同时对RocksDB进行深度定制,实现秒级分裂弹性扩容,扩缩容无需搬迁数据,快速而平滑。通过proxy代理,使上层业务可以不感知内核处理扩缩容过程中的数据迁移。
本章节主要介绍Pika到GeminiDB Redis接口的迁移方案。
迁移原理
pika-port伪装成Pika的从节点运行,通过主从复制的方式进行数据迁移。Pika主节点通过比较pika-port和自己的binlog偏移量判断做全量迁移还是增量迁移。如果需要做全量迁移,Pika主节点会将全量数据快照发送给pika-port,pika-port将解析后的快照数据发送给GeminiDB Redis。全量迁移结束后进入增量迁移,pika-port将增量数据解析后以redis命令的形式发送给GeminiDB Redis。
![](https://support.huaweicloud.com/redisug-nosql/zh-cn_image_0000001747263569.png)
Pika-migrate的迁移原理和pika-port相似,将工具虚拟为pika的从库,然后从主库获取到数据转发给目标redis,同时支持增量同步,实现在线热迁的功能。
pika-migrate 通过 dbsync 请求获取主库全量 DB 数据,以及当前 DB 数据所对应的 binlog 点位。获取到主库当前全量 DB 数据之后,扫描 DB,将 DB 中的数据打包转发给 Redis。通过之前获取的 binlog 的点位向主库进行增量同步, 在增量同步的过程中,将从主库获取到的 binlog 重组成redis命令,转发给redis。
适用版本
Pika到Redis迁移工具Pika-Port适用于Pika v2.x和v3.0.x版本,具体使用步骤请参考pika-port迁移工具使用说明或者pika到pika、redis迁移工具。如果使用Pika v3.2及以上版本,需使用迁移工具Pika-Migrate,具体步骤请参考pika-migrate迁移工具使用说明。
使用须知
- Pika迁移工具伪装成源端Pika的从节点,只读取全量和增量数据,无数据受损风险。
- 源端增加了和Pika迁移工具的主从同步流程,可能会影响源端性能。
- 全量和增量结合迁移可以不停服,业务切入GeminiDB Redis时短暂停服。
pika-port迁移工具使用说明
- 部署迁移工具pika-port
- 迁移工具下载
从Github上直接下载编译好的对应pika版本的pika-port开源迁移工具(如pika3.0.x版本就使用3.0.x版本的开源工具),网址为:https://github.com/ipixiu/pika-port-bin。
图2 迁移工具下载 - 部署位置和目录结构
以pika_portv1.6.0为例,将解压后的整个文件重命名为pika_port3,复制在部署了pika的环境上(或者任一能与pika实例和GeminiDB Redis实例网络互通的服务器上),解压后的pika_port3文件夹目录结构如下:
- 迁移前准备
由于sbin目录下的pika-port二进制文件需要引用lib目录下的库文件,迁移之前需在pika_port3路径执行如下命令:
export LD_LIBRARY_PATH=./lib:${LD_LIBRARY_PATH} //链接库文件
rm -rf ./rsync_dump/ //删除文件夹
rm -rf ./sync_log/ //删除sync日志
- 迁移工具下载
- pika单机数据迁移
- 启动命令
./sbin/pika_port -i master_ip -o master_port -m forward_ip -n forward_port -x forward_thread_num -y forward_passwd -f filenum -s offset -w password -r rsync_dump_path -l log_path
-h -- show this help
-t -- local host ip(OPTIONAL default: 127.0.0.1),输入本机IP
-p -- local port(OPTIONAL),默认即可
-i -- Pika主节点IP
-o -- Pika主节点port
-m -- GeminiDB Redis ELB IP
-n -- GeminiDB Redis port
-x -- 发送线程数量(OPTIONAL default: 1)
-y -- GeminiDB Redis密码
-f -- binlog文件数量,默认即可(OPTIONAL default: local offset)
-s -- binlog offset,默认即可(OPTIONAL default: local offset)
-w -- Pika主节点密码
-r -- rsync dump文件到本地目录,默认即可(OPTIONAL default: ./rsync_dump)
-l -- 产生的日志文件目录,默认即可(OPTIONAL default: ./log)
-b -- max batch number when port rsync dump data. 默认即可 (OPTIONAL default: 512)
-d -- 是否后台运行(OPTIONAL)
示例:
./sbin/pika_port -t 28.80.60.200 -p 12345 -i 28.80.60.200 -o 9221 -m 28.80.60.201 -n 6379 -x 7 -y a -w a
【注】上例中,28.80.60.200为源端pika IP,28.80.60.201为目标端redis IP。
- 等待结果
等待数据迁移,若执行日志中出现如下信息,代表全量数据同步完成,此后数据迁移进入增量同步阶段。
- 启动命令
- pika集群数据迁移
pika-migrate迁移工具使用说明
- 迁移工具部署
- Pika-migrate工具下载:https://github.com/OpenAtomFoundation/pika/tree/v3_2_7_migrate
- 工具使用说明:https://github.com/OpenAtomFoundation/pika/blob/v3_2_7_migrate/pika-migrate.md
- 也可以直接使用编译好的二进制文件。
将解压后的整个pika_migrate_output文件放置在部署了pika的环境上(或者任一能与pika实例和GeminiDB Redis实例网络互通的服务器上),解压后的文件夹目录结构如下:
使用前清空db、dbsync和log目录下的内容。
- 迁移步骤
- 修改配置文件
根据目标端(redis)的信息,修改迁移工具的配置文件conf/pika.conf 中的如下参数:
target-redis-host:Redis 的 IP 地址。
target-redis-port:Redis 的端口号。
target-redis-pwd:Redis 默认账号的密码。
masterauth:Pika主库的密码(如Pika主库没有设置密码则不填)。
- binlog文件为log/log_db0目录下记录了所有操作的同步日志文件,这部分文件在增量同步数据阶段使用
- 将全量数据写入到Redis这段时间可能耗时很长,而导致Pika主库原先的binlog文件被清理。需要在Pika主库上保留足够的binlog⽂件个数,确保后续该⼯具请求增量同步的时候,对应的binlog文件还存在。
- binlog文件占用磁盘空间,可以根据观察Pika主库实际生成该文件的情况确定保留binlog的数量。
- 在pika主库上执行“config set expire-logs-nums 10000”命令,让 PIKA 主库保留10000个 binlog 文件。
- 在工具包的路径下执行如下命令,启动 pika-migrate 工具,并查看控制台回显信息: bin/pika -c conf/pika.conf。
- 在pika-migrate客户端执行如下命令,将迁移工具伪装成 Slave,向主库请求同步,并观察控制台是否打印报错信息。
slaveof [pika主库ip] [pika主库port]
如果主从关系建立,此时回显信息为:
- 确认主从关系建立成功之后,pika-migrate开始向目标端Redis转发数据。在pika主库和从库执行“info Replication”命令,查看主从同步延迟。可在主库写入⼀个特殊的 key,然后在 Redis 侧查看是否可立即获取到该 key,判断数据同步完毕。
- 修改配置文件
- 注意事项
迁移后Redis数据一致性校验
迁移完成后,您可以对Redis数据做一致性校验。
![](https://support.huaweicloud.com/redisug-nosql/public_sys-resources/notice_3.0-zh-cn.png)
- Redis迁移已完成或者已经进入增量状态。
- 需要ECS实例部署Redis-Full-Check开源工具,并确保与源端、目标端网络互通。
- 如果迁移任务处于增量状态,由于迁移源端和目标端间存在网络时延,无法确保校验时数据一致,如有条件,建议停止对源端的写入后再做校验。
- 业务使用Redis时往往存在给key设置过期时间,迁移时key过期行为会影响数据一致性,如果检验结果不一致,可能是由于key过期时间不一致导致。
- 云厂商DTS在迁移过程中会往目标端Redis写入临时探活key,校验时可能发现非业务数据,属于正常现象。
操作步骤:
- 登录ECS实例,确保能连上源端和目标端Redis。
- 部署redis-full-check工具。
- 执行以下命令进行数据校验。
/redis-full-check -s {源端IP}:{源端端口} -p {源端密码} -t {目标端IP}:{目标端端口} -a {目标端密码} -m 1
表1 参数说明 参数
参数
参数示例
-s
源端Redis连接地址和端口。
-s 10.0.0.1:6379
-p
源端Redis密码。
-
-t
目标端Redis连接地址和端口。
-t 10.0.0.2:6379
-a
目标端Redis密码。
-
-m
校验模式:
- 全量校验所有键值对。
- 仅校验值的长度。
- 仅校验key完整性。
- 全量校验所有键值,但只校验大key的长度。
默认为模式2。
-m 1
-q
最大qps限制,默认15000。
-q 5000
-d
校验结果保存的文件名称,默认result.db。
-d result.db
- 查看校验结果文件。
校验默认执行三轮,输出三个校验结果文件,一般只需要看最后一个校验结果文件。
迁移性能参考
- 环境:Pika(单节点)和pika-port同时部署在华为云8U32GB的弹性云服务器上,目标端为8U16GB,3节点GeminiDB Redis实例。
- 预置数据:使用memtier_benchmark工具预置200GB数据。
- 迁移性能:约50000qps。