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 时指定相关目录,启动失败,但没有提示,配置如图
解决:此处指定的文件都是基于 dir 的配置,直接配置文件名就好
Tips: pid 文件、log文件都不是基于dir的,是基于执行的根目录,而aof是基于的
问题4:集群端口除了基本的外部端口外,还有一个内部各实例的通信端口,基于外部端口+10000,即:原为:16379,则内部实例通信端口为:26379,注意不在被占用了
解决:修改端口;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 -p 6370 -c # 添加参数,使用Redis默认的集群客户端
思考:如果是其它语言呢!?