序文 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プロセスがどのように終了するかについて詳しく説明します
目次概要ハッシュプロパティホストプロパティホスト名属性Href属性起源のプロパティユーザー名とパスワ...
IE6 と IE7 では CSS の解釈に多くの違いがあります。今日はそのうちの 1 つである高さに...
目次1. 浅いクローニング2. ディープクローニング1. 浅いクローニング浅いクローンでは配列やオブ...
mysql5.7.18のインストール時に次の問題が発生しました: プログラム入力ポイントfesetr...
目次現象根本原因分析getLastPacketReceivedTimeMs() メソッドの呼び出し時...
目次1. ページの概要2. 下限と上限3. ページディレクトリを使用する4. ページの実際の外観4....
序文ビューは、データベース システム内で非常に便利なデータベース オブジェクトです。 MySQL 5...
MySQL の全体的なアーキテクチャは、サーバー層とストレージ エンジン層に分かれています。サーバー...
1 実施原則これは、DOM 要素の dragstart/ondragover/ondrop イベント...
状況の説明: データベースが異常に起動およびシャットダウンしたため、サービスを再度起動したときに「起...
1-ドロップダウン選択ボックスのスタイル設定 - ドロップダウン リストを変更します。 2- <...
この記事の例では、WeChatアプレットの日付と時刻コンポーネントの具体的なコードを参考までに共有し...
序文少し前に、興味深い問題を目にしました。Vue のデータが変更された後に、ビューを同期的に更新する...
最近では、多くのウェブサイトでは、ページ上の特定のコンテンツや情報を直接コピーすることは許可されてお...
導入EXISTS は、サブクエリが少なくとも 1 行のデータを返すかどうかを確認するために使用されま...