最近因我的项目须要搭建Redis集群。查找了一些相干博文和材料,踩了不少坑。上面是自己总结的Redis集群搭建步骤和搭建过程中遇到的坑,心愿对大家有帮忙。篇幅有点长,请急躁看。
1 下载安装Redis
Redis下载地址:https://github.com/MicrosoftArchive/redis/releases
装置过程比较简单,根本都是默认选项,不在赘述。能够自定义批改装置目录。(自己习惯性装置在D:Program Files目录下。)
2 创立Redis集群节点
Reids集群工作至多须要6个节点: 其中3个为主节点, 其余3个是各个主节点的从节点。主节点解体,从节点会主动被推选为主节点,代替主节点工作。
因自己条件无限,只能在一台机器上模仿6个Redis节点,别离对应地址和端口如下:
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
(Note:生产环境下,每个节点须要部署在独立的服务器上。如果部署在一台服务器上,那么只有服务器宕机,整个集群就无奈失常工作,不具备高可用性。)
2.1 配置节点
装置实现后,创立文件目录D:RedisCluster,同时创立6个Redis节点文件夹(以端口命名,不便记忆而已)。
复制D:Program FilesRedis目录下所有文件到D:RedisCluster6380目录下。配置6380节点。将redis.windows-service.conf文件重命名为redis.windows-service.6380.conf(重命名是为了不便辨别,不重命名应该也能够)。批改配置项如下:
port 6380loglevel noticeappendonly yesappendfilename "appendonly.6380.aof"cluster-enabled yescluster-config-file nodes.6380.confcluster-node-timeout 15000cluster-slave-validity-factor 10cluster-migration-barrier 1cluster-require-full-coverage yes
(其余节点依照上述步骤配置,上述配置项中6380全副改为对应节点端口号即可,其余配置项保持一致)
2.2 装置节点服务
配置实现后,须要将6个节点注册成服务。在6380节点目录下(即:D:RedisCluster6380)关上CMD,运行如下命令:
redis-server --service-install D:RedisCluster6380redis.windows-service.6380.conf --service-name Redis6380
排坑一:原本筹备将Redis节点放在Redis装置目录下(即:D:Program FilesRedis),然而因为全门路蕴含Program Files文件夹,两头有空格,导致在运行上述指令时,总是报错:
Invalid argument during startup: Failed to open the .conf file: FilesRedis6390redis.windows-service.6390.conf CWD=D:Program FilesRedis6390
起初,从新创立集群节点目录(即:D:RedisCluster6380),运行命令就失常了。
其余节点反复运行命令即可,如下图:
运行实现后,关上Windows零碎服务查看,6个Redis节点服务曾经装置胜利。启动所有节点服务。
3 下载安装Ruby
3.1 下载安装Ruby
下载地址:https://rubyinstaller.org/downloads/
3.2 装置Redis驱动
下载Ruby环境下的Redis驱动,下载地址: https://rubygems.org/gems/redis/versions/3.3.2
将下载的Redis驱动文件redis-3.3.2.gem复制到Ruby装置目录下(即:C:Ruby30-x64),关上CMD,运行如下命令:
gem install --local C:Ruby30-x64redis-3.3.2.gem
运行后果如下图,示意Redis驱动已装置胜利。
4 创立Redis集群
4.1 下载redis-trib.rb(redis集群管理工具)
下载地址:https://github.com/beebol/redis-trib.rb
下载后解压,并将文件复制到6380节点(即:D:RedisCluster6380)目录下
4.2 创立Redis集群
排坑二:在运行上面命令之前,不要设置Redis的集群明码。否则,会抛出无奈关上节点异样。设置明码,能够在集群搭建实现之后设置。后续有介绍。
在6380节点目录下关上CMD,运行命令如下:
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
(replicas 1 示意为集群中的每个主节点创立1个从节点)
上图能够看出:
主节点 | 从节点 | 槽 |
---|---|---|
6380 | 6383 | 0-5460 |
6381 | 6384 | 5461-10922 |
6382 | 6385 | 10923-16383 |
提醒Can I set the above configuration? (type 'yes' to accept),示意“是否采纳以上配置信息进行设置”。须要手动输出yes,提醒如下图信息,示意集群装置胜利。
4.3 验证集群运行状态
运行如下命令,查看集群节点运行状态
redis-cli -c -h 127.0.0.1 -p 6380
cluster nodes
运行命令:set test 1
Redis集群会依据Key值(test)计算出对应的槽,并重定向到对应的Redis节点,如下图,显示重定向到6384节点。如果集群配置了requirepass,会提醒“(error) NOAUTH Authentication required.”,示意须要登录认证。
运行认证命令:auth 12345678
运行之后,通过set和get命令验证Redis集群工作是否失常。如下图所示:
4.4 验证Redis集群机制
手动将其中1个主节点服务进行,例如6381。
再通过命令行查看集群状态。6381节点曾经是fail状态,6381节点的从节点6384被推选为主节点。阐明Redis集群工作机制失常。
5 设置Redis集群明码
进行所有Redis节点服务。
批改redis.windows-service.6380.conf配置文件,设置集群明码(Note:每个节点都须要设定明码且明码必须雷同),留神集群模式下,上面两行都须要设置。
requirepass 12345678
masterauth 12345678
默认配置项前都有“#”示意该配置项时正文状态。去掉“#”,输出明码即可。
设置实现后,启动所有Redis节点服务。
参考资料:
https://blog.csdn.net/kimihong/article/details/105171243
https://www.cnblogs.com/zhangrui153169/p/12837903.html
https://blog.csdn.net/tangyaliang11/article/details/78659473
https://www.modb.pro/db/15229