在不停机的情况下将哈希环的 KV 存储从 Consul 迁移到 memberlist
自 Mimir 2.2.0 起,Mimir Jsonnet 使用 memberlist 作为哈希环的 KV 存储。
可以使用以下配置禁用 memberlist
{
_config+:: {
memberlist_ring_enabled: false
}
}
如果您正在使用 Consul 运行 Mimir 哈希环,并希望在不停机的情况下迁移到 memberlist,您可以按照本文档中的说明进行操作。
步骤 1:启用 memberlist 和 multi KV store。
{
_config+:: {
memberlist_ring_enabled: true,
multikv_migration_enabled: true,
}
}
步骤 1 配置组件使用 multi
KV 存储,其中 consul
作为主存储,memberlist 作为副存储。此步骤需要推出所有 Mimir 组件。应用此步骤后,所有 Mimir 组件将在 HTTP 管理界面上暴露 /memberlist
页面,可用于检查 memberlist 集群的健康状况。
步骤 2:启用 KV 存储镜像
{
_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:切换主副存储
{
_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
{
_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
{
_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 配置将是
{
_config+:: {
memberlist_ring_enabled: true,
}
}
这将不会触发 Mimir 组件的新一轮重启。应用此更改后,您就完成了。