APIを使用して、DOProxyを使用してサーバーセットアップを水平方向にスケーリングする方法を示します。DOProxyは、構成後、HTTPアプリケーションサーバー層をスケールアップまたはスケールダウンするコマンドラインインターフェイスを提供するRubyスクリプトです。APIを使用してHAProxyロードバランサーへのメンバーシップを管理することにより、アプリケーションサーバードロップレットを作成および削除する簡単な方法を提供するために、このチュートリアル専用に作成されました。この基本的なスケーリングモデルにより、ユーザーはHAProxyサーバーを介してアプリケーションにアクセスし、負荷分散方式でバックエンドアプリケーションサーバーに転送できます。DOProxyは3つの主要な機能を実行します。ドロップレットを作成し、ロードバランサーに追加しますドロップレットを削除し、ロードバランサーから削除します削除されるまで、作成したドロップレットのインベントリを維持します[.note]#Note:このチュートリアルの主な目的は、APIを介してDigitalOceanサーバーアーキテクチャをプログラムでスケーリングするために必要な最小限の概念を教えることです。DOProxyは復元力を考慮して設計されておらず、非常に基本的なエラーチェックしか実行しないため、実稼働環境でDOProxyを実行しないでください。APIを介した水平スケーリングについて学習するための優れた方法です。#前提条件このチュートリアルでは、先に進む前に読んでおくとよい次のテクノロジーを使用します。v2CloudinitとユーザーデータDigitalOceanDropletメタデータDOProxyはRubyで記述されているため、Rubyの知識は有益です。Rubyに関するシリーズを読むことができます。Rubyに慣れていない場合は、DOProxyコードの要点を説明するための疑似コードを提供します。RubyラッパーであるDropletKitを使用しています。DOProxyの動作の詳細に入る前に、サーバーにインストールして使用します。DropletにDOProxyをインストールしましょう。16.04ドロップレットを作成します。DOProxyがデフォルトで使用するリージョンです。別のリージョンを使用する場合は、DOProxyをインストールした後、doproxy.ymlファイルでregion変数を構成する必要があります。このDropletは、HAProxyロードバランサーとDOProxyスケーリングスクリプトを実行するため、希望するスケールの可能性に適したサイズを選択します。このチュートリアルは、実際のトラフィックを想定しないスケーリングの基本的なデモンストレーションであるため、おそらく512MBのサイズで十分です。serverと呼びます。configおよびUserdataを含む)セクションに従って、このサーバーにDOProxyをインストールします。DOproxy構成ファイルのYOUR_DO_API_TOKENとYOUR_SSH_KEY_FINGERPRINTの値を必ず置き換えてください。しないと、スクリプトが機能しません。サーバーにDOProxyとHAProxyがインストールされたので、環境を拡張してみましょう。DOProxyを実行するDOProxyサーバーにrootとしてログインし、DOProxyのクローンを作成したディレクトリに移動します。引数なしでDOProxyを実行します。doproxy.rbこれにより、使用可能なコマンドが出力されます。inventoryこの時点で、DOProxyはまだドロップレットを作成していません。HTTPサービスをオンラインで取得してスケールアップするためにいくつか作成してみましょう。スケールアップ(作成)createコマンドを実行して、DOProxyによって管理される最初のドロップレットを作成します。createこれは、プロンプトに戻るまでに時間がかかります(スクリプトがAPIを介して新しいドロップレットを作成し、起動するのを待つため)。疑似コードを実行するときにAPI呼び出しがどのように行われるかについて説明します。スクリプトが完了すると、ドロップレットIDを含む成功メッセージが表示されます。backend.ユーザーデータスクリプトがまだ実行されておらず、HAProxyがトラフィックの受け渡しを開始していない可能性があるため、プロンプトが戻ってから数分待ってから次の手順に進むことをお勧めします。続行する準備ができたら、WebブラウザーでDOProxyサーバーのパブリックIPアドレスにアクセスします。addressを一覧表示するページが表示されます。DOProxyを使用して、さらに2つのドロップレット(合計3つ)を作成します。必要に応じてさらに作成してください。create次に、WebブラウザーでDOProxyサーバーのパブリックIPアドレスに再度アクセスします。ページを更新すると、作成したドロップレットを循環している間にページの情報が変更されることに気付くでしょう。これは、DOProxyで作成されたときに各ドロップレットをその構成に追加したHAProxyによってすべて負荷分散されているためです。DigitalOceanコントロールパネルを見ると、これらの新しいドロップレットが(他のドロップレットと共に)そこにリストされていることがわかります。DOProxyの在庫を見て作成されたドロップレットを詳しく見てみましょう。在庫の印刷DOProxyは、インベントリの一部であるすべてのドロップレットを出力するprintコマンドを提供します。print次のような出力が表示されるはずです。4205675)出力例では、ホスト名、ステータス、ドロップレットIDなど、作成した3つのドロップレットに関する情報が表示されます。ホスト名とIDは、HAProxyロードバランサーにアクセスしたときに(DOProxyのパブリックIPアドレス経由で)Webブラウザーで表示したものと一致する必要があります。お気づきかもしれませんが、DOProxyは、作成したドロップレットに関する情報のみを出力しました。これは、作成するドロップレットのインベントリを保持するためです。今すぐinventoryファイルの内容を確認してください。inventory各ドロップレットのIDが1行に1つずつ表示されます。ドロップレットが作成されるたびに、そのIDはこのインベントリファイルに保存されます。ご想像のとおり、DOProxyのprintコマンドは、インベントリファイル内のドロップレットIDを反復処理し、API呼び出しを実行して各ドロップレットIDに関する情報を取得します。サーバーインベントリを単一のファイルに保存するのは最善の解決策ではないことに注意してください(簡単に破損または削除される可能性があります)が、動作するシンプルな実装を示しています。etcdなどの分散キー値ストアがより良いソリューションです。インベントリにドロップレットIDだけを保存することもできます(したがって、特定のドロップレット情報を確認するたびにAPI呼び出しを行う必要はありません)。縮小(削除)DOProxyには、インベントリ内のドロップレットを削除できるdeleteコマンドもあります。deleteコマンドでは、削除するドロップレットの行番号を指定する必要があります(printコマンドで表示されます)。このコマンドを実行する前に、おそらくインベントリを印刷する必要があります。printしたがって、たとえば、3番目のドロップレットを削除する場合は、行番号として2を指定します。backend.deleteコマンドは、APIを介してドロップレットを削除し、HAProxy構成から削除して、インベントリから削除します。DOProxy印刷コマンドを使用するか、DigitalOceanコントロールパネルをチェックして、ドロップレットが削除されたことを確認してください。ロードバランサーの一部ではなくなったことにも気付くでしょう。HAProxy設定まだ説明していないDOProxyの最後の部分は、HAProxyの構成方法です。DOProxyコマンドを実行すると、インベントリ内の各ドロップレットの情報が取得され、その情報の一部がHAProxy構成ファイルの変更に使用されます。ドロップレットIDとプライベートIPアドレスは、各ドロップレットをバックエンドサーバーとして追加するために使用されます。生成されたhaproxy.cfgファイルの最後の数行を次のように見てください。haproxy.cfgこのようなものが見えるはずです。hostname:auto-nginx-1frontendセクションには、DOProxyサーバーのパブリックIPアドレスが含まれている必要があり、backendセクションには、作成された各ドロップレットを参照する行が含まれている必要があります。#DOProxyのスケーリングの実際の動作を確認したので、コードを詳しく見てみましょう。DOProxyコードこのセクションでは、DOProxyを機能させる関連ファイルとコード行を見ていきます。DOProxyの実装方法を確認すると、APIを使用して独自のサーバーインフラストラクチャを管理および自動化する方法についてのアイデアが得られるはずです。リポジトリをサーバーに複製したので、そこにあるファイルを確認するか、DOProxyリポジトリ(https://github.com/scanevari/doproxy)にあるファイルを確認できます。重要なファイル:doproxy.rb:DOProxyRubyスクリプト。DOProxyの背後にあるコマンドラインインターフェイスとロジックを提供しますdoproxy.yml:DOProxy構成ファイル。APIトークンが含まれ、ドロップレット作成オプションを指定しますhaproxy.cfg.erb:HAProxy構成テンプレート。適切なバックエンドサーバー情報でロードバランサー構成を生成するために使用inventory:液滴インベントリファイル。作成されたドロップレットのIDを保存しますuser-data.yml:ユーザーデータファイル。新しいDropletの作成時に実行されるcloud-configファイル最初に構成ファイルに飛び込みましょう。doproxy.ymlこれらはdoproxy.ymlの重要な行です。writeAPIトークンを保持する必要があるプロパティです。他の行は、DOProxyが新しいドロップレットを作成するときに使用されるオプションを指定します。指定されたSSHキーを(IDまたは指紋によって)インストールし、ホスト名に「auto-nginx」をプレフィックスとして付けます。documentationを参照してください。user-data.ymlこれは、新しいDropletが作成されるたびにcloud-initによって実行されるファイルです。これは、クラウド構成ファイルまたはスクリプトを提供して、新しい各ドロップレットにアプリケーションソフトウェアをインストールできることを意味します。サンプルのユーザーデータファイルには、UbuntuサーバーにNginxをインストールし、デフォルトの構成ファイルをDropletのホスト名、ID、パブリックIPアドレスに置き換える簡単なbashスクリプトが含まれています。/var/www/html/index.htmlこれらのcurlコマンドは、DigitalOceanメタデータサービスを使用して、ドロップレットに関する情報(ホスト名、ID、およびIPアドレス)を取得しています。本番環境の実装では、このファイルには、たとえばアプリケーションをインストールして構成するためのコマンドが含まれます。これを使用して、SSHキーを自動的にインストールし、構成管理ツールまたは監視ツールに接続するなどの方法で、インフラストラクチャ全体へのドロップレットの統合を自動化することもできます。ユーザーデータ、クラウド構成、メタデータの詳細については、次のリンクをご覧ください。Cloud-Configスクリプトの概要ドロップレットメタデータの概要haproxy.cfg.erbHAProxy構成テンプレートには、ほとんどのロードバランサー構成が含まれており、Rubyコードはバックエンドドロップレット情報に置き換えられます。バックエンド構成を生成するRubyセクションを見てみましょう。hostname:このコードは、インベントリ内の各ドロップレットを反復処理し、それらの各ドロップレットに(プライベートIPアドレスに基づいて)新しいHAProxyバックエンドエントリを追加します。各ドロップレットに対して次のような行が生成されます。hostname:auto-nginx-0ドロップレットが作成または削除されるたびに、DOProxyは変更を含む新しいHAProxy構成ファイルを生成します。doproxy.rbこのRubyスクリプトは、主に、ドロップレットの作成と削除、インベントリ管理、HAProxy構成の生成を実行するメソッドを含むDOProxyクラスで構成されています。Rubyを理解している場合は、GitHubのファイルhttps://github.com/scanevari/doproxy/blob/master/doproxy.rbを確認してください。Rubyを理解していない場合は、各方法を説明する簡単なpseudocodeを次に示します。これを実際のRubyコードと比較すると、何が起こっているのかを理解するのに役立つ場合があります。initialize有効な引数を指定してDOProxyが実行されるたびに実行されます。doproxy.yml構成ファイルを読み取り、APIトークンとドロップレットオプションを取得します。get\_inventoryインベントリファイル内の各ドロップレットの情報を取得します。他のメソッドを実行する前に実行する必要があります。print\_inventoryこのメソッドは、インベントリファイル内の各ドロップレットIDのドロップレット情報を出力します。printコマンドで呼び出されます。createコマンドで呼び出すと、新しいドロップレットが作成され、インベントリファイルに追加されます。次に、reload_haproxyを呼び出して、HAProxy構成ファイルを再生成し、ロードバランサーをリロードします。deleteコマンドを使用すると、このメソッドは指定されたドロップレットを削除し、そのIDをインベントリファイルから削除します。次に、reload_haproxyを呼び出して、HAProxy構成ファイルを再生成し、ロードバランサーをリロードします。generate\_haproxy\_cfgこれは、インベントリ内のドロップレットに基づいて新しいHAProxy構成ファイルを作成するサポート方法です。reload\_haproxyこれは、HAProxy構成ファイルを適切な場所にコピーしてHAProxyをリロードする別のサポート方法です。これはgenerate_haproxy_cfgに依存します。HAProxy構成ファイルhaproxy.cfgを、HAProxyがリロード時に検索する場所にコピーしますHAProxyをリロードするこれがDOProxyを機能させる重要なコードのすべてです。最後に説明するのは、DOProxyで使用したAPIラッパーであるDropletKitです。DropletKitを使用すると、次のようなことを行うRubyプログラムを簡単に作成できます。新しいドロップレットを作成する既存のドロップレットを削除するステータス、IPアドレス、ドロップレットID、地域など、既存のドロップレットに関する情報を取得しますこのチュートリアルでは、これらの特定のAPIエンドポイントに焦点を当てましたが、DigitalOceanサーバーインフラストラクチャのプログラムによる管理を容易にするのに役立つ他の多くのエンドポイントがあることに留意してください。API、cloud-config、およびメタデータを活用して簡単なスクリプトでサーバー環境を拡張する方法を確認したので、これらすべての概念を適用して独自のサーバー設定を拡張できます。DOProxyは実稼働環境での使用を目的としていませんが、独自のスケーリングソリューションを実装するための優れたアイデアを提供するはずです。systemと組み合わせて使用​​することで大幅に改善される可能性があることに注意してください。これにより、サーバーリソースの使用率などの特定の条件に応じて、アプリケーションサーバー層を自動的にスケールアップおよびスケールダウンできます。