序文 MySQL は、クライアント/サーバー構造に基づく、高速、高性能、マルチスレッドのオープン ソース リレーショナル データベース管理システム (RDBMS) です。これは 1979 年に始まり、元々は Michael Widenius がスウェーデンの TcX 社向けに作成した UNIREG データベース システムでした。当時の UNIREG には SQL (構造化クエリ言語) インターフェイスがなかったため、その用途は限られていました。 1996 年 5 月、Widenius は MySQL の初期バージョンを開発し、インターネット上で公開し始めました。 MySQL の開発者は、当初から常にパフォーマンスを重視し、機能セットに全力を注いできました。今日に至るまで、MySQL は高速性と高性能を基本原則として、その本質を忠実に守り続けています。時が経つにつれ、MySQLにはストアドプロシージャ、ビュー、トリガーなどの大規模データベース製品の高度な機能も追加され、エンタープライズレベルのデータベースシステムに導入および適用できるようになりました[1]。 2008 年 10 月、SUN は MySQL AB を買収し、オープン ソース分野への参入を開始しました。主要オペレーティングシステム Solaris がオープンソース化されたことで、データベース市場における SUNMySQL のシェアはさらに拡大するでしょう。したがって、実稼働環境に負荷分散機能を備えた MySQL サーバー クラスターを導入することは、エンタープライズ データベース アプリケーション システムの速度、安定性、およびスケーラビリティを向上させる上で大きな実用的意義があり、アプリケーション システムへの投資コストを効果的に削減することもできます。 1. 負荷分散の基本的な考え方 サーバー クラスターでは、負荷をできるだけ均等に分散するようにしてください。通常の方法は、サーバーのフロントエンドにロード バランサー (専用のハードウェア デバイス) を設定することです。MySQL のロード バランシングには通常、データ シャーディング (データを小さな断片に分割し、異なる DB ノードに保存する) とレプリケーションが必要です。 サーバー クラスターでは、負荷をできるだけ均等に分散するようにしてください。通常の方法は、サーバーのフロントエンドにロード バランサー (専用のハードウェア デバイス) を設定することです。MySQL のロード バランシングには通常、データ シャーディング (データを小さな断片に分割し、異なる DB ノードに保存する) とレプリケーションが必要です。 負荷分散の主な貢献は、データベース要求を均等に分散することに加えて、読み取り/書き込み戦略の管理を提供することです。リクエストを配布する際に、どのノードが書き込み可能で読み取り可能であるかを判断し、指定されたノードにリクエストを送信して操作を実行します。 2. 負荷分散を実装する方法 1. MySQLの読み書き分離 MySQL がレプリケーションを行うと、複数のデータ コピー (スタンバイ データベース) が生成されます。サーバーの負荷を軽減するために、スタンバイ データベースを使用して読み取り操作を処理します。プライマリ データベースは読み取り操作と書き込み操作を同時に処理できます。これは、MySQL クラスターで読み取りと書き込みの分離を実現するための一般的な戦略です。 スタンバイ データベースのレプリケーションは非同期であり、リアルタイムで同期できないため、読み取り/書き込み分離の主な難しさは、スタンバイ データベース上のダーティ データにあります。通常、スタンバイ データベースを読み取りに使用する場合、データのリアルタイム要件はそれほど高くできません。この点に関して、MySQL は、クエリベースの読み取り/書き込み分離、ダーティデータベース、セッションベースなど、いくつかの一般的な読み取り/書き込み分離方法を提供しています。興味がある場合は、引き続き学習してください。 MySQL によって設定された読み取りと書き込みの分離により、プライマリ データベースへの要求の数が削減され、大量の読み取り操作がバックアップ データベースに送信され、負荷分散が実現されます。 2. DNSを変更する 「高同時実行負荷分散 (I) - エンタープライズ アーキテクチャ分析と DNS」では、DNS と DNS が負荷分散を実装する方法について詳しく説明しています。簡単に言うと、n 個のサーバー IP がドメイン名に割り当てられ、要求は、要求の異なる識別機能に基づいて処理するために異なる IP サーバーに送信されます。 3. ミドルウェアの導入 MySQL は、MySQL ロード ミドルウェアである mysql_proxy を公式に提供していますが、これもサーバーにインストールする必要があり、構成ファイル (mysql サーバー IP) を変更する必要があります。本質的には nginx に似ており、プロキシ サーバーでもあります。 4. MySQLを使用してクエリ操作をコピーおよび転送する MySQL のマスター スレーブ レプリケーションを使用すると、更新操作とクエリ操作を効果的に迂回できます。具体的な実装は、更新操作を担当するマスター サーバーと、クエリ操作を担当する複数のスレーブ サーバーです。マスターとスレーブ間のレプリケーションによって、データの同期が実現されます。可用性を確保し、さまざまなクエリのニーズを満たすさまざまなインデックスを作成するために、複数のスレーブ サーバーが使用されます。 マスターとスレーブ間ですべてのテーブルを複製する必要がない場合は、マスター サーバー上に仮想スレーブ サーバーを構築し、スレーブ サーバーに複製する必要があるテーブルをブラックホール エンジンに設定し、replicate-do-table パラメータを定義してこれらのテーブルのみを複製します。これにより、複製する必要があるバイナリ ログがフィルターされ、バイナリ ログを転送するための帯域幅が削減されます。仮想スレーブ サーバーは binlog をフィルターするだけで、実際にはデータを記録しないため、メイン データベース サーバーへのパフォーマンスの影響は非常に限定的です。 レプリケーションとシャントによるクエリの問題点は、マスター データベースが頻繁に更新されたり、ネットワークに問題があったりすると、マスターとスレーブ間でデータが異なり、クエリ結果に不具合が生じる可能性があることです。アプリケーションを設計する際には、この点を考慮する必要があります。 5. 分散データベースアーキテクチャを使用する MySQL は 5.0.3 以降、分散トランザクションをサポートしています。現在、分散トランザクションは Innodb ストレージ エンジンでのみサポートされています。分散データベース アーキテクチャは、大量のデータと高負荷に適しており、優れたスケーラビリティと高い可用性を備えています。複数のサーバーにデータを分散することで、複数のサーバー間の負荷分散が実現され、アクセス実行効率が向上します。実装にあたっては、MySQL(NDB エンジン)の Cluster 機能を利用したり、独自のプログラムを作成してグローバル トランザクションを実装したりすることができます。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Centos7 に DAMO データベースをインストールするチュートリアル
>>: NodeJSプロセスがどのように終了するかについて詳しく説明します
この記事では、Vueを使用して虫眼鏡付きの検索ボックスを実装する方法を紹介します。具体的な内容は次の...
最近、C# を使用して Web プログラムを作成していたときに、次のような問題が発生しました。 Te...
1. レンダリング2. 操作手順1. テンセントマップキーを申請する - 住所2. ミニプログラムの...
会社が現在使用しているソリューションを確認するためにバックエンドにログインしました。使用される FT...
1. データベースのタイムゾーンを確認する '%time_zone' のような変数を...
序文Nginxの組み込みモジュールは、同時リクエスト数の制限とリクエストのソースの制限をサポートして...
数日前に CentOS8 がリリースされました。8 の最初のバージョンですが、今日は VM12 に ...
参考までに、Javascript を使用して広告を閉じる方法に関するケース スタディを示します。詳細...
この記事では、シンプルなカレンダー効果を実現するためのjsの具体的なコードを参考までに共有します。具...
目次1. 配列の分解2. オブジェクトの分解3. 不完全な解体4. 分割代入を使用して変数交換を実装...
前の記事では、deepin linux に新しいカーネルを手動でインストールする方法について説明しま...
私は最近、最も安い Tencent クラウド サーバーを購入しました。これは主に、Web テクノロジ...
基礎位置の一致順序は、「最初に正規表現に一致し、次に共通表現に一致」です。実際のロケーションの一致順...
Linux システムのネットワーク接続を構成するのは難しい場合があります。幸いなことに、多くの新しい...
1. 構成デフォルトでは、最初の 2 つはチェックされていないので、チェックする必要があります。 (...