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

推薦する

TinyEditorはシンプルで使いやすいHTML WYSIWYGエディタです

数日前、国産の XHTML エディタを紹介しました。今日は、有名な海外の Web デザイン ブログl...

HTML と CSS に関する基本的なメモ (フロントエンドでは必読)

HTMLに触れた当初はレイアウトにいつもテーブルを使っていましたが、とても面倒で見た目も悪かったの...

CSS のインライン スタイルに変換するソリューション (css-inline)

シーンについて話すメールを送信サードパーティのウェブサイトにHTMLを埋め込む他の編集者の記事をコピ...

ウェブ開発者はIE7とIE8の共存を懸念している

今日、IE8 をインストールしました。ダウンロードするために Microsoft の Web サイト...

データベースインデックスの知識ポイントの概要

目次ファーストルックインデックスインデックスの概念インデックスファイルの構成インデックスの役割SQL...

ウェブデザインでは、まずウェブサイトの包括的なイメージの位置付けが必要です。

⑴ 内容によって形式が決まります。まず内容を充実させ、次にブロックに分割し、トーンを決め、最後に細部...

iframe の多層ネスト、無制限のネスト、高度に適応したソリューション

ページ A、B、C の 3 つがあります。ページ A にはページ B が含まれ、ページ B にはペー...

音声キューイングシステムを実装するためのJavaScript

目次導入主な特徴エフェクト表示キーコード導入音声キューイングシステムは、銀行、レストラン、病院などの...

Linuxはjoin -a1を使用して2つのファイルを結合します

次の2つのファイルを結合するには、それらを結合して1.txtに結合します。 # 1.txt ジェリー...

Nodejs でタイムドクローラーを実装する完全な例

目次事件の原因Node Scheduleを使用してスケジュールされたタスクを実装する1. node-...

Nginx プロセス管理とリロードの原則の詳細な説明

プロセス構造図Nginx はマルチプロセス構造です。マルチプロセス構造は、次のような Nginx の...

MySQL 変数の原理と応用例

MySQL ドキュメントでは、MySQL 変数はシステム変数とユーザー変数の 2 つのカテゴリに分類...

nginxプロセスロックの実装の詳細な説明

目次1. nginxプロセスロックの役割2. エントリーレベルのロックの使用3. nginxプロセス...

JavaScript におけるイベント バブリング メカニズムの詳細な分析

バブリングとは何ですか? DOM イベント フローには、イベント キャプチャ ステージ、ターゲット ...

http:// の代わりに // を使用する利点は何ですか (アダプティブ https)

//デフォルトプロトコル/ デフォルト プロトコルの使用は、リソース アクセス プロトコルが現在の...