高可用性のためにDNSラウンドロビン負荷分散を構成する方法
序章
より物議を醸す手法の1つですが、プロバイダーのグローバルプレゼンスを利用してアプリケーションを地理的に分散するための優れた方法は、DNS応答を使用および管理することです(つまり、 返されたIPアドレスのリスト)。 ハードウェアとインフラストラクチャのコストに少額のお金を費やすことをいとわない限り、DNSを使用して高可用性を実現することは、おそらく優れた方法です。
この記事では、DigitalOceanのグローバルクラウドサーバー/データセンターインフラストラクチャによって提供される真に優れた独自の可能性を活用して、地理的に分散した高可用性アプリケーションを最小限のダウンタイム(したがってデータ損失)でセットアップする方法を説明します。 )DNS応答を管理する。
用語集
1. 従来のアプリケーション展開構造
2. 高可用性
- 高可用性アプリケーションのデプロイメント構造
- DNSを使用して高可用性を実現する方法
- 概要
3. 高可用性アプリケーションをデプロイする方法
- ロードバランサー/リバースプロキシの設定
- DNSレコードの設定
- アプリケーションサーバーのセットアップ
- データベースの設定
従来のアプリケーション展開構造
従来の最も一般的なアプリケーションの展開は、次のようないくつかの理由により、関連するすべてのコンポーネントが同じ場所に配置されているセットアップに依存しています。
- プロバイダーの手段の欠如;
- 高コスト、および/または;
- 複雑なエンジニアリング作業。
ロードバランサー(またはリバースプロキシ)の背後にある複数のマシンからアプリケーションが提供されている場合や、データベースが信頼性を提供し、データの損失を防ぐように設定されている場合でも、これらの種類の配置は異なる傾向がありますエラーのレベルにより、場合によってはダウンタイムが発生します。
これを防ぐには、より信頼性の高いシステムアーキテクチャに依存して使用する必要があります。 データとサーバーがさまざまなエリアにグローバルに分散されるもの(例: サンフランシスコとニューヨーク)。
高可用性
アプリケーションがビジネスである場合は、可能であれば、ほとんど中断することなく、24時間年中無休でアクセスできるようにする必要があります。 残念ながら、予期しないデータセンターの問題があるため、1つの場所にある多数のサーバーを水平方向に拡張することが常に解決策とは限りません。
ただし、仮想サーバーをさまざまな地理的中心にグローバルに分散させることで、必要な安定性を提供できるため、アプリケーションの稼働時間レベルを可能な限り高く保つことができます。
ITシステム設計の観点から、この種の構造は高可用性と呼ばれます。
DigitalOceanが2つの大陸、5つの異なる場所に存在するおかげで、アプリケーションスタックをグローバルに広げることもできます。
ドロップレットの1つにマッピングできるパブリックアクセス可能な静的IPアドレスであるフローティングIPを冗長インフラストラクチャに接続し、単一のパブリックIPでサイトまたはサービスを起動できます。 このフローティングIPは、インフラストラクチャの柔軟性と応答性を可能にするために、新しいドロップレットに即座に再マッピングできます。 この新機能の詳細については、こちらをご覧ください。
高可用性アプリケーションのデプロイメント構造
簡単に言えば、高可用性アプリケーションのデプロイメント構造は、先ほど説明したように、さまざまなデータセンターからのクライアントへの配信と応答に依存します。
この種の構造を取得する方法はいくつかありますが、おそらく最も単純で最も手頃な方法は、DNSの動作を利用することです。
基本的な設定例は次のように考えることができます。
________________ | | | CLIENT | | WEB BROWSER | |________________| || || _______\/_______ | | | DNS SERVER | |________________| || || _______/ \_______ / \ / \ ____________________ ____________________ | | | | | SAN FRANCISCO | | SAN FRANCISCO | |____________________| |____________________| | ______________ | | ______________ | | | | | | | | | | | WEB SERVER | | | | WEB SERVER | | | | LOAD BALANCE | | | | LOAD BALANCE | | | | PROXY | | | | PROXY | | | |_____ _____| | | |_____ _____| | |________| |________| |________| |________| || __ __ || ||<=====||==================||=====>|| \/ \/ \/ \/ ____________________ ____________________ | | | | | SAN FRANCISCO | | NEW YORK | |____________________| |____________________| | ______________ | | ______________ | | | | | | | | | | | APP SERVER | | | | APP SERVER | | | |______ ______| | | |______ ______| | | ______||______ | | ______||______ | | | | | | | | | | | DATABASE |<==================>| DATABASE | | | |______________| | | |______________| | |____________________| |____________________|
DNSを使用して高可用性を実現する方法
ユーザーが一連の定義されたルール(つまり、 プロトコル)、ウェブブラウザはネームサーバーにダイヤルし、そのウェブサイトをホストしているマシンのアドレスを尋ねます。 IPアドレスを受信すると、追加のデータとともに要求をそのコンピューターに送信し、応答をレンダリングします。
DNSでは複数のレコード(同じ種類でも)を保持できるため、サーバーとして複数のホストをリストすることが可能になります。
したがって、上記のスキーマに示されているように、2つの異なる場所にある2つのロードバランサー/リバースプロキシのIPアドレスをリストすると、それぞれがアプリケーションサーバー間で負荷を分散するように設定され、少なくとも2つの異なるデータに配置されます-センターでは、データセンターの1つに到達できなくなった場合、クライアントのWebブラウザはDNSサーバーから返された次のIPアドレスレコードを試行し、プロセスを繰り返してWebサイトを取得します。
この種の負荷分散は、ラウンドロビンDNS負荷分散と呼ばれます。
概要
一見すると少し複雑に見えるかもしれません。 ステップバイステップの手順を使用してそれらを要約しましょう:
- DNSは、同じドメイン名に対して複数のレコードを保持できます。
- DNSは、同じドメイン名のIPアドレスのリストを返すことができます。
- WebブラウザがWebサイトを要求すると、応答が返されるまで、これらのIPアドレスを1つずつ試行します。
- これらのIPアドレスは、ではなくアプリケーションサーバーを指している必要がありますが、ロードバランサー/リバースプロキシを指している必要があります。
- これらのリバースプロキシは、複数の場所にある複数のサーバー間で負荷を分散する必要があります。
- データセンターがダウンしていて、WebブラウザがIPアドレスから応答を取得できない場合(つまり、 ロードバランサー)、他のアドレスに到達しようとします。
- 両方のデータセンターが同時に到達不能になる可能性は非常に低いため、2番目のロードバランサーは応答を返します。
- ロードバランサーの作業を容易にするために、Webアプリケーションサーバーはステートレスである必要があります。
- データベースサーバーは、複製された方法でセットアップする必要があります。
高可用性アプリケーションをデプロイする方法
注:このチュートリアルは、プログラミング言語またはWebサーバータイプに依存しません。 これらの手順に従うと、フレームワーク、Webサーバー、またはHTTPサーバーの選択に関係なく、高可用性を実現できます。
ロードバランサー/リバースプロキシの設定
高可用性への最初のステップは、アプリケーションサーバー間で通信する2つ以上の負荷分散リバースプロキシを設定することです。
2つの場所で2つのクラウドサーバーをインスタンス化します。
2つのDigitalOceanドロップレットを作成します。
例えば 記事:DOクラウドサーバーの作成方法
各ドロップレットにロードバランサー/リバースプロキシを設定します。
Nginx、Apache、またはHAProxyをインストールして構成します。
ロードバランサーのIPアドレスを取得します。
/sbin/ifconfig
と入力して、ドロップレットのIPアドレスを確認します。例えば
inet addr:107.170.40.112
DNSレコードの設定
DNS Aレコードはドメイン名を変換します(例: www.digitalocean.com
)をマシンに到達可能なIPアドレスに。
それぞれに負荷分散リバースプロキシを使用して2つのドロップレットの構成が完了したら、次のステップでは、DigitalOceanのDNSサービスを介して2 Aレコードを追加し、ドメイン名がIPアドレスを指すようにします。
DigitalOceanコントロールパネルにログインします。
左側のメニューの
DNS
をクリックし、前の手順のロードバランサードロップレットを指す新しいドメイン名を追加します。新しいAレコードを追加します。
次のステップに進んだら、上部の[レコードの追加]をクリックして、他のロードバランサードロップレットのIPアドレスを使用して新しいAレコードを作成します。
アプリケーションサーバーのセットアップ
次のステップは、アプリケーションサーバーのセットアップです。
グローバル分散を機能させるには、作成した最初の負荷分散サーバーと同様に、アプリケーションサーバーをホストするための2つの新しいドロップレットが必要です。
注:各アプリケーションサーバーをロードバランサーと同じマシンで実行することもできます。 ただし、これはお勧めしません。
アプリケーションサーバーのドロップレットを2つの場所にデプロイまたは複製します。 例えば:
- NY1およびNY2;
- AMS1およびAMS2では;
- SF1およびNY2など。
最初のステップに戻り、ロードバランサーのセットアップ記事に従って、これら2つのアプリケーションサービングドロップレットへの着信接続をプロキシするように構成します。
データベースの設定
データベースのないWebアプリケーションを想像するのは難しいです。 複数のサーバーにアプリケーションを分散する上で最も難しい部分は、おそらくデータベースを扱うことです。
選択したデータベースサーバーに応じて、複数の場所にまたがって重複した構成を作成します。
見る:
- MySQLマスター/スレーブレプリケーションの場合:
- MySQLマスター/マスターレプリケーションの場合:
- PostgreSQLマスター/スレーブレプリケーションの場合:
PostgreSQLでマスタースレーブレプリケーションを設定する方法
レプリケートされたデータベース構造の作成が完了したら、チュートリアルでDBサーバーと同じように、アプリケーションがアドレスを使用するように指示します。