码迷,mamicode.com
首页 > 其他好文 > 详细

redis集群扩容

时间:2020-10-09 21:40:42      阅读:46      评论:0      收藏:0      [点我收藏+]

标签:运行   官网   ip)   ruby   lazy   master   mamicode   分配   and   

1.集群的数据迁移

在工作中经常会遇到redis集群的扩容的场景,因为当一个集群服务器中的内存不够用无法支撑更大数据量的缓存或者并发量不够(个人理解),就会将原有的集群扩展。集群扩容需要将集群中原有的master节点上的槽位以及数据迁移到新加入的master节点上。

每个槽都把要里面的数据迁移完才能进行下一个槽几千个槽成千上万个key手动挨个循环遍历太麻烦了因此扩容都是用ruby脚本工具来进行的,本文中以三节点的集群扩容为四节点为案例。

首先要安装好ruby的依赖环境可以到官网查看安装教程www.rubygems.org,安装后可以进入安装目录下运行./redis-trib.rb查看使用文档

然后创建好新节点的数据目录以及安装目录加入节点到集群中(192.168.108.54为新节点的通信ip)

./redis-trib-rb add-node 192.168.108.54:6380   192.168.108.51:6380  master

./redis-trib-rb add-node 192.168.108.54:6381    192.168.108.52:6380  slave

然后执行./redis-trib.rb reshard 192.168.108.51:6380 重新分配槽位

因为这个要保证集群负载平均,因此要将16384个槽平均分到四个master节点上,即每个master节点4096个槽,具体步骤如下:

技术图片

 

 这样就完成了集群的扩容,可能大家对于集群的槽还会有一定疑问?下面我就为大家解释一下

redis集群中内置16384 0-16383个哈希槽,当需要在redis集群中放置一个key-value时,redis先对key使用crc16校验算法算出一个结果,然后把这个结果对16384求余数,这样每个key都会对应一个编号在0-16383之间的哈希槽,redis会根据节点数量大致均匀的将哈希槽映射到不同的节点,即对16384取模来决定放置那个槽,集群的每个节点负责一部分hash槽,这种结构很容易添加或者删除节点,并且无论是添加删除或者修改某一个节点,都不会造成集群不可用的状态,并且这个算法是足够随机足够平均的。

 

redis集群扩容

标签:运行   官网   ip)   ruby   lazy   master   mamicode   分配   and   

原文地址:https://www.cnblogs.com/litong1/p/13787478.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!