本文主要记录在centos7中搭建redis集群过程中遇到的一个环境问题。
由于redis版本高低,决定是否需要安装ruby、rubygems环境来构建redis集群。
redis版本>=5.xxx,直接使用 ./redis-cli --cluster create 指令构建redis集群。
redis版本<5.xxx,需要安装ruby、rubygems环境,使用 ./redis-trib.rb create 指令构建redis集群,
下面一一说明:
1. redis版本>=5.xxx
如果直接使用redis 5.0版本的 redis-trib.rb 配置redis集群,会出现如下警告:
这是由于对于高版本的redis,如5.0版本,redis cluster安装方式不推荐使用redis-trib.rb,而是使用redis-cli,这样你就不用安装ruby等环境,可以直接构建redis集群,参考:centos7 安装redis集群
2. redis版本<5.xxx
此时需要安装ruby、rubygems环境。这时又有个比较坑的点在于ruby的版本问题。
注:为什么需要安装ruby环境?
对于低版本的redis,在使用集群方式部署时,redis官方提供了redis集群方式的工具:redis-trib.rb,位于/usr/local/src/redis-5.0.3/src目录下,它是用ruby写的一个程序,所以需要集群方式部署redis之前,需要安装Ruby环境。
网上最多的做法是采用指令:yum install ruby rubygems -y 安装,但是此方式在centos7环境下安装上的ruby版本如下:
显示已经是最新版本,但是对于后面搭建redis集群来说还是太低,不能通过指令的方式安装。
关于安装、升级ruby版本,参考: 安装、升级Ruby版本
完成安装、升级ruby版本后,还需要安装Ruby的redis接口,输入命令 " gem install redis " 进行安装。
完成后,使用redis压缩包中的redis-trib.rb文件,可以正常配置redis集群,指令如下:
./redis-trib.rb create --replicas 1 192.168.100.133:6661 192.168.100.133:6662 192.168.100.130:6663 192.168.100.130:6664 192.168.100.131:6665 192.168.100.131:6666
系统自动分配redis集群的主从节点。
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.100.133:6661
192.168.100.130:6663
192.168.100.131:6665
Adding replica 192.168.100.130:6664 to 192.168.100.133:6661
Adding replica 192.168.100.133:6662 to 192.168.100.130:6663
Adding replica 192.168.100.131:6666 to 192.168.100.131:6665
M: 438d8b20afbf19e943c3e4438e10f5f397d58235 192.168.100.133:6661
slots:0-5460 (5461 slots) master
S: bd1bd8fff0d61c8676515a25928bb9db9610ec1a 192.168.100.133:6662
replicates 41215ea696c07c620148bab64c6fec85e51893ba
M: 41215ea696c07c620148bab64c6fec85e51893ba 192.168.100.130:6663
slots:5461-10922 (5462 slots) master
S: 80f85ffd3111ce55eceb95f9380b3dae7287cce5 192.168.100.130:6664
replicates 438d8b20afbf19e943c3e4438e10f5f397d58235
M: 33753ef34809cfb445925c06345874a170a0c13a 192.168.100.131:6665
slots:10923-16383 (5461 slots) master
S: 180daddf71958db4adb95fdd01cf440809883e56 192.168.100.131:6666
replicates 33753ef34809cfb445925c06345874a170a0c13a
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join......
>>> Performing Cluster Check (using node 192.168.100.133:6661)
M: 438d8b20afbf19e943c3e4438e10f5f397d58235 192.168.100.133:6661
slots:0-5460 (5461 slots) master
M: bd1bd8fff0d61c8676515a25928bb9db9610ec1a 192.168.100.133:6662
slots: (0 slots) master
replicates 41215ea696c07c620148bab64c6fec85e51893ba
M: 41215ea696c07c620148bab64c6fec85e51893ba 192.168.100.130:6663
slots:5461-10922 (5462 slots) master
M: 80f85ffd3111ce55eceb95f9380b3dae7287cce5 192.168.100.130:6664
slots: (0 slots) master
replicates 438d8b20afbf19e943c3e4438e10f5f397d58235
M: 33753ef34809cfb445925c06345874a170a0c13a 192.168.100.131:6665
slots:10923-16383 (5461 slots) master
M: 180daddf71958db4adb95fdd01cf440809883e56 192.168.100.131:6666
slots: (0 slots) master
replicates 33753ef34809cfb445925c06345874a170a0c13a
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
注:初次使用redis5版本搭建集群,配置ruby环境与使用 ./redis-trib.rb create 指令搭建,但是此处第一次构建redis集群时,所有分配的节点都是master节点,如上所示,怀疑与版本兼容性有关,后使用 ./redis-cli --cluster 指令又重新分配redis集群节点,恢复正常三主三从。