菜单
开源

在不停机的情况下将哈希环的 KV 存储从 Consul 迁移到 memberlist

自 Mimir 2.2.0 起,Mimir Jsonnet 使用 memberlist 作为哈希环的 KV 存储。

可以使用以下配置禁用 memberlist

jsonnet
{
  _config+:: {
    memberlist_ring_enabled: false
  }
}

如果您正在使用 Consul 运行 Mimir 哈希环,并希望在不停机的情况下迁移到 memberlist,您可以按照本文档中的说明进行操作。

步骤 1:启用 memberlist 和 multi KV store。

jsonnet
{
  _config+:: {
    memberlist_ring_enabled: true,
    multikv_migration_enabled: true,
  }
}

步骤 1 配置组件使用 multi KV 存储,其中 consul 作为主存储,memberlist 作为副存储。此步骤需要推出所有 Mimir 组件。应用此步骤后,所有 Mimir 组件将在 HTTP 管理界面上暴露 /memberlist 页面,可用于检查 memberlist 集群的健康状况。

步骤 2:启用 KV 存储镜像

jsonnet
{
  _config+:: {
    memberlist_ring_enabled: true,
    multikv_migration_enabled: true,
    multikv_mirror_enabled: true,  // Changed in this step.
  }
}

在此步骤中,我们启用将主 KV 存储 (Consul) 的写入镜像到副存储 (memberlist)。应用此更改不会导致 Mimir 组件重启。

您可以监控以下指标,检查是否已在所有组件上启用镜像以及是否工作正常

  • cortex_multikv_mirror_enabled – 显示哪些组件已启用 KV 存储镜像。所有 Mimir 组件都应开始通过重新加载运行时配置将数据镜像到副 KV 存储。
  • rate(cortex_multikv_mirror_writes_total[1m]) – 显示写入副 KV 存储的速率,单位为写入次数/秒。
  • rate(cortex_multikv_mirror_write_errors_total[1m]) – 显示写入副 KV 存储的错误率,单位为错误次数/秒。

启用镜像后,您应该在 Memberlist 集群信息管理页面中看到每个 Mimir 哈希环的键。请参阅使用哈希环的组件列表

步骤 3:切换主副存储

jsonnet
{
  _config+:: {
    memberlist_ring_enabled: true,
    multikv_migration_enabled: true,
    multikv_mirror_enabled: true,
    multikv_switch_primary_secondary: true,  // Changed in this step.
  }
}

此更改将切换 multi KV 使用的主副存储。从此时起,Mimir 组件将使用 memberlist 作为主 KV 存储,并将更新镜像到 Consul。此步骤无需重启 Mimir 组件。

要查看所有组件是否已开始使用 memberlist 作为主存储,请观察 cortex_multikv_primary_store 指标。

步骤 4:禁用镜像到 Consul

jsonnet
{
  _config+:: {
    memberlist_ring_enabled: true,
    multikv_migration_enabled: true,
    multikv_mirror_enabled: false,  // Changed in this step.
    multikv_switch_primary_secondary: true,
  }
}

此步骤无需重启任何 Mimir 组件。应用更改后,组件将停止向 Consul 写入环更新,并且仅使用 memberlist。您可以观察 cortex_multikv_mirror_enabled 指标,查看所有组件是否已接收更新的配置。

步骤 5:禁用 multi KV Store

jsonnet
{
  _config+:: {
    memberlist_ring_enabled: true,
    multikv_migration_enabled: false,  // Changed in this step.
    multikv_mirror_enabled: false,
    multikv_switch_primary_secondary: true,
    multikv_migration_teardown: true,  // Added in this step.
  }
}

此配置更改将导致所有组件重新推出。重启后,组件将不再使用 multi KV 存储,并且将配置为仅使用 memberlist。我们使用 multikv_migration_teardown 为尚未重启的组件保留 multi KV 存储的运行时配置。

所有 cortex_multikv_* 指标仅由使用 multi KV 存储的组件暴露。随着组件重启,这些指标将消失。

注意

设置 multikv_migration_enabled: false 并保持 memberlist_ring_enabled: true 将移除 Consul 工作负载。

这是预期结果,因为 Consul 不再被使用——您已在步骤 4 中禁用了对其的镜像。

如果您需要保持 consul 运行,可以在 _config 中显式设置 consul_enabled: true

步骤 6:清理

我们已成功地在不停机的情况下将 Mimir 集群从使用 Consul 迁移到 memberlist!最后一步,我们可以移除所有与迁移相关的配置选项

  • multikv_migration_enabled
  • multikv_mirror_enabled
  • multikv_switch_primary_secondary
  • multikv_migration_teardown

我们最终的 memberlist 配置将是

jsonnet
{
  _config+:: {
    memberlist_ring_enabled: true,
  }
}

这将不会触发 Mimir 组件的新一轮重启。应用此更改后,您就完成了。