资讯专栏INFORMATION COLUMN

Redis数据备份与恢复以及迁移解决方案

社区管理员 / 427人阅读

一、测试准备

文章推荐:Redis二进制编译安装教程

[root@kvm ~]# vim redis-test.sh
#!/bin/bash
for i in {1..10000}
do
  echo "key${i} ${i}"
  redis-cli set key${i} ${i}
done

[root@kvm ~]# chmod a+x redis-test.sh
[root@kvm ~]# bash redis-test.sh

注:通过上述脚本生成测试数据~

[root@kvm ~]# cd redis
[root@kvm redis]# redis-server redis7000.conf 
[root@kvm redis]# redis-server redis8000.conf 
[root@kvm redis]# netstat -antulp |grep redis
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      49289/redis-server  
tcp        0      0 0.0.0.0:7000            0.0.0.0:*               LISTEN      48470/redis-server

二、redis-port工具

开源工具下载地址:https://github.com/CodisLabs/redis-port/releases

image.png

注:redis-port工具集v1.2.1是1.0版本中,最新版本,只有一个redis-port工具可以使用。

image.png

注:redis-port工具集2.0版本,新增redis-decode、redis-dump、redis-restore、redis-sync四个工具,下面我将逐一为大家介绍!

(1)下载redis-port工具集合

# 2.0版本下载地址
[root@kvm ~]# wget https://github.com/CodisLabs/redis-port/releases/download/v2.0-beta/redis-port-v2.0-beta-go1.10.1-linux.tar.gz 

# 1.0版本下载地址
[root@kvm ~]# wget https://github.com/CodisLabs/redis-port/releases/download/v1.2.1/redis-port-v1.2.1-go1.7.5-linux.tar.gz

# 解压安装包
[root@kvm ~]# tar -zxvf redis-port-v2.0-beta-go1.10.1-linux.tar.gz
[root@kvm ~]# tar -zxvf redis-port-v1.2.1-go1.7.5-linux.tar.gz

[root@kvm ~]# tree redis-port-v2.0-beta-go1.10.1-linux/
redis-port-v2.0-beta-go1.10.1-linux/
├── redis-decode
├── redis-dump
├── redis-restore
├── redis-sync
└── version

0 directories, 5 files

[root@kvm ~]# tree redis-port-v1.2.1-go1.7.5-linux
redis-port-v1.2.1-go1.7.5-linux
├── redis-port
└── version

0 directories, 2 files

# 语法
[root@kvm redis-port-v1.2.1-go1.7.5-linux]# ./redis-port -h
Usage:
	redis-port decode   [--ncpu=N]  [--parallel=M]  [--input=INPUT]  [--output=OUTPUT]
	redis-port restore  [--ncpu=N]  [--parallel=M]  [--input=INPUT]  [--faketime=FAKETIME] [--extra] [--filterdb=DB] --target=TARGET [--auth=AUTH] [--redis|--codis]
	redis-port sync     [--ncpu=N]  [--parallel=M]   --from=MASTER   [--password=PASSWORD] [--psync] [--filterdb=DB] --target=TARGET [--auth=AUTH] [--redis|--codis] [--sockfile=FILE [--filesize=SIZE]]
	redis-port dump     [--ncpu=N]  [--parallel=M]   --from=MASTER   [--password=PASSWORD] [--extra] [--output=OUTPUT]
	redis-port --version

Options:
	-n N, --ncpu=N                    Set runtime.GOMAXPROCS to N.
	-p M, --parallel=M                Set the number of parallel routines to M.
	-i INPUT, --input=INPUT           Set input file, default is stdin ('/dev/stdin').
	-o OUTPUT, --output=OUTPUT        Set output file, default is stdout ('/dev/stdout').
	-f MASTER, --from=MASTER          Set host:port of master redis.
	-t TARGET, --target=TARGET        Set host:port of slave redis.
	-P PASSWORD, --password=PASSWORD  Set redis auth password.
	-A AUTH, --auth=AUTH              Set auth password for target.
	--faketime=FAKETIME               Set current system time to adjust key's expire time.
	--sockfile=FILE                   Use FILE to as socket buffer, default is disabled.
	--filesize=SIZE                   Set FILE size, default value is 1gb.
	-e, --extra                       Set true to send/receive following redis commands, default is false.
	--redis                           Target is normal redis instance, default is false.
	--codis                           Target is codis proxy, default is true.
	--filterdb=DB                     Filter db = DB, default is *.
	--psync                           Use PSYNC command.

(2)redis-port导出rdb文件

[root@kvm redis-port-v1.2.1-go1.7.5-linux]# ./redis-port dump -f 127.0.0.1:7000 -o /data/save.rdb
2022/03/25 11:48:48 main.go:189: [INFO] set ncpu = 32, parallel = 32
2022/03/25 11:48:48 dump.go:29: [INFO] dump from '127.0.0.1:7000' to '/data/save.rdb'
2022/03/25 11:48:48 dump.go:42: [INFO] rdb file = 118948
2022/03/25 11:48:48 dump.go:94: [INFO] total = 118948 -       118948 [100%]
2022/03/25 11:48:48 dump.go:96: [INFO] dump: rdb done

[root@kvm redis-port-v1.2.1-go1.7.5-linux]# ll /data/
total 120
drwxr-xr-x 2 root root     70 Mar 25 11:48 redis7000
drwxr-xr-x 2 root root     22 Mar 25 11:16 redis8000
-rw-r--r-- 1 root root 118948 Mar 25 11:48 save.rdb

注:待完善~

三、import_data.py迁移脚本

Import_data.py脚本,即python版本的导入导出工具,但其无法选择数据库号,只能操作默认的数据库0。并且只能离线使用,在线导数据,可能会失败。 另外,运行脚本前,需要安装python-redis插件。

安装包下载:

import_data.zip

(1)使用方法如下

./import_data.py sourceIP sourcePort destIP destPort  connectionNum
◆ sourceIP:导出库ip(数据源)
◆ sourcePort:导出库port(数据源)
◆ destIP:导入库ip
◆ destPort:导入库Port
◆ connectionNum: 数据导入时使用的连接数

(2)操作演示

# 下载迁移脚本
[root@redis-v1 ~]# wget http://tools.ufile.ucloud.cn/import_data.zip
[root@redis-v1 ~]# unzip import_data.zip
[root@redis-v1 ~]# cd import_data
[root@redis-v1 import_data]# chmod a+x import_data.py

# 安装python-redis插件
[root@redis-v1 import_data]# yum install python-redis -y

# 执行脚本进行数据迁移
[root@redis-v1 import_data]# ./import_data.py 127.0.0.1 7000 127.0.0.1 8000 3
Begin Read Keys
String Key Count is: 10000
Set Key Count is: 0
ZSet Key Count is: 0
List Key Count is: 0
Hash Key Count is: 0
Finish, token time: 0:00:00.627966

# 查看数据迁移成功
[root@redis-v1 import_data]# redis-cli -p 8000
127.0.0.1:8000> keys * 
……
 9999) "key7686"
10000) "key3040"

四、Redis-cli工具

(1)Redis-cli语法

[root@kvm ~]# redis-cli -h
redis-cli 5.0.5

Usage: redis-cli [OPTIONS] [cmd [arg [arg ...]]]
  -h <hostname>      Server hostname (default: 127.0.0.1).
  -p <port>          Server port (default: 6379).
  -s <socket>        Server socket (overrides hostname and port).
  -a <password>      Password to use when connecting to the server.
                     You can also use the REDISCLI_AUTH environment
                     variable to pass this password more safely
                     (if both are used, this argument takes predecence).
  -u <uri>           Server URI.
  -r <repeat>        Execute specified command N times.
  -i <interval>      When -r is used, waits <interval> seconds per command.
                     It is possible to specify sub-second times like -i 0.1.
  -n <db>            Database number.
  -x                 Read last argument from STDIN.
  -d <delimiter>     Multi-bulk delimiter in for raw formatting (default: \n).
  -c                 Enable cluster mode (follow -ASK and -MOVED redirections).
  --raw              Use raw formatting for replies (default when STDOUT is
                     not a tty).
  --no-raw           Force formatted output even when STDOUT is not a tty.
  --csv              Output in CSV format.
  --stat             Print rolling stats about server: mem, clients, ...
  --latency          Enter a special mode continuously sampling latency.
                     If you use this mode in an interactive session it runs
                     forever displaying real-time stats. Otherwise if --raw or
                     --csv is specified, or if you redirect the output to a non
                     TTY, it samples the latency for 1 second (you can use
                     -i to change the interval), then produces a single output
                     and exits.
  --latency-history  Like --latency but tracking latency changes over time.
                     Default time interval is 15 sec. Change it using -i.
  --latency-dist     Shows latency as a spectrum, requires xterm 256 colors.
                     Default time interval is 1 sec. Change it using -i.
  --lru-test <keys>  Simulate a cache workload with an 80-20 distribution.
  --replica          Simulate a replica showing commands received from the master.
  --rdb <filename>   Transfer an RDB dump from remote server to local file.
  --pipe             Transfer raw Redis protocol from stdin to server.
  --pipe-timeout <n> In --pipe mode, abort with error if after sending all data.
                     no reply is received within <n> seconds.
                     Default timeout: 30. Use 0 to wait forever.
  --bigkeys          Sample Redis keys looking for keys with many elements (complexity).
  --memkeys          Sample Redis keys looking for keys consuming a lot of memory.
  --memkeys-samples <n> Sample Redis keys looking for keys consuming a lot of memory.
                     And define number of key elements to sample
  --hotkeys          Sample Redis keys looking for hot keys.
                     only works when maxmemory-policy is *lfu.
  --scan             List all keys using the SCAN command.
  --pattern <pat>    Useful with --scan to specify a SCAN pattern.
  --intrinsic-latency <sec> Run a test to measure intrinsic system latency.
                     The test will run for the specified amount of seconds.
  --eval <file>      Send an EVAL command using the Lua script at <file>.
  --ldb              Used with --eval enable the Redis Lua debugger.
  --ldb-sync-mode    Like --ldb but uses the synchronous Lua debugger, in
                     this mode the server is blocked and script changes are
                     not rolled back from the server memory.
  --cluster <command> [args...] [opts...]
                     Cluster Manager command and arguments (see below).
  --verbose          Verbose mode.
  --no-auth-warning  Don't show warning message when using password on command
                     line interface.
  --help             Output this help and exit.
  --version          Output version and exit.

Cluster Manager Commands:
  Use --cluster help to list all available cluster manager commands.

Examples:
  cat /etc/passwd | redis-cli -x set mypasswd
  redis-cli get mypasswd
  redis-cli -r 100 lpush mylist x
  redis-cli -r 100 -i 1 info | grep used_memory_human:
  redis-cli --eval myscript.lua key1 key2 , arg1 arg2 arg3
  redis-cli --scan --pattern '*:12345*'

  (Note: when using --eval the comma separates KEYS[] from ARGV[] items)

When no command is given, redis-cli starts in interactive mode.
Type "help" in interactive mode for information on available commands
and settings.

(2)导出rdb文件

# 配置文件增加
[root@kvm ~]# vim redis/redis7000.conf 
……
save 900 1                            # 900秒内有数据变更则写入RDB文件
save 300 10                           # 300秒内有10条以上数据变更则写入RDB文件
save 60 10000                         # 60秒内有10000条以上数据变更则写入RDB文件
语法:redis-cli -h {source_redis_address} -p 6379 -a {password} --rdb {output.rdb}
# 操作演示
[root@kvm ~]# redis-cli -h 127.0.0.1 -p 7000 --rdb 7000.rdb
SYNC sent to master, writing 118948 bytes to '7000.rdb'
Transfer finished with success.

注:执行命令后回显"Transfer finished with success.",表示文件导出成功。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128130.html

相关文章

  • redis数据迁移方案

    摘要:迁移方案整理一下常用的几种迁移的方案,分别对应不同的场景。而因为是保存的命令,只是在新的上重新执行了一遍,所以不会覆盖新上的数据。简单来说如果需要保留新的数据,可以使用。 redis迁移方案 整理一下常用的几种redis迁移的方案,分别对应不同的场景。 备份/拷贝/重启 redis-dump 客户端 1. 备份/拷贝/重启 利用redis的持久化功能,redis重启的时候,会自...

    Steve_Wang_ 评论0 收藏0
  • 跨云迁移过程中的数据同步及一致性校验实践(一)

    摘要:通过对一些客户的跨云迁移过程进行总结,发现普遍存在的挑战有三点数据完整性和一致性挑战。简而言之,跨云迁移过程中的数据一致性主要就集中在存量数据的迁移如何保证一致。前言随着互联网业务发展对容灾以及对访问加速、多供应商成本控制等需求的产生,互联网公司的多云部署和跨云迁移逐渐成为刚需,而在此过程中,最困扰运维和研发人员的就是数据的迁移和同步。俗语说 上屋搬下屋,搬洒一箩谷 ,在业务的迁移过程中一旦...

    Tecode 评论0 收藏0
  • Redis主从复制以及主从复制原理

    摘要:前者称为主节点,后者称为从节点数据的复制是单向的,只能由主节点到从节点。主从复制的作用数据冗余主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。检测主节点当前是否可接受处理命令。 showImg(https://segmentfault.com/img/bVboOAF?w=1772&h=591); Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化...

    snowLu 评论0 收藏0
  • Redis Cluster配置传播及故障恢复笔记

    摘要:本笔记是对的归纳总结。传播的配置赢得选举之后会在己侧更新上的归属信息,然后在定时的中将这个信息传播出去。这个过程不需要共识,因为只是修改的归属,也不会修改。同样不需要大多数同意。 本笔记是对Redis Cluster Spec - Configuration handling, propagation, and failovers的归纳总结。 Epoch 可以把Epoch当作是一个版...

    Tonny 评论0 收藏0
  • 宜信开源|详解PaaS平台LAIN的功能和架构

    摘要:是宜信公司大数据创新中心开发的开源平台。为宜信大数据创新中心各个团队提供了统一的测试和生产环境,简化了服务的部署与上线流程,也降低了运维人员对系统管理的复杂度。基于容器技术,面向多样化的技术栈,并且天然隔离系统和应用的依赖。 LAIN是宜信公司大数据创新中心开发的开源PaaS平台。在金融的场景下,LAIN 是为解放各个团队和业务线的生产力而设计的一个云平台。LAIN 为宜信大数据创新中...

    mist14 评论0 收藏0
  • Redis学习

    摘要:单线程执行命令。文件描述符事件。内部原因不合理使用或数据结构可能由此导致慢查询等饱和是单线程,只会使用单个持久化阻塞操作产生阻塞,对硬盘的操作产生阻塞或写操作阻塞等。内存达到时执行内存溢出控制策略。 最近在看《Redis开发与运维》,把自己学会的知识点记录下来,毕竟好记性不如烂笔头。 一.Redis是什么。 Redis是一个Key-Value的NoSQL数据库. 二.Redis的特点。...

    miguel.jiang 评论0 收藏0

发表评论

0条评论

社区管理员

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<