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