ホームページ >データベース >mysql チュートリアル >mysqlファブリックとは何ですか

mysqlファブリックとは何ですか

青灯夜游
青灯夜游オリジナル
2023-04-03 15:43:191779ブラウズ

MySQL Fabric は、MySQL サーバー グループを管理するための拡張可能なフレームワークであり、GPL オープン ソース ソフトウェアです。つまり、ユーザーは GPL 仕様に準拠してこのソフトウェアを自由に使用および変更できます。 mysql ファブリックは、あらゆる管理リクエストを処理するプロセスです。HA 機能を使用する場合、このプロセスにマスター サーバーの監視を担当させ、障害が発生した場合にはフェイルオーバーを開始してスレーブ サーバーをマスター サーバーにアップグレードすることができます。

mysqlファブリックとは何ですか

このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。

MySQL Fabric の概要

MySQL Fabric は、MySQL サーバー ファームを管理するための拡張可能なフレームワークです。

MySQL Fabric は複数の MySQL データベースを「編成」でき、アプリケーション システムは数 TB を超えるテーブルを複数のデータベース、つまりデータ シャードに分散します。同じシャードには複数のデータベースを含めることができ、ファブリックは適切なデータベースをマスター データベースとして自動的に選択し、他のデータベースはマスター/スレーブ レプリケーションのスレーブ データベースとして構成されます。マスター データベースがハングアップすると、スレーブ データベースの 1 つが選択され、マスター データベースに昇格します。その後、他のスレーブ データベースが新しいプライマリ データベースに転送され、新しいデータがコピーされます。注: ここで言う「自動」とは、ユーザーが手動で設定を変更する必要がなく、MySQL Fabric がバックグラウンドで処理を完了することを意味します。最も重要なことは、MySQL Fabric が GPL オープン ソース ソフトウェアであるということです。つまり、このソフトウェアは GPL 仕様に基づいて自由に使用および変更できます。

ファブリック フレームワークは、高可用性 (高可用性) とデータ シャーディングを使用した水平拡張 (シャーディング) の 2 つの機能を実装しており、これら 2 つの機能は単独で使用することも、組み合わせて使用​​することもできます。

両方の機能は、次の 2 つのレベルに基づいて実装されます。

mysql ファブリックは、あらゆる管理リクエストを処理するプロセスです。 HA 機能を使用する場合、このプロセスでマスター サーバーを監視し、障害が発生したときにフェイルオーバーを開始して、スレーブ サーバーをマスター サーバーにアップグレードすることもできます。 MySQL Fabric 対応コネクタは、MySQL Fabric から取得したルーティング情報をキャッシュに保存し、この情報を使用してトランザクションまたはクエリを正しい MySQL サーバーに送信します。

高可用性

HA グループは 2 台以上の MySQL サーバーで構成され、常に 1 台のサーバーがマスター サーバー (MySQL レプリケーション機能のマスター) として機能します。 ).server)、その他のサーバーはスレーブサーバー(MySQLレプリケーション機能のスレーブサーバー)として機能します。 HA グループの役割は、グループに保存されたデータに常にアクセスできるようにすることです。 MySQL のレプリケーション機能は、レプリケーションを通じてデータのセキュリティを確保し、MySQL ファブリックの高可用性ソリューションは、これに基づいて 2 つの重要な追加要素を提供します。

障害の検出とアップグレード - MySQL ファブリックの監視 HA グループ マスター サーバー内のマスター サーバー。マスターサーバーの障害イベントが発生した場合、スレーブサーバーを選択し、マスターサーバーに昇格します。 データベースリクエストのルーティング - 書き込みリクエストをマスターサーバーにルーティングし、スレーブサーバー間で読み取りリクエストの負荷を分散する操作です。 トポロジが変更された場合でも、アプリケーションに対して透過的です。フェイルオーバー中

#シャーディング - スケールアウト #MySQL サーバー (または HA グループ) に近い場合 容量または書き込みパフォーマンスの制限に達すると、MySQL ファブリックはデータベース サーバーを水平方向にサポートします複数の MySQL サーバー「グループ」にデータを分割することによるスケーリング。グループには MySQL サーバーを 1 つだけ含めることも、HA グループを含めることもできることに注意してください。管理者は、これらのサーバー間でデータをシャーディングする方法を定義します。どのテーブル列をシャーディング キーとして使用するかを指定し、さらにシャーディングが必要な場合にこれらのキーを正しいシャードにマップするために HASH マッピングまたは RANGE マッピングを使用するかどうかを指定します。既存のシャードに加えて、シャードを再割り当てすることもできます。

MySQL Fabric によって解決される問題

なぜデータシャーディングを行うのでしょうか?データ シャードは、アプリケーションが 1TB を超えるデータのテーブルを処理する必要がある場合に、多くの場合 必要になります。 このように大きなテーブルを使用すると、クエリと更新の効率の点で 非効率になったり、構造のバックアップと変更に必要な 時間がかかったりします。 #大きな質問です。ただし、このような大きなテーブルを複数のデータベース サーバーに分散すると、 により、各データベース サーバー が単一障害点になる可能性が高くなります。 そのうちの 1 つがハングアップすると、システム全体の動作に問題が発生します 。一方、 アプリケーション側のプログラムも混乱します。なぜなら、各クエリはクエリ条件 ( where 句) はより複雑になります。さらに、データ断片化 の構造が変更されると (データベースの追加など)、アプリケーション側のすべての プログラムを変更する必要があり、その結果 メンテナンスは非常に複雑になります。

アプリケーションの複雑さの増加の問題を解決するために、誰かがアプリケーションとデータベース サーバーの間にプロキシを追加するか、 (プロキシ)、またはスイッチになります。アプリケーションにはデータベースに対するすべての命令が最初にプロキシに送信され、次に proxy がどのデータベースに を転送するかを決定します。下の写真はこの計画の概略図です。これにより、アプリケーション の保守が難しいという問題は解決される可能性がありますが、アプリケーションの数が増加したり、データベースのシャーディングが増加したり、システムの負荷 が増加したりすると、この問題は解決されます。スイッチは、容量とパフォーマンスのボトルネックおよび単一障害点になります (スイッチがダウンすると、アプリケーションは データベースを見つけることができなくなります)、すべてのデータベース命令を送信する必要があります 2 回 (最初に切り替え、次にデータベースに)。各クエリ により追加の負荷が発生します。

mysqlファブリックとは何ですか#MySQL ファブリック アーキテクチャ

MySQL Fabric は異なるアプローチを採用しており、そのアーキテクチャを次の図に示します。主な機能は、スイッチを各アプリケーション側のコネクタに結合して、単一スイッチの単一障害点とパフォーマンスのボトルネックを解決することです。

MySQL Fabric は 3 つの部分で構成されます: mysqlファブリックとは何ですか

1.MySQL Fabric 管理ノード:

は Python スクリプトであり、アーキテクチャ全体の中核です。

MySQL ファブリック管理ノードの主な機能は、データベース サーバー ファーム全体 (データベース サーバー ファーム) を管理することです。起動すると、構成ファイル /etc/mysql/ が見つかります。 Fabric.cnf を開き、それを使用して、サーバー ファームのアーキテクチャと構成を保存するリポジトリとして、ファブリックの背後にある MySQL データベースの場所、ポート、接続アカウント、およびその他の情報を指定します。

ファブリックが初期化されると (mysqlfabric manage setup コマンドを実行すると)、MySQL データベース (通常はファブリックという名前のデータベース) 上のスキーマが開き、サーバー ファームの構成関連情報が保存されます。たとえば、どのサーバー グループがどのデータベースで構成されているか、各サーバー グループにどのマスター サーバーとスレーブ サーバーがあるかなどです。

MySQL ファブリック ノードの構成をセットアップするとき、サーバー ファーム内の各データベースのマスター/スレーブ レプリケーションを確立するコマンドが発行されます (上の図の赤い線)。

通常運用中に各グループのメイン サーバーに定期的に ping を実行し、メイン データベースが正常に動作していないことが判明すると、フェイルオーバー プログラムが開始され、スレーブ データベースが検索されます。サーバー ファーム。マスター サーバーへの適切な昇格。他のスレーブ データベースは新しいマスター データベースを使用してデータのレプリケーションを続行します。

2. データベース サーバー ファーム

これは、アーキテクチャ全体で動作するエンジンです。従来のデータベース アプリケーションでは、これは単一の MySQL です。一方、MySQL Fabric は複数のデータベースを使用して、大規模なデータ スケール (テラバイト以上) と高可用性データベースのニーズをサポートします。これらのデータベースは複数の高可用性グループ (HA グループ) に分割されており、各グループには複数のデータベース サーバーが含まれています。上図の下のいくつかの灰色と水色の四角は高可用性グループを表します。高可用性グループに複数のデータベースがある場合、MySQL Fabric は 1 つのデータベースをマスター データベース (Master) に昇格させることを選択し (mysqlfabric group Promotion コマンドを使用)、他のデータベースはスレーブ データベース (Slave) になります。マスター データベースの変更をコピーして完了します。同じ高可用性グループ内でマスター/スレーブ レプリケーションをセットアップします。将来的には、ファブリックはこのメイン データベースに定期的にアクセスすることになります。プライマリ データがダウンすると、ファブリックは高可用性グループから 1 つを選択してプライマリ データベースに昇格し、他のデータベースはこの新しいプライマリ データベースを使用してレプリケーションを続行します。
一方、MySQL Fabric は、これらのマスター/スレーブ データベースの読み取りと書き込みを分離するために、アプリケーション側でコネクタのみを使用します。アプリケーションがデータベースに対して読み取りと書き込みの両方の操作を実行する場合、コネクタは命令をマスターデータベースに送信します。アプリケーションがデータベースに対して読み取り操作のみを実行し、接続の read_only パラメータが「ON」に設定されている場合、すべてのクエリがこれらのデータベースに順番に送信されます。読み取りと書き込みを分離することで、アプリケーション システムのデータ処理能力を向上させることができます。さらに、前述したように、MySQL Fabric は複数のデータベース サーバーに分割する必要があるテーブル (シャーディング テーブル) も処理でき、各高可用性グループにはシャード テーブルのデータの一部が保存される場合があります。アプリケーション側のコネクタは、MySQL ファブリック管理ノードの設定に従って、シャード テーブルの指示をさまざまな高可用性グループに送信します。これにより、高可用性グループの数が増加するにつれて、データベースの容量も拡張できます。同時に、非分割テーブルに対して発行された命令とすべての DDL は、コネクタによって global 高可用性グループ (global group) に送信されます。グローバル高可用性グループは MySQL Fabric であり、他の高可用性グループのプライマリ データベースとして設定されます。分割テーブルを格納するすべての高可用性グループのプライマリ データベースは、グローバル グループ内の変更をレプリケートするため、他の高可用性グループは非分割テーブル データのコピーを保持します。これにより、SQL での非分割テーブル上の分割テーブルの JOIN 操作が容易になります。

3. コネクタ

アプリケーション システムの実行中、各 SQL コマンドはコネクタ経由でデータベースに送信されます。 MySQL Fabric に搭載されているコネクタは、一般的なスタンドアロン MySQL データベースと同じですが、新しいバージョンのコネクタはファブリック対応コネクタであり、データベース サーバー ファームを処理できる機能が増えています。これにより、データベース接続の確立時に XML-RPC プロトコルを使用して MySQL ファブリックの管理ノードのサーバー ファームの構成を確認し、ファブリックの指示に従って接続中のクエリを適切なデータベースに送信できるようになります。 。

この方法では、一般的なデータベース シャード ソリューションでパフォーマンスのボトルネックを引き起こす可能性があるプロキシがコネクタに配置され、この問題が解決されます。現在、MySQL Fabric でサポートされているテクノロジには、Java、Python、および PHP が含まれます。つまり、Connector/J、Connector/Python、および Connector/PHP はすべて Fabric 対応です。

Java を例に挙げます。JDBC ドライバーは Connector/J 5.1.30 以降である必要があります。Fabric の Java プログラムは、スタンドアロン MySQL をクエリするための一般的な Java プログラムと似ています。データベース接続オブジェクトが使用される場合、データベース接続 URL はデータベースを指すのではなく、MySQL Fabric 管理ノードを指します (サーバーの IP とポートは通常 32274)。

クエリ対象のテーブルがグローバル テーブル (テーブル シャードなし) または DDL (テーブルの作成やテーブル構造の変更など) である場合、確立時に ''fabricServerGroup='' を追加する必要があります。接続オブジェクトとパラメータを設定すると、この接続オブジェクトを通じて発行された SQL コマンドがグローバル グループのメイン データベースに送信され、データベースが他の高可用性グループ (シャード) にコピーされます。 #SQL の場合 コマンドで操作するテーブルがシャード テーブルです。接続オブジェクトを作成するときに、パラメーターに

''fabricShardTable= パラメーターを追加する必要があります。その後、この接続を通じて SQL コマンドが発行されます。オブジェクトは MySQL Fabric に従って設定され、テーブル (シャード) の原則は各パーティション (シャード) の高可用性グループに送信されます。

このようにして、アプリケーション プログラムがこれらのシャード テーブルの下で SQL 命令を発行するとき、SQL でどのデータベースに送信するかを決定する必要はありません。どのデータベースに送信するかは、データベース接続を確立するときに MySQL Fabric にあるサーバー ファームの構成情報 (どのデータベースがどのシャード グループに属するか、各シャード テーブルの分割原則など) によって決定されます。この構成は、メイン接続が確立された後、コネクタが配置されているアプリケーション側にキャッシュされます。

#この方法では、SQL コマンドが発行されるたびに MySQL Fabric 管理ノードに繰り返しクエリを実行する必要がなく、サブテーブルの構成がアプリケーション側に応じて、正しいデータベースに直接送信されます。テーブルの分割によってアプリケーションの効率が低下することはありません。

[関連する推奨事項: mysql ビデオ チュートリアル

]

以上がmysqlファブリックとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。