redis5 集群迁移方案
Redis5 集群迁移方案
一、KEY优化
1.按原来要求进行优化与大KEY分拆。
二、现Redis 集群缩容(对业务无影响)
- 主节点按要求合并至3个主节点。
- 业务配置为3主4从
- 删除没有槽的主节点与相应从节点。
三、配置新Redis集群
- 按集群方式配置2个虚拟机或3台虚拟机(按最终集群要求,主从采用2个虚拟机,集群采用3台虚拟机,从节点先不建)。
- 增加监控。
- 测试,主集群备份RDB数据,复制至待迁移节点,查看过程时间与KEY数据是否相差不大。(测试脚本详细见附件)
- 把源集群至所有目标主节点的免密认证打开
四、正式迁移
- 关闭目标集群AOF与RDB备份文件。
- 更新配置回写至本地配置文件
- 关闭目标集群(注意非删除节点)
- 停止源集群(shudown save方式)
- 删除目标节点所有RDB文件与AOF文件。
- 复制源集群RDB至目标集群主节点(按主节点一一对应)。
- 启动目标集群
- 检查目标集群状态
- 核对目标集群与源集群KEY数量是否一至。
- 启动目标集群
- 开启所有集群AOF备份(从节点)
- 配置回写
- 修改业务模块Redis配置,并重启模块。
- 检查业务是否恢复。
- 更新完成
五、缩容与优化
- 等非本集群KEY过期与清理
- 按方案设计迁移槽点数量
- 修改模块Redis配置。
- 删除空主节点与增加相关从节点。
六、示例脚本
#!/bin/sh
#获取源集群KEY数量
r1=`redis-cli -c -h 192.168.115.106 -p 7000 info|grep db0:keys|awk -F "=" '{print$2}'|awk -F "," '{print$1}'`
r2=`redis-cli -c -h 192.168.115.108 -p 7004 info|grep db0:keys|awk -F "=" '{print$2}'|awk -F "," '{print$1}'`
r3=`redis-cli -c -h 192.168.115.107 -p 7002 info|grep db0:keys|awk -F "=" '{print$2}'|awk -F "," '{print$1}'`
echo $r1-$r2-$r3
#获取目标集群KEY数量
s1=`redis-cli -c -h 192.168.115.106 -p 8001 info|grep db0:keys|awk -F "=" '{print$2}'|awk -F "," '{print$1}'`
s2=`redis-cli -c -h 192.168.115.106 -p 8002 info|grep db0:keys|awk -F "=" '{print$2}'|awk -F "," '{print$1}'`
s3=`redis-cli -c -h 192.168.115.106 -p 8003 info|grep db0:keys|awk -F "=" '{print$2}'|awk -F "," '{print$1}'`
echo $s1-$s2-$s3
##关闭目标集群的AOF
redis-cli -c -h 192.168.115.106 -p 8001 CONFIG SET appendonly 'no'
redis-cli -c -h 192.168.115.106 -p 8002 CONFIG SET appendonly 'no'
redis-cli -c -h 192.168.115.106 -p 8003 CONFIG SET appendonly 'no'
#配置持久化到本地
redis-cli -c -h 192.168.115.106 -p 8001 CONFIG REWRITE
redis-cli -c -h 192.168.115.106 -p 8002 CONFIG REWRITE
redis-cli -c -h 192.168.115.106 -p 8003 CONFIG REWRITE
#关闭目标节点,如果有从节点,先关闭从节点
redis-cli -c -h 192.168.115.106 -p 8004 SHUTDOWN save
redis-cli -c -h 192.168.115.106 -p 8005 SHUTDOWN save
redis-cli -c -h 192.168.115.106 -p 8006 SHUTDOWN save
redis-cli -c -h 192.168.115.106 -p 8001 SHUTDOWN save
redis-cli -c -h 192.168.115.106 -p 8002 SHUTDOWN save
redis-cli -c -h 192.168.115.106 -p 8003 SHUTDOWN save
#清理目标集群AOF与RDB文件,主节点
rm -rf /dfs/redis5_test/8001/*.aof
rm -rf /dfs/redis5_test/8001/*.rdb
rm -rf /dfs/redis5_test/8002/*.aof
rm -rf /dfs/redis5_test/8002/*.rdb
rm -rf /dfs/redis5_test/8003/*.aof
rm -rf /dfs/redis5_test/8003/*.rdb
#源集群主节点备份
redis-cli -c -h 192.168.115.106 -p 7000 bgsave
redis-cli -c -h 192.168.115.108 -p 7004 bgsave
redis-cli -c -h 192.168.115.107 -p 7002 bgsave
#判断备份文件是否生成
i4=0
i4=`ls /dfs/redis_cluster/7000/dump.rdb |wc -l`
echo $i4
for i4 in {0}
do
sleep 5
i4=`ls /dfs/redis_cluster/7000/dump.rdb |wc -l`;
done
cp -rf /dfs/redis_cluster/7000/dump.rdb /dfs/redis5_test/8001/
i4=0
i4=`ssh 192.168.115.108 'ls /dfs/redis_cluster/7004/dump.rdb |wc -l'`
for i4 in {0}
do
sleep 5
i4=`ssh 192.168.115.108 'ls /dfs/redis_cluster/7004/dump.rdb |wc -l'`;
done
scp 192.168.115.108:/dfs/redis_cluster/7004/dump.rdb /dfs/redis5_test/8002/
i4=0
i4=`ssh 192.168.115.107 'ls /dfs/redis_cluster/7002/dump.rdb |wc -l'`
for i4 in {0}
do
sleep 5
i4=`ssh 192.168.115.107 'ls /dfs/redis_cluster/7002/dump.rdb |wc -l'`;
done
scp 192.168.115.107:/dfs/redis_cluster/7002/dump.rdb /dfs/redis5_test/8003/
#启动目标集群
redis-server /dfs/redis5_test/8001/redis.conf
redis-server /dfs/redis5_test/8002/redis.conf
redis-server /dfs/redis5_test/8003/redis.conf
#获取目标集群KEY数量
s1=`redis-cli -c -h 192.168.115.106 -p 8001 info|grep db0:keys|awk -F "=" '{print$2}'|awk -F "," '{print$1}'`
s2=`redis-cli -c -h 192.168.115.106 -p 8002 info|grep db0:keys|awk -F "=" '{print$2}'|awk -F "," '{print$1}'`
s3=`redis-cli -c -h 192.168.115.106 -p 8003 info|grep db0:keys|awk -F "=" '{print$2}'|awk -F "," '{print$1}'`
echo $s1-$s2-$s3
七、注意事项
集群槽要对槽
redis5 集群迁移方案的更多相关文章
- zookeeper集群迁移方案
后来问同事是怎么做的迁移:先启动一套新的集群,然后关闭老的集群,同时在老集群的一个IP:2181起了一个haproxy代理新集群以为这样,可以做到透明迁移=.=,其实是触发了ZK的bug-832导致不 ...
- Kafka跨集群迁移方案MirrorMaker原理、使用以及性能调优实践
序言Kakfa MirrorMaker是Kafka 官方提供的跨数据中心的流数据同步方案.其实现原理,其实就是通过从Source Cluster消费消息然后将消息生产到Target Cluster,即 ...
- Redis 中常见的集群部署方案
Redis 的高可用集群 前言 几种常用的集群方案 主从集群模式 全量同步 增量同步 哨兵机制 什么是哨兵机制 如何保证选主的准确性 如何选主 选举主节点的规则 哨兵进行主节点切换 切片集群 Redi ...
- MySQL高可用集群MHA方案
MySQL高可用集群MHA方案 爱奇艺在用的数据库高可用方案 MHA 是目前比较成熟及流行的 MySQL 高可用解决方案,很多互联网公司正是直接使用或者基于 MHA 的架构进行改造实现 MySQL 的 ...
- 【转】最近搞Hadoop集群迁移踩的坑杂记
http://ju.outofmemory.cn/entry/237491 Overview 最近一段时间都在搞集群迁移.最早公司的hadoop数据集群实在阿里云上的,机器不多,大概4台的样子,据说每 ...
- 使用jmeter对ActiveMQ集群性能方案进行评估--转载
原文地址:http://www.51testing.com/html/78/23978-143163.html 1.测试概要1.1 关于这篇文档中涉及的基于JMS的消息系统能为应用程序提供可靠的,高性 ...
- Redis Cluster集群主从方案
本文介绍一种通过Jedis和Cluster实现Redis集群(主从)的高可用方案,该方案需要使用Jedis2.8.0(推荐),Redis3.0及以上版本(强制). 附:Redis Cluster集群主 ...
- consul异地多数据中心以及集群部署方案
consul异地多数据中心以及集群部署方案目的实现consul 异地多数据中心环境部署,使得一个数据中心的服务可以从另一个数据中心的consul获取已注册的服务地址 环境准备两台 linux服务器,外 ...
- Hive跨集群迁移
Hive跨集群迁移数据工作是会出现的事情, 其中涉及到数据迁移, metastore迁移, hive版本升级等. 1. 迁移hdfs数据至新集群hadoop distcp -skipcrccheck ...
随机推荐
- Arch Linux pacman 与其他发行版操作比较
原文:https://wiki.archlinux.org/index.php/Pacman/Rosettahttps://old-en.opensuse.org/Software_Managemen ...
- laravel的filter()方法的使用 (方法使用给定的回调函数过滤集合的内容,只留下那些通过给定真实测试的内容)
filter 方法使用给定的回调函数过滤集合的内容,只留下那些通过给定真实测试的内容: $collection = collect([1, 2, 3, 4]); $filtered = $collec ...
- 怎样使用PL/SQL在不安装oracle 客户端的情况下使用oracle数据库
在网上查了好多这方面的例子,但是似乎说的都不准确,在咨询朋友后终于实现了本机不安装oracle 的情况下,在windows系统上实现连接服务器上的数据库,现在贴出来与大家共享. 首先,我们需要一个PL ...
- [zz] 拍照需谨慎:20张错位照片让人笑喷
http://www.kaixin001.com/qiushi/repaste/105876543_10386791939.html?uid=130103872&urpid=103957489 ...
- LVM快照备份与恢复
简介 最近在做数据备份方面的工作,用到两个工具,一个是dd,而另一个是lvm的快照(snapshot).由于数据比较大,直接是用dd非常耗时,而lvm的快照可以在几秒内轻松搞定,而且可以达到实时的 ...
- Excel--按内容分页打印
当我们有这样一张表,需要按不同城市分页打印,每页带标题行,可按以下步骤:1.点击城市一列任一单元格,点击“开始”——>“排序和筛选”(升序): 2.点击“数据”-->“分类汇总”: 分类字 ...
- 安装JVCL/JCL组件
在安装的时候,注意要先安装JCL,我试图直接安装JVCL,提示找不到文件,先安装JCL后再安装就不存在这个问题.安装到组件面板上的安装包以D结尾,可以Install,以R结尾的只要编译就可以了. 安装 ...
- springboot+mockito 异常解决方案
系统启动的异常日志如下 javax.net.ssl.* java.lang.IllegalStateException: Failed to load ApplicationContext at or ...
- 饥饿的牛(dp一维最大覆盖)
问题 H: 饥饿的牛 时间限制: 1 Sec 内存限制: 128 MB提交: 12 解决: 12[提交][状态][讨论版][命题人:外部导入][Edit] [TestData] [同步数据] 题目 ...
- cookie.js插件
/*! cookiejs v1.0.23 | MIT (c) 2018 kenny wong | https://github.com/jaywcjlove/cookie.js */!function ...