UDN-企业互联网技术人气社区

板块导航

浏览  : 1736
回复  : 0

[讨论交流] 安全稳定实现redis cluster自动化迁移(上)

[复制链接]
白青青的头像 楼主
发表于 2016-4-15 08:00:06 | 显示全部楼层 |阅读模式
  背景

  目前redis集群最火的是codis和redis cluster(官方),但官方自带工具并没有支持密码操作。那么需要密码认证使用redis cluster集群的同学要仔细看了哦。

  相信大家很多人已经使用了redis cluster,而且也肯定会用到核心应用,你是否考虑过如下问题?

  • redis cluster无密码,被改数据
  • redis cluster无密码,被flushall (你是否有要哭的冲动哈哈)
  • redis cluster无密码,数据在光天化日(你对用户不负责)
  • redis cluster无密码,你要担心各种被黑(日志好苦)

  此时你是否需要密码认证?(我猜你想立刻马上),哈哈问题来了,你在创建集群和管理时是否遇到如下麻烦?

  • redis cluster 官方redis-trib.rb 不支持密码,你要手工用命令一个一个加入集群
  • 添加减节点不方便
  • 更重要的是你的分片工具不能用,你要抓狂么?
  • 管理需要手工
  • 你要疯掉

  有没有办法解决呢?有,我相信很多公司已经会用认证方式来管理,只是目前我是没搜到相关资料。怎么办?

  我有办法!

  • 原封不动的封装了redis cluster 集群添加减节点功能,并支持密码认证
  • 针对对同台机器多master挂掉后集群不可用时,自动快速迁移槽位进行修复,保证程序可用
  • 自动对新加节点迁移槽位
  • 自动迁移槽位和数据给指定节点
  • 自动根据当前结点master进行自动分片

  你是不是已经心动了呢?那么接下来让你更想行动!

  Redis cluster 集群介绍

  • 多个Redis间节点间共享数据的程序集
  • 通过分区(partition)来提供一定程度的可用性
  • 使用数据分片(sharding)而非一致性哈希(consistency hashing)来实现包含 16384 个哈希槽,也就是可以扩展16384实例
  • 节点自动发现,从节点自动升级为主节点无需人工操作
  • slave->master 选举,自动集群容错
  • 无中心化
  • gossip 协议来发布广播消息,基于P2P协议,无代理
  • 水平扩展
  • 在Cluster推出之前,可用性要靠Sentinel保证。有了集群之后也自动具有了Sentinel的监控和自动Failover能力。
  • 具体参考:官方文档:http://www.redis.cn/topics/cluster-tutorial.html
  • 官方使用自带的ruby工具(redis-trib.rb)不支持密码

  集群相关命令介绍

  1、集群
2.png

  2、节点
2.png

  3、键
2.png

  环境准备

  1、程序下载地址:
2.png

  2、系统依赖环境:
2.png

  命令使用方法:
2.png

2.png

  机器环境准备

  安装部署:

  ip地址:
2.png

  1、下载安装redis在此不做介绍
2.png

  2、两台机器分别创建7000-7002端口并启动redis

  ip地址及端口如下:至于主从怎么安排自己定义(但在生产环境建议主从分开部署在不同机器)

  主要文件配置
2.png

  迁移工具对集群进行测试

  1、在218上启动各个redis后 ,查看当前集群信息
2.png

  2、利用初始化槽位slot,将所有槽位分给此节点
2.png

2.png

  集群状态

  查看日志显示如下:说明槽位已经ok,状态正常
2.png

  2.1 查看集群信息已经分配

  再次显示集群状态:
2.png

  2.2 在205 上启动所有节点

  执行如下命令,我是将不同端口使用不通配置文件,可自行安排
2.png

  2.3 在218 上添加新节点

  添加新节点
2.png

  2.4 查看集群状态
2.png

  2.5 对新加的节点进行分配slot

  2.5.1 自动分配slot给205:7000和218:7000 节点

  #注:根据本机多个master 进行自动分配。

  #对CLUSTER SETSLOT NODE 此命令进行的循环封装。会默认把0-16383个槽位均分到当前master节点

  #分配方法:16383/当前master节点总数 然后进行节点循环设置槽位
2.png

  #注意红色ip部分,显示对81槽位进行广播,在205 和218 上都进行广播,将81给node节点2404b44e4937c65c73cbccb778776e392619c776 ,节点是自行判断无需指定

  2.5.2 查看集群信息:

  #发现已经平均分配
2.png

  2.5.3 插入数据测试:

  #先手动进行插入数据测试集群是否正常

  #自动set数据测试脚本如下

  #-c 参数为支持集群模式
2.png

  3、手动迁移数据

  3.1 先手动进行模拟测试:

  #为了测试工具的可用性及对比,先进行手动测试,看是否迁移数据成功

  显示集群信息
2.png

  3.2 将9842 槽位从172.16.10.218:7000节点导入172.16.10.205:7000节点
2.png

  3.3 将9842 槽位从172.16.10.218:7000节点迁出172.16.10.205:7000节点
2.png

  3.4 计算218 节点9842 槽位的key
2.png

  3.5 列出key值
2.png

  3.6 迁移key
2.png

2.png

  3.7 获取143511 key的值
2.png

  3.8 再次获取集群信息:
2.png

原文作者:庞阔  来源:DBAplus社群


  扩展阅读:

  安全稳定实现redis cluster自动化迁移(下)

相关帖子

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部