Redis集群策略主要有:
本文主要讲解如何搭建分布式集群。
一 所需软件:
Redis 3.2
Ruby语言运行环境
Redis的Ruby驱动redis-xxxx.gem
创建Redis集群的工具redis-trib.rb
二 安装配置redis
redis下载地址
https://github.com/MicrosoftArchive/redis/releases
1) 下载Redis-x64-3.2.100.zip。
**********************************************************************************************************************************************
要让集群正常运作至少需要3个主节点,建议配置3个主节点,其余3个作为各个主节点的从节点(也是官网推荐的模式)。
所以需要6台虚拟机。
主节点崩溃,从节点的Redis就会提升为主节点,代替原来的主节点工作,崩溃的主Redis恢复工作后,会再成为从节点。
**********************************************************************************************************************************************
2) 创建Redis集群目录
把 redis 解压后,再复制出 5 份,配置 三主三从集群。 由于 redis 默认端口号为 6379,那么其它5份的端口可以为6380,6381,6382,6383,6384。 并且把目录使用端口号命名
3) 修改配置文件
打开每个Redis目录下的文件 redis.windows.conf,修改里面的端口号分别对应相对应的文件夹名:6379、6380、6381、6382、6383、6384,
再修改集群支持配置,将以下配置前面的#去掉。
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
appendonly yes
cluster-config-file nodes-6379.conf 是为该节点的配置信息,这里使用 nodes-端口.conf命名方法。服务启动后会在目录生成该文件。
4) 编写启动脚本,或者进入每个端口命名的文件夹下启动服务
编写一个 bat 来启动 redis,在每个节点目录下建立 startup.bat,内容如下:
title redis-6379
redis-server.exe redis.windows.conf
title命名规则 redis-相对应的端口。
三 安装Ruby
redis的集群使用 ruby脚本编写,所以系统需要有 Ruby 环境 ,下载地址
https://rubyinstaller.org/downloads/
安装时3个选项都勾选。
四 安装Redis的Ruby驱动redis-xxxx.gem
下载地址 https://rubygems.org/pages/download
下载后解压,当前目录切换到解压目录中,如 D:\Program Files\Redis_cluster\rubygems-2.7.7 然后命令行执行 ruby setup.rb
再用 GEM 安装 Redis :切换到redis安装目录,需要在命令行中,执行 gem install redis
五 安装集群脚本redis-trib
下载地址 https://raw.githubusercontent.com/antirez/redis/unstable/src/redis-trib.rb
打开该链接把里面的脚本保存为redis-trib.rb,建议保存到一个Redis的目录下(不用每个都放),例如放到6379目录下。
注意:现在打开这个链接中的代码已不支持redis 5.0以下的版本了,需要下载老版本的
脚本,链接:
https://download.csdn.net/download/weixin_41846320/10760378
redis-trib.rb集群的命令为
redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384
--replicas 1 表示每个主数据库拥有从数据库个数为1。master节点不能少于3个,所以我们用了6个redis
六 启动每个节点并且执行集群构建脚本
把每个节点下的 start.bat双击启动, 在切换到redis目录在命令行中执行
redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384
这个命令只需输入一次就好了,之后节点关闭,重启就不需要再执行了
注意:如果出现 redis-trib.rb is not longer available! 如果redis版本是5.0以上,则使用如下命令:
redis-cli --cluster create 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 12
1:6382 127.0.0.1:6383 127.0.0.1:6384 --cluster-replicas 1
原因是redis5.0以上不再需要redis-trib.rb了,而是使用自带的redis-cli作为创建集群的命令了。
如果不是,那么将redis-trib.rb改为老版本就可以了。
在出现 Can I set the above configuration? (type 'yes' to accept): 请确定并输入 yes 。成功后的结果如下:
七 连接集群进行测试
使用Redis客户端Redis-cli.exe来查看数据记录数,以及集群相关信息
命令 redis-cli –c –h ”地址” –p "端口号" ; c 表示集群
查看集群的信息,命令:cluster info
查看主从关系,命令: info replication
主库显示信息:
查看各个节点分配slot,命令 cluster nodes
005c72fcbd96681520ed866e4d8b9d155e9da197 127.0.0.1:6383 slave 70e30d41c93a648043
14798cc756e2fc513eb8cc 0 1541145105902 5 connected
70e30d41c93a64804314798cc756e2fc513eb8cc 127.0.0.1:6380 master - 0 1541145103879
2 connected 5461-10922
521b02ed92b7fd3da92c00686f5b004fd1697cf6 127.0.0.1:6381 master - 0 1541145104878
3 connected 10923-16383
083402d0f0efa9f556da6e2f04b0dfecc014350c 127.0.0.1:6382 slave 5461e1d8f0d880f34b
51e548141d09b12cd8fdd6 0 1541145106902 4 connected
d0386b9f1b7f6c5a3a2687d3e454ad5a2999be7e 127.0.0.1:6384 slave 521b02ed92b7fd3da9
2c00686f5b004fd1697cf6 0 1541145102869 6 connected
5461e1d8f0d880f34b51e548141d09b12cd8fdd6 127.0.0.1:6379 myself,master - 0 0 1 connected 0-5460
可以看到有3个master,3个slave
以及可以看到master各自的slot分布情况
存几个值,看下值的分布
以6380节点为例,管理的slots为5461-10922,key为test的slot为6918,显然命中6380管理的卡槽6918,所以客户端也跳转到了6380。key为test1的slot为4768,在6379的卡槽范围0-5460,所以客户端又跳转到了6379。
Redis集群数据分配策略:
采用一种叫做哈希槽 (hash slot)的方式来分配数据,redis cluster 默认分配了 16384 个slot,当我们set一个key 时,会用CRC16算法来取模得到所属的slot,然后将这个key分到哈希槽区间的节点上,具体算法就是:CRC16(key) % 16384
注意的是:必须要3个以上的主节点,否则在创建集群时会失败,三个节点分别承担的slot 区间是:
节点A覆盖0-5460;
节点B覆盖5461-10922;
节点C覆盖10923-16383.
至此,Redis Cluster在Windows上的配置就完成了