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. 在Linux中执行.sh脚本,异常

    在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory. 分析:这是不同系统编码格式引起的:在windows系统中 ...

  2. Linux Centos7下如何确认MySQL服务已经启动

    Linux CentOS一般做为服务器使用,因此,MySQL服务应该随开机自动启动的.正常情况下,查看开机自动启动的服务使用chkconfig命令,如下: #chkconfig --list 实际使用 ...

  3. 菜鸟Vue学习笔记(二)

    上一篇文章跟大家分享了Vue笔记上半部分,这篇文章接着跟大家分享.最近学习Vue越来越顺利了,今天接着学习,接着记录. 首先,来学习下常用的v-bind属性,它的作用是在属性中使用vue中定义的变量的 ...

  4. python从含有汉字和数字的字符串中提取数字部分

    我遇到的问题是:我想要从字符串“1小时12分钟”中(其中两个数字是变化的)截取出1和12. 切片的方法比较简单,但不适合变化的字符串. filter(str.isdigit,"1小时12分钟 ...

  5. OLAP + MDX

    基本概念 维度(Dimension):表示数据的属性,一个维度一般会有一个维表(也可能多个),事实表会有一个字段关联维表. 退化维度:有的维度可以没有维度表,因为这种维度比较简单,没有更多属性,没有必 ...

  6. AR外包,就找北京动点软件,长年承接AR外包(案例丰富可签合同,内附案例演示)

    北京团队长年承接AR项目外包 咨询QQ:372900288  微信:liuxiang0884 以下是AR项目案例演示,索取更多案例请通过以上方式在线联系我们

  7. Excel函数匹配查找

    需求 例如:北京沃尔玛有限公司,由已知的沃尔玛缩写,将两者进行匹配. 函数 lookup() 第一个参数“Lookup_value”:是要查找的值:第二个参数“lookup_vector”:是要查找的 ...

  8. 刘志梅2017710101152.《面向对象程序设计(java)》第一周学习总结

    本人学号<面向对象程序设计(java)>第一周学习总结 第一部分:课程准备部分 填写课程学习 平台注册账号, 平台名称 注册账号 博客园:www.cnblogs.com http://ww ...

  9. python网页爬虫开发之三

    1.抓取目录页后用lxml进行页面解析,获取抓取列表 python3.6 urlparse模块变为urllib.parse 2.Python中有一个专门生成各类假数据的库:Faker 3.python ...

  10. Oracle 查询合并列

    在ORACLE  查询时,有时要将多个列合并成一行,其方法如下: 1. decode 函数 decode 函数的语法为: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省 ...