跳转到主要内容

使用多主节点

KeyDB 现在支持多主节点复制。此模式通过以下配置行启用:

active-replica yes
multi-master yes

当 KeyDB 与多个主节点连接时,其行为与传统复制不同:

  • 多次调用 `replicaof` 命令将导致添加额外的主节点,而不是替换当前的主节点。
  • KeyDB 在与主节点同步时不会丢弃其数据库。
  • KeyDB 将把来自主节点的任何读/写操作与其内部数据库合并。
  • KeyDB 将默认采用“最后操作获胜”的原则。

这意味着具有多个主节点的副本将包含其所有主节点数据的超集。如果两个主节点具有相同键的值,则不确定会采用哪个键。如果一个主节点删除了另一个主节点上存在的键,则副本将不再包含该键的副本。

设置多主节点#

多主节点设置与主动复制设置非常相似,但允许多于一个副本节点(所有节点都是主节点)。它允许您对所有实例进行读写,这可以在高负载下增加读取量,并在其中一个实例发生故障时让其他主节点随时待命。

通过多主节点设置,您可以将每个主节点设置为其他节点的副本。这可以接受多种拓扑结构,您可以创建不同变化的环形拓扑,或者将每个主节点都设置为所有其他主节点的副本。如果并非所有节点都同步,请考虑故障场景,并确保一次中断不会导致其他节点失去连接。

一个示例配置文件

配置文件#

注意:在配置文件中设置多主节点时,请确保在设置 `replicaof` 命令之前启用 `multi-master` 和 `active-replica`,如下面的示例所示,否则多主节点复制可能无法正常工作。

实例 A 的配置文件

# 假设已设置以下参数,并且此实例的 IP 地址为 10.0.0.2
port 6379
requirepass mypassword123
masterauth mypassword123
# 您需要配置以下内容
multi-master yes
active-replica yes
replicaof 10.0.0.3 6379
replicaof 10.0.0.4 6379

实例 B 的配置文件

# 假设已设置以下参数,并且此实例的 IP 地址为 10.0.0.3
port 6379
requirepass mypassword123
masterauth mypassword123
# 您需要配置以下内容
multi-master yes
active-replica yes
replicaof 10.0.0.2 6379
replicaof 10.0.0.4 6379

实例 C 的配置文件

# 假设已设置以下参数,并且此实例的 IP 地址为 10.0.0.4
port 6379
requirepass mypassword123
masterauth mypassword123
# 您需要配置以下内容
multi-master yes
active-replica yes
replicaof 10.0.0.2 6379
replicaof 10.0.0.3 6379

您也可以将以下命令附加到配置文件中:`keydb-server --multi-master yes --active-replica yes --replicaof [ipaddress] [port] --replicaof [ipaddress] [port]`

移除副本节点#

在操作期间,您可能希望移除一个节点,而无需重新加载配置文件和重启节点。这可以使用 keydb-cli 完成:

keydb-cli> REPLICAOF REMOVE [host] [ip]

请注意,此命令需要在集群中的所有节点上执行(我们尚不支持跨集群节点的自动传播)。