MySQLで負荷分散を実装する方法

MySQLで負荷分散を実装する方法

序文

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 を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQLデュアルマシンホットスタンバイと負荷分散の実装手順の詳細説明
  • パフォーマンス負荷診断にMySQLシステムデータベースを使用する方法
  • MySQL のロードバランサーとして nginx を使用する方法
  • OneProxy に基づいて MySQL の読み取り/書き込み分離と負荷分散を実装する
  • mysql+mycat、負荷分散、マスタースレーブレプリケーション、読み取り/書き込み分離操作に基づく安定した高可用性クラスタを構築します。
  • PythonはMySQLの読み書き分離と負荷分散を実装します
  • MySQLの高可用性負荷分散構成を実装するためのKeepalived+HAProxy
  • MySQLのインデックスによって引き起こされるCPU負荷の急増を分析する
  • MYSQLデータベース接続の負荷容量を迅速に増やす方法
  • 負荷分散機能を備えたMySQLサーバクラスタの導入と実装
  • MySQL の CPU 負荷が高い問題のトラブルシューティング

<<:  Centos7 に DAMO データベースをインストールするチュートリアル

>>:  NodeJSプロセスがどのように終了するかについて詳しく説明します

推薦する

MySQL シリーズ II マルチインスタンス構成

チュートリアルシリーズMySQL シリーズ: MySQL リレーショナル データベースの基本概念My...

JS 関数とコンストラクタを簡単に理解する

目次1. 概要1.1 Functionコンストラクタを使用して関数を作成する1.2 機能と目的2. ...

MySQL マルチバージョン同時実行制御 MVCC の実装

トランザクション分離レベルの設定 グローバルトランザクション分離レベルを読み取りコミット済みに設定;...

仮想マシンを作成し、VMware に Redhat Linux オペレーティング システムをインストールする (グラフィック チュートリアル)

VMware で仮想マシンを作成し、Redhat Linux オペレーティング システムをインスト...

Windows での MySQL 8.0.12 のインストール手順と基本的な使用方法のチュートリアル

この記事では、WindowsでのMySQL 8.0.12のインストール手順と使用方法のチュートリアル...

CentOS 7.6 への MySQL 5.7 GA バージョンのインストール チュートリアル図

目次環境の準備環境の準備mariadbをアンインストールする rpm -qa | grep mari...

vsFTP 3.0.3 のコンパイルとインストールの詳細な分析

脆弱性の詳細VSFTP は、GPL に基づいてリリースされた Unix ライクなシステムで使用される...

CSS と JavaScript を使用して管理ダッシュボードのレイアウトを構築するためのサンプル コード

あなたが作成するものこの新しいチュートリアルでは、CSS と JavaScript を使用して、レス...

ミニプログラムはミニプログラムクラウドを使用してWeChatの支払い機能を実装します

目次1. WeChat Payを開く1.1 アフィリエイト加盟店番号1.2 加盟店番号を追加する1....

Vue2 キューブUI 時間セレクターの詳細な説明

目次序文1. 需要と効果必要効果2. コードの実装index.vue(html)日付方法テスト結果3...

Vueプロジェクトでのトークン検証ログイン(フロントエンド部分)

この記事の例では、Vueプロジェクトでのトークン検証ログインの具体的なコードを参考までに共有していま...

HTMLとリソースがどのように読み込まれるかを理解します

このブログのすべてのコンテンツは、クリエイティブ コモンズ ライセンスの下でライセンスされています。...

Nginx ログ出力のリクエスト後パラメータを設定する方法

【序文】当プロジェクトの SMS 機能は、第三者に接続することです。第三者からの元の受信確認要求は ...

Vueのwatch、computed、methodsの違いのまとめ

目次1 はじめに2 基本的な使い方2.1 方法2.2 計算プロパティ2.3 リスナーを見る3 3つの...