点击上方 蓝字关注我们

1 文档编写目的

Apache DolphinScheduler(简称DS)是一个分布式去中心化,易扩展的可视化DAG工作流任务调度平台。在生产环境中需要确保调度平台的稳定可靠性及任务负载均衡,本篇文档主要针对 DS 集群的高可用及稳定性进行测试验证。

  • 测试环境说明

1.CM和CDH版本为5.16.2

2.集群启用Kerberos

3.DolphinScheduler版本为1.3.8

4.集群HDFS和Yarn服务已启用HA

5.操作系统为RedHat7.6

2 测试场景说明

  • 场景一:API管理角色的高可用性测试

DS的API服务主要是用于为前端UI层提供服务,前端界面也是我们使用DS的一个重要入口,需要确保服务的高可用。

通过模拟API服务故障,验证API服务是否可以正常运行。

  • 场景二:Master管理角色的高可用性测试

MasterServer采用分布式无中心设计理念,MasterServer主要负责 DAG 任务切分、任务提交监控,并同时监听其它MasterServer和WorkerServer的健康状态。MasterServer服务启动时向Zookeeper注册临时节点,通过监听Zookeeper临时节点变化来进行容错处理。

通过模拟MasterServer服务故障,验证集群的DAG调度及监控是否正常运行。

  • 场景三:Worker角色的高可用性测试

WorkerServer也采用分布式无中心设计理念,WorkerServer主要负责任务的执行和提供日志服务。WorkerServer服务启动时向Zookeeper注册临时节点,并维持心跳。

通过模拟WorkServer服务故障,验证集群的DAG在运行过程中是否会受到影响。

  • 场景四:Worker节点的性能负载测试

基于该场景主要测试在集群高负载的进行任务调度的情况下,验证DAG任务是否能够合理的分配到相应的worker节点运行。

3 高可用测试

3.1 API管理角色的高可用性测试

测试前置:在测试API角色之前需要确保DS集群中已部署了两个API角色,否则在测试的过程中模拟API故障则会直接导致DS的前端页面无法正常访问。

说明:测试阶段就未引入Haproxy或F5实现前端页面访问的负载均衡,因此本测试用例均是直接访问相应的API地址来进行验证。

1.确认两个API服务均正常运行

2. 问192.168.0.120的API服务的前端在项目中运行一个调度

3.登录192.168.0.120节点,找到API服务的进程,并kill掉该进程,模拟服务异常。

ps -ef |grep ApiApplicationServer

确认服务120节点的API服务已停止。

4.登录192.168.0.121节点的API服务,确认作业在120节点上启动的作业是否已成功运行。

在121节点的API前端界面上可以看到,在120节点上提交的DAG已成功运行,并未收到120节点API服务异常而终止任务。

3.2 Master管理角色的高可用性测试

测试前置:Master服务采用分布式无中心模式,MasterServer服务启动时向Zookeeper注册临时节点,通过监听Zookeeper临时节点变化来进行容错处理。为了测试Master服务的高可用,需要确保集群中的Master角色在2个以上。本次的测试环境有3个Master服务。

1.在API的WEB UI上连续的提交多个DAG工作流

可以看到连续提交多个DAG时,DAG会被提交到不同的Master节点上。

2.登录到192.168.0.120的Master节点上,找到该服务的进程并Kill掉

ps -ef |grep master

当前存在的Master服务为2个

3.通过刷新WEB界面可以看到,出现“恢复被容错的工作流”

可以看到开始被分配到120节点的DAG工作流,因为该节点的Master服务故障, 工作流被恢复到另外两个Master节点运行。最终可以看到所有的提交的两个工作流均成功运行。

当120节点的服务器负载很高时,提交的所有DAG工作流均被分配到其他两个Master节点。

在连续提交三个DAG后,分配

3.3 Worker角色的高可用性测试

测试前置:对于DS的Worker角色来说,主要是用来执行Master分配的Task任务,因此在此环节做Worker的高可用测试,则必须确保Worker节点在2个以上。本次测试环境Worker节点共有3个:

1.通过DS的前端界面运行两个DAG工作流

2.将192.168.0.120和192.168.0.121节点的Worker服务杀掉

确认只有一个Worker节点

3.查看作业也运行成功

3.4 Worker节点的性能负载测试

负载均衡即通过路由算法(通常是集群环境),合理的分摊服务器压力,达到服务器性能的最大优化。

DolphinScheduler-Master 分配任务至 worker,默认提供了三种算法:

  • 加权随机(random),在符合的 worker 中随机选取一台

  • 平滑轮询(roundrobin),通过为每台 worker 都有两个权重,即 weight(预热完成后保持不变),current_weight(动态变化),每次路由。都会遍历所有的 worker,使其 current_weight+weight,同时累加所有 worker 的 weight,计为 total_weight,然后挑选 current_weight 最大的作为本次执行任务的 worker,与此同时,将这台 worker 的 current_weight-total_weight。

  • 线性负载(lowerweight),通过每台worker的load平均值和可用物理内存,判断worker是否参与负载。

默认配置为线性加权负载。

参考:

https://dolphinscheduler.apache.org/zh-cn/docs/latest/user_doc/load-balance.html

本次测试通过拉高集群中两个worker节点的负载方式,验证提交的DAG工作流,任务是否会分配到高负载的Worker节点上。

1.本次选择120和122节点,在两个节点上运行脚本,将该节点的负载拉高

2.通过WEB界面向DS集群中连续提交几个DAG工作流

3.持续观察worker节点的负载情况

当worker的负载过高时,相应的任务就会提交到负载低的worker节点

4 总结

1.在DS集群中部署多个API服务,通过Haproxy或F5负载均衡的方式,可以保障前端WEB界面的高可用及负载均衡。

2.在DS集群中Master服务是一个分布式的无中心的管理节点,在提交DAG任务时会根据Master所在节点的负载情况来选择相对负载低的节点提交,可以很好的做到Master服务的负载均衡及高可用。

3.在DS集群中Worker服务有多重负载规则,本次测试使用默认的线性负载方式,通过所有Worker节点对自己所在服务器的load 平均值和可用内存情况,来选择最优的worker节点来运行Task作业,有效且合理的分摊了服务的压力,达到服务器性能最大优化。

社区官网

https://dolphinscheduler.apache.org/

代码仓地址

https://github.com/apache/dolphinscheduler

您的 Star,是 Apache DolphinScheduler 为爱发电的动力️ 

添加社区小助手微信

(Leonard-ds)



最佳实践 | 联通数科基于 DolphinScheduler 的二次开发

DolphinScheduler 荣获 2021 中国开源云联盟优秀开源项目奖!

议题征集令 | Apache DolphinScheduler Meetup 2021 来啦,议题征集正式开启!

☞重构、插件化、性能提升 20 倍,Apache DolphinScheduler 2.0 alpha 发布亮点太多!

☞巨变!a16z 关于新一代数据基础设施架构的深度洞察

☞手把手教你 Apache DolphinScheduler 本地开发环境搭建 | 中英文视频教程

☞Apache DolphinScheduler使用规范与使用技巧分享

点击阅读原文,加入开源!

点个在看你最好看

DolphinScheduler 集群高可用测试:有效分摊服务器压力,达到性能最大优化!的更多相关文章

  1. Rabbitmq集群高可用测试

    Rabbitmq集群高可用 RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言,但其本身并不支持负载均衡. Rabbit模式大概分为以下三种:单一模式.普通模 ...

  2. bitmq集群高可用测试

    Rabbitmq集群高可用 RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言,但其本身并不支持负载均衡. Rabbit模式大概分为以下三种:单一模式.普通模 ...

  3. Eureka 集群高可用配置.

    SERVER:1 server: port: 1111 eureka: instance: hostname: ${spring.cloud.client.ip-address} instance-i ...

  4. hadoop+zookeeper集群高可用搭建

                                                                  hadoop+zookeeper集群高可用搭建 Senerity 发布于 2 ...

  5. openstack pike 集群高可用 安装 部署 目录汇总

    # openstack pike 集群高可用 安装部署#安装环境 centos 7 史上最详细的openstack pike版 部署文档欢迎经验分享,欢迎笔记分享欢迎留言,或加QQ群663105353 ...

  6. 浅谈MySQL集群高可用架构

    前言 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库,搜索,消息队列等,每个模块都需要做到高可用,才能 ...

  7. 集群高可用之lvs+keepalive

    集群高可用之lvs+keepalive keepalive简介: 负载均衡架构依赖于知名的IPVS内核模块,keepalive由一组检查器根据服务器的健康情况动态维护和管理服务器池.keepalive ...

  8. mysql集群高可用架构

    前言 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库,搜索,消息队列等,每个模块都需要做到高可用,才能 ...

  9. RabbitMQ从零到集群高可用(.NetCore5.0) - 死信队列,延时队列

    系列文章: RabbitMQ从零到集群高可用(.NetCore5.0) - RabbitMQ简介和六种工作模式详解 RabbitMQ从零到集群高可用(.NetCore5.0) - 死信队列,延时队列 ...

随机推荐

  1. final变量、方法与类

    学习内容: 一.final变量 1.设定为final的变量,其值不可被改变. 2.final定义的变量必须在声明时对其进行赋值操作. 3.final可以修饰对象.被修饰为final的对象,只能恒定指向 ...

  2. [codeforces] 暑期训练之打卡题(三)

    每个标题都做了题目原网址的超链接 Day21<Alphabetic Removals> 题意: 给定一个字符串,要求按照字典序按照出现的前后顺序删除 k 个字母 题解: 记录字符串中各个字 ...

  3. Golang可重入锁的实现

    Golang可重入锁的实现 项目中遇到了可重入锁的需求和实现,具体记录下. 什么是可重入锁 我们平时说的分布式锁,一般指的是在不同服务器上的多个线程中,只有一个线程能抢到一个锁,从而执行一个任务.而我 ...

  4. 【leetcode 206】 反转链表(简单)

    链表 概念: 区别于数组,链表中的元素不是存储在内存中连续的一片区域,链表中的数据存储在每一个称之为「结点」复合区域里,在每一个结点除了存储数据以外,还保存了到下一个结点的指针(Pointer). 由 ...

  5. FTPClient处理中文乱码问题,实测通过了

    使用FTPClient 操作FTP时,遇到路径或文件名中文乱码问题:   其中的一种处理方式:   在new FTPClient()后,可以设置编码, ftpClient=new FTPClient( ...

  6. go-zero微服务实战系列(三、API定义和表结构设计)

    前两篇文章分别介绍了本系列文章的背景以及根据业务职能对商城系统做了服务的拆分,其中每个服务又可分为如下三类: api服务 - BFF层,对外提供HTTP接口 rpc服务 - 内部依赖的微服务,实现单一 ...

  7. 全球共有多少MySQL实例在运行?这里有一份数据

    摘要 Shadowserver Foundation在5月31日发布了一份全网的MySQL扫描报告,共发现了暴露在公网的360万个MySQL实例.因为这份报告基数够大,而且信息也非常完整,从数据库专业 ...

  8. 【SpringBoot】YAML 配置文件

    博客主页:准Java全栈开发工程师 00年出生,即将进入职场闯荡,目标赚钱,可能会有人觉得我格局小.觉得俗,但不得不承认这个世界已经不再是以一条线来分割的平面,而是围绕财富旋转的球面,成为有钱人不是为 ...

  9. NC204859 组队

    NC204859 组队 题目 题目描述 你的团队中有 \(n\) 个人,每个人有一个能力值 \(a_i\),现在需要选择若干个人组成一个团队去参加比赛,由于比赛的规则限制,一个团队里面任意两个人能力的 ...

  10. 如何用Fiddler对APP进行网络测试

    什么是Fiddler Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的"进出"Fiddler的数据(指co ...