赞
踩
新上了一个业务系统,需要进行压力测试。但是新的系统连接的哨兵和原有已经在跑的系统的哨兵地址是共用的,但是后端的redis地址不一样。为了不影响现有的业务,决定把新上的业务的redis哨兵改成临时的单机版的哨兵以及单机版的redis。
所以需要把原有的数据迁移到现在的新的临时服务器上来。
- #!/usr/bin/env python3
- # from redis.sentinel import Sentinel
- from redis import sentinel
-
- sentinel.Sentinel = sentinel.Sentinel ([('xx', 6000)],socket_timeout=0.5)
-
- ##获取主服务器地址
- master = sentinel.Sentinel.discover_master('xx')
- print(master)
-
redis有两种持久化方式:RDB 和 AOF
- ## 表示没有开启
- appendonly no
-
- # The name of the append only file (default: "appendonly.aof")
-
- appendfilename "appendonly.aof"
默认情况下,是快照rdb的持久化方式,将内存中的数据以快照的方式写入二进制文件中,默认的文件名是 dump.rdb
(1)RDB方式是一种快照式的持久化方法,将某一时刻的数据持久化到磁盘中。对服务器的性能消耗小。
redis在进行数据持久化的过程中,会先将数据写入到一个临时文件中,待持久化过程都结束了,才会用这个临时文件替换上次持久化好的文件。
对于RDB方式,redis会单独创建(fork)一个子进程来进行持久化,而主进程是不会进行任何IO操作的,这样就确保了redis极高的性能
RDB是一个单一的紧凑文件,它保存了某个时间点得数据集,非常适用于数据集的备份,比如你可以在每个小时报保存一下过去24小时内的数据,同时每天保存过去30天的数据,这样即使出了问题你也可以根据需求恢复到不同版本的数据集(适用于灾难恢复)。
(2)AOF方式是将执行过的写指令记录下来,在数据恢复时按照丛前到后的顺序再将指令执行一遍。
查看了线上的哨兵发现并没有座持久化,既没有RDB方式也没有AOF方式。但是有生成 dump.rdb 文件,因为平时我们是手工生成的,因为影响Redis性能所以才关闭了。
在原有的服务器使用命令,固化到文件。
- # 固化数据到 RDB 文件
- save
-
- # 查看路径
- config get dir
然后拷贝 dump.rdb 文件到新的服务器上。
这样会生成新的文件,清空然后退出
- 127.0.0.1:6305> flushall
- OK
- 127.0.0.1:6305> exit
-
-
- ### 另外需要注意文件的权限, 如果是哪个用户启动的需要检查当前的用户权限,权限为660
- root@VM-32-2-ubuntu:/var/lib/redis# ll
- total 653552
- drwxr-x--- 4 redis redis 4096 Dec 7 10:58 ./
- drwxr-xr-x 52 root root 4096 Mar 1 2022 ../
- -rw-rw---- 1 redis redis 669212957 Dec 7 10:55 dump.rdb
然后停掉服务,把旧服务器的文件拷贝过来然后覆盖,启动,查看:
- 127.0.0.1:6305[2]> info
-
- 127.0.0.1:6305[2]> keys *
- 1) "NOVEMBER-4-47"
- 2) "NOVEMBER-2-7"
- 3) "NOVEMBER-4-7"
- 4) "REDIS:AUTH:TOKEN_318ed6eac4e14e198ea697c0df751d62"
- 5) "NOVEMBER-4-65"
- 6) "REDIS:AUTH:TOKEN_3e2a5ed9023141e8931dacf636903333"
- 7) "NOVEMBER-2-47"
- 8) "REDIS:AUTH:TOKEN_508d5e9dc9444c77b6aa399f0b58a270"
- 9) "NOVEMBER-4-1"
- 10) "NOVEMBER-2-1"
- 11) "POS:REDIS:ID:ORDER_SN"
- 12) "NOVEMBER-2-65"
- 13) "REDIS:AUTH:TOKEN_4024f015276443dba7db76a9d6ed06bc"
- 14) "REDIS:AUTH:TOKEN_41f0f6c58ab34deab72276065e0e5c3c"
- 127.0.0.1:6305[2]>
到此数据已经就来了。
我们prd用的是腾讯云的Redis云服务,开发人员想把prd环境的Redis的数据同步到测试环境的Redis,所以提了工单让运维这边迁移。
方式1 使用 Redis dump工具(推荐)
- ## 官网 github
- https://github.com/delano/redis-dump
-
- ### 官网
- http://delanotes.com/redis-dump/
-
-
- ##### centos7 进行试验
- ###### 安装Redis-Dump
- yum -y install ruby ruby-devel
- yum -y install rubygems
-
- #### 安装redis-dump
- ### ruby需要2.6以上
-
- #### 使用源码包编译安装
- wget https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.7.tar.gz
- ./configure --prefix=/usr/local/ruby/
- make
- make install
-
- ###
- /usr/local/ruby/bin/gem install redis-dump
导入导出数据
- #### 以下是无密码的方式
- ### 导出
- /usr/local/ruby/bin/redis-dump -u 127.0.0.1:6379 >db_full.json
-
- ## 查看
- $sudo cat db_full.json
- {"db":0,"key":"city","ttl":-1,"type":"string","value":"cs","size":2}
- {"db":0,"key":"name","ttl":-1,"type":"string","value":"knight","size":6}
-
-
- ## 导入
- cat db_full.json |/usr/local/ruby/bin/redis-load -d 0
-
-
- #### 有密码的方式如下:
- ### 导出
- /usr/local/ruby/bin/redis-dump -u 127.0.0.1:6379 -a 123456 > db_full.json
-
- ### 导入
- cat db_full.json| /usr/local/ruby/bin/redis-load -u 127.0.0.1:6379 -a 123456
- [root@base-cicd-harbor test]#
-
-
-
-
redis-shake 是阿里的开源工具
- ## 官方帮助文档
- https://cloud.tencent.com/document/product/239/77372
-
- ### 云售后提供的文档
- https://cloud.tencent.com/developer/article/1780093
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。