前書き

この6部構成のチュートリアルでは、マルチサーバーの実稼働アプリケーションのセットアップをゼロから構築する方法を示します。 最終的なセットアップは、バックアップ、監視、および集中ログシステムによってサポートされます。これにより、問題を検出して回復できるようになります。 このシリーズの最終目標は、スタンドアロンシステム管理の概念に基づいて構築し、運用サーバーのセットアップを作成する際の実際的な考慮事項を紹介することです。

このシリーズで取り上げるいくつかの概念を確認したい場合は、次のチュートリアルをお読みください。

リンクされた記事は、実稼働アプリケーションのセットアップの一般的なガイドラインを提供しますが、このシリーズでは、サンプルアプリケーションを最初から最後まで計画およびセットアップする方法を示します。 完全に異なるテクノロジースタックで異なるアプリケーションを実行している場合でも、これが独自の運用サーバー環境の計画と実装に役立つことを願っています。 このチュートリアルは多くの異なるシステム管理トピックを扱っているため、多くの場合、補足情報を提供する外部のサポート記事への詳細な説明を延期します。

私たちの目標

この一連のチュートリアルが終了するまでに、PHPアプリケーションの実稼働サーバーのセットアップ、デモ用のWordPressが用意され、https://www.example.com/からアクセスできます。 本番アプリケーションサーバーをサポートするサーバーも含まれます。 最終的なセットアップは次のようになります(プライベートDNSおよびリモートバックアップは図示されていません)。

image:https://assets.digitalocean.com/articles/architecture/production/lamp/final.png [生産セットアップ]

この設定では、*アプリケーション*ボックス内のサーバーは、アプリケーションが正しく実行されるために不可欠であると見なされます。 リカバリプランとリモートバックアップサーバーは別として、残りのコンポーネント(バックアップ、監視、ログ)が追加され、運用アプリケーションのセットアップがサポートされます。 各コンポーネントは、同じDigitalOceanリージョン(この例ではNYC3)内の個別のUbuntu 14.04サーバーにインストールされ、プライベートネットワークが有効になります。

アプリケーションを構成するサーバーのセットは、次のホスト名と呼ばれます。

  • * lb1:* HAProxy Load Balancer、https://example.com/からアクセス可能

  • * app1:* ApacheおよびPHPアプリケーションサーバー

  • * app2:* ApacheおよびPHPアプリケーションサーバー

  • * db1:* MySQLデータベースサーバー

このタイプのセットアップは、アプリケーションのコンポーネントを複数のサーバー上に構築する方法を示すために選択されたことに注意することが重要です。独自のセットアップは、独自のニーズに基づいてカスタマイズする必要があります。 この特定のサーバーセットアップには、別のロードバランサー(およびhttps://www.digitalocean.com/community/tutorials/how-to-configure-dns-round-robin-load-balancing- for-high-availability [ラウンドロビンDNS])およびhttps://www.digitalocean.com/community/tutorials/how-to-set-up-mysql-master-master-replication [データベースサーバーレプリケーション]または以下で簡単に説明するアクティブまたはパッシブロードバランサーを指す静的IP。

アプリケーションサーバーをサポートするコンポーネントは、次のホスト名と呼ばれます。

  • * backups:* Baculaバックアップサーバー

  • 監視: Nagios監視サーバー

  • *ロギング:*集中ロギング用のElasticsearch、Logstash、Kibana(ELK)スタック

また、次の3つのサポートコンポーネントは図に示されていません。

  • * ns1:*プライベートDNSのプライマリBINDネームサーバー

  • * ns2:*プライベートDNSのセカンダリBINDネームサーバー

  • * remotebackups:*本番データセンターで物理的な災害が発生した場合にBaculaバックアップのコピーを保存するための、異なる地域にあるリモートサーバー-=== \

また、アプリケーションのさまざまなコンポーネントの障害に対する基本的な復旧計画を作成します。

目標の設定に達すると、合計10台のサーバーが設置されます。 一度にすべて作成します(これにより、DNSのセットアップなどが簡素化されます)が、必要に応じてそれぞれ自由に作成できます。 Baculaに加えて、またはBaculaの代わりにDigitalOceanバックアップをバックアップソリューションとして使用することを計画している場合は、ドロップレットを作成するときに必ずそのオプションを選択してください。

高可用性(オプション)

単一障害点は、インフラストラクチャの一部がダウンすると、サイトまたはサービス全体が使用できなくなる場合です。 このセットアップで単一障害点に対処する場合は、別のロードバランサーを追加して、可用性を高めることができます。 高可用性サービスは、障害発生時に自動的にバックアップまたはパッシブシステムにフェールオーバーします。 高可用性設定で2つのロードバランサーを使用すると、アクティブなロードバランサーが利用できない場合にトラフィックを受け入れるために1つのロードバランサーを常に受動的に利用できるようにすることで、ダウンタイムから保護します。

高可用性セットアップを実装するには、いくつかの方法があります。 詳細については、https://www.digitalocean.com/community/tutorials/how-to-use-floating-ips-on-digitalocean#how-to-implement-an-ha-setup [How ToのこのセクションフローティングIPを使用する]。

仮想プライベートネットワーク(オプション)

サーバー間のネットワーク通信を保護する場合は、VPNのセットアップを検討することをお勧めします。 データがインターネット上を移動する場合、暗号化によるネットワーク伝送の保護は特に重要です。 VPNを使用するもう1つの利点は、ホストのIDがキー認証プロセスによって検証されることです。これにより、許可されていないソースからサービスが保護されます。

オープンソースのVPNソリューションを探している場合は、TincまたはOpenVPNを検討してください。 この特定のケースでは、メッシュルーティングを使用するTincがより良いソリューションです。 両方のVPNソリューションのチュートリアルは、次の場所にあります。

前提条件

各Ubuntu 14.04サーバーには、このチュートリアルに従って設定できる非ルートスーパーユーザーが必要です。https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04 [ Ubuntu 14.04での初期サーバーセットアップ]。 すべてのコマンドは、各サーバーでこのユーザーとして実行されます。

基本的なLinuxセキュリティの概念についてある程度の知識があることを前提としますが、詳細については説明しません。 Linuxの簡単なセキュリティ入門書が必要な場合は、https://www.digitalocean.com/community/tutorials/7-security-measures-to-protect-your-servers [サーバーを保護する7つのセキュリティ対策]の記事をお読みください。

ドメイン名

アプリケーションは、「example.com」などのドメイン名を介して提供されると想定します。 まだ所有していない場合は、ドメイン名登録機関から購入してください。

ドメイン名を選択したら、次のチュートリアルに従ってDigitalOcean DNSで使用できます:https://www.digitalocean.com/community/tutorials/how-to-point-to-digitalocean-nameservers-from- common-domain-registrars [Common Domain RegistrarsからDigitalOceanネームサーバーをポイントする方法]。

(IPアドレスと比較して)サイトへのアクセスを容易にすることに加えて、SSL証明書を使用するドメインおよびID検証の利点を実現するには、ドメイン名が必要です。

SSL証明書

TLS / SSLは、アプリケーションとそのユーザー間の暗号化とドメイン検証を提供するため、セットアップでSSL証明書を使用します。 この例では、ユーザーに「http://www.example.com [www.example.com]」のサイトにアクセスしてもらいたいため、これを証明書の共通名(CN)として指定します。 証明書はHAProxyサーバー、* lb1 *にインストールされるため、便宜上、そこで証明書キーとCSRを生成できます。

ID検証を提供する証明書が必要な場合は、Let’s Encryptを使用してSSL証明書を無料で取得するか、商用認証局から購入できます。 Let’s Encryptオプションの詳細については、https://www.digitalocean.com/community/tutorials/how-to-install-an-ssl-certificate-from-a-commercial-certificate-authority [インストール方法商業認証局からのSSL証明書]。 [Webサーバーへの証明書のインストール]セクションをスキップします。

または、次のコマンドで生成できる自己署名SSL証明書を使用することもできます。

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ~/.key -out ~/.crt

目標を達成するための手順

実稼働アプリケーションのセットアップの概要ができたので、目標を達成するための一般的な計画を作成しましょう。

アプリケーションを構成するコンポーネントが最も重要であるため、それらを早期に起動して実行する必要があります。 ただし、プライベートネットワーク接続の名前ベースのアドレス解決の使用を計画しているため、最初にDNSをセットアップする必要があります

DNSの準備ができたら、物事を実行するために、アプリケーションを構成するサーバーをセットアップします。 データベースはアプリケーションに必要であり、アプリケーションはロードバランサーに必要なので、次の順序でコンポーネントをセットアップします。

  1. データベースサーバー

  2. アプリケーションサーバー

  3. ロードバランサー

アプリケーションのセットアップ手順を完了すると、さまざまなシナリオの*回復計画*を考案できるようになります。 この計画は、バックアップ戦略の決定に役立ちます。

さまざまなリカバリプランを作成したら、* backups *を設定してサポートする必要があります。 それに続いて、サーバーとサービスがOK状態にあることを確認するために*監視*をセットアップできます。 最後に、ログの表示、問題のトラブルシューティング、傾向の特定を支援できるように、*集中ログ*を設定します。

結論

一般的な計画の準備ができたら、実稼働アプリケーションのセットアップを実装する準備ができました。 このセットアップは完全に機能しますが、有用な情報を収集し、学んだことを使用してアプリケーションのセットアップを改善できる例であることを忘れないでください。

次のチュートリアルに進んで、アプリケーションのセットアップを開始してください:https://www.digitalocean.com/community/tutorials/building-for-production-web-applications-deploying [プロダクション用の構築:Webアプリケーション-展開]。