Redis Cluster 配置与问题

CentOS7 + Redis 4.0 + Redis-trib.rb 【Ruby 2.5.1源码安装 + redis 4.0】
端口如下: 16370 16371 26370 26371 36370 36371 【直接导致了问题4
集群命令:

./redis-trib.rb create --replicas 1 \
127.0.0.1:16370 127.0.0.1:26370 127.0.0.1:36370 \
127.0.0.1:16371 127.0.0.1:26371 127.0.0.1:36371

问题1:...is not configured as a cluster node.

解决:没有开启配置: 修改 Clusster-enable yes

问题2:

*** FATAL CONFIG FILE ERROR *** Reading the configuration file, at line 23 >>> 'slaveof 127.0.0.1 16370' slaveof directive not allowed in cluster mode

解决:通过脚本启动集群配置,不允许一开始就配置脚本,会自己通过脚本来配置主从,注意脚本执行的参数

问题3: 配置文件中指定 cluster-config-file 时指定相关目录,启动失败,但没有提示,配置如图

redis-cluster-config目录异常导致启动失败,且没有相关的提示

解决:此处指定的文件都是基于 dir 的配置,直接配置文件名就好
Tips:  pid 文件、log文件都不是基于dir的,是基于执行的根目录,而aof是基于的

问题4:集群端口除了基本的外部端口外,还有一个内部各实例的通信端口,基于外部端口+10000,即:原为:16379,则内部实例通信端口为:26379,注意不在被占用了

Redis cluster 启动会占用两个端口,容易导致链接失败

解决:修改端口;Redis集群中每个redis实例(可能一台机部署多个实例)会使用两个Tcp端口,一个用于给客户端(redis-cli或应用程序等)使用的端口,另一个是用于集群中实例相互通信的内部总线端口,且第二个端口比第一个端口一定大10000.内部总线端口通信使用特殊协议,以便实现集群内部高带宽低时延的数据交换。

修改之后的端口: 6370 6371 6372 26373 6374 6375

思考:集群中,在启动各实例之后,其PID,LOG好像都不对劲啊!

使用源码中的脚本执行集群:

./redis-trib.rb create --replicas 1 127.0.0.1:6370 127.0.0.1:6371 127.0.0.1:6372 127.0.0.1:6373 127.0.0.1:6374 127.0.0.1:6375

# 上面的命令会自动创建集群,并分配地址槽,执行的结果与说明如下:

[root@DevSys src]# ./redis-trib.rb create \ # 创建一个新的集群
> --replicas 1 \ # 为每个主节点创建一个从节点【Slave配置】
> 127.0.0.1:6370 127.0.0.1:6371 127.0.0.1:6372 \ # 节点
> 127.0.0.1:6373 127.0.0.1:6374 127.0.0.1:6375  # 节点
>>> Creating cluster # 创建集群
>>> Performing hash slots allocation on 6 nodes... # 6个节点上分配槽
Using 3 masters: # 三个主节点
127.0.0.1:6370
127.0.0.1:6371
127.0.0.1:6372
# 三个主节点与其对应的从节点,下面信息通过运行ID也可以确定,但不好看
Adding replica 127.0.0.1:6374 to 127.0.0.1:6370
Adding replica 127.0.0.1:6375 to 127.0.0.1:6371
Adding replica 127.0.0.1:6373 to 127.0.0.1:6372
# 优化从节点的配置
>>> Trying to optimize slaves allocation for anti-affinity
# 警告:主从节点在同一个主机上的
[WARNING] Some slaves are in the same host as their master
M: e294d1933720c584bc732b13fc22a8ecabe21433 127.0.0.1:6370
   slots:0-5460 (5461 slots) master
M: 05f5be078d51170accf39265c093399705085d2f 127.0.0.1:6371
   slots:5461-10922 (5462 slots) master
M: fc82150dcbd095df203dd8e7335a8d40ddb5cd95 127.0.0.1:6372
   slots:10923-16383 (5461 slots) master
S: acde69cece14c59f5f31638241d364374d865f60 127.0.0.1:6373
   replicates fc82150dcbd095df203dd8e7335a8d40ddb5cd95
S: 59c9138ae73a6f16dc01e1452f508d30b7299664 127.0.0.1:6374
   replicates e294d1933720c584bc732b13fc22a8ecabe21433
S: d002be0480613a8ba93dc75f220c22fa9a40c2bf 127.0.0.1:6375
   replicates 05f5be078d51170accf39265c093399705085d2f
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 127.0.0.1:6370) # 检查
M: e294d1933720c584bc732b13fc22a8ecabe21433 127.0.0.1:6370
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: d002be0480613a8ba93dc75f220c22fa9a40c2bf 127.0.0.1:6375
   slots: (0 slots) slave
   replicates 05f5be078d51170accf39265c093399705085d2f
M: fc82150dcbd095df203dd8e7335a8d40ddb5cd95 127.0.0.1:6372
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
M: 05f5be078d51170accf39265c093399705085d2f 127.0.0.1:6371
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 59c9138ae73a6f16dc01e1452f508d30b7299664 127.0.0.1:6374
   slots: (0 slots) slave
   replicates e294d1933720c584bc732b13fc22a8ecabe21433
S: acde69cece14c59f5f31638241d364374d865f60 127.0.0.1:6373
   slots: (0 slots) slave
   replicates fc82150dcbd095df203dd8e7335a8d40ddb5cd95
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

测试:

redis-cli -p 6370

报错:

redis-cli 默认是不支持集群服务器的,报错:(error) MOVED 5798 127.0.0.1:6371

解决:

redis-cli -p 6370 -c # 添加参数,使用Redis默认的集群客户端

思考:如果是其它语言呢!?