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 ...
随机推荐
- ios-屏幕适配(代码)
由于第一个项目中98%的界面都用到UITableView,所以适配仅判断此.知道手工敲代码的繁复,遂传一部分,如果有更优的方法,欢迎提出. 如下图,图中提到的宏定义是在prefix.pch预编绎文件里 ...
- PythonStudy——魔法函数 Magic Methods
魔法函数 python中以双下划线开始和结束的函数(不可自己定义)为魔法函数 调用类实例化的对象的方法时自动调用魔法函数(感觉不需要显示调用的函数都叫) 在自己定义的类中,可以实现之前的内置函数,比如 ...
- edgedb 强大的对象关系数据库
edgedb 是一个强大的对象关系数据库,构建在pg 之上. 包含的特性: 严格的强类型模式; 强大而富有表现力的查询语言; 丰富的标准库; 内置支持模式迁移; 本机GraphQL支持. 数据模型 从 ...
- qsort函数排序各种类型的数据。
qsort函数是库函数中的一员,我们先来看看官方文档是怎么写的: 其中qsort的参数void* base是传入一个数组,size_t num 为数组整体大小,size_t size 为单个元素的大小 ...
- Linux之文件(目录)默认权限、特殊权限与隐藏权限
文件默认权限 从Linux之用户组.文件权限详解了解到文件与目录的基本权限管理,文件在创建时如果不指定具体的权限,那么系统会给它分配一个默认的权限,这个默认权限就是umask. vbird@Ubunt ...
- koa2+log4js+sequelize搭建的nodejs服务
主要参考http://www.jianshu.com/p/6b816c609669这篇文章 npm安装使用国内taobao镜像,速度更快些 npm --registry https://registr ...
- Linux中加速访问github
1. 登录http://tool.chinaz.com/dns/ 2. 查询以下域名映射,并分别取访问速度较快的一个ip github.global.ssl.fastly.net -> ...
- java基础-反射(细节)
java面试题--java反射机制? Java反射机制的作用:1)在运行时判断任意一个对象所属的类.2)在运行时判断任意一个类所具有的成员变量和方法.3)在运行时任意调用一个对象的方法4)在运行时构造 ...
- 分布式CAP定理,为什么不能同时满足三个特性?
在弄清楚这个问题之前,我们先了解一下什么是分布式的CAP定理. 根据百度百科的定义,CAP定理又称CAP原则,指的是在一个分布式系统中,Consistency(一致性). Availability(可 ...
- 01-简单编写http服务器
package com.day3; import java.io.IOException; import java.io.InputStream; import java.net.ServerSock ...