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. BZOJ 2277 Poi2011 Strongbox

    题目大意:一个集合A,包含了0~n-1这n个数.另有一个集合B,满足: 1.B是A的子集. 2.如果a.b均在B中,则(a+b)%n也在B中(a=b亦可) 给出k个数ai,前k-1个不在B中,第k个在 ...

  2. rviz初接触

  3. 一、Ansible安装

    1:安装ansible ,选择的是yum 安装,简单,ansible的管理端必须是Linux系统       YUM是一个shell前端软件包管理器.基于RPM包管理,能够从指定的服务器自动下载RPM ...

  4. PostgreSQL获取所有表名、字段名、字段类型、注释

    转载自:http://blog.csdn.net/cicon/article/details/51577655 获取表名及注释: select relname as tabname,cast(obj_ ...

  5. springboot中添加热部署

    <dependency> <!--Spring 官方提供的热部署插件 --> <groupId>org.springframework.boot</group ...

  6. 八皇后(DFS)

    题目描述 会下国际象棋的人都很清楚:皇后可以在横.竖.斜线上不限步数地吃掉其他棋子.如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题. 对于某个满足要求的8 ...

  7. Linux集群之keepalive+Nginx

    集群从功能实现上分高可用和负载均衡: 高可用集群,即“HA"集群,也常称作“双机热备”. 当提供服务的机器宕机,备胎将接替继续提供服务: 实现高可用的开源软件有:heartbeat.keep ...

  8. jenkins-1

    1 下载jenkins,https://jenkins.io/download/, 我在此处用的是war的的形式启动的,配置tomact的server.xml,如果是一个主机多个tomact的话还要编 ...

  9. wampserver_x86_3.0.6 允许外网访问配置教程

    1.打开wamp目录下的apache配置文件中的httpd.conf 用可以看行数的编辑器打开 大概244行: 改为 <Directory /> AllowOverride none Re ...

  10. python字符串前面的r/u/b的意义 (笔记)

    u/U:表示unicode字符串 : 不是仅仅是针对中文, 可以针对任何的字符串,代表是对字符串进行unicode编码. r/R:非转义的原始字符串: 与普通字符相比,其他相对特殊的字符,其中可能包含 ...