Redis5.0.8 11 redis集群运维工_redis-migrate-tool

数据导入导出工具redis-migrate-tool

需求背景:
刚切换到 redis 集群的时候,肯定会面临着数据导入的问题,这里推荐使用redis-migrate-tool 工具来导入单节点数据到集群里。

特点:
快速,多线程,基于redis复制,实时迁移。
迁移过程中,源集群不影响对外提供服务。
异构迁移,支持Twemproxy集群,redis cluster集群,rdb文件 和 aof文件。
过滤功能,当目标集群是Twemproxy,数据会跳过Twemproxy直接导入到后端的redis。

迁移状态显示,完善的数据抽样校验。

安装工具
https://github.com/tanruixing88/redis-migrate-tool
更新2018-12-08


Redis-Migrate-Tool(简称RMT),是唯品会2016年出的开源的redis数据迁移工具,主要用于异构redis集群间的数据在线迁移,即数据迁移过程中源集群仍可以正常接受业务读写请求,无业务中断服务时间。

###这里我们下载的是别人修改版的,已经可以支持redis5.0的数据迁移

本次实验的redis 版本 5.0.8

yum install autoconf automake libtool bzip2 git -y

cd /root/
git clone https://github.com/tanruixing88/redis-migrate-tool.git
cd redis-migrate-tool/
autoreconf -fvi
./configure
make
make install
创建配置文件:
cd /root/redis-migrate-tool
cat >redis_6379_to_6380.conf <<EOF
[source]
type: single
servers:
- 192.168.189.14:6379
[target]
type: redis cluster
servers:
- 192.168.189.14:6380
[common]
listen: 0.0.0.0:8888
source_safe: true
EOF

更多功能说明:https://www.oschina.net/p/redis-migrate-tool
++++++++++
生成测试数据:(192.168.189.14上面操作)

先启动 192.168.189.14:6379

/root/redis_shell.sh start 6379

或者 redis-cli -c -h 192.168.189.14 -p 6379

创建脚本(生成数据)

vim /root/input_key.sh
#!/bin/bash
for i in $(seq 1 1000)
do
 redis-cli -c -h 192.168.189.14 -p 6379 set aa_${i} v_${i}
 echo "set aa_${i} is ok"
done

执行脚本
sh /root/input_key.sh
登录192.168.189.14:6379
keys *



1112个key
登录集群,查看原有数据。



1 个key

总共 1113个key

开始导入数据:
redis-migrate-tool -c /root/redis-migrate-tool/redis_6379_to_6380.conf
-c ##指定配置文件


查看集群所有数据:







总共:1113个key,说明192.168.189.14:6379数据,已经全部导入到集群了。
数据抽样检验:
redis-migrate-tool -c /root/redis-migrate-tool/redis_6379_to_6380.conf -C redis_check



++++++++++++++
把一个文件的内容插入到key

redis-cli -c -h 192.168.189.14 -p 6380 set txt $(cat /root/test.txt)


key值 太多会显示乱码
可以把key值导出到一个文件中
redis-cli -c -h 192.168.189.14 -p 6380 get txt > /root/test1.txt



++++++++++++++++++++++

分析键值大小:

redis 的内存使用太大,键值太多,不知道哪些键值占用的容量比较大,而且在线分析会影响性能。

安装键值分析工具
yum install epel-release -y
yum install python-pip gcc python-devel -y

cd /opt
git clone https://github.com/sripathikrishnan/redis-rdb-tools
++++++++++++++++++++++++

或者:https://codeload.github.com/sripathikrishnan/redis-rdb-tools/zip/master

用浏览器下载下来,再上传值服务器,解压,再安装。

unzip redis-rdb-tools-master.zip -d /opt
cd /opt/redis-rdb-tools-master
python setup.py install

+++++++++++++++++++++++

cd redis-rdb-tools
python setup.py install

++++++++++++如果以上方法,安装的时候报错



可以用以下方法安装:
pip install python-lzf
pip install rdbtools python-lzf



此工具,只能支持到redis 3.5.3 ,

使用方法:
cd /data/redis_cluster/redis_6380

##把 rdb文件导出成 csv文件

rdb -c memory redis_6380.rdb -f redis_6380.rdb.csv



## 分析 这个csv文件,
awk -F"," '{print $4,$3}' redis_6380.rdb.csv|sort -rn >key_size.txt
打印 key 和 key值容量 ,按降序排序
打开这个key_size.txt 第一行就是 redis 里面 key 值,容量最大的key

 redis 3.2.9

++++++++++++++++++++++++++++++++++
redis 5.0 有自带的参数 --bigkeys 可以查找到最大的key值

redis-cli -h 192.168.189.16 -p 6380 --bigkeys



该命令使用scan方式对key进行统计,所以使用时无需担心对redis造成阻塞。

输出大概分为两部分,summary之上的部分,只是显示了扫描的过程。summary部分给出了每种数据结构中最大的Key。

统计出的最大key只有string类型是以字节长度为衡量标准的。list,set,zset等都是以元素个数作为衡量标准,不能说明其占的内存就一定多。所以,如果你的Key主要以string类型存在,这种方法就比较适合。

++++++++++

实时查看redis 内存使用情况和连接信息

redis-cli -h 192.168.189.16 -p 6380 -i 2 --stat

-i 后面2,表示,每2秒执行一次,默认为1秒。不用加 -i



++++++++

监控key 过期

需求背景:
因为开发重复提交,导致电商网站优惠券过期的时间失效

问题分析:
如果一个key 已经设置了过期时间,这时候再 set 这个 key ,过期时间就会取消。
解决思路:
如何在不影响机器性能的前提下,批量获取需要监控 key 过期时间
key 名,然后循环读取 ttl 时间
scan * 范围查询 key 名,然后循环读取 ttl 时间
keys 重复操作,会影响服务器性能,除非是不提供服务的从节点
scan 负担小,但是需要取多次才能取完,需要写脚本

++++++
redis 当你内存写满后,就不会处理数据了,有三种处理方法:
1、惰性删除:就是从最旧的数据开始删除,不管有没有用,一直删除到有足够的内存空间,让它能够正常工作为止。
2、随机删除:随机删除,一直删除到一直删除到有足够的内存空间,让它能够正常工作为止。
3、什么都不做,就会卡死,默认是这种。

redis 必做之事:限制内存大小:
配置文件里面:maxmemory <byte> ##建议 设置为你的内存的一半

当你的内存满了后,你应该清理数据了(删除占用大的key),而不是应该加内存。
+++++++++++
redis 动态调整内存故障:(不需要更改配置文件)
config get ##查看内存设置:


config set maxmemory 26843545600

config get maxmemory
config set maxmemory 0 ##不限制内存使用

动态内存调整只能调整的比实际占用的大,不能调整的比实际占用的小,不然就会报动态调整的参数不会写入到配置文件里,配置文件里也看不到最大内存使用限制,即使重启,动态配置也会生效,只能通过 config get maxmemory 和 config set maxmemory 0 来恢复配置

当你的内存不够(快用完了)了,这时,执行bgsave 就会一直写入失败报错,因为执行bgsave的时候,redis会划分出一部分内存来执行,这时没有足够的内存空间来完成写入,所以会一直报错。