需求背景
在建立分布式生产环境的过程中,相对于传统的生产环境,我们会面临更多的挑战:
为了应对这些挑战,我们需要使我们的分布式系统具备以下特点:
02
解决方案
2.1 框架结构-数据处理流程
应用的数据写入层
Elasticsearch Stack中提供的各种beats可以用于采集各种类型的数据,在非linux的环境下使用flume采集数据,也可以使用SDC或者自行开发的app进行数据采集。采集到的数据写入到传输层kafka集群。
特点:以最小的代价快速地将数据传递出来,通常不进行复杂的数据处理,避免对宿主机造成影响。
数据传输层
该层我们选用通用消息中间件kafka集群充当,负责缓存数据,提供多次的数据消费能力,屏蔽数据生产端和消费端的差异。
特点:通用的消息中间件,将数据缓存于该层,避免数据峰涌,避免由于前后端数据处理的速度差异而导致数据丢失。在高可用环境中提供对同一数据的多次消费能力。
数据处理层
该层我们选用SDC集群充当(streamsets data collector),负责将数据从kafka集群读取出来,进行必要的解析、加工、处理,最终存储到Elasticsearch集群。
特点:完全图形化处理,通过拖拽即可完成开发工作,数据处理流程一目了然;对系统资源消耗低,处理速度快;具备back pressure能力,避免短时间大量数据从源端涌入,致使后端数据处理超载;直观查看各个数据处理环节的处理性能及数据处理异常情况。
数据安全层
该层我们选用nginx集群充当,每个物理节点都部署一个独立的nginx节点,负责在对Elasticsearch集群写入时进行安全控制,避免非授权访问。
特点:提供简单的URL级别的安全访问控制。
数据存储层
该层由Elasticsearch集群充当,负责存储海量数据,提供高效数据查询能力。
特点:提供业界领先的海量数据存储、准实时的数据查询、分析能力。在日志分析、全文检索、实时推荐、安全预警、业务分析、机器学习、图计算等方面都能提供强大的处理能力。
数据安全层
该层我们选用nginx集群充当,每个物理节点都部署一个独立的nginx节点,负责在对Elasticsearch集群读取时进行安全控制,避免非授权访问。
特点:提供简单的URL级别的安全访问控制。
应用数据读取层
在该层我们可以对数据进行图形化展示、实时告警、供应用系统进一步加工处理等。
特定:在基于对Elasticsearch所提供的各种数据查询能力上,我们可以非常方便地进行各种二次开发,满足业务需要。
通过这套数据处理架构,形成了大数据处理从采集-》传输-》处理-》存储-》展现的完整生态。上述数据处理的流程是自上而下,单向流动,这是为搭建高可用集群打下基础。最终可以形成集群多活的高可用环境。
2.2 框架结构-服务节点间关系
2.3 框架结构-服务管理关系
2.4 实现原理
2.5 目录结构
2.6 重要命令
sync.sh:将当前节点的数据完全同步到集群中的其他节点,保证节点间信息完全同步。用于扩容、升级、信息同步等场景。
2.7 操作流程
Ø 部署场景:执行initnode.sh对该节点进行安装;
Ø 升级场景:执行initnode.sh对该节点进行升级;
Ø 变更场景:不执行initnode.sh,仅更改配置;
Ø 扩容场景:不执行initnode.sh。
2.8 架构优势
2.9 高可用架构
基于前面的部署架构可以很容易地扩展为多集群的高可用架构。
SDC集群在对kafka集群里面的同一数据进行多次消费后,使用不同的pipeline但进行相同的处理,然后将相同的处理后数据存储进多个ES集群,保证ES集群间的数据最终一致性。
通过该架构,可提供以下能力:
集群间的高可用
ES集群间相互没有关系,存储的数据最终一致,在一个集群出现停止服务后,可以快速地将其上的业务迁移到可用的ES集群上。
故障后自动恢复
在一定时间范围内故障的ES集群恢复功能后,由于SDC在kafka上记录的offset没有改变,因此可以从故障点的数据重新开始追加处理,实现数据的自动恢复。
无风险的版本升级
升级过程中:在需要对某一个ES集群进行升级时,可以将其上的业务迁移到其他ES集群,然后对没有业务运行的ES集群进行升级,减少升级对业务的影响,降低升级压力;
升级过程后:在某个ES集群完成升级,运行一段时间的业务后,发现存在不可解决的问题,这时如果整个集群中还有ES集群运行在老版本上未完成升级,这时可以快速地将业务切换到老版本集群上,实现版本回退 。
跨版本升级
按照官方的升级路径,某些低版本由于结构差异太大,是不能直接升级到新版本的,而需要经历一些过度版本,完成内部数据结构的转换,这会增加升级的风险和影响。本方案可解决这一问题,各集群间仅仅是存储的数据相同,相互之间没有关联,因此无需进行任何数据结构的转换,可以一次性实现跨多个版本的升级工作。
03
操作演示
3.1 演示环境
物理环境配置
集群节点配置
3.2 演示界面
Elasticsearch集群界面
SDC pipeline界面
ElastAlert界面
3.3 开源项目
相关代码及详细演示过程参见开源项目:https://github.com/zhan-yl/es_cluster。
本文作者:民生银行 詹玉林
中国民生银行信息科技部大数据团队运维工程师。曾经担任过银行核心系统开发工程师,IBM informix数据库L2支持工程师,民生银行数据库DBA等角色。目前主要负责与elasticsearch相关的大数据方面的工作。
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞1
添加新评论0 条评论