SSH节点实现负载均衡高可用

基于阿里云网络负载均衡(NLB),DataWorksSSH节点能够利用NLB提供的智能负载均衡,规避单点故障风险,并显著简化任务配置与运维管理。本文将分步骤详解如何在DataWorks中部署与使用该方案,实现SSH任务的稳定执行。

背景信息

DataWorks中,SSH数据源通常配置到固定的ECS实例主机地址。若该主机出现异常(如宕机或资源耗尽),可能导致SSH节点执行失败。为解决这一问题,您可以将多个ECS实例绑定到NLB(网络型负载均衡)的服务器组。NLB通过内部算法策略将任务分发到可用的ECS实例,并持续检测实例的健康状态:若某个ECS实例发生故障,NLB会自动将任务请求转移至其他正常运行的实例,从而避免因单个ECS实例异常导致任务中断,确保任务持续稳定执行。

image

如上图所示:

  • 未配置负载均衡:DataWorksSSH节点任务只能在当前连接的ECS实例上执行。如果该ECS实例资源占满或出现故障,任务会延迟执行或中断。

  • 已配置负载均衡:DataWorksSSH节点任务会根据NLB的算法策略自动分配到服务器组中的某个ECS实例上执行。同时,NLB会对服务器组进行健康检查,一旦检测到故障ECS实例,会将任务重新分配给其他正常运行的ECS实例,从而确保任务的连续性和高可用性。

这一方案解决了资源占满和单点故障问题,提高了任务执行的效率和可靠性。

前提条件

  • RAM账号添加至对应空间(可选)。

    进行任务开发的RAM账号已被添加至对应工作空间中,并具有开发空间管理员(权限较大,谨慎添加)角色权限。添加成员并授权,详情请参见为工作空间添加空间成员

  • 对应空间已绑定Serverless资源组。详情请参见:使用Serverless资源组

使用限制

  • SSH节点内执行的代码长度上限为128KB

  • DataWorks的资源组、ECS实例和NLB实例必须位于同一地域的同一个VPC中。

环境准备

为了实现SSH节点的负载均衡和高可用性,您需要创建至少两个ECS实例,并在这些ECS实例上添加不同的示例数据以进行验证。

创建ECS实例

请按照以下步骤创建并购买所需的ECS实例。

  1. 选购ECS实例。

    进入ECS实例购买页,选择自定义购买页签,并配置以下参数以创建ECS实例。更多参数配置详情请参见自定义购买实例

    参数

    说明

    地域

    选择您所创建的DataWorks工作空间所在的地域。

    网络及可用区

    请选择您创建Serverless资源组时所使用的专有网络(VPC)和交换机。

    安全组

    请选择与Serverless资源组交换机绑定的安全组。

    其它参数

    您可以根据实际业务需求进行选择和配置。

  2. 设置购买数量。

    ECS实例购买页面的右侧找到购买实例数量选项,输入您所需的ECS实例数量。本教程中购买2个即可。

  3. 单击确认下单按钮,完成ECS实例的创建和购买。

准备示例数据

找到您所创建的两个ECS实例,并分别在ECS实例1ECS实例2上填写不同的示例数据信息,以便后续进行结果比对。

  1. 进入ECS实例。

    1. 进入ECS实例管理控制台,切换地域到您创建ECS实例的所在地域,找到您创建的两个ECS实例。

    2. 单击ECS实例对应操作栏中的远程连接,在远程连接弹窗中选择立即登录

    3. 进入登录实例页面,配置认证信息完成登录。

  2. 创建示例数据。

    • ECS实例1中执行以下命令:

      echo "我是第一台服务器" > /tmp/a.txt
    • ECS实例2中执行以下命令:

      echo "我是第二台服务器" > /tmp/a.txt

配置NLB

通过以下步骤创建NLB实例、配置后端服务器组(添加2ECS)并配置监听器,实现流量负载均衡。

创建NLB实例

您可通过以下步骤完成NLB实例的创建,更多详情请参见创建NLB实例的前提条件创建和管理NLB实例

  1. 进入NLB实例购买页。

    登录网络型负载均衡NLB控制台,在顶部菜单栏选择实例地域,然后在实例页面单击创建网络型负载均衡,进入云产品购买页。

    重要

    请选择与DataWorks工作空间一致的实例地域,以避免因配置错误而需要重新购买。

  2. 配置购买NLB实例。

    在云产品购买页,配置以下参数信息以创建NLB实例:

    参数

    说明

    网络

    实例网络类型

    选择私网类型。

    VPC

    选择您创建Serverless资源组所使用的专有网络。

    可用区

    选择您创建Serverless资源组的交换机所在的可用区。

    协议版本

    选择IPv4协议。

    管理设置

    实例名称

    自定义实例名称。

    资源组

    选择系统自带的默认资源组。

  3. 确认购买NLB实例。

    在配置完所有参数后,单击立即创建。在确认订单页面,单击立即开通

创建后端服务器组

等待NLB实例状态变为运行中后,您可以通过以下步骤为NLB实例创建并绑定后端服务器组。更多详情请参见创建和管理服务器组

  1. 进入实例详情页。

    1. 登录网络型负载均衡NLB控制台,在顶部菜单栏选择实例地域,在实例列表中找到您所创建的实例。

    2. 单击实例名称,进入实例详情页。

  2. 创建后端服务器组。

    1. 单击实例详情页上方的创建后端服务器组,进入创建服务器组页面。

    2. 自定义服务器组名称ECS_NLB后,然后单击创建按钮。

  3. 添加后端服务器。

    1. 服务器组创建成功弹窗,单击添加后端服务器

    2. 后端服务器页签单击添加后端服务器,进入添加后端服务器页面。

    3. 勾选您所创建的2ECS实例。

    4. 单击下一步,进入配置端口和权重步骤。

  4. 配置端口与权重。

    1. 配置端口22

    2. 单击确定按钮完成创建。

等待添加成功即可。

配置监听器

等待将ECS实例绑定为NLB实例的后端服务器组后,您可以通过以下步骤为NLB实例配置监听器。更多详情请参见添加TCP监听

  1. 进入实例详情页。

    1. 登录网络型负载均衡NLB控制台,在顶部菜单栏选择实例地域,在实例列表中找到您所创建的实例。

    2. 单击实例名称,进入实例详情页。

  2. 配置监听器。

    1. 单击实例详情页上方的创建监听,进入负载均衡业务配置向导配置页。

    2. 选择监听协议为TCP,设置监听端口为22

    3. 单击下一步

  3. 选择服务器组。

    1. 选择服务器组步骤中,基于服务器类型,选择您在创建后端服务器组中创建的服务器组ECS_NLB

    2. 单击下一步

  4. 提交配置审核。

    配置审核步骤中,确认您所绑定的ECS实例和监听端口无误,单击提交按钮完成配置。

配置SSH数据源

完成以上配置后,您可以通过以下步骤将NLB实例绑定为SSH数据源。更多详情请参见创建SSH数据源

  1. 进入管理中心页面。

    登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的更多 > 管理中心,在下拉框中选择对应工作空间后单击进入管理中心

  2. 单击左侧导航栏的数据源 > 数据源列表,进入数据源页面。

  3. 在数据源页面,单击新增数据源,进入新增数据源页面。

  4. 新增数据源页面选择创建的数据源类型为SSH,进入创建SSH数据源页面。您可以在该页面按照以下参数进行配置。

    参数

    说明

    数据源名称

    您可以自定义数据源名称,例如 SSH_DB

    配置模式

    默认使用连接串模式

    认证模式

    推荐选择DataWorks SSH公钥认证模式。

    主机地址

    登录网络型负载均衡NLB控制台,在顶部菜单栏选择实例地域,在实例列表中找到您所创建的实例,单击实例名称,进入实例详情页。复制DNS名称作为您的主机地址

    主机端口

    服务器的主机端口为22

    用户名

    服务器的登录用户名为root

    公钥

    单击生成密钥对。平台将根据您配置的用户名随机生成公钥。

    重要

    进行网络连通性测试前,请先将密钥对的公钥配置到您所创建的2ECS实例主机的.ssh/authorized_keys文件,以免网络无法连通。

  5. 测试资源组连通性。

    连接配置区域,找到工作空间绑定的Serverless资源组,单击连通状态列的测试连通性

执行SSH任务

您可以通过以下步骤完成SSH节点的创建与开发,并通过查看任务结果来验证其功能。

创建SSH节点

您可通过以下步骤完成SSH节点的创建。更多详情请参见创建SSH节点

  1. 进入DataWorks工作空间列表页,在顶部切换至目标地域,找到已创建的工作空间,单击操作列的快速进入 > Data Studio,进入Data Studio。

  2. 在左侧导航栏单击image,单击项目目录右侧的image,选择新建节点 > 通用 > SSH节点,进入新建节点弹窗。

  3. 新建节点弹窗中自定义SSH节点名称

  4. 单击确认按钮,进入节点编辑页面。

开发SSH节点

在节点编辑页面,您可以添加以下示例代码信息并配置代码执行环境。

  1. 编写SSH节点代码。

    在节点编辑页代码区域输入以下示例命令:

    cat /tmp/a.txt
  2. 配置执行环境。

    • 数据源选择:在节点编辑页面上方的选择数据源位置,选择您所配置的SSH数据源SSH_DB

    • 资源组配置:单击节点编辑页面右侧的调试配置,将资源组配置为您所创建的Serverless资源组。

  3. 单击节点上方工具栏的保存按钮,保存SSH节点任务。

查看任务结果

执行SSH节点代码时,您可以通过对比多次执行的打印结果,来验证配置生效。

  1. 执行SSH节点任务。

    单击节点上方工具栏的运行按钮。等待结果输出后再次执行节点任务。

  2. 查看任务结果。

    说明

    任务提交执行后,NLB(网络负载均衡器)会通过逻辑算法将任务随机分配给其中一个ECS实例。因此,您在多次执行该任务后,可能会看到不同的结果,因为每次任务都可能被分配到不同的ECS实例上。

    执行结果1image

    执行结果2

    image

附录:实现原理说明

以下是如何在DataWorks中利用阿里云网络负载均衡器(NLB)实现高并发SSH任务的稳定执行的详细原理说明:

image

通过将多个ECS实例绑定至NLB服务器组,并将NLBDNS名称配置为DataWorksSSH数据源,配置SSH节点任务后,任务请求经数据源被NLB监听器监听到,并依据负载均衡策略分发至健康的ECS实例执行。执行结果通过NLB透传返回,并在SSH节点日志中实时展示。