17

5 つまたは 6 つの小さな Rails アプリを実行しているサーバーがあります。添付ファイルはすべて S3 上にあり、データベースとして MySQL を使用しています。各アプリには独自のユーザーがあり、いくつかのシンを実行します。負荷分散とドメイン ルーティングを行う nginx サーバーがあります。

このサーバーを Docker インストールに置き換える予定です。1 つのサーバーにアプリごとに 1 つのコンテナーがあり、前に nginx があります。

私の質問は次のとおりです。データベース部分をどこに配置しますか?

私は主に4つの可能性を見ています:

1) 各アプリ コンテナー内の 1 つの Mysql サーバー。これは Docker の哲学ではないようです。各コンテナのデータを個別にバックアップする必要があります。

2) すべてのアプリ用の一意の MySQL コンテナー。

3) ホスト Docker サーバーへの標準の MySQL インストール。

4) すべてのアプリに個別の MySQL サーバー。

あなたならどうしますか ?

PS : Docker がまだ本番環境に対応していないことはわかっています。現時点ではステージングに使用し、満足すれば切り替える予定です。

4

2 に答える 2

22

それはいくつかの要因に依存します。決定に役立ついくつかの質問を次に示します。

  • 5 ~ 6 個のアプリは非常に似ていますか (つまり、Docker の用語では、共通のイメージに基づいている可能性があります)、さらに多くのアプリをデプロイしたり、一部を他のサーバーに移行したりすることを考えていますか?

    • はい: 各アプリに MySQL サーバーを組み込むことは理にかなっています。なぜなら、MySQL サーバーは最小限の構成作業でアプリに「固執」するからです。

    • いいえ: MySQL サーバーを組み込む説得力のある理由はありません。

  • それらのアプリをスケーリングできるようにしたいですか (つまり、単一のアプリのリクエストを複数のコンテナで負荷分散する)、または MySQL サーバーをスケーリングしたいですか (たとえば、マスター/スレーブの複製セットアップに)?

    • はい: MySQL サーバーを組み込むことはできません。そうしないと、1 つの層をスケーリングすると他の層がスケーリングされ、頭痛の種になります。

    • いいえ: MySQL サーバーの組み込みを妨げるものは何もありません。

  • これらのアプリの少なくとも 1 つで、データベースに大きな負荷がかかると思いますか?

    • はい: 1 つのアプリが他のアプリの妨げになる可能性があるため、別の MySQL サーバーを使用することをお勧めします。

    • いいえ: 単一の MySQL サーバーを使用できます。

スケーラビリティを必要としない、非常に簡単にデプロイできるセットアップが必要であるが、新しいインスタンスを非常に簡単にスピンアップできるようにしたい場合、およびインスタンスを移動できるようにしたい場合は、MySQL サーバーの組み込みは問題ありません。無理なく回れます。

最も柔軟なセットアップは、1 つのアプリ コンテナーと各アプリに 1 つの MySQL コンテナーをデプロイするセットアップです。それを行いたい場合は、リンクを実装する Docker 0.7 を待つことをお勧めします。これにより、基本的なサービス検出メカニズムが可能になり、各アプリ コンテナーがそのデータベース コンテナーのホスト/ポートを簡単に検出できるようになります。

ホストに MySQL をデプロイしません。単一の MySQL インストールが必要な場合は、単一の MySQL コンテナーを実行し、それを実行することで同じ結果を得ることができます(ホストのポートを MySQL コンテナーのポートに-p 3306:3306ルーティングします)。3306/tcp3306/tcp

于 2013-10-08T18:48:16.370 に答える