Redis数据迁移
2020-01-03 本文已影响0人
唯爱熊
一. 数据迁移
1.安装工具
[root@redis01 ~]# yum install libtool autoconf automake git bzip2 -y
[root@redis01 ~]# cd /opt/
[root@redis01 /opt]# git clone https://github.com/vipshop/redis-migrate-tool.git
[root@redis01 /opt]# cd redis-migrate-tool/
[root@redis01 /opt/redis-migrate-tool]# autoreconf -fvi
[root@redis01 /opt/redis-migrate-tool]# ./configure
[root@redis01 /opt/redis-migrate-tool]# make && make install
2.编写配置文件
[root@redis01 /opt/redis-migrate-tool]# cat > 6379_to_6380.conf << EOF
[source]
type: single
servers:
- 10.0.0.73:6379
[target]
type: redis cluster
servers:
- 10.0.0.73:6380
[common]
listen: 0.0.0.0:8888
source_safe: true
EOF
3.单节点生成测试数据
[root@redis01 /opt/redis-migrate-tool]# redis-server /opt/redis_6379/conf/redis_6379.conf
[root@redis01 /opt/redis-migrate-tool]# cat >input_6379.sh<<EOF
#!/bin/bash
for i in {1..1000}
do
redis-cli -c -h db01 -p 6379 set oldzhang_\${i} oldzhang_\${i}
echo "set oldzhang_\${i} is ok"
done
EOF
[root@redis01 /opt/redis-migrate-tool]# sh input_6379.sh
4.运行工具迁移单节点数据到集群
[root@redis01 /opt/redis-migrate-tool]# redis-migrate-tool -c 6379_to_6380.conf
5.运行工具验证数据是否迁移完成
[root@redis01 /opt/redis-migrate-tool]# redis-migrate-tool -c 6379_to_6380.conf -C redis_check
二.RDB文件迁移到集群
1.先把集群的RDB文件都收集起来\
- 在从节点上执行bgsave命令生成RDB文件
[root@redis01 ~]# redis-cli -h 10.0.0.73 -p 6381 BGSAVE
[root@redis01 ~]# redis-cli -h 10.0.0.74 -p 6381 BGSAVE
[root@redis01 ~]# redis-cli -h 10.0.0.75 -p 6381 BGSAVE
2.把从节点生成的RDB文件拉取过来
[root@redis01 ~]# mkdir rdb_backup
[root@redis01 ~]# cd rdb_backup/
[root@redis01 ~/rdb_backup]# scp 10.0.0.73:/data/redis_6381/redis_6381.rdb 10.0.0.73_6381.rdb
[root@redis01 ~/rdb_backup]# scp 10.0.0.74:/data/redis_6381/redis_6381.rdb 10.0.0.74_6381.rdb
[root@redis01 ~/rdb_backup]# scp 10.0.0.75:/data/redis_6381/redis_6381.rdb 10.0.0.75_6381.rdb
3.清空数据
[root@redis01 ~]# redis-cli -c -h 10.0.0.73 -p 6380 flushall
[root@redis01 ~]# redis-cli -c -h 10.0.0.74 -p 6380 flushall
[root@redis01 ~]# redis-cli -c -h 10.0.0.75 -p 6380 flushall
7.编写配置文件
[root@redis01 ~]# cat >rdb_to_cluter.conf <<EOF
[source]
type: rdb file
servers:
- /root/rdb_backup/db01_6381.rdb
- /root/rdb_backup/db02_6381.rdb
- /root/rdb_backup/db03_6381.rdb
[target]
type: redis cluster
servers:
- 10.0.0.51:6380
[common]
listen: 0.0.0.0:8888
source_safe: true
EOF
8.使用工具导入
[root@redis01 ~]# redis-migrate-tool -c rdb_to_cluter.conf
三.使用工具分析key的大小
1.需求背景
redis的内存使用太大键值太多,不知道哪些键值占用的容量比较大,而且在线分析会影响性能.
2.安装命令
[root@redis01 ~]# yum install python-pip gcc python-devel -y
[root@redis01 ~]# cd /opt/
[root@redis01 /opt]# git clone https://github.com/sripathikrishnan/redis-rdb-tools
[root@redis01 /opt]# cd redis-rdb-tools
[root@redis01 /opt]# pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-lzf
[root@redis01 /opt]# mkdir ~/.pip/
[root@redis01 /opt]# cat >~/.pip/pip.conf <<EOF
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = https://pypi.tuna.tsinghua.edu.cn
EOF
[root@redis01 /opt]# pip install redis
[root@redis01 /opt]# python setup.py install
2.生成测试数据
redis-cli -h 10.0.0.73 -p 6379 set txt $(cat txt.txt)
3.执行bgsave生成rdb文件
[root@redis01 ~]#redis-cli -h 10.0.0.73 -p 6379 BGSAVE
3.使用工具分析
[root@redis01 ~]#cd /data/redis_6379/
[root@redis01 /data/redis_6379]# rdb -c memory redis_6379.rdb -f redis_6379.rdb.csv
4.过滤分析
[root@redis01 /data/redis_6379]# awk -F"," '{print $4,$3}' redis_6379.rdb.csv |sort -r
5.将结果整理汇报给领导,询问开发这个key是否可以删除
四. 使用工具将rdb转换成json
[root@redis01 /data/redis_6379]# rdb --command json redis_6379.rdb -f redis_6379.rdb.json
五.使用工具对比rdb文件差异
cd /root/rdb_backup
rdb --command diff db01_6381.rdb | sort > dump1.txt
rdb --command diff db02_6381.rdb | sort > dump2.txt
vimdiff dump1.txt dump2.txt