从腾讯云迁移到自建机房, ES 集群迁移架构实战
前言
需求背景
需要迁移的主要有两部分:
对外提供的服务API,这些API是与Elastic集群绑定的,属于业务场景定制化开发; Elasticsearch集群迁移,数据需要迁移,节点也需要全部迁移。
腾讯云集群+自建机房集群示意图,业务系统查询图
迁移策略
关闭集群自动平衡; 启动自有机房新节点与腾讯云集群组成一个集群; 人工迁移集群数据到新节点; 外围访问切换到新节点; 关闭腾讯云节点; 开启集群自动平衡。
迁移步骤
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、配置新集群
discovery.zen.ping.unicast.hosts: ["多个旧管理节点 IP:PORT","多个新管理节点 IP:PORT"]
2)新集群服务器采用的全部是物理机,CPU核数很多,内存充足,挂载了多个硬盘,为了充分利用物理机性能,所以单服务器会部署多实例,主要是部署多个数据节点。在同一机器启动多个Elastic实例,需要做资源隔离,尤其是CPU核数隔离,CPU的核数决定了Elastic默认线程池的线程数,如果不做设置,默认启动多个数据实例,会出现资源竞争问题,设置如下:
processors: 数值<=(CPU核数/实例数)
3)腾讯云与自建机房直接通过专线连接,新旧集群节点在启动之后依然是一个集群。
新旧集群示意图与多实例示意图
3、禁用集群数据平衡
当有新的带有数据角色节点加入集群或者离开集群,集群会默认启动自动平衡机制,索引分片会在数据节点之间平衡漂移,达到平均分布之后停止,频繁的集群节点加入或者下线会严重影响集群的IO,影响集群响应速度,所以要尽量避免次情况发生。说到这里,在我的从业中,发现很多初级运维人员在部署Elastic集群时,会很喜欢设置系统级别Elastic实例进程自动启动,这个其实是个很糟糕的机制,当发现服务器Elastic实例关闭,不是马上重启,而是需要人工介入分析具体原因,如果频繁关闭重启,这样很容易造成集群问题。
1)第一个是禁用集群自动平衡,首先要禁止集群新创建索引,新索引之间分配到新的数据节点,其次防止新的数据节点启动之后,集群分片开始平衡迁移,影响集群IO,设置如下:
cluster.routing.allocation.enable: false #禁用集群自动平衡 cluster.routing.rebalance.enable: false
2)第二个是限制已有索引数据的分布范围,暂时只容许分布在旧的数据节点上,旧集群数据节点在早期部署时并未设置自定义标签,所以只能通过设置IP范围限制,还有就是后面在迁移数据时需要按找索引维度逐步迁移,控制集群迁移的并行度。设置如下:
"index.routing.allocation.include._ip": "多个旧集群IP"
4、启动新集群数据节点
由于新数据节点是全新搭建,可以提前设置节点自定义属性,方便之后运维设置。设置如下:
node.attr.rack: rack1 #集群数据中心 node.attr.zone: zone1 #实例节点硬盘 node.attr.disk: ssd1 #更多属性...... node.attr.xxxx: yyy1 ...
仅优先启动数据节点
5、切换集群访问
1)Hadoop平台离线数据写入ES,从ES抽取数据。Elastic提供了Hadoop直连访问驱动。如Hive是通过创建映射表与Elasticsearch索引关联的,新的数据节点启动之后,原有所有Hive-Es映射表需要全部重新创建,更换其中的IP+PORT指向;由于Hive有很多与Elastic关联的表,所以短时间内没有那么快替换完成,新旧数据节点需要共存一段时间,不能在数据迁移完成之后马上关闭 。
es.nodes=多个数据节点IP+PORT
2)业务系统应用实时查询。这种切换比较简单,Elastic集群对外提供了代理访问,业务系统应用访问首先要调用大数据提供的API,这些定制化的API内部也是通过代理访问Elastic集群。
3)大数据中心应用实时计算数据写入。实时计算程序上游有kafka队列,基于kafka自带的offset机制,在新集群启动实时计算应用,然后关闭旧集群实时计算应用,就可以完成切换。
6、手动转移数据
腾讯云与新集群机房是跨网段,网络带宽有限; 集群中有很多大索引,单索引数据超过数百GB,这种索引移动会会很伤集群IO; 新旧数据节点会共存一段时间,自动平衡会导致大量的跨网络的查询与写入,很伤网络IO。
迁移数据的原则如下:
索引数据量小的优先; 离线更新的索引数据优先; 业务系统查询频率低索引数据的优先; 迁移索引数据控制并行度,每次操作控制在网络带宽限制之内。
迁移数据也是通过限制索引分布IP范围,设置如下:
#限制索引的分布范围 "index.routing.allocation.include._ip": "多个新集群IP"
7、关闭旧集群数据节点
旧集群索引数据必须迁移完成; 集群访问切换必须已经完成。
关闭旧集群数据节点
8、启动新集群管理节点
一个Elasticsearch集群只有一个工作管理节点,负责维护集群所有的元数据信息;其余的是备选管理节点,只是同步集群元数据信息,不参与协调管理。工作主节点关闭集群需要重新选举工作主节点,此时集群会处于半停顿状态,虽然很快,也会有影响;
旧集群已经有5个管理节点,其中一个是工作主节点,其余4个是备选节点,因为Elastic版本是6.5.X,原有的集群脑裂因子设置是3=(5/2+1),当启动新集群的管理节点,若网络出现短暂通信问题,集群脑裂因子设置会无效。
切换新旧管理节点的策略如下:
每启动一个新集群管理节点 ,关闭一个旧集群备选管理节点; 最后关闭旧集群工作管理节点,集群重新选举新的工作管理节点。
启动新集群管理节点
9、启用集群自动平衡
cluster.routing.allocation.enable: true #禁用集群自动平衡 cluster.routing.rebalance.enable: true
涉及技术
个人认为这是Elasticsearch最大特性卖点,设计上任意节点都可以很容易加入集群或者离开集群,集群都可以弹性的平滑扩展,基本不影响系统运行稳定;
在业务系统发展早期,可以部署少量节点,发展后期可以部署更多节点或者部署更强的服务器,以达到最佳的性价比配置,从成本与性能平衡;
自动化运维方面节约成本,相比传统的关系型数据库集群规模庞大之后,需要关注的点很多,而Elastic很少,大中型集群规模以下几乎无需专门的Elastic运维人员。
2、集群选举
工作管理节点自动选举,工作管理节点关闭之后自动触发集群重新选举,无需外部三方应用,无需人工干预。很多大数据产品需要人工切换或者借助第三方软件应用,如Greenplum、Hadoop、Prestodb。
3、节点角色
集群节点角色
节点角色说明:
Master,管理节点,管理集群元数据信息,集群节点信息,集群索引元数据信息; Voting,投票节点,参与集群管理节点选举投票,注意7.X以上版本才支持; Data,数据节点,存储实际数据,提供初步联合查询,初步聚合查询,也可以作为协调节点; Ingest,数据处理节点,类似ETL处理; Coordinate,协调节点,数据查询协调、数据写入协调; Machine Learning,机器学习节点,模型训练与模型预测。
集群路由示意图,查询过程/更新过程
5、分片副本
分片机制,一个索引可以分成多个分片,分片数据可以分布在任意集群数据节点上,此机制可以保证我们迁移大的索引数据时,按照分片一个一个迁移,而不用一次性迁移所有的分片,有效减少磁盘IO与网络IO; 副本机制,一个索引主分片可以有多个副本分片,主分片与副本分片可以任意切换,无需人工切换。这种机制可以保证我们在迁移大的数据索引时,仅迁移主分片数据即可,有效减少磁盘IO与网络IO。
index.number_of_replicas: 数值,默认1
#分片迁移API POST /_cluster/reroute { "commands" : [ { "move" : { "index" : "test_index", "shard" : 0, "from_node" : "node1", "to_node" : "node2" } } ]}
6、分布过滤
index.routing.allocation.include.{attribute} index.routing.allocation.require.{attribute} index.routing.allocation.exclude.{attribute}
结语
Elastic官方文档非常详细的描述了各种特性功能,但并没有针对数据迁移专门列举一个完整的步骤,掌握Elastic最好的方式是实战与理论并行,深入Elastic背后实现原理,尝试多种项目的实战。
在跨越速运大数据部门任职时,基于公司实际需求,得出的一些经验与思考,提供后来者借鉴参考。
想轻松完成迁移,不妨来Gdevops全球敏捷运维峰会北京站了解更多的业内流行架构吧:
《银行数字化转型战略分析、关键技术及未来架构趋势》建信金科 资深业务架构师/《企业级业务架构作者》/《银行数字化转型》作者 付晓岩 《建设敏捷型消费金融中台及云原生下的DevOps实践》中邮消费金融 总经理助理 李远鑫 《平安银行“传统+互联网”混合CMDB及运营中台实践》平安银行 运营开发负责人 徐大蔚 《中国农业银行信贷中台及数据中台建设实践》中国农业银行 研发中心资深架构专家 张亮 《技术体系建设:架构、质量、中台、后端的战略落地与矛盾破解》58到家集团/快狗打车 技术VP/CTO 沈剑 《微服务技术体系落地:分布式调用链追踪系统实战》58到家集团/快狗打车 技术委员会成员/架构部负责人 王昊 《揭露现象看本质:到家、货运O2O业务试金石基础-中台建设》58到家集团/快狗打车 业务服务部负责人/中台技术部负责人 李洪英
9月11日,让我们一起用更多元的视角观察问题本质,寻找架构发展的轨迹和趋势。
作者介绍
李猛(ynuosoft),Elastic-stack产品深度用户,ES认证工程师,2012年接触Elasticsearch,对Elastic-Stack开发、架构、运维等方面有深入体验,实践过多种Elasticsearch项目,最暴力的大数据分析应用,最复杂的业务系统应用;业余为企业提供Elastic-stack咨询培训以及调优实施。
|
全部评论
最新文章
热点排行
-
1文件存储 NAS 和 对象存储 OSS 的区别
-
2天翼云云电脑 | 让电视一秒变身电脑
-
3阿里工程师太凶残了,竟把服务器泡在“水里”!
-
4腾讯云 | 想在微信群里发起9人以上的语音聊天怎么办?
-
5数据仓库终结者:Dremio
-
62020年云服务器哪家强:阿里云、腾讯云、华为云、UCloud测评报告
-
72020 年 Q1 中国云市场份额:阿里云第一、华为云跃居第二、腾讯云下降为第三
-
8阿里云 web 应用防火墙(WAF)价格:179元/年
-
92020 Q1 中国公有云市场份额 TOP3:阿里云、腾讯云、华为云
-
10郑大一附院系统瘫痪 2 小时,运维人员被判 5 年半:破坏计算机信息系统罪
有话要说