Redis群集创建副本绑定公共IP

时间:2020-03-06 21:42:55

标签: amazon-ec2 redis redis-cluster

我们有6个Redis服务器在端口(8001、8002、8003、8004、8005、8006)中运行。 在每个Redis服务器的redis.conf中,我们以不同的方式绑定ip,例如:

  • 绑定0.0.0.0
  • 绑定私人发布
  • 绑定公共

如果我们访问正常,就可以了:

redis-cli -h PUBLIC_IP -p 8001

但是当我们想要创建集群时,我们运行:

./src/redis-cli --cluster create PUBLIC_IP:8001 PUBLIC_IP:8002 PUBLIC_IP:8003 PUBLIC_IP:8004 PUBLIC_IP:8005 PUBLIC_IP:8006 --cluster-replicas 1

控制台始终显示并保持永远等待集群:

Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica PUBLIC_IP:8005 to PUBLIC_IP:8001
Adding replica PUBLIC_IP:8006 to PUBLIC_IP:8002
Adding replica PUBLIC_IP:8004 to PUBLIC_IP:8003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 7ab009459f7f5cf6cef5f46b691748dc236e4c26 PUBLIC_IP:8001
   slots:[0-5460] (5461 slots) master
M: 0048ca2cd65c1315b8f0a7c952b69bfb494d5ace PUBLIC_IP:8002
   slots:[5461-10922] (5462 slots) master
M: c6ee023719f200b0d175f428fa15e5ab767d0e04 PUBLIC_IP:8003
   slots:[10923-16383] (5461 slots) master
S: cf636a1a46b1e947daec3e797cac524c613f08ca PUBLIC_IP:8004
   replicates 7ab009459f7f5cf6cef5f46b691748dc236e4c26
S: 5d4bd1041457114353b0b30dbefd86ab8e4ae020 PUBLIC_IP:8005
   replicates 0048ca2cd65c1315b8f0a7c952b69bfb494d5ace
S: 62f01289dc3f72cac4a1745fc77b7bd91ec5d107 PUBLIC_IP:8006
   replicates c6ee023719f200b0d175f428fa15e5ab767d0e04
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

很多人说我们需要绑定私有ip,但是我们想在公共情况下这样做,因为当我们与外部计算机连接时,如果将私有ip绑定到集群,则群集重定向到包含密钥的主服务器。 redirect将显示“ redirect to PRIVATE_IP”,并且将无法正常工作。

我们是否缺少让群集通过公共IP加入的内容?

2 个答案:

答案 0 :(得分:0)

来自redis security guide

Redis旨在供受信任环境中的受信任客户端访问。

另请参阅:How to connect to redis from remote guide

服务器绑定到其公共IP时,它可以从每个人那里获得请求,因此,除非您围绕它建立了某种安全性,否则任何人都可以访问和操纵您的数据。

在Redis集群中,规则相同,并且公开了绑定在公共ip上的副本。

redis群集的默认用例是一台机器(或多台机器)从其专用网络中访问它,除非您知道自己在做安全上的事情,否则您不应从中挪用它。

如果对您的用例有意义,则应将访问redis群集的计算机作为群集专用网络的一部分。

答案 1 :(得分:0)

如果我在你家,我会做的是:

  • 使用私有IP和回送IP(即bind {{ private_ip }} 127.0.0.1
  • 绑定所有服务器)
  • 在每台服务器上启用ufw(或其他任何防火墙工具),并执行(对于ufw)allow from {{ private_ip }} to any port {{ redis_port }}或类似操作。
  • 我的内部DNS将为所有具有各自专用IP的服务器提供条目。
  • Voila!安全创建和访问redis集群,没有任何安全漏洞。

注意:如果您仍然想通过公用网络访问它们,则可以使用SNAT

进行一些解决。

警告:将Redis服务器绑定到0.0.0.0或公共IP可能会导致严重的漏洞问题,例如:

PS:您也可以按照本medium教程进行操作。