DataWorks SSHノードは、Alibaba Cloud ネットワークロードバランサー(NLB)が提供するインテリジェント負荷分散機能を使用して、単一障害点(SPOF)を防ぎ、タスク構成とO&M管理を大幅に簡素化できます。このトピックでは、SSHタスクの安定した実行を保証するために、DataWorksでインテリジェント負荷分散機能をデプロイおよび使用する方法について説明します。
背景情報
ほとんどの場合、SSHデータソースは、DataWorksのElastic Compute Service(ECS)インスタンスの固定ホストアドレスで構成されます。 ECSインスタンスで、故障やリソース枯渇などの例外が発生した場合、ECSインスタンスで実行されているSSHノードが実行に失敗する可能性があります。この問題を解決するには、複数の ECSインスタンス を NLB サーバーグループに追加します。次に、NLBは内部アルゴリズムポリシーに基づいて、使用可能なECSインスタンスにタスクを分散し、ECSインスタンスのヘルスステータスを継続的に監視します。 ECSインスタンスに障害が発生した場合、NLBはタスク要求を正常に実行されている他のインスタンスに自動的に転送して、タスクの中断を防ぎます。これにより、継続的で安定したタスク実行が保証されます。
前の図の情報:
負荷分散が無効:DataWorks SSHノードのタスクは、現在接続されているECSインスタンスでのみ実行できます。 ECSインスタンスに障害が発生した場合、またはECSインスタンスのリソースが使い果たされた場合、タスクは遅延または中断されます。
負荷分散が有効:DataWorks SSHノードのタスクは、NLBによって提供されるアルゴリズムポリシーに基づいて、サーバーグループ内の特定のECSインスタンスに自動的に分散されます。さらに、NLBはサーバーグループのヘルスチェックを実行します。障害のあるECSインスタンスが検出されると、NLBは障害のあるECSインスタンスで実行されているタスクを、正常に実行されている別のECSインスタンスに分散して、タスク実行の継続性と高可用性を確保します。
このソリューションは、リソースの枯渇とSPOFの問題に対処し、タスク実行中の効率と信頼性を向上させます。
前提条件
使用するRAMユーザーがワークスペースに追加されていること。
RAMユーザーを使用してタスクを開発する場合、RAMユーザーをメンバーとしてワークスペースに追加し、[開発] ロールまたは [ワークスペース管理者] ロールをRAMユーザーに割り当てる必要があります。ワークスペース管理者ロールには、必要以上の権限があります。 ワークスペース管理者ロールを割り当てる場合は注意してください。メンバーを追加してロールを割り当てる方法の詳細については、「ワークスペースメンバーを追加し、ロールを割り当てる」をご参照ください。
サーバーレスリソースグループがワークスペースに関連付けられていること。詳細については、「サーバーレスリソースグループを使用する」ディレクトリのトピックをご参照ください。
制限事項
SSHノードで実行されるコードのサイズは、
128 KBを超えることはできません。DataWorksリソースグループ、ECSインスタンス、およびNLBインスタンスは、同じリージョンの同じ仮想プライベートクラウド(VPC)にデプロイする必要があります。
環境の準備
SSHノードの負荷分散と高可用性を実装するには、少なくとも 2 つの ECSインスタンスを作成し、検証のためにECSインスタンスに異なるサンプルデータを構成する必要があります。
ECSインスタンスの作成
必要なECSインスタンスを作成するには、次の手順を実行します。
仕様を選択します。
ECSインスタンスの購入ページ に移動します。 [カスタム起動] タブをクリックします。 [カスタム起動] タブで、次の表に記載されているパラメーターを構成します。パラメーター設定の詳細については、「カスタム起動タブでインスタンスを作成する」をご参照ください。
パラメーター
説明
[リージョン]
DataWorksワークスペースが存在するリージョンを選択します。
[ネットワークとゾーン]
サーバーレスリソースグループを作成するときに使用するVPCとvSwitchを選択します。
[セキュリティグループ]
サーバーレスリソースグループのvSwitchに関連付けられているセキュリティグループを選択します。
その他のパラメーター
ビジネス要件に基づいてその他のパラメーターを構成します。
作成するECSインスタンスの数を入力します。
ECSインスタンスの購入ページで、右側にある [数量] パラメーターを見つけて、必要なECSインスタンスの数を入力します。この例では、 2 つの ECSインスタンスが作成されます。
[注文を作成] をクリックして、プロンプトに従って作成を完了します。
サンプルデータの準備
作成されたECSインスタンスを見つけて、ECSインスタンス 1 とECSインスタンス 2 にそれぞれ異なるサンプルデータを指定して、後続の結果比較を行います。
ECSインスタンスにアクセスします。
ECSコンソール にログインします。作成されたECSインスタンスが存在するリージョンを選択し、[インスタンス]ページで作成されたECSインスタンスを見つけます。
各ECSインスタンスの [アクション] 列にある [接続] をクリックします。 [リモート接続] ダイアログボックスで、[今すぐサインイン] をクリックします。
[インスタンスログイン] ダイアログボックスで、認証情報を構成してログインを完了します。
サンプルデータを作成します。
ECSインスタンス 1 で次のコマンドを実行します。
echo "I am the first server" > /tmp/a.txtECSインスタンス 2 で次のコマンドを実行します。
echo "I am the second server" > /tmp/a.txt
NLBでの構成の実行
次の操作を実行して、NLBインスタンスを作成し、前述のECSインスタンスを追加するバックエンドサーバーグループを構成し、リスナーを構成してトラフィックの負荷分散を実装します。
NLBインスタンスの作成
次の手順を実行して、NLBインスタンスを作成します。詳細については、「NLBインスタンスを作成するための前提条件」および「NLBインスタンスの作成と管理」をご参照ください。
NLBインスタンスの購入ページに移動します。
NLBコンソール にログインします。上部のナビゲーションバーで、NLBインスタンスを作成するリージョンを選択します。左側のナビゲーションウィンドウで、[インスタンス]をクリックします。 [インスタンス]ページで、[NLBの作成] をクリックします。 [クラウドサービス購入ページ] ページが表示されます。
重要誤った構成によるインスタンスの重複作成を防ぐために、DataWorksワークスペースが存在するリージョンを選択します。
仕様を選択します。
次の表に記載されているパラメーターを構成します。
パラメーター
説明
ネットワーク
ネットワークタイプ
[内部向け] を選択します。
VPC
サーバーレスリソースグループがデプロイされているVPCを選択します。
ゾーン
サーバーレスリソースグループのvSwitchが存在するゾーンを選択します。
IPバージョン
[IPv4] を選択します。
管理設定
インスタンス名
カスタムインスタンス名を入力します。
リソースグループ
システムによって提供されるデフォルトのリソースグループを選択します。
情報を確認して作成を完了します。
すべてのパラメーターを構成した後、[今すぐ作成] をクリックします。 [注文の確認] ページで、[今すぐアクティブ化] をクリックします。
バックエンドサーバーグループの作成
NLBインスタンスが [アクティブ] 状態になったら、次の手順を実行して、NLBインスタンスのサーバーグループを作成し、バックエンドサーバーをサーバーグループに追加できます。詳細については、「サーバーグループの作成と管理」をご参照ください。
インスタンスの詳細ページに移動します。
NLBコンソール にログインします。上部のナビゲーションバーで、作成されたNLBインスタンスが存在するリージョンを選択します。次に、[インスタンス]ページでインスタンスを見つけます。
[インスタンスID/名前]列にあるインスタンスのIDをクリックして、インスタンスの詳細ページに移動します。
バックエンドサーバーグループを作成します。
[NLBクイックスタート]セクションで、[サーバーグループの作成] をクリックします。
[サーバーグループの作成]ダイアログボックスで、[サーバーグループ名] を
ECS_NLBに設定し、[作成] をクリックします。
バックエンドサーバーをサーバーグループに追加します。
[サーバーグループが正常に作成されました] を示すダイアログボックスで、[バックエンドサーバーの追加] をクリックします。
[バックエンドサーバー] タブで、[バックエンドサーバーの追加] をクリックします。 [バックエンドサーバーの追加] パネルが表示されます。
作成した 2 つの ECSインスタンスを選択します。
[次へ] をクリックして、[ポート/重み] ステップに進みます。
各ECSインスタンスのポートと重みを構成します。
[ポート] を
22に設定します。[OK] をクリックします。
追加が完了するまで待ちます。
リスナーの構成
ECSインスタンスがNLBインスタンスのバックエンドサーバーグループにバックエンドサーバーとして追加されたら、次の手順を実行して、NLBインスタンスのリスナーを構成できます。詳細については、「TCPリスナーを追加する」をご参照ください。
NLBインスタンスの詳細ページに移動します。
NLBコンソール にログインします。上部のナビゲーションバーで、NLBインスタンスが存在するリージョンを選択します。次に、[インスタンス]ページでインスタンスを見つけます。
[インスタンスID/名前]列にあるインスタンスのIDをクリックして、インスタンスの詳細ページに移動します。
リスナーを構成します。
[NLBクイックスタート]セクションで、[リスナーの作成] をクリックします。 [サーバーロードバランサーの構成] ページの[リスナーの構成]ステップが表示されます。
[リスナープロトコル]を [TCP] に設定し、[リスナーポート]を
22に設定します。[次へ] をクリックします。
サーバーグループを選択します。
[サーバーグループの選択] ステップで、[サーバーグループ]ドロップダウンリストから [サーバータイプ] を選択し、このトピックの バックエンドサーバーグループの作成 セクションで作成したサーバーグループ
ECS_NLBを選択します。[次へ] をクリックします。
構成を送信してレビューします。
[構成レビュー] ステップで、指定したECSインスタンスとリスナーポートが正しいことを確認し、[送信] をクリックして構成を完了します。
SSHデータソースの構成
上記の構成が完了したら、次の手順を実行して、NLBインスタンスをSSHデータソースとしてDataWorksに関連付けることができます。詳細については、「SSHデータソースを追加する」をご参照ください。
[SettingCenter]ページに移動します。
DataWorksコンソール にログインします。上部のナビゲーションバーで、目的のリージョンを選択します。左側のナビゲーションウィンドウで、 を選択します。表示されるページで、ドロップダウンリストから目的のワークスペースを選択し、[管理センターに移動] をクリックします。
左側のナビゲーションウィンドウで、 をクリックします。
[データソース]ページの[データソース]タブで、[データソースの追加] をクリックします。
[データソースの追加] ダイアログボックスで、[SSH] をクリックします。 [SSHデータソースの追加] ページで、パラメーターを構成します。次の表にパラメーターを示します。
パラメーター
説明
データソース名
カスタム名を指定します。例:
SSH_DB。構成モード
このパラメーターの値は、[接続文字列モード] に固定されています。
認証方法
[DataWorks SSH公開鍵認証] を選択することをお勧めします。
ホストアドレス
NLBインスタンスのドメイン名をホストアドレスとして使用します。NLBインスタンスのドメイン名を取得するには、次の手順を実行します。 NLBコンソール にログインします。上部のナビゲーションバーで、NLBインスタンスが存在するリージョンを選択します。次に、[インスタンス]ページでNLBインスタンスを見つけます。 [インスタンスID/名前]列にあるインスタンスのIDをクリックして、インスタンスの詳細ページに移動します。 [インスタンスの詳細]タブの[基本情報]セクションで、[ドメイン名] の右側にある[コピー]をクリックします。
ホストポート
このパラメーターを
22に設定します。ユーザー名
このパラメーターを
rootに設定します。公開鍵
[キーペアの生成] をクリックします。システムは、指定したユーザー名に基づいて公開鍵をランダムに生成します。
重要ネットワーク接続テストを実行する前に、キーペアの公開鍵を、作成した
2つの各ECSインスタンスの.ssh/authorized_keysファイルに構成して、ネットワーク接続の失敗を防ぎます。データソースとリソースグループ間のネットワーク接続をテストします。
[接続構成] セクションで、ワークスペースに関連付けられているサーバーレスリソースグループを見つけ、[接続ステータス] 列の [ネットワーク接続のテスト] をクリックします。
SSHノードでのタスクの実行
次の操作を実行して、SSHノードを作成および開発し、タスクの実行結果を表示して機能を確認できます。
SSHノードの作成
次の手順を実行して、SSHノードを作成します。詳細については、「ノード開発」をご参照ください。
DataWorksコンソールの ワークスペース ページに移動します。上部のナビゲーションバーで、目的のリージョンを選択します。目的のワークスペースを見つけ、[アクション] 列で を選択します。
Data Studioページの左側のナビゲーションウィンドウで、

アイコンをクリックします。 DATA STUDIOウィンドウの [ワークスペースディレクトリ] セクションの右側にある アイコンをクリックし、 を選択します。[ノードの作成] ダイアログボックスで、[名前] パラメーターを構成します。
[OK] をクリックします。 SSHノードの構成タブが表示されます。
SSHノードの開発
SSHノードの構成タブで、次のサンプルコードを追加し、コード実行環境を構成できます。
コードを書きます。
SSHノードの構成タブのコードエディターに次のサンプルコマンドを入力します。
cat /tmp/a.txtコード実行環境を構成します。
データソース:SSHノードの構成タブの上部にある [データソースの選択] ドロップダウンリストから、追加されたSSHデータソース
SSH_DBを選択します。リソースグループ:SSHノードの構成タブの右側のナビゲーションウィンドウで、[デバッグ構成] をクリックします。 [デバッグ構成]タブで、[リソースグループ] ドロップダウンリストから作成したサーバーレスリソースグループを選択します。
ノードの構成タブの上部ツールバーにある [保存] をクリックして、ノードを保存します。
実行結果の表示
SSHノードのコードを複数回実行し、実行結果を比較して、構成が有効になっているかどうかを確認できます。
SSHノードでタスクを実行します。
ノードの構成タブの上部ツールバーにある [実行] をクリックして、ノードでタスクを実行します。次に、実行結果が返された後、タスクを再実行します。
実行結果を表示します。
説明タスクを実行するために送信した後、NLBはロジックアルゴリズムに基づいてタスクをECSインスタンスにランダムに分散します。この場合、タスクを複数回実行した後に異なる結果が得られる場合があります。これは、タスクを実行するたびに、タスクが異なるECSインスタンスに分散される可能性があるためです。
実行結果 1

実行結果 2

付録:実装原則
次の図は、DataWorksでAlibaba Cloud NLBを使用して、高同時実行シナリオでSSHタスクの安定した実行を保証する方法を示しています。
複数のECSインスタンスをNLBインスタンスのサーバーグループに追加し、NLBインスタンスのドメイン名をDataWorksのSSHデータソースのホストアドレスとして指定すると、SSHノードを構成するときに、SSHノードのタスク要求は、データソースに基づいてNLBインスタンスに構成されたリスナーによって監視され、対応するタスクは負荷分散ポリシーに基づいて正常なECSインスタンスに分散されて実行されます。実行結果はNLBインスタンスによって透過的に返され、SSHノードの実行ログにリアルタイムで表示されます。