redis 3.0 cluster 集群

2023-01-31 05:01:48 redis 集群 3.0

周氏一族,整理技术文档,给下一代留点教程......


Redis 3.0 cluster 安装篇,请看 Http://zhoushouby.blog.51cto.com/9150272/1560400


本篇,是在 "redis 3.0 cluster 集群 学习之路篇 [2]" 的基础上面实现 “实际生产中Redis服务器部署” 安装调试以及测试


六台服务器

server21      10.1.3.21         

server22      10.1.3.22

server23      10.1.3.23

server24      10.1.3.24

server25      10.1.3.25

server26      10.1.3.26

---------------------------------每一台/etc/hosts里面都有添加一一对应记录



redis.conf 配置如下

port  6379

daemonize yes

cluster-enabled yes

cluster-config-file /usr/local/redis/nodes.conf  

cluster-node-timeout 5000

dir /usr/local/redis

细心看,你会发现,上面多了一个路径,对的,个人习惯,我给redis创建了一个单独的目录,方便以后查找。


六台机器,所有配置一模一样,统一配置。


一路下来,完全没问题,每一台都能独立的运行redis服务

redis-server /usr/local/redis/redis.conf > /usr/local/redis/redis.log 2>&1 &


但是,当我要来给他们开始集群的时候,就发生下面这么一幕情况

[root@server21 src]# ./redis-trib.rb create --replicas 1 10.1.3.21:6379 10.1.3.22:6379 10.1.3.26:6379 10.1.3.25:6379 10.1.3.24:6379 10.1.3.23:6379

>>> Creating cluster

Connecting to node 10.1.3.21:6379: OK

Connecting to node 10.1.3.22:6379: OK

Connecting to node 10.1.3.26:6379: OK

Connecting to node 10.1.3.25:6379: OK

Connecting to node 10.1.3.24:6379: OK

Connecting to node 10.1.3.23:6379: OK

>>> PerfORMing hash slots allocation on 6 nodes...

Using 3 masters:

10.1.3.23:6379

10.1.3.24:6379

10.1.3.25:6379

Adding replica 10.1.3.26:6379 to 10.1.3.23:6379

Adding replica 10.1.3.22:7379 to 10.1.3.24:6379

Adding replica 10.1.3.21:7379 to 10.1.3.25:6379

S: fe32667413D75aa9dcebf28aa53fe4ed0df91bba 10.1.3.21:6379

   replicates 7f4c3a0ea64c9f85e7d239c8968c94818decb9a8

S: 3b10b61ebf7ff4e618a945aa353e9e113541557a 10.1.3.22:6379

   replicates f6c6fac2ada651819fac2ddc0daa91f54062a261

S: 0f9a72b4cb6b1ec2d20cc5f0d82be29925c8a050 10.1.3.26:6379

   replicates 96dda21bf7dc9ba81c160375b39a59aedf78733d

M: 7f4c3a0ea64c9f85e7d239c8968c94818decb9a8 10.1.3.25:6379

   slots:10923-16383 (5461 slots) master

M: f6c6fac2ada651819fac2ddc0daa91f54062a261 10.1.3.24:6379

   slots:0-10922 (10923 slots) master

M: 96dda21bf7dc9ba81c160375b39a59aedf78733d 10.1.3.23:6379

   slots:0-10922 (10923 slots) master

Can I set the above configuration? (type 'yes' to accept): yes

/usr/lib64/ruby/gems/1.8/gems/redis-3.0.7/lib/redis/client.rb:97:in `call': ERR Slot 16011 is already busy (Redis::CommandError)

        from /usr/lib64/ruby/gems/1.8/gems/redis-3.0.7/lib/redis.rb:2432:in `method_missing'

        from /usr/lib64/ruby/gems/1.8/gems/redis-3.0.7/lib/redis.rb:37:in `synchronize'

        from /usr/lib/ruby/1.8/monitor.rb:242:in `mon_synchronize'

        from /usr/lib64/ruby/gems/1.8/gems/redis-3.0.7/lib/redis.rb:37:in `synchronize'

        from /usr/lib64/ruby/gems/1.8/gems/redis-3.0.7/lib/redis.rb:2431:in `method_missing'

        from ./redis-trib.rb:203:in `flush_node_config'

        from ./redis-trib.rb:629:in `flush_nodes_config'

        from ./redis-trib.rb:628:in `each'

        from ./redis-trib.rb:628:in `flush_nodes_config'

        from ./redis-trib.rb:964:in `create_cluster_cmd'

        from ./redis-trib.rb:1340:in `send'

        from ./redis-trib.rb:1340

[root@server21 src]# 


人生,从此不再寂寞了,开启蛋疼模式


开始找问题,蛋疼的就是他一个错误日志都没有,没法下手。

没办法之下,只好问度娘了,但是,网上看得我眼花缭乱,在大陆,只能找到这么一出玩意

http://blog.csdn.net/moxiaomomo/article/details/19333547


感觉有点道理,因为我的生产环境,之前是redis 2.x的版本,今天更新到3.0,可能会是我redis没卸载干净导致的。

好,二话不说,把服务器再清理一遍,然后重启一下。因为安装步骤都是按照我之前的来,没出现过问题,而且之前在VM里面装的时候,VM的系统是全新的,所以觉得他这个有点道理。开始捣腾起来了。


半个小时候过后,问题依旧,又来到这个问题了。


最终没办法,翻一下墙,泡一下老外redis开源问答区,碰见这个问题的,还不少,比中国大陆好多了,至少搜索下来,有那么10几篇文章,都是在咨询这个问题,但是没有最终的答案


别人不行,那就只能靠自己了。

/usr/lib64/ruby/gems/1.8/gems/redis-3.0.7/lib/redis/client.rb:97:

他提示我说97行这里不行,那就编辑他,gg到87行这里定位一下


终于,总算,找到问题所在了。这个是因为port和nodes文件的问题,不能设置成相同nodes名字的,而且端口也设置成不一样。


晒一下,我最终的配置

[root@server21 ~]# ll /usr/local/redis/

total 60

-rw-r--r-- 1 root root    89 Oct  3 20:02 appendonly.aof

-rw-r--r-- 1 root root    18 Oct  3 20:17 dump.rdb

-rw-r--r-- 1 root root   733 Oct  3 19:30 nodes-8021.conf

-rw-r--r-- 1 root root   115 Oct  3 17:27 nodes.conf

-rw-r--r-- 1 root root 37019 Oct  3 18:48 redis.conf

-rw-r--r-- 1 root root    22 Oct  3 18:56 redis.log

[root@server21 ~]# 


server21      port  8021       nodes-8021.conf

server22      port  8022       nodes-8022.conf

server23      port  8023       nodes-8023.conf

server24      port  8024       nodes-8024.conf

server25      port  8025       nodes-8025.conf

server26      port  8026       nodes-8026.conf


折腾了快两个小时,最后一次通过,这种感觉超爽!!!

[root@server21 src]# ./redis-trib.rb create --replicas 1 10.1.3.21:8021 10.1.3.22:8022 10.1.3.23:8023 10.1.3.24:8024 10.1.3.25:8025 10.1.3.26:8026

>>> Creating cluster

Connecting to node 10.1.3.21:8021: OK

Connecting to node 10.1.3.22:8022: OK

Connecting to node 10.1.3.23:8023: OK

Connecting to node 10.1.3.24:8024: OK

Connecting to node 10.1.3.25:8025: OK

Connecting to node 10.1.3.26:8026: OK

>>> Performing hash slots allocation on 6 nodes...

Using 3 masters:

10.1.3.26:8026

10.1.3.25:8025

10.1.3.24:8024

Adding replica 10.1.3.23:8023 to 10.1.3.26:8026

Adding replica 10.1.3.22:8022 to 10.1.3.25:8025

Adding replica 10.1.3.21:8021 to 10.1.3.24:8024

S: 690bb1a31fff14557483e1e6dea60e5e748fff41 10.1.3.21:8021

   replicates 89efca75e220cdeb159e1e4954b953337563683f

S: ae258d0a8e31d2cac64aaad62327ec85c3ce12d7 10.1.3.22:8022

   replicates da00c6e9cf5f572396d7cfb006cbcb98e69928ee

S: 8d45084d0ec34c4547c7e57228a5db0ba7eeeba2 10.1.3.23:8023

   replicates e25ffd0663bf13d5b6aa6a397ffb0c21e4b11e05

M: 89efca75e220cdeb159e1e4954b953337563683f 10.1.3.24:8024

   slots:10923-16383 (5461 slots) master

M: da00c6e9cf5f572396d7cfb006cbcb98e69928ee 10.1.3.25:8025

   slots:5461-10922 (5462 slots) master

M: e25ffd0663bf13d5b6aa6a397ffb0c21e4b11e05 10.1.3.26:8026

   slots:0-5460 (5461 slots) master

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 10.1.3.21:8021)

M: 690bb1a31fff14557483e1e6dea60e5e748fff41 10.1.3.21:8021

   slots: (0 slots) master

   replicates 89efca75e220cdeb159e1e4954b953337563683f

M: ae258d0a8e31d2cac64aaad62327ec85c3ce12d7 10.1.3.22:8022

   slots: (0 slots) master

   replicates da00c6e9cf5f572396d7cfb006cbcb98e69928ee

M: 8d45084d0ec34c4547c7e57228a5db0ba7eeeba2 10.1.3.23:8023

   slots: (0 slots) master

   replicates e25ffd0663bf13d5b6aa6a397ffb0c21e4b11e05

M: 89efca75e220cdeb159e1e4954b953337563683f 10.1.3.24:8024

   slots:10923-16383 (5461 slots) master

M: da00c6e9cf5f572396d7cfb006cbcb98e69928ee 10.1.3.25:8025

   slots:5461-10922 (5462 slots) master

M: e25ffd0663bf13d5b6aa6a397ffb0c21e4b11e05 10.1.3.26:8026

   slots:0-5460 (5461 slots) master

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

[root@server21 src]# ./redis-trib.rb check 10.1.3.21:8021

Connecting to node 10.1.3.21:8021: OK

Connecting to node 10.1.3.23:8023: OK

Connecting to node 10.1.3.26:8026: OK

Connecting to node 10.1.3.25:8025: OK

Connecting to node 10.1.3.24:8024: OK

Connecting to node 10.1.3.22:8022: OK

>>> Performing Cluster Check (using node 10.1.3.21:8021)

S: 690bb1a31fff14557483e1e6dea60e5e748fff41 10.1.3.21:8021

   slots: (0 slots) slave

   replicates 89efca75e220cdeb159e1e4954b953337563683f

S: 8d45084d0ec34c4547c7e57228a5db0ba7eeeba2 10.1.3.23:8023

   slots: (0 slots) slave

   replicates e25ffd0663bf13d5b6aa6a397ffb0c21e4b11e05

M: e25ffd0663bf13d5b6aa6a397ffb0c21e4b11e05 10.1.3.26:8026

   slots:0-5460 (5461 slots) master

   1 additional replica(s)

M: da00c6e9cf5f572396d7cfb006cbcb98e69928ee 10.1.3.25:8025

   slots:5461-10922 (5462 slots) master

   1 additional replica(s)

M: 89efca75e220cdeb159e1e4954b953337563683f 10.1.3.24:8024

   slots:10923-16383 (5461 slots) master

   1 additional replica(s)

S: ae258d0a8e31d2cac64aaad62327ec85c3ce12d7 10.1.3.22:8022

   slots: (0 slots) slave

   replicates da00c6e9cf5f572396d7cfb006cbcb98e69928ee

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

[root@server21 src]# 


写下来,给后来者留点脚印......



相关文章