phpcn_u15822017-04-27 09:03:42
データベースが docker に配置するのに適していないことに関しては、Waiguoren による 2 つの記事があり、1 つは元の投稿者によって投稿されたもので、もう 1 つはこの記事を翻訳したものです
依然として同じ視点:
ボリュームが小さい場合は気軽に実行できますが、ボリュームが大きい場合は、従来のデータベースや Docker は適切な方法ではないため、データベースを直接コンテナ化しないことをお勧めします。 、ミドルウェア システム、コンテナ化されたシステムなど、さまざまなシステムのサポートが必要です。
データベースが自動的にスケーリング、災害復旧、切り替えが可能で、独自のマルチノード ソリューションが付属している場合などには、docker の方が優れたソリューションです。
ただし、そうでない場合は、docker を使用しないでください。
原文にも非常に明確に書かれています:
リーリートラフィックが少ない場合は、あらゆるものをコンテナ化できます。データベース、アプリケーション、Hadoop、各種ノード、nginx。
大容量の場合、ストレージ関連のサービスはコンテナ化に適していません。アプリケーション層やビジネス層などのステートレス サービスは、キャッシュなどのメモリを大量に使用するサービスをコンテナ化できます。
簡単に言うと、災害復旧、パフォーマンス、データの整合性という 3 つの問題があります。
mysql のような従来のデータベースに関する限り、列挙できるほど多くの問題があります:
mysqlをコンテナ化するには?
メインデータベース mysqld がダウンした場合はどうすればよいですか?
メインライブラリ dockerd がひざまずいたらどうすればよいですか?
スレーブ mysqld がひざまずいた場合はどうすればよいですか?
dockerd ライブラリがクラッシュした場合はどうすればよいですか?
ピークが近づいたときに、コンテナーを使用して mysql を迅速に拡張できますか?プラン?
データマスター/スレーブ切り替えソリューション?一貫性を確保するにはどうすればよいでしょうか?
ピーク時にはボリュームが十分に大きいため、物理マシンの容量が 1 つの mysql プロセスにのみ十分である場合があります。
では、これも単一のマシンですが、なぜ mysql を直接起動できないのでしょうか?
なぜコンテナを外に置く必要があるのですか?パフォーマンスの低下はどの程度ですか?
mysqlをアップグレードするには?
データ量が増えるとデータが失われますか? (何度も破損したコンテナに遭遇しました…)
しかし、mysql はコンテナ化が完全にできないわけではありません。
データ損失に敏感でないビジネス (JD 検索で見つかった製品など) はデジタル化でき、データベース シャーディングを使用してインスタンスの数を増やすことでスループットを向上できます。
元の記事で言及されている問題については、いくつかの欠陥がありますが、よく考えられています。たとえば、次の質問は非常に問題があります (共有データ ディレクトリに関する):
リーリー私がこれまで接したデータベースの中で、コンテナ化に適しているのはcassandraなどのデータベースだけです(tidbやcockroachdbもありますが、今のところ大企業でのユースケースには遭遇したことがありません)。
しかし、cassandra 自体もステートレスに近づいています。独自の災害復旧、容量拡張、スイッチング ソリューションを提供します。
JD.comについて触れてみましょう。
JD.com は異常値ですが、JD.com も同様の問題や注意が必要なことについて言及しています。
リーリーさらに、docker には多くのカスタマイズが行われています。
JD.comで視聴できます。
伊谢尔伦2017-04-27 09:03:42
適さない、できないではない。
単体のマシンで問題がなければ、それでも有利な場合もあります。たとえば、以前、私の会社の Oracle データベースがパラメータを調整していたときに、データベースがクラッシュして起動できなくなりました。したがって、それを直接実行して、元のディレクトリをポイントするだけです。クラスターを作成する方法に関係なく、Docker や swarm などのツールを使用してクラスターを手動でセットアップするのは簡単ではありません。トラブルを避けるために、物理マシン上に直接構築することをお勧めします。
海外にはflockerやrancher’s convoyなどのdockerデータストレージソリューションを専門とする会社があります。PHPz2017-04-27 09:03:42
Docker はステートレスに適しており、サービスを変更しません。
クラスターの数が多い場合:
docker ファイルを書き込みます。次に、コードがコード ウェアハウスにアップロードされるときに、docker ファイルをデプロイした後、リリース スクリプトで docker サービスをバッチで構築し、そこにサービス コードを組み込みます。
MySQLに限らず、redisやmcもdockerに入れるのには向いていません。 つまり、dockerにデータベースを入れるだけで、あまりメリットがありません。
曾经蜡笔没有小新2017-04-27 09:03:42
はい、docker の特性により、データベースだけでなく、ストレージ関連のすべてのサービスが docker の使用に適していないことがデータ ストレージにあると判断されるためです。