最近因项目需要搭建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 6380
loglevel notice
appendonly yes
appendfilename "appendonly.6380.aof"
cluster-enabled yes
cluster-config-file nodes.6380.conf
cluster-node-timeout 15000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-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