目的:主要是为了学习windows下redis集群搭建,参考博客https://blog.csdn.net/hao495430759/article/details/80540407,博主博客已经写的很详细,按照步骤完全可以成功,我在学习的过程中,主要是添加一些注意事项。
搭建准备:
下面开始介绍windows下集群搭建。
注意事项:首先我们构建集群节点目录.集群正常运作至少需要三个主节点,不过在刚开始试用集群功能时, 强烈建议使用六个节点: 其中三个为主节点, 而其余三个则是各个主节点的从节点。主节点崩溃,从节点的Redis就会提升为主节点,代替原来的主节点工作,崩溃的主Redis回复工作后,会成为从节点 )。
拷贝开始下载的redis解压后的目录,并修改文件名(比如按集群下redis端口命名)如下:
6380,6381,6382,6383,6384,6385对应的就是后面个节点下启动redis的端口。
在节点目录下新建文件,输入(举例在6380文件夹下新建文件)
title redis-6380;
redis-server.exe redis.windows.conf
然后保存为start.bat 下次启动时直接执行该脚本即可;
接着分别打开各个文件下的 redis.windows.conf,分别修改如下配置(举例修改6380文件下的redis.window.conf文件):
port 6380 //修改为与当前文件夹名字一样的端口号 appendonly yes
//指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启, 可能会在断电时导致一段时间内的数据丢失。
yes表示:存储方式,aof,将写操作记录保存到日志中 cluster-enabled yes //开启集群模式
cluster-config-file nodes-6380.conf //保存节点配置,自动创建,自动更新(建议命名时加上端口号)
cluster-node-timeout 15000 //集群超时时间,节点超过这个时间没反应就断定是宕机
注意:在修改配置文件这几项配置时,配置项前面不能有空格,否则启动时会报错(参考下面)
其他文件节点 6381~6385也修改相应的节点配置信息和建立启动脚本(略)。
下载Ruby并安装:
下载地址:http://railsinstaller.org/en 这里下载的是2.3.3版本:
构建集群脚本redis-trib.rb
可以打开 https://raw.githubusercontent.com/antirez/redis/unstable/src/redis-trib.rb 然后复制里面的内容到本地并保存为redis-trib.rb;
如下图,与redis集群节点保存在同一个文件夹下(比如我所有节点都存放在redis-cluster文件夹下)。
7. 然后依次启动所有集群节点start.bat
然后cmd进入redis集群节点目录后,执行: (–replicas 1 表示为集群中的每个主节点创建一个从节点)
redis-trib.rb create --replicas 1 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 127.0.0.1:6385
将会出现下图的输出信息
注意事项:如果执行命令跳转到打开文件的页面,那么首先需要先修改redis-trib.rb文件,上面链接拿到的是最新版本的5.0后的版本,只需要从从官网找到redis对应版本,或者搜索redis-trib.rb文件下载,第二步命令执行前面添加ruby,如下;
ruby redis-trib.rb create --replicas 1 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 127.0.0.1:6385
上图可看出 主节点为6380,6381,6382 端口的三个地址,6384,6385,6383为三个从节点
中途会询问是否打印更多详细信息,输入yes即可,然后redis-trib 就会将这份配置应用到集群当中,让各个节点开始互相通讯
这样redis集群就搭建完成了,下面进行测试阶段
Redis集群数据分配策略:
采用一种叫做哈希槽 (hash slot)的方式来分配数据,redis cluster 默认分配了 16384 个slot,三个节点分别承担的slot 区间是:(上图3个M:节点的slots描述)
节点6380覆盖0-5460;
节点6381覆盖5461-10922;
节点6382覆盖10923-16383.
集群搭建并启动成功。。。
4.测试集群
进入任意一个集群节点,cmd执行 redis-cli.exe -c -p 6381
hset redis:test:hash Hash1 12345
可以看到集群会用CRC16算法来取模得到所属的slot,然后将这个key分到哈希槽区间的节点上CRC16(key) % 1638
所以,可以看到我们set的key计算之后被分配到了slot-162 上, 而slot-162处在节点6380上,因此redis自动redirect到了6380节点上。