前言
Elastic自身设计了集群分片的负载平衡机制,当有新数据节点加入集群或者离开集群,集群会自动平衡分片的负载分布。
需求背景
公司原有大数据平台基于公有云构建,由于种种原因,现在需要迁移到自建机房,Elasticsearch集群承担了大数据平台主要的对外查询需求,也有部分实时计算需求基于Elasticsearch实现,所以需要在不影响应用系统体验的情况下做到平滑的迁移。本次分享讲述我们如何进行平滑迁移以及如何避坑。
需要迁移的主要有两部分:
- 对外提供的服务API,这些API是与Elastic集群绑定的,属于业务场景定制化开发;
- Elasticsearch集群迁移,数据需要迁移,节点也需要全部迁移。
图示:公有云集群+自建机房集群示意图,业务系统查询图
迁移策略
大数据平台的Elastic集群直接对外提供实时查询服务,任何影响Elastic集群平稳的操作都应该避免,那我们的集群迁移策略也侧重平稳,时间上可以宽松一些,迁移主要的工作有以下几个:
- 关闭集群自动平衡;
- 启动自有机房新节点与公有云自建集群组成一个集群;
- 人工迁移集群数据到新节点;
- 外围访问切换到新节点;
- 关闭公有云节点;
- 开启集群自动平衡。
迁移步骤
迁移过程中有很多步骤操作,是有严格先后顺序的,如果出错则会造成集群动荡,影响应用体验。此时Elastic的版本是6.5.X,当时最新的版本,迁移完成之后也全部升级到6.8.X。
1、原有集群架构
图示:原有集群架构,数据节点与管理节点分离
1)Elasticsearch节点有很多角色(管理节点、数据节点,协调节点),默认单节点常用角色全部开启。所以在早期搭建Elastic集群时,就按照角色分离的职责将管理节点与数据节点分离部署,这也是后面集群迁移能够顺利进行的重要前提。多数初学者在刚刚接触Elastic投入生产环境时会犯一个错误,节点角色不分离,当数据节点的资源消耗过度会导致集群管理节点响应变慢,从而影响整体集群响应。
#管理节点角色设置
node.master: true
node.data: false
#数据节点角色设置
node.master: false
node.data: true
2)Elastic对外提供服务时中间会增加一层负载代理,如定制服务API与实时计算应用访问Elastic集群都需要走代理。
3)Hadoop集群与Elastic集群互相访问是基于官方提供的ES-Hadoop驱动包,由于实现原理的限制,不能做代理,所以是直接访问,都是离线任务交互。
2、配置新集群
1)因为是迁移到新集群节点,原有节点最后都需要关闭,新集群节点同样也需要管理节点与数据节点分离,新旧节点需要平滑迁移,所