Amazon web services EC2 t2.micro上的Redis Cluster 3.2.0(无弹性)
经过一番周折,我陷入了僵局。我正试图在一个t2.micro上设置一个包含3个主节点和3个从节点的redis群集。我在本地主机上的设置工作得很好,但当我尝试在EC2上运行它时,我遇到了一个奇怪的问题,我的客户端(在单独的t2.micro上使用ioredis)似乎可以找到并连接,但如果我的客户端在http中,则会反复抛出许多错误,如“ioredis:连接错误:错误:connect ECONREFUSE”。如果切换到https,则会出现其他不同的超时错误和“手动关闭”错误(尝试在群集选项中设置TLS标志无效)Amazon web services EC2 t2.micro上的Redis Cluster 3.2.0(无弹性),amazon-web-services,redis,cluster-computing,ioredis,Amazon Web Services,Redis,Cluster Computing,Ioredis,经过一番周折,我陷入了僵局。我正试图在一个t2.micro上设置一个包含3个主节点和3个从节点的redis群集。我在本地主机上的设置工作得很好,但当我尝试在EC2上运行它时,我遇到了一个奇怪的问题,我的客户端(在单独的t2.micro上使用ioredis)似乎可以找到并连接,但如果我的客户端在http中,则会反复抛出许多错误,如“ioredis:连接错误:错误:connect ECONREFUSE”。如果切换到https,则会出现其他不同的超时错误和“手动关闭”错误(尝试在群集选项中设置TLS标
TL;博士 思想??为什么我不能使用redis trib使用publicIP(而不是127.0.0.1)创建集群?这似乎解决了我的问题,或者我在这里缺少了什么明显的东西,比如防火墙?。。。 如果你正在阅读这篇文章并与redis抗争,下面列出的几点可以很好地总结google和stackoverflow顶部页面上几乎所有建议的redis解决方案。好好利用它们 在阅读了几个类似的主题后,我发现它们都没有解决这个问题。这是我尝试过的
export var cluster = new Redis.Cluster([{
port: 30010,
host: '52.36.xxx.xxx'
}, {
port: 30011,
host: '52.36.xxx.xxx'
},{
port: 30012,
host: '52.36.xxx.xxx'
}]);
30010 nodes.conf
337e0c0152cc88590d73048a6f97120934d94da8 127.0.0.1:30010 myself,master - 0 0 1 connected 0-5460
8f7cf7a0016c372ebaaffd76b903e26e47f2a513 127.0.0.1:30014 slave 882fed6d144b6dea1531691deb323a3ae0b52936 0 1471601371978 5 connected
2c36b871bbdb6f8b98a2562ff315bf79ca524ec5 127.0.0.1:30013 slave 337e0c0152cc88590d73048a6f97120934d94da8 1471601372982 1471601368969 4 connected
265b166b7231a7c0a8017f4f7fad90261d59fb96 127.0.0.1:30015 slave 42e5b9b8ab9e1d2eefe1832e118085b4e44ae65d 0 1471601367966 6 connected
882fed6d144b6dea1531691deb323a3ae0b52936 127.0.0.1:30011 master - 0 1471601369972 2 connected 5461-10922
42e5b9b8ab9e1d2eefe1832e118085b4e44ae65d 127.0.0.1:30012 master - 0 1471601370977 3 connected 10923-16383
vars currentEpoch 6 lastVoteEpoch 0
127.0.0.1:30010> cluster nodes
337e0c0152cc88590d73048a6f97120934d94da8 127.0.0.1:30010 myself,master - 0 0 1 connected 0-5460
8f7cf7a0016c372ebaaffd76b903e26e47f2a513 127.0.0.1:30014 slave 882fed6d144b6dea1531691deb323a3ae0b52936 0 1471601610630 5 connected
2c36b871bbdb6f8b98a2562ff315bf79ca524ec5 127.0.0.1:30013 slave 337e0c0152cc88590d73048a6f97120934d94da8 0 1471601611632 4 connected
265b166b7231a7c0a8017f4f7fad90261d59fb96 127.0.0.1:30015 slave 42e5b9b8ab9e1d2eefe1832e118085b4e44ae65d 0 1471601609627 6 connected
882fed6d144b6dea1531691deb323a3ae0b52936 127.0.0.1:30011 master - 0 1471601612634 2 connected 5461-10922
42e5b9b8ab9e1d2eefe1832e118085b4e44ae65d 127.0.0.1:30012 master - 0 1471601607622 3 connected 10923-16383
客户端错误:sudo DEBUG=ioredis:*node app.js
ioredis:redis status[127.0.0.1:30010]: close -> end +1ms
ioredis:redis status[127.0.0.1:30012]: wait -> connecting +0ms
ioredis:connection error: Error: connect ECONNREFUSED 127.0.0.1:30012 +0ms
ioredis:redis status[127.0.0.1:30012]: connecting -> close +0ms
ioredis:connection skip reconnecting because `retryStrategy` is not a function +0ms
ioredis:redis status[127.0.0.1:30012]: close -> end +0ms
ioredis:cluster status: connect -> close +0ms
ioredis:cluster status: close -> reconnecting +0ms
ioredis:delayqueue send 1 commands in failover queue +94ms
REDIS222 CONNECT error Error: Failed to refresh slots cache.
node error Error: timeout
at Object.exports.timeout (/home/ubuntu/main2/node_modules/ioredis/lib/utils/index.js:153:36)
at Cluster.getInfoFromNode (/home/ubuntu/main2/node_modules/ioredis/lib/cluster/index.js:552:32)
at tryNode (/home/ubuntu/main2/node_modules/ioredis/lib/cluster/index.js:347:11)
at Cluster.refreshSlotsCache (/home/ubuntu/main2/node_modules/ioredis/lib/cluster/index.js:362:3)
SSH连接到redis t2.micro和netstat。似乎正在侦听正确的端口(30010-30015
ubuntu@ip-xxx-xx-xx-xxx:~$ sudo netstat -ntlp | grep LISTEN
tcp 0 0 0.0.0.0:40013 0.0.0.0:* LISTEN 1328/redis-server *
tcp 0 0 0.0.0.0:40014 0.0.0.0:* LISTEN 1334/redis-server *
tcp 0 0 0.0.0.0:40015 0.0.0.0:* LISTEN 1336/redis-server *
tcp 0 0 0.0.0.0:30010 0.0.0.0:* LISTEN 1318/redis-server *
tcp 0 0 0.0.0.0:30011 0.0.0.0:* LISTEN 1322/redis-server *
tcp 0 0 0.0.0.0:30012 0.0.0.0:* LISTEN 1324/redis-server *
tcp 0 0 0.0.0.0:30013 0.0.0.0:* LISTEN 1328/redis-server *
tcp 0 0 0.0.0.0:30014 0.0.0.0:* LISTEN 1334/redis-server *
tcp 0 0 0.0.0.0:30015 0.0.0.0:* LISTEN 1336/redis-server *
tcp 0 0 0.0.0.0:40010 0.0.0.0:* LISTEN 1318/redis-server *
tcp 0 0 0.0.0.0:40011 0.0.0.0:* LISTEN
1322/redis-server *
tcp 0 0 0.0.0.0:40012 0.0.0.0:* LISTEN
SSH连接到客户端t2.micro并从redis远程服务器远程调用群集节点,然后返回正确的环回设置:
ubuntu@ip-xxx-xx-xx-x:~/redis-3.2.2/src$ ./redis-cli -h 52.36.237.185 -p 30010 cluster nodes
337e0c0152cc88590d73048a6f97120934d94da8 127.0.0.1:30010 myself,master - 0 0 1 connected 0-5460
8f7cf7a0016c372ebaaffd76b903e26e47f2a513 127.0.0.1:30014 slave 882fed6d144b6dea1531691deb323a3ae0b52936 0 1471629274223 5 connected
2c36b871bbdb6f8b98a2562ff315bf79ca524ec5 127.0.0.1:30013 slave 337e0c0152cc88590d73048a6f97120934d94da8 0 1471629275225 4 connected
265b166b7231a7c0a8017f4f7fad90261d59fb96 127.0.0.1:30015 slave 42e5b9b8ab9e1d2eefe1832e118085b4e44ae65d 0 1471629272217 6 connected
882fed6d144b6dea1531691deb323a3ae0b52936 127.0.0.1:30011 master - 0 1471629276228 2 connected 5461-10922
42e5b9b8ab9e1d2eefe1832e118085b4e44ae65d 127.0.0.1:30012 master - 0 1471629277231 3 connected 10923-16383
-------------------------------------------------------
想法??为什么我不能使用redis trib用publicIP(而不是127.0.0.1)创建集群?这似乎可以解决我的问题,或者我在这里缺少了防火墙之类的东西
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
更新
我在redis服务器上本地运行了redis-trib.rb检查,结果显示一切都很好:
ubuntu@ip-172-xx-xx-xxx:~/redis-3.2.2/src$ ./redis-trib.rb check 127.0.0.1:30010
>>> Performing Cluster Check (using node 127.0.0.1:30010)
...
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
但当我使用redis publicIP从我的客户端在不同的实例上运行它时,我得到:
ubuntu@ip-172-xx-xx-x:~/redis-3.2.2/src$ ./redis-trib.rb check redispublicIP:30010
[ERR] Sorry, can't connect to node 127.0.0.1:30014
[ERR] Sorry, can't connect to node 127.0.0.1:30013
[ERR] Sorry, can't connect to node 127.0.0.1:30015
[ERR] Sorry, can't connect to node 127.0.0.1:30011
[ERR] Sorry, can't connect to node 127.0.0.1:30012
>>> Performing Cluster Check (using node redispublicIP:30010)
M: 337e0c0152cc88590d73048a6f97120934d94da8 redispublicIP:30010
slots:0-5460 (5461 slots) master
0 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[ERR] Not all 16384 slots are covered by nodes.
因此,看起来我确实需要切换127.0.0.1。如果我使用publicIP:port,它允许我从客户端连接到单个节点,但当它试图找到其他节点时,它必须认为它们是本地的
更新2:
这似乎是我的问题,但我已仔细检查,6个redis.conf文件中没有设置密码:
更新3:本文非常接近,但我不理解他的解决方案:
src/redis-trib.rb创建127.0.0.1:6379 127.0.0.1:6380 h2:p1 h2:p2 h3:p1 h3:p2
特别是为什么他在h2:p1h2:p2h3:p1h3:p2之后声明主机和端口
更新4: 这可能是AWS t2.micro实例的问题。我已向AWS支持部门发送了一个请求:
已解决: 它在客户端和redis trib create命令中都使用了私有IP地址。我在客户端配置中尝试了私有IP,但错误地认为我