gpt4 book ai didi

amazon-web-services - EC2 t2.micro上的Redis Cluster 3.2.0(无Elasticache)

转载 作者:行者123 更新时间:2023-12-02 12:01:19 27 4
gpt4 key购买 nike

事不宜迟,我陷入了僵局。我正在尝试在单个t2.micro上设置3个主节点和3个从节点的redis集群。我在本地主机上的设置运行良好,但是当我尝试在EC2上运行时,遇到一个奇怪的问题,即我的客户端(在使用ioredis的单独t2.micro上)似乎可以找到并连接,但随后反复抛出许多错误,例如“ioredis :connection错误:错误:连接ECONNREFUSED“,如果我的客户端位于http中。如果切换到https,则会收到其他不同的超时错误和“手动关闭”错误(试图将群集选项中的TLS标志设置为无效)。

TL; DR

想法?为什么不能使用redis-trib使用publicIP(而不是127.0.0.1)创建集群?这似乎可以解决我的问题,或者好像我在这里似乎缺少防火墙之类的东西吗?...

如果您正在阅读此书并在Redis中苦苦挣扎,则以下几点可以很好地概括了Google和stackoverflow首页上几乎所有建议的Redis解决方案。好好利用它们!

在阅读了几个类似的主题之后,我发现它们都没有解决这个问题。这是我尝试过的;

  • 检查了我的EC2安全组,以确保在我的redis t2.micro和客户端t2.micro之间打开了正确的端口。确保redis端口+10,000(用于总线)也已打开。
  • 检查了我的AWS vpc,互联网网关,子网和ACL,以确保流量可以在两个实例之间流动
  • 运行了一些netstat,看起来我可以连接到正确的端口,并且redis正在侦听正确的端口
  • 在redis.conf文件中,为每个节点确保保护模式(设置为no),绑定(bind)(注释掉)和密码字段(注释掉)不禁止通信。起初,这是问题的一部分。有一次我将所有这些功能都关闭了,但仍然遇到相同的错误。
  • 我删除了所有旧的aof,dump.rdb,node.conf文件并启动了新实例。我确保每个节点都有其自己的文件夹(不共享node.conf文件)。
  • 我尝试使用像这样的环回127.0.0.1连接redis集群:

  • ./redis-trib.rb create --replicas 1 127.0.0.1:30010 127.0.0.1:30011 127.0.0.1:30012 127.0.0.1:30013 127.0.0.1:30014 127.0.0.1:30015

    仍然有来自客户端的错误。因此,然后尝试了redis t2.micro的aws公共(public)主机地址,然后是公共(public)IP,然后是私有(private)IP。当我启动节点(使用ps -ef以确保它们在守护程序模式下运行),然后尝试使用公共(public)IP进行./redis-trib create --replicas 1 publicIP:30010 ..etc时,它将创建集群但会卡在“>>>正在创建群集”,直到失败,并说它无法连接到第一个节点。它不会让我使用publicIP而不是127.0.0.1创建集群(我怀疑这是为什么我的客户端无法连接的问题)。似乎其他人已经成功连接了它,但在这种情况下却没有(我也尝试从客户端运行redis-trib,它将连接并生成aof和redis t2.micro上的node.conf,但它也会挂起并最终说找不到节点...)
  • 一旦集群启动并在127.0.0.1下运行,节点将进行通信,redis-cli将PONG返回给我的ping,但要设置密钥,它会给出“(错误)MOVED 16164 127.0.0.1:30012”,对于'得到'。因此,我尝试通过发送“集群聚会”来手动设置publicIP,如本例所示:redis-cli redirected to 127.0.0.1

  • 还是不走。当我设置满足条件时,剩下的127.0.0.1或我在publicIP中设置的条件似乎在我完成所有节点的运行时又切换回去。

    唯一需要考虑的就是AWS是否在某处阻塞了端口。我尝试同时打开两个t2.micro实例的所有端口,并向所有人开放它们,但仍然无法正常工作。我曾考虑过研究EC2实例上的iptables,但是鉴于存在安全组,因此不应该设置它们(而且我对iptables的了解还不多。)我以为这要花我一个小时,现在我仍然坐在这里挠头。

    一些可能有用的代码:

    集群代码:
    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个节点
    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:*节点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文件中的任何一个中均未设置密码:
    Getting a connection error when using redis-trib.rb to create a cluster?

    Update3:本文非常接近,但我不理解他的解决方案:
    src / redis-trib.rb创建127.0.0.1:6379 127.0.0.1:6380 h2:p1 h2:p2 h3:p1 h3:p2

    特别是为什么在h2:p1 h2:p2 h3:p1 h3:p2之后声明主机和端口

    更新4:

    看来这可能与AWS t2.micro实例有关。我已将请求发送到AWS支持:
    https://forums.aws.amazon.com/thread.jspa?messageID=647509

    解决了:
    它在客户端和redis-trib create命令中都使用了专用IP地址。我曾在客户端配置中尝试过专用IP,但错误地认为我曾尝试过使用redis-trib。

    对于其他任何人:类(class):使用redis EC2实例的专用IP。感谢此视频帮助我继续前进:
    https://www.youtube.com/watch?v=s4YpCA2Y_-Q

    最佳答案

    解决了:
    它在客户端和redis-trib create命令中都使用了专用IP地址,从而解决了该问题。我曾在客户端配置中尝试过专用IP,但错误地认为我曾尝试过使用redis-trib。

    对于其他任何人=>类(class):在通过redis-trib加入集群时,使用redis EC2实例的私有(private)IP,而不使用公共(public)IP。感谢此视频帮助我继续前进:
    https://www.youtube.com/watch?v=s4YpCA2Y_-Q

    关于amazon-web-services - EC2 t2.micro上的Redis Cluster 3.2.0(无Elasticache),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39036715/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com