前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >「最佳实践」借助网关双写,实现 Elasticsearch 的无缝在线迁移

「最佳实践」借助网关双写,实现 Elasticsearch 的无缝在线迁移

原创
作者头像
岳涛
修改2024-02-28 11:40:41
5196
修改2024-02-28 11:40:41
举报
文章被收录于专栏:大数据生态大数据生态

说明

本文描述问题及解决方法同样适用于 腾讯云 Elasticsearch Service(ES)

另外使用到:腾讯云 云服务器(Cloud Virtual Machine,CVM)

背景

将自建ES集群无缝迁移到云上,同时进行跨版本升级并支持回退,这种情况通常需要确保业务在最短的停机时间内完成。以往的方案或多或少都有限制:

迁移方案

支持回退

在线

友商云迁移

版本限制

迁移方式

迁移速度

Snapshot 快照

支持,数据不一致

支持

源端<=目标

复制

在线融合

不支持

源端<=目标

剪切

很快

Logstash

支持,数据不一致

支持

无要求

复制

基于当下这种局面,就衍生了一个新的需求:有没有一种方案,既是又是还是呢?

答案是:有的。

一、方案介绍

通过将应用流量引导至网关,请求会被同步发送至自建 ES 和 云上 ES。网关负责记录并按顺序在云上 ES 中重新执行所有写入请求。从而实现了无缝的双集群写入,达成了平稳且安全的数据迁移。

二、方案部署

说明:

网关和控制台都需要使用 ES 作为元数据存储,可以复用源端 ES,也可以在网关&控制台服务器部署一个单机 ES(推荐)。

1. 部署单机 ES 并启动(略过)

该步骤不是必要操作,可以复用其他ES集群作为网关&控制台的元数据集群。

2. 安装并启动控制台

代码语言:bash
复制
curl -sSL http://get.infini.cloud | bash -s -- -p console -d /usr/local/service/console

安装完成后应用包位于 /usr/local/service/console

代码语言:bash
复制
cd /usr/local/service/console
./console-linux-amd64 -service install
./console-linux-amd64 -service start

启动成功后使用浏览器打开链接进行控制台注册,默认监听 9000 端口,假如安装控制台的服务器公网 ip 是100.100.100.100,那么访问地址就为:100.100.100.100:9000

  • TLS 默认 http,开启后为 https。
  • Auth 默认不需要连接认证,开启后,需要输入用户名&密码。

自动初始化系统索引和模板的基本设置:

第三步需要妥善保管好凭据密钥,点击👁️‍🗨️符号可使凭据密钥可见:

也可在最后一步一键下载配置的信息:

3. 安装并启动网关

代码语言:bash
复制
curl -sSL http://get.infini.cloud | bash -s -- -p gateway -d /usr/local/service/gateway

安装完成后应用包位于 /usr/local/service/gateway

配置网关

下载网关双写配置:

代码语言:bash
复制
cd /usr/local/service/gateway
# 移走默认配置
mv gateway.yml gateway.yml.bak
# 下载双写网关配置
wget https://tools-release-1253240642.cos.ap-shanghai.myqcloud.com/elasticsearch/config/gateway.yml

修改以下配置项:

  • #primary

主集群配置项

  • #backup

从集群配置项

  • #metadata & metrics & logging

元数据集群配置项

  • consume-queue_backup-bulk_request_ingestion-to-backup

需要关闭auto_start,默认是开启的:

启动网关

代码语言:bash
复制
cd /usr/local/service/gateway
./gateway-linux-amd64 -service install
./gateway-linux-amd64 -service start

4. 注册网关后端

编辑实例名称:

注册完成后可以在实例管理界面看到网关实例:

5. 注册集群

注册源端 ES 集群

编辑集群名称:

注册云上 ES 集群

编辑集群名称:

完成在集群管理界面可以看到集群总览:

三、双写测试

1. 临时开启增量备份

点击开启:

2. 注册网关集群

为了方便测试,我们将网关也当做集群注册到控制台:

编辑集群名称:

3. 使用网关进行测试

在网关进行如下操作:

代码语言:json
复制
# 创建索引
PUT gateway-test

# 插入文档
PUT gateway-test/doc/1
{
  "name": "dy"
}

PUT gateway-test/doc/2
{
  "name": "dy2"
}

# 更新文档
PUT gateway-test/doc/2
{
  "name": "dy_update"
}

# 删除文档
DELETE gateway-test/doc/2

# 删除
DELETE gateway-test

在云上 ES 验证同步结果:

4. 关闭增量同步

测试完成,需要将增量备份关闭,因为接下来正式使用双写网关之前需要做一次全量同步:

四、数据同步

1. 同步全量数据(略)

  • 全量数据的同步可参考:Elasticsearch 迁移方案,使用快照方案进行全量备份;
  • 如果全量数据较大,那么首次全量备份可能会耗费大量时间(数天甚至数周),这种情况则需要利用快照进行多次增量备份,直到增量数据已不再庞大。

2. 业务切换写入指向并关闭嗅探

说明:

由于我们已经使用快照已经做了全量+增量,所以现在切换流量到下次做最后一次快照增量备份不会产生太多增量数据,不会导致数据大量堆积,影响同步效率。

  • 切换流量

业务指向目前还没有连接网关,所以正式切换时需要修改业务代码连接配置,当前流量流向如下图:

业务将原先指向源端集群的 IP 配置,改为双写网关的 IP:18000,代码逻辑无需做任何修改。由于此时双写网关的增量同步还未开启,写入切换后,云上集群的数据同步会先堆积在消息队列中。切换后业务流向如下图:

  • 关闭嗅探

各 SDK 关闭嗅探参考:https://cloud.tencent.com/document/product/845/19538

3. 最后一次增量备份恢复(略)

业务切换到双写网关后,还需要使用快照做最后一次恢复,同样参考:Elasticsearch 迁移方案

4. 开启双写网关的增量同步

最后一次快照增量完成之后,则可以开启双写网关的增量同步,开启之后,双写网关会将堆积的写入操作回放到云上 ES 集群,直到数据追平,真正做到实时同步:

可以通过队列消费情况来观察是否同步完成:

生产和消费offset一致则说明同步完成:

五、切换写入

如果需要保留回退方案,可以继续将业务指向双写网关。然后在网关配置中交换主备集群并重启网关,这样,云上的 ES 集群将成为主集群,而原先的老集群将变为备份集群。如果业务遇到问题,可以随时回退,因为数据是一致的。一旦所有验证都完成,就可以直接将业务 IP 切换到云上。

六、小结

双写网关方案成功解决了过去许多难以应对的问题,如跨云 ES 服务的在线迁移、传统迁移方案缺乏实时回退能力等。甚至支持从高版本到低版本的在线迁移,尽管这样的迁移不支持快照,只能通过 Logstash 等工具实现。由于 Logstash 仅支持全量同步,这将使双写网关的消息堆积压力增大。尽管如此,也聊胜于无,未来迁移方案必将会朝实时化的趋势发展。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 说明
  • 背景
  • 一、方案介绍
  • 二、方案部署
    • 1. 部署单机 ES 并启动(略过)
      • 2. 安装并启动控制台
        • 3. 安装并启动网关
          • 配置网关
          • 启动网关
        • 4. 注册网关后端
          • 5. 注册集群
            • 注册源端 ES 集群
            • 注册云上 ES 集群
        • 三、双写测试
          • 1. 临时开启增量备份
            • 2. 注册网关集群
              • 3. 使用网关进行测试
                • 4. 关闭增量同步
                • 四、数据同步
                  • 1. 同步全量数据(略)
                    • 2. 业务切换写入指向并关闭嗅探
                      • 3. 最后一次增量备份恢复(略)
                        • 4. 开启双写网关的增量同步
                        • 五、切换写入
                        • 六、小结
                        相关产品与服务
                        Elasticsearch Service
                        腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档