Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将新服务器添加到Redis群集_Redis_Redis Cluster_Redis Cli - Fatal编程技术网

将新服务器添加到Redis群集

将新服务器添加到Redis群集,redis,redis-cluster,redis-cli,Redis,Redis Cluster,Redis Cli,我刚建立了一个很好的系统。结构如下: Server 1 | Server 2 | Server 3 Master A | Master B | Master C Slave B | Slave C | Slave A Master A <-> Slave A Master B <-> Slave B Master C <-> Slave C 当然,我可以通过/redis-trib.rb add node添加新节点。是否有通用方法?您可以使用CLUSTE

我刚建立了一个很好的系统。结构如下:

Server 1 | Server 2 | Server 3
Master A | Master B | Master C
Slave  B | Slave  C | Slave A

Master A <-> Slave A
Master B <-> Slave B
Master C <-> Slave C

当然,我可以通过
/redis-trib.rb add node
添加新节点。是否有通用方法?

您可以使用
CLUSTER MEET
命令将新节点添加到集群中。此命令强制两个节点将彼此视为受信任节点,新添加的节点将通过gossip协议引入集群中的其他节点

新添加的节点将是空的主节点。以便将其转换为另一个主节点的从属节点。您可以使用
集群复制
命令

在您的情况下,可以执行以下步骤:

  • 登录SLAVE-D
  • 通过发送MEET命令将SLAVE-D加入集群:
    cluster-MEET-MASTER-A-IP-MATER-A-PORT
  • 通过发送MEET命令将MASTER-D加入集群:
    cluster MEET MASTER-D-IP MATER-D-PORT
  • 通过发送REPLICATE命令:
    CLUSTER REPLICATE MASTER-D-node-id

  • 谢谢@for_stack。但不是每个主服务器都应该在另一台服务器上至少有一个从服务器吗?我知道对于孤立的主机有一些逻辑,所以将SLAVE-D分配给例如MASTER-A,让复制逻辑完成它的工作不是更好吗?好的,我误解了你的问题。如果要确保每个主服务器的从属服务器位于另一台服务器上,只需在从属服务器a、从属服务器B和从属服务器C之间随机选择一个从属服务器,例如从属服务器a,然后使用REPLICATE命令将其设置为MASTER-D的从机。然后将slave-D设置为MASTER-a的从机。Redis不会给您任何命令来确保MASTER和slave位于不同的机器上。因为它不知道两个节点是否位于同一台机器上,特别是在使用Docker部署Redis时。你必须手动操作。即使使用redis-trib.rb,也必须指定新添加的从属节点的主节点id。否则,它将成为奴隶最少的主人的奴隶。
    Server 4
    Master ?
    Slave  ?