DockerでMy SQLを実行しています。おめでとう、仕事中!

DockerでMy SQLを実行しています。おめでとう、仕事中!

現時点では、コンテナとDockerは依然として技術分野で最もホットな言葉であり、ステートレスサービスコンテナ化はトレンドであり、誰もが議論するホットな問題をもたらしました。データベースMy SQLはコンテナ化が必要ですか?

最后更新 2021/12/22 22:49
老王谈运维
预计阅读 3 分钟
分类
Docker MySQL
标签
MySQL Docker

** コンテナ ** の定義:コンテナは、“実行環境を切り替えたときにソフトウェアが正常に動作することを保証する方法”という問題を解決するものです。

目前,容器和 Docker 依旧是技术领域最热门的词语,无状态的服务容器化已经是大势所趋,同时也带来了一个热点问题被大家所争论不以:数据库 MySQL 是否需要容器化?

认真分析大家的各种观点,发现赞同者仅仅是从容器优势的角度来阐述 MySQL 需要容器化,几乎没有什么业务场景进行验证自己的观点;反过来再看反对者,他们从性能、数据安全等多个因素进行阐述 MySQL 不需要容器化,也举证了一些不适合的业务场景。下面,我们就聊一下 Docker 不适合跑 MySQL 的 N 个原因!

データセキュリティの問題

コンテナにデータを保存しないでください。これはDockerの公式コンテナの使い方のヒントの1つです。コンテナはいつでも停止、削除できます。コンテナがrmによってドロップされると、コンテナ内のデータは失われます。データの損失を避けるために、ユーザーはデータボリュームマウントを使用してデータを保存できます。しかし、コンテナのボリューム設計はUnion FSイメージ層を中心に永続的なストレージを提供し、データセキュリティの保証はありません。コンテナが突然クラッシュし、データベースが正常にシャットダウンしないと、データが破損する可能性があります。また、コンテナ内の共有データボリュームグループは、物理マシンのハードウェアに大きなダメージを与えます。

パフォーマンスの問題

ご存知のように、My SQLはリレーショナルデータベースであり、IO要件が高くなります。物理マシンが複数実行されると、IOが蓄積され、IOボトルネックが発生し、My SQLの読み書き性能が大幅に低下します。

Dockerアプリケーションのトップ10の困難なセッションでは、国営銀行のアーキテクトも提案しています。“データベースのパフォーマンスのボトルネックは一般的にIOに表示され、Dockerの考え方に従うと、複数のDocker最終IO要求がストレージに表示されます。現在のインターネットのデータベースは共有するものがほとんどで、Dockerへの移行を考慮しない要因かもしれません。

この問題に対処するための戦略がいくつかあります。

  1. データベースプログラムとデータの

Dockerを使用してMy SQLを実行する場合、データベースプログラムとデータを分離し、データを共有ストレージに格納し、プログラムをコンテナに格納する必要があります。コンテナまたはMy SQLサービスに例外がある場合、新しいコンテナが自動的に起動されます。また、ホストマシンにデータを保存しないことをお勧めします。ホストマシンとコンテナ共有ボリュームグループは、ホストマシンの損傷に大きな影響を与えます。

  1. 軽量または分散データベースの実行

軽量または分散データベースをDockerにデプロイする場合、Docker自体がサービスを再起動するのではなく、サービスを一時停止し、新しいコンテナを自動的に起動することを推奨します。

  1. 合理的な応用

IO要件が高いアプリケーションやサービスでは、データベースを物理マシンまたはKVMにデプロイするのが適切です。現在、Tencent CloudのTDSQLとAliのOceanbaseはDockerではなく物理マシンに直接デプロイされています。

ステータスの問題点

Dockerの水平スケーリングは、データベースではなくステートレスコンピューティングサービスでのみ使用できます。

Dockerの急速な拡張の重要な特徴はステートレスであり、データ状態を持つものはDocker内に直接配置するのに適しておらず、Dockerにデータベースをインストールする場合、ストレージサービスは別々に提供する必要があります。

現在、Tencent CloudのTDSQL(金融分散データベース)とAlibaba CloudのOceanbase(分散データベースシステム)は、管理が容易なDockerではなく、物理マシン上で直接実行されています。

資源分離の側面

リソース分離の面では、Dockerは仮想マシンKVMほど良くはなく、DockerはCgroupを使用してリソース制限を実装し、リソース消費の最大値を制限することができ、他のプログラムが独自のリソースを占有することを分離することはできません。他のアプリケーションの移行が物理マシンリソースを消費すると、コンテナ内のMy SQLの読み書き効率に影響します。

必要とされる独立性レベルが多ければ多いほど、リソースのオーバーヘッドが大きくなります専用環境と比較して水平スケーリングが容易なことはDockerの大きな利点です。しかし、Dockerの水平スケーリングはステートレスコンピューティングサービスにのみ使用され、データベースには適用されません。

My SQLはコンテナ内で実行できますか?

My SQLもコンテナ化できません。

  1. ユーザーが商品を検索するなど、データ損失に敏感でないビジネスは、データベースシャーディングを使用してインスタンス数を増やし、スループットを向上させることができます。

  2. Dockerは軽量または分散データベースを実行するのに適しており、Dockerサービスがダウンすると、コンテナサービスを再起動するのではなく、新しいコンテナが自動的に起動されます。

  3. データベースは、ミドルウェアとコンテナ化システムを使用して、自動的にスケーリング、災害復旧、切り替え、複数のノードを持ち、コンテナ化することができます。

典型的なケース:同じ旅旅行、Jingdong、Aliのデータベースコンテナ化は良いケースであり、誰もが自分で確認することができます。

著者:キングが語る。

原文へのリンク:https//www.toutiao.com/i6675622107390411276? WID= 164018 442788 9

Keep Exploring

延伸阅读

更多文章