首页 > 科技 > redis专题系列17 -- redis 集群模式之Cluster集群

redis专题系列17 -- redis 集群模式之Cluster集群

Cluster集群就是一个提供在多个Redis间节点间共享数据的程序集,是Redis 3.0版本以后引入的,是redis官方推荐的性能最高的集群模式。

架构模型


1.采取了去中心化的思想,没有中心节点

2.其对key的算法并非一致性hash算法,而是采用了哈希槽模型,每个集群拥有16384个hash slot,存储时,使用CRC16算法对key校验,然后对16384取模得到对应的哈希槽。

3.节点之间采用轻量通讯协议,占用带宽少,效率高

4.自动负载均衡,自动failover,支持动态扩展。

5.Cluster模式也是基于主从模式+哨兵衍生出来的,只不过数据节点本身也是哨兵节点,如果有半数节点发现某个节点异常,则共同决定故障节点状态,如果主节点故障,则其从节点晋升为主节点,主节点重启后降级为从节点。但是如果集群没有设置salve节点,一旦主节点挂掉,整个集群便进入fail状态,因为集群的slot映射不完整。如果集群超过半数以上的master挂掉,无论是否有slave,集群都会进入fail状态。

6.集群的规模至少有3台以上的master,这样比较合适集群的部署。

架构搭建实战

环境: win10 X64, redis 3.2.100

1.准备6份配置文件,3主3从,下面奉上其中一份配置的详情:


端口号依次从7000~7005,同样的集群配置文件的名称与端口号保持一致。

2.下载并安装ruby运行时环境

最新版本官网地址:https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.5-1/rubyinstaller-2.6.5-1-x64.exe

按照提示一步步向下走就好了,安装成功后,可以使用 ruby -v 检查是否成功。


孤安装的是2.6.3,国内网站下载的,官网太慢

3.下载ruby环境下Redis的驱动,考虑到兼容性,这里下载的是4.1.3版本

下载地址:https://rubygems.org/downloads/redis-4.1.3.gem,注意如果ruby的版本低于2.3.0,安装驱动时会报错。

4.安装Redis驱动

gem install --local path_to_gem/redis-4.1.3.gem 

5.下载创建Redis集群的ruby脚本文件redis-trib.rb,路径如下

github地址:https://github.com/beebol/redis-trib.rb,解压然后放到redis的安装目录下(建议)。


redis-trib.rb脚本

6.cd到redis安装目录,依次启动7000~7005

redis-server redis.7000.conf
redis-server redis.7001.conf
redis-server redis.7002.conf
redis-server redis.7003.conf
redis-server redis.7004.conf
redis-server redis.7005.conf

启动成功:


cluster模式


同时看到安装目录生成了对应节点的节点配置文件:


内容即记录自己节点的信息:


nodes.7000.conf


7.使用redis-trib.rb脚本配置集群,本例配置为3主3从模式


首先看命令:


执行命令后,会为集群配置master及对应的slave,最后你只需要在确认时输入yes即可,接着为3个master分配16384个hash slot:


master 7000对应的slot为:0-5460,master 7001对应的slot: 5461-10922,master 7002的slot范围:10923-16383,此时,16384个slot全部分配完毕。

8.同时将分配的信息更新到了nodes.7000.conf文件中,其他节点也会同步,如下:


其他节点信息也被更新到nodes.7000.conf文件中

9.测试

>redis-cli -c -p 7000
127.0.0.1:7000> set foo bar
-> Redirected to slot [12182] located at 127.0.0.1:7002
OK
127.0.0.1:7002> get foo
"bar"

可以看到redis将key foo经过CRC16(foo)对16384取模,定位到7002的slot上,并将值bar写入到7002的机器,返回client处理结果后,然后将命令同步到7005的从节点上。取值直接从7002执行命令。

10.故障模拟

此时kill掉7002的服务,观察集群的变化,此时执行命令 get foo

127.0.0.1:7000> get foo
-> Redirected to slot [12182] located at 127.0.0.1:7005
"bar"

看到,集群将自动跳转到7005取值了,那么7005是slave还是master呢?


nodes.7000.conf

从上面的配置信息中看到,7005成功晋升为master节点。


10.重启7002节点,看nodes.7000.conf配置信息的变化


7002重启后成为7005的子节点


此时一个简单的redis cluster 集群就搭建和部署OK了。

扩展:除了nodes.xxx.conf看cluster的集群配置信息,也可以通过cluster nodes查看。


下一篇文章将接着介绍Cluster模式下节点的动态扩展。

本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.sosokankan.com/article/1785685.html

setTimeout(function () { fetch('http://www.sosokankan.com/stat/article.html?articleId=' + MIP.getData('articleId')) .then(function () { }) }, 3 * 1000)