mycat を使用して MySQL データベースの読み取りと書き込みの分離を実装する例

mycat を使用して MySQL データベースの読み取りと書き込みの分離を実装する例

MyCATとは

  1. エンタープライズアプリケーション開発のための完全にオープンソースの大規模データベースクラスター
  2. トランザクション、ACIDをサポートし、MySQLを置き換えることができる拡張データベース
  3. 高価なOracleクラスタに代わるMySQLクラスタとして見ることができるエンタープライズクラスのデータベース
  4. メモリキャッシュ技術、NoSQL技術、HDFSビッグデータを統合した新しいSQL Server
  5. 従来のデータベースと新しい分散データウェアハウスを組み合わせた、エンタープライズレベルの新世代データベース製品
  6. 新しいデータベースミドルウェア製品

MyCATの主な機能

  1. SQL92標準をサポート
  2. MySQL、Oracle、DB2、SQL Server、PostgreSQL などの一般的な SQL 構文をサポートします。
  3. MySQL ネイティブ プロトコルに準拠し、言語間、プラットフォーム間、データベース間のユニバーサル ミドルウェア プロキシです。
  4. ハートビートベースの自動フェイルオーバー、読み取り/書き込み分離のサポート、MySQL マスター/スレーブのサポート、および Galera クラスター。
  5. MySQL クラスター、Percona クラスター、または MariaDB クラスターの Galera をサポート
  6. Nio 実装に基づいて、スレッドを効果的に管理し、高同時実行性の問題を解決します。
  7. 複数のデータの自動ルーティングと集計、合計、カウント、最大、データベース間のページングなどの一般的な集計関数をサポートします。
  8. 単一のデータベース内での任意の結合、データベース間の 2 つのテーブル間の結合、さらにはコールレットに基づく複数テーブルの結合もサポートします。
  9. グローバル テーブルと ER リレーションシップを通じてシャーディング戦略をサポートし、効率的なマルチテーブル結合クエリを実装します。
  10. マルチテナント シナリオをサポートします。
  11. 分散トランザクション (弱い XA) をサポートします。
  12. XA 分散トランザクションのサポート (1.6.5)。
  13. 分散システムにおける主キー生成の問題を解決するために、グローバル シリアル番号をサポートします。
  14. 豊富なシャーディング ルール、プラグイン開発、簡単な拡張。
  15. 強力な Web およびコマンド ライン監視。
  16. フロントエンドは一般的なプロキシとして MySQL をサポートし、バックエンドの JDBC メソッドは Oracle、DB2、SQL Server、mongodb、Sequoia をサポートします。
  17. パスワード暗号化をサポート
  18. サポートサービスのダウングレード
  19. IPホワイトリストをサポート
  20. SQLブラックリストとSQLインジェクション攻撃の阻止をサポート
  21. プリコンパイル手順の準備をサポート
  22. 非ヒープメモリ(ダイレクトメモリ)集計計算をサポート
  23. PostgreSQLネイティブプロトコルをサポート
  24. MySQLおよびOracleストアドプロシージャ、出力パラメータ、および返される複数の結果セットをサポートします。
  25. マスタースレーブ切り替え、ZKシーケンス、ZK構成のZookeeper調整をサポート
  26. データベース内のテーブルパーティションをサポート
  27. クラスターは、ZooKeeper 管理、オンライン アップグレード、容量拡張、インテリジェント最適化、ビッグ データ処理 (2.0 開発バージョン) に基づいています。

1. ここでは、MySQL マスター スレーブ レプリケーションの実装に基づいて、読み取りと書き込みの分離に mycat を使用します。アーキテクチャ図は次のとおりです。

2. デモ

2.1 MySQLマスターにデータベースを作成する db1を作成する

2.2 データベースdb1にstudentテーブルを作成する

同時に、MySQLマスタースレーブレプリケーションが設定されているため、MySQLスレーブにも同じデータベースとテーブルが存在します。

2.3 mycat設定ファイルserver.xmlを編集する

   <!-- mycat のログインユーザー名を示します -->
  <ユーザー名="テスト">
        <!-- mycat のログイン パスワードを示します -->
        <property name="password">テスト</property>
         <!-- カスタマイズ可能な mycat の論理データベース名を示します -->
        <property name="schemas">TESTDB</property>
    </ユーザー>

    <ユーザー名="ユーザー">
        <property name="password">ユーザー</property>
        <property name="schemas">TESTDB</property>
        <プロパティ名="readOnly">true</プロパティ>
    </ユーザー>

2.4 mycat設定ファイルschema.xmlを編集する

<!--TESTDB は、mycat の論理データベース名を表します。スキーマ ノードに子ノード テーブルがない場合は、dataNode 属性が存在する必要があります (実際の mysql データベースを指します)。
-->
<スキーマ名="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
    </スキーマ>
    <!--マスターデータベース db1 を指定します-->
    <データノード名="dn1" データホスト="192.168.0.4" データベース="db1" />
    <!-- マスター IP を指定します -->
    <dataHost name="192.168.0.4" maxCon="1000" minCon="10" balance="3"
        writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
        <!--MySQL のハートビート ステータスを示します-->
        <heartbeat>ユーザーを選択()</heartbeat>
        <!-- マスターが書き込みを担当します -->
        <writeHost ホスト="hostM1" url="192.168.0.4:3306" ユーザー="root"
            パスワード="admin">
        <!--スレーブは読み取りを担当します-->
        <readHost ホスト="hostS2" url="192.168.0.5:3306" ユーザー="root" パスワード="admin" />
        </writeHost>
</データホスト>

この時点で、mycatを使用して読み書きを分離する設定が完了しました。

dataHostノードの次の3つのプロパティに注意してください

バランス、スイッチタイプ、書き込みタイプ

balance="0" の場合、読み取り/書き込み分離メカニズムは有効にならず、すべての読み取り操作は現在利用可能な writeHost に送信されます。

balance="1" の場合、すべての readHost とスタンバイ writeHost が SELECT ステートメントの負荷分散に参加します。簡単に言うと、デュアル マスターおよびデュアル スレーブ モード (M1->S1、M2->S2、および M1 と M2 が相互にマスターとスレーブ) の場合、通常の状況では、M2、S1、および S2 はすべて SELECT ステートメントの負荷分散に参加します。

balance="2" の場合、すべての読み取り操作は writeHost と readhost にランダムに分散されます。

balance="3" の場合、すべての読み取り要求は writeHost の下の readhost にランダムに分散されて実行され、writeHost は読み取りの負荷を負いません。

writeTypeは書き込みモードを示します

writeType="0"、すべての操作は最初に構成された writehost に送信されます

writeType="1"、設定されたすべての書き込みホストにランダムに送信します

writeType="2"、書き込み操作は実行されません

switchType はスイッチング モードを指し、現在可能な値は 4 つあります。

switchType='-1'は自動切り替えなしを意味します

switchType='1' デフォルト値、自動切り替えを示す

switchType='2'は、MySQLのマスタースレーブ同期のステータスに基づいて切り替えるかどうかを決定します。ハートビートステートメントは、スレーブステータスを表示します。

switchType='3' は、MySQL galary cluster (クラスターに適しています) (1.4.1) の切り替えメカニズムに基づいており、ハートビート ステートメントは 'wsrep%' のようなステータスを表示します。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Springboot + Mysql8で読み書き分離機能を実現
  • SpringbootはMybatis mysqlに基づいて読み取りと書き込みの分離を実装します
  • mysql+mycat、負荷分散、マスタースレーブレプリケーション、読み取り/書き込み分離操作に基づく安定した高可用性クラスタを構築します。
  • PHP で実装された MySQL の読み取り/書き込み分離操作の例
  • MySQL マスタースレーブレプリケーション 読み書き分離の設定方法の詳細説明
  • PHP+MYSQLは、読み取りと書き込みの分離のシンプルな実践を実装します
  • Mysql の読み取り/書き込み分離期限切れに対する一般的な解決策

<<:  LinuxベースのLVMシームレスディスク水平拡張の詳細な説明

>>:  Linuxにpipパッケージをインストールする方法

推薦する

Prometheus を使用して、MySQL の自動増分主キーの残りの使用可能パーセンテージをカウントします。

最近、本番環境のデータベースがログデータを狂ったように書き込み、主キー値のオーバーフローを引き起こし...

Dockerコンテナの原理の分析

目次01 コンテナの本質とは何か? 02 Cgroupテクノロジーと名前空間テクノロジーの概要03 ...

MySQLトリガーの例の詳細な説明

目次トリガーとは何かトリガーを作成する複数の実行ステートメントを持つトリガーの作成制限と考慮事項要約...

Win10 構成 Tomcat 環境変数チュートリアル図

設定する前に、次の操作を行う必要があります。 1. まずjdk bloggerをインストールします。...

CSS3アニメーション属性に基づくWeChatタップアニメーション効果の実装

最近人気のWeChatタップ機能を見て、CSS3アニメーションを見直し、このボックスシェイクアニメー...

Vue プロジェクトにおけるトランジション コンポーネントの適用の概要

​Vue のトランジションは、アニメーション トランジションをカプセル化するコンポーネントです。一般...

Docker を使用して Microsoft Sql Server を展開するための詳細な手順

目次1 背景2 コンテナを作成する3 SAパスワードを変更する4 mssql のリンク5. コンテナ...

ulとliの基本的な使用法の分析

ナビゲーション、少量のデータテーブル、中央揃え<!DOCTYPE html PUBLIC &q...

JavaScript で大きなファイルの並列ダウンロードを実装する方法

目次1. HTTP範囲リクエスト1.1 範囲構文2. 大きなファイルをダウンロードする方法2.1 補...

docker-compose を使用して MySQL を実行する方法

ディレクトリ構造 。 │ .env │ docker-compose.yml │ └─mysql ├...

JavaScriptは行削除機能を備えたテーブルを動的に生成します

この記事の例では、テーブルを動的に生成したり行を削除したりするためのJavaScriptの具体的なコ...

CSS3でよく使われるスタイルの詳しい解説[基本的なテキストとフォントのスタイル]

概要: Web ページをより美しく見せるために、ここでは CSS3 でよく使用されるスタイルをいくつ...

ViteでReactプロジェクトを構築する方法

目次序文Viteプロジェクトを作成する改修プロジェクトディレクトリの規則その他の構成序文毎日鳩、火ば...

大きなオフセットによる MySQL 制限ページングが遅い理由と最適化ソリューション

MySQL では通常、limit を使用してページ上のページング機能を完了しますが、データ量が大きな...

追加、削除、変更、クエリを実行するための JS 操作オブジェクト配列のサンプルコード

1. はじめに最近、私は友人が JSON 配列を追加、削除、変更するための簡単なページを作成するのを...