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パッケージをインストールする方法

推薦する

WeChatアプレットの入力レベルとテキストエリアレベルの浸透率が高すぎる問題の解決策

WeChat ミニプログラムのネイティブ コンポーネントであるカメラ、キャンバス、入力 (フォーカス...

HTML 文法百科事典_HTML 言語文法百科事典 (必読)

ボリュームラベル、プロパティ名、説明002 <! - - ... - -> コメント00...

Pure CSS3はdivの出入りを順番に実現します

この記事は主に、純粋な CSS3 を使用して div が順番に出入りする効果を紹介します。一定の参考...

React と Threejs を使用して VR パノラマ プロジェクトを作成する詳細なプロセス

最近、 Three.jsでReactを使用して、720 度のパノラマ写真を閲覧できるプロジェクトを構...

WeChatアプレットでSVGアイコンを使用する方法

SVG は、さまざまな利点があるため、近年広く使用されています。残念ながら、WeChat ミニプログ...

JavaScriptの動作原理を理解しましょう

目次ブラウザカーネルJavaScript エンジンV8エンジンJavaScript がどのように実行...

Dockeにredisをインストールする方法

1. redisイメージを検索する docker 検索 redis 2. Redisイメージをダウン...

WeChatアプレットがログインインターフェースを実装

WeChatアプレットのログインインターフェースは参考までに実装されています。具体的な内容は次のとお...

HTML のボタン タグをクリックしてページにジャンプする 3 つの方法

方法1: onclickイベントを使用する <input type="button&...

ウェブデザインのためのロイヤルブルーのカラーマッチング入門

古典的な色の組み合わせは力と権威を伝え、強いロイヤルブルーはあらゆる古典的な色の組み合わせの中心的な...

Vue.js スタイルレイアウト Flutter ビジネス開発共通スキル

シャドウスタイルにおけるフラッターとCSSの対応UIによって指定されたCSSスタイル 幅: 75px...

Dockerのネットワークモードと設定方法

1. Dockerネットワークモードdocker run が Docker コンテナを作成するときに...

Nginx リバース プロキシでセッション永続性を実装する 2 つの方法の詳細な説明

1. ip_hash: ip_hash は、送信元アドレス ハッシュ アルゴリズムを使用して、サーバ...

Linux の総合システム監視ツール dstat の詳細な例

オールラウンドなシステム監視ツール dstat dstat は、vmstat、iostat、nets...