利用elasticsearch alias和reindex操作实现服务零停机迁移

利用ES的alias和reindex操作,可以实现某些业务场景下的服务零停机的数据迁移。

前提是,数据的读写操作均依赖索引的alias,而非具体的索引。

如下图所示:

写入操作依赖write_alias别名,读取操作依赖read_alias别名。

image-20210405143855719

当需要进行数据迁移时,

步骤1:按照需求建立好新的索引,Index_version_v2。

步骤2:删除write_alias与index_version_v1的关联,同时建立write_alias与index_version_v2的关联。

以下操作为原子操作。

POST /_aliases
{
    "actions" : [
        { "remove" : { "index" : "Index_version_v1", "alias" : "write_alias" } },
        { "add" : { "index" : "Index_version_v2", "alias" : "write_alias" } }
    ]
}

image-20210405144303395

步骤3:使用es reindex操作,将数据从index_version_v1重新建立到index_version_v2。

  POST _reindex
    {
      "source": {
        "index": "Index_version_v1"
      },
      "dest": {
        "index": "Index_version_v2"
      }
    }

image-20210405144327964

步骤4:删除read_alias与index_version_v2的关联,同时建立read_alias与index_version_v2的关联。

POST /_aliases
{
    "actions" : [
        { "remove" : { "index" : "Index_version_v1", "alias" : "read_alias" } },
        { "add" : { "index" : "Index_version_v2", "alias" : "read_alias" } }
    ]
}

image-20210405144346013

可能存在的问题:

在索引Index_version_v2的数据还未reindex完成时,需要依赖Index_version_v1提供数据读取操作,会存在数据不一致情况。这一块需要特定业务特定评估。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

51iwowo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值