すべてのプロダクト
Search
ドキュメントセンター

DataWorks:SSH ノードの負荷分散と高可用性

最終更新日:Jun 23, 2026

Alibaba Cloud Network Load Balancer (NLB) は、DataWorks の SSH ノードにインテリジェントな負荷分散を提供し、単一障害点を防ぎ、タスク構成を簡素化します。このトピックでは、DataWorks でこのソリューションをデプロイして使用し、SSH タスクを安定して実行する方法について説明します。

背景情報

DataWorks では、SSH データソースは通常、固定の Elastic Compute Service (ECS) インスタンスのホストアドレスで構成されます。そのホストが異常な状態 (クラッシュやリソース不足など) になると、SSH ノードの実行に失敗する可能性があります。この問題に対処するため、Network Load Balancer (NLB) インスタンスのサーバーグループに複数の ECS インスタンスを追加できます。NLB は内部アルゴリズムを使用して、タスクリクエストを利用可能な ECS インスタンスに分散し、継続的にヘルスチェックを実行します。ECS インスタンスに障害が発生した場合、NLB は自動的にリクエストを他の正常なインスタンスにルーティングします。これにより、単一インスタンスの障害によるタスクの中断を防ぎ、高可用性を確保します。

上の図に示すように:

  • 負荷分散なし:DataWorks の SSH ノードタスクは、接続されている ECS インスタンスでのみ実行できます。そのインスタンスが過負荷になったり障害が発生したりすると、タスクは遅延または中断されます。

  • 負荷分散あり:DataWorks の SSH ノードタスクは、NLB ポリシーに基づいてサーバーグループ内の ECS インスタンスに自動的にルーティングされます。NLB はサーバーグループのヘルスチェックも実行します。異常な ECS インスタンスを検出すると、タスクを他の正常なインスタンスに自動的にルーティングし、継続性と高可用性を確保します。

このソリューションは、リソースの枯渇と単一障害点を防ぎ、タスク実行の効率と信頼性を向上させます。

前提条件

  • 使用する RAM ユーザーがワークスペースに追加されていること。

    RAM ユーザーを使用してタスクを開発する場合、その RAM ユーザーをメンバーとしてワークスペースに追加し、[開発] または [ワークスペース管理者] ロールを割り当てる必要があります。[ワークスペース管理者] ロールには必要以上の権限が含まれているため、割り当てる際には注意が必要です。メンバーの追加とロールの割り当て方法の詳細については、「ワークスペースへのメンバーの追加」をご参照ください。

  • サーバーレスリソースグループがワークスペースに関連付けられていること。詳細については、「サーバーレスリソースグループの使用」ディレクトリのトピックをご参照ください。

制限事項

  • SSH ノード内のコードは 128 KB を超えることはできません。

  • DataWorks リソースグループ、ECS インスタンス、および NLB インスタンスは、同じ VPC とリージョンに存在する必要があります。

環境の準備

SSH ノードの負荷分散と高可用性を有効にするには、少なくとも 2 つの ECS インスタンスを作成し、それぞれに検証用の一意のサンプルデータを追加します。

ECS インスタンスの作成

以下の手順に従って、必要な ECS インスタンスを作成します。

  1. ECS インスタンスを購入します。

    ECS インスタンスの購入ページに移動し、[カスタム起動] タブを選択し、以下のパラメーターを設定して ECS インスタンスを作成します。その他のパラメーターの詳細については、「[カスタム起動] タブでのインスタンスの作成」をご参照ください。

    パラメーター

    説明

    リージョン

    ご利用の DataWorks ワークスペースが存在するリージョンを選択します。

    [ネットワークとゾーン]

    サーバーレスリソースグループに使用されているのと同じ Virtual Private Cloud (VPC) と vSwitch を選択します。

    Security Group

    サーバーレスリソースグループの vSwitch にバインドされているセキュリティグループを選択します。

    その他のパラメーター

    ビジネス要件に基づいて他のパラメーターを設定します。

  2. 数量を設定します。

    ECS インスタンス購入ページの右側で [数量] オプションを見つけ、必要な ECS インスタンスの数を入力します。このチュートリアルでは 2 つのインスタンスを使用します。

  3. [注文の作成] をクリックして、ECS インスタンスの作成と購入を完了します。

サンプルデータの準備

作成した 2 つの ECS インスタンスに、後で結果を区別できるように、それぞれ一意のサンプルデータを書き込みます。

  1. ECS インスタンスにログインします。

    1. ECS コンソールに移動し、ECS インスタンスが存在するリージョンに切り替えて、作成した 2 つのインスタンスを見つけます。

    2. インスタンスの Operation 列で、[リモート接続] をクリックします。[リモート接続] ダイアログボックスで、[今すぐサインイン] を選択します。

    3. [インスタンスへのログイン] ページで、認証情報を設定し、ログインを完了します。

  2. サンプルデータを作成します。

    • ECS インスタンス 1 で、次のコマンドを実行します:

      echo "I am the first server" > /tmp/a.txt
    • ECS インスタンス 2 で、次のコマンドを実行します:

      echo "I am the second server" > /tmp/a.txt

NLB インスタンスの設定

以下の手順に従って NLB インスタンスを作成し、2 つの ECS インスタンスを追加してバックエンドサーバーグループを設定し、リスナーをセットアップして負荷分散を有効にします。

NLB インスタンスの作成

以下の手順で NLB インスタンスを作成できます。詳細については、「NLB インスタンス作成の前提条件」および「NLB インスタンスの作成と管理」をご参照ください。

  1. NLB インスタンスの購入ページに移動します。

    Network Load Balancer コンソールにログインします。トップナビゲーションバーでリージョンを選択します。[インスタンス] ページで [NLB の作成] をクリックして、[クラウドサービス購入ページ] に移動します。

    重要

    DataWorks ワークスペースと同じリージョンを選択してください。リージョンの選択を誤ると、新しいインスタンスを作成する必要があります。

  2. NLB インスタンスを設定して購入します。

    [クラウドサービス購入ページ] で、以下のパラメーターを設定して NLB インスタンスを作成します:

    パラメーター

    説明

    ネットワーク

    ネットワークタイプ

    [内部向け] を選択します。

    VPC

    サーバーレスリソースグループで使用されている VPC を選択します。

    ゾーン

    サーバーレスリソースグループの vSwitch が存在するゾーンを選択します。

    IP バージョン

    [IPv4] を選択します。

    管理設定

    インスタンス名

    カスタムのインスタンス名を入力します。

    リソースグループ

    デフォルトのリソースグループを選択します。

  3. 購入を確定します。

    すべてのパラメーターを設定した後、すぐに作成 をクリックします。[注文の確認] ページで、有効化 をクリックします。

バックエンドサーバーグループの作成

NLB インスタンスが [アクティブ] 状態になった後、以下の手順に従ってバックエンドサーバーグループを作成し、NLB インスタンスにバインドします。詳細については、「NLB サーバーグループ」をご参照ください。

  1. インスタンス詳細ページに移動します。

    1. Network Load Balancer コンソールにログインします。トップナビゲーションバーでリージョンを選択します。インスタンスリストで、作成したインスタンスを見つけます。

    2. インスタンス名をクリックして、インスタンス詳細ページに移動します。

  2. バックエンドサーバーグループを作成します。

    1. インスタンス詳細ページの上部で、[サーバーグループの作成] をクリックして [サーバーグループの作成] ページに移動します。

    2. [サーバーグループ名]ECS_NLB に設定し、Create をクリックします。

  3. バックエンドサーバーを追加します。

    1. [サーバーグループが正常に作成されました] ダイアログボックスで、[バックエンドサーバーの追加] をクリックします。

    2. [バックエンドサーバー] タブで、[バックエンドサーバーの追加] をクリックして [バックエンドサーバーの追加] ページに移動します。

    3. 作成した 2 つの ECS インスタンスを選択します。

    4. Next step をクリックして、[ポート/重み] ステップに移動します。

  4. ポートと重みを設定します。

    1. ポート22 に設定します。

    2. OK をクリックして設定を完了します。

バックエンドサーバーが正常に追加されるまで待ちます。

リスナーの設定

ECS インスタンスをバックエンドサーバーグループに追加した後、次のように NLB インスタンスのリスナーを設定します。詳細については、「TCP リスナーの追加」をご参照ください。

  1. インスタンス詳細ページに移動します。

    1. Network Load Balancer コンソールにログインします。トップナビゲーションバーでリージョンを選択します。インスタンスリストで、作成したインスタンスを見つけます。

    2. インスタンス名をクリックして、インスタンス詳細ページに移動します。

  2. リスナーを設定します。

    1. インスタンス詳細ページの上部で、[リスナーの作成] をクリックして [Server Load Balancer の設定] ウィザードを開きます。

    2. リスナープロトコルを [TCP] に、リスナーポートを 22 に設定します。

    3. Next step をクリックします。

  3. サーバーグループを選択します。

    1. [サーバーグループの選択] ステップで、[サーバータイプ] に、「バックエンドサーバーグループの作成」で作成したサーバーグループ ECS_NLB を選択します。

    2. Next step をクリックします。

  4. レビューのために送信します。

    [設定のレビュー] ステップで、ECS インスタンスとリスナーポートを確認し、Submit をクリックします。

SSH データソースの設定

上記の設定が完了したら、NLB インスタンスを SSH データソースとして追加します。詳細については、「SSH データソース」をご参照ください。

  1. DataWorks コンソールにログインします。対象のリージョンで、左側のナビゲーションウィンドウの さらに表示 > 管理センター をクリックします。ドロップダウンリストからワークスペースを選択し、入力 管理センター をクリックします。

  2. 左側のナビゲーションウィンドウで、Data Sources > データソース一覧 をクリックして Data Sources ページに移動します。

  3. [データソース] ページで、Add Connection をクリックして Add Connection ページに移動します。

  4. Add Connection ページで、データソースタイプとして SSH を選択して [SSH データソースの追加] ページに移動します。このページで次のようにパラメーターを設定できます。

    パラメーター

    説明

    データソース名

    データソースのカスタム名を入力します。例:SSH_DB

    構成モード

    デフォルトの User-created Data Store with Public IP Addresses を使用します。

    認証方法

    [DataWorks SSH 公開鍵認証] を推奨します。

    ホストアドレス

    Network Load Balancer コンソールにログインします。トップナビゲーションバーでリージョンを選択します。インスタンスを見つけてその名前をクリックし、インスタンス詳細ページを開きます。[ドメイン名] をコピーして [ホストアドレス] として使用します。

    ホストポート

    サーバーのホストポートは 22 です。

    ユーザー名

    サーバーのユーザー名は root です。

    公開鍵

    キーペアの生成 をクリックします。プラットフォームは、設定したユーザー名に基づいて公開鍵を生成します。

    重要

    接続をテストする前に、公開鍵を 2 つの ECS ホストの .ssh/authorized_keys ファイルに追加してください。そうしないと、テストは失敗します。

  5. リソースグループの接続性をテストします。

    接続設定 セクションで、ワークスペースにバインドされているサーバーレスリソースグループを見つけ、Connected state 列の テスト接続 をクリックします。

SSH タスクの実行

以下の手順に従って SSH ノードを作成・開発し、タスク結果を確認してその機能性を検証できます。

SSH ノードの作成

以下の手順で SSH ノードを作成できます。詳細については、「SSH ノードの作成」をご参照ください。

  1. DataWorks コンソールの [ワークスペース] ページに移動します。トップナビゲーションバーで目的のリージョンを選択します。目的のワークスペースを見つけ、[アクション] 列の [ショートカット] > [DataStudio] を選択します。

  2. 左側のナビゲーションウィンドウで、image アイコンをクリックします。Project Directory の横にある image アイコンをクリックし、New Node > General > SSH を選択して New Node ダイアログボックスを開きます。

  3. New Node ダイアログボックスで、SSH ノードのカスタム Name を入力します。

  4. Confirm をクリックしてノードエディターに移動します。

SSH ノードの開発

ノードエディターページで、以下のサンプルコードを追加し、実行環境を設定します。

  1. SSH ノードのコードを記述します。

    コードエディタに、次のサンプルコマンドを入力します:

    cat /tmp/a.txt
  2. 実行環境を設定します。

    • データソース:エディター上部の Select a data source ドロップダウンリストから、SSH_DB データソースを選択します。

    • リソースグループ設定:右側のペインで Run Configuration をクリックし、Resource Group をご利用のサーバーレスリソースグループに設定します。

  3. ツールバーの Save ボタンをクリックして SSH ノードを保存します。

タスク結果の表示

SSH ノードを複数回実行し、出力を比較して負荷分散が有効であることを確認します。

  1. SSH ノードタスクを実行します。

    ツールバーの Run ボタンをクリックします。最初の実行が完了したら、タスクを再度実行します。

  2. タスク結果を表示します。

    説明

    タスクが毎回異なる ECS インスタンスにルーティングされるため、実行ごとに出力が異なる場合があります。

    実行結果 1

    2025-04-11 16:53:05 INFO =============================================
    2025-04-11 16:53:06,657 INFO [SshWrapperMain.java:151] - Get PrivateKey Content OK
    2025-04-11 16:53:06,667 INFO [SshExecutorUtil.java:33] - User: xxx
    2025-04-11 16:53:06,668 INFO [SshExecutorUtil.java:34] - Host: xxx
    2025-04-11 16:53:06,668 INFO [SshExecutorUtil.java:35] - Port: 22
    2025-04-11 16:53:07,876 INFO [SshExecutorUtil.java:55] - session connect success
    2025-04-11 16:53:07,877 INFO [SshExecutorUtil.java:56] - code:
    cat /tmp/a.txt
    2025-04-11 16:53:07,894 INFO [SshExecutorUtil.java:66] - channel connect success
    I am the first server
    2025-04-11 16:53:09 INFO =============================================
    2025-04-11 16:53:09 INFO Exit code of the Shell command 0
    2025-04-11 16:53:09 INFO --- Invocation of Shell command completed ---
    2025-04-11 16:53:09 INFO Shell run successfully!
    2025-04-11 16:53:09 INFO Current task status: FINISH
    2025-04-11 16:53:09 INFO Cost time is: 3.238s

    実行結果 2

    この出力は "I am the second server" を示しており、リクエストが 2 番目の ECS インスタンスにルーティングされたことを示します。実行ログは次のとおりです:

    2025-04-11 16:53:56 INFO ============================================================
    2025-04-11 16:53:57,632 INFO [SshWrapperMain.java:151] - Get PrivateKey Content OK
    2025-04-11 16:53:57,645 INFO [SshExecutorUtil.java:33] - User:
    2025-04-11 16:53:57,645 INFO [SshExecutorUtil.java:34] - Host:
    2025-04-11 16:53:57,645 INFO [SshExecutorUtil.java:35] - Port: 22
    2025-04-11 16:53:58,746 INFO [SshExecutorUtil.java:55] - session connect success
    2025-04-11 16:53:58,746 INFO [SshExecutorUtil.java:56] - code:
    cat /tmp/a.txt
    2025-04-11 16:53:58,764 INFO [SshExecutorUtil.java:66] - channel connect success
    I am the second server
    2025-04-11 16:53:59 INFO ============================================================
    2025-04-11 16:53:59 INFO Exit code of the Shell command 0
    2025-04-11 16:53:59 INFO --- Invocation of Shell command completed ---
    2025-04-11 16:53:59 INFO Shell run successfully!
    2025-04-11 16:53:59 INFO Current task status: FINISH
    2025-04-11 16:53:59 INFO Cost time is: 3.011s

仕組み

以下では、DataWorks が NLB を使用して高同時実行 SSH タスクの安定した実行を保証する仕組みについて説明します:

このソリューションは、複数の ECS インスタンスを NLB サーバーグループに追加し、NLB インスタンスの DNS 名を DataWorks の SSH データソースとして使用することで機能します。SSH ノードからのタスクリクエストは NLB リスナーによって傍受され、その負荷分散ポリシーに基づいて正常な ECS インスタンスに分散されます。実行結果は NLB を介して返され、SSH ノードのログに表示されます。