Redis5 集群迁移方案

一、KEY优化

1.按原来要求进行优化与大KEY分拆。

二、现Redis 集群缩容(对业务无影响)

  1. 主节点按要求合并至3个主节点。
  2. 业务配置为3主4从
  3. 删除没有槽的主节点与相应从节点。

三、配置新Redis集群

  1. 按集群方式配置2个虚拟机或3台虚拟机(按最终集群要求,主从采用2个虚拟机,集群采用3台虚拟机,从节点先不建)。
  2. 增加监控。
  3. 测试,主集群备份RDB数据,复制至待迁移节点,查看过程时间与KEY数据是否相差不大。(测试脚本详细见附件)
  4. 把源集群至所有目标主节点的免密认证打开

四、正式迁移

  1. 关闭目标集群AOF与RDB备份文件。
  2. 更新配置回写至本地配置文件
  3. 关闭目标集群(注意非删除节点)
  4. 停止源集群(shudown save方式)
  5. 删除目标节点所有RDB文件与AOF文件。
  6. 复制源集群RDB至目标集群主节点(按主节点一一对应)。
  7. 启动目标集群
  8. 检查目标集群状态
  9. 核对目标集群与源集群KEY数量是否一至。
  10. 启动目标集群
  11. 开启所有集群AOF备份(从节点)
  12. 配置回写
  13. 修改业务模块Redis配置,并重启模块。
  14. 检查业务是否恢复。
  15. 更新完成

五、缩容与优化

  1. 等非本集群KEY过期与清理
  2. 按方案设计迁移槽点数量
  3. 修改模块Redis配置。
  4. 删除空主节点与增加相关从节点。

六、示例脚本

#!/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 集群迁移方案的更多相关文章

  1. zookeeper集群迁移方案

    后来问同事是怎么做的迁移:先启动一套新的集群,然后关闭老的集群,同时在老集群的一个IP:2181起了一个haproxy代理新集群以为这样,可以做到透明迁移=.=,其实是触发了ZK的bug-832导致不 ...

  2. Kafka跨集群迁移方案MirrorMaker原理、使用以及性能调优实践

    序言Kakfa MirrorMaker是Kafka 官方提供的跨数据中心的流数据同步方案.其实现原理,其实就是通过从Source Cluster消费消息然后将消息生产到Target Cluster,即 ...

  3. Redis 中常见的集群部署方案

    Redis 的高可用集群 前言 几种常用的集群方案 主从集群模式 全量同步 增量同步 哨兵机制 什么是哨兵机制 如何保证选主的准确性 如何选主 选举主节点的规则 哨兵进行主节点切换 切片集群 Redi ...

  4. MySQL高可用集群MHA方案

    MySQL高可用集群MHA方案 爱奇艺在用的数据库高可用方案 MHA 是目前比较成熟及流行的 MySQL 高可用解决方案,很多互联网公司正是直接使用或者基于 MHA 的架构进行改造实现 MySQL 的 ...

  5. 【转】最近搞Hadoop集群迁移踩的坑杂记

    http://ju.outofmemory.cn/entry/237491 Overview 最近一段时间都在搞集群迁移.最早公司的hadoop数据集群实在阿里云上的,机器不多,大概4台的样子,据说每 ...

  6. 使用jmeter对ActiveMQ集群性能方案进行评估--转载

    原文地址:http://www.51testing.com/html/78/23978-143163.html 1.测试概要1.1 关于这篇文档中涉及的基于JMS的消息系统能为应用程序提供可靠的,高性 ...

  7. Redis Cluster集群主从方案

    本文介绍一种通过Jedis和Cluster实现Redis集群(主从)的高可用方案,该方案需要使用Jedis2.8.0(推荐),Redis3.0及以上版本(强制). 附:Redis Cluster集群主 ...

  8. consul异地多数据中心以及集群部署方案

    consul异地多数据中心以及集群部署方案目的实现consul 异地多数据中心环境部署,使得一个数据中心的服务可以从另一个数据中心的consul获取已注册的服务地址 环境准备两台 linux服务器,外 ...

  9. Hive跨集群迁移

    Hive跨集群迁移数据工作是会出现的事情, 其中涉及到数据迁移, metastore迁移, hive版本升级等. 1. 迁移hdfs数据至新集群hadoop distcp -skipcrccheck ...

随机推荐

  1. c——根据天数输出日期

    <c语言程序设计>(第三版)何钦铭 P190 #include<stdio.h> void month_day(int year,int yearday,int *pmonth ...

  2. linux的基本操作2

    /dev/ha[a-d] IDE硬盘(过时了)/dev/sd[a-p] U盘,scsi,sata,ssd硬盘(流行)/dev/cdrom   光盘 CD-ROM/dev/mouse 鼠标 fdisk ...

  3. Appium介绍及工作原理

    一.Appium介绍 Appium是一个开源.跨平台的测试框架,可以用来测试原生及混合的移动端应用.Appium支持IOS.Android及FirefoxOS平台.Appium使用WebDriver的 ...

  4. [转] Linux运维常见故障排查和处理的技巧汇总

    作为linux运维,多多少少会碰见这样那样的问题或故障,从中总结经验,查找问题,汇总并分析故障的原因,这是一个Linux运维工程师良好的习惯.每一次技术的突破,都经历着苦闷,伴随着快乐,可我们还是执着 ...

  5. python中str函数isdigit、isdecimal、isnumeric的区别

    num = "1" #unicodenum.isdigit() # Truenum.isdecimal() # Truenum.isnumeric() # True num = & ...

  6. solrJ

    导入jar包 package com.tzy.solrJ; import java.io.IOException; import org.apache.solr.client.solrj.SolrSe ...

  7. [转]PostgreSQL命令行使用手册

    启动pgsl数据库 1 pg_ctl -D /xx/pgdata start 查看pgsl版本 1 pg_ctl --version 命令行登录数据库 1 psql -U username -d db ...

  8. phpcms调用语句

    title 标题:url 链接地址:thumb缩略图 :先调用moreinfo="1"  content 内容: {php list($copyfrom) = explode('| ...

  9. iOS ReactiveCocoa的使用

    一.ReactiveCocoa简介 reactiveCocoa简称RAC,它是一个三方框架,很多人把它叫做函数响应式编程框架,因为它具有函数式编程和响应式编程的特性. 由于该框架的编程思想,使得它具有 ...

  10. ECMAScript 6 学习总结

    1.什么是ES6? 简单的说 ES6 的第一个版本,在2015年6月发布了,正式名称就是<ECMAScript 2015标准>(简称 ES2015)在2016年6月,小幅修订的<EC ...