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

推薦する

MySQL の on と where における左結合設定条件の使用法の違いの分析

この記事では、MySQL の左結合における on 条件と where 条件の使用法の違いを例を使って...

CentOS仮想マシンの時刻を変更する方法

上はシステム時間、下はハードウェア時間です。ここでは変更を加えているので、同じくらいの速さになってい...

MySQL で URL タイムゾーンの罠を回避する方法

序文最近、MySQL 6.0.x 以降の jar を使用する場合、コード URL リンクで serv...

シェルスクリプト nginx 自動化スクリプト

このスクリプトは、nginxの起動、停止、再起動の操作を満たすことができます。 #!/bin/bas...

MySQL スロークエリログの有効化と設定

導入MySQL スロー クエリ ログは、問題のある SQL ステートメントのトラブルシューティングや...

CSS ファンタスティックボーダーアニメーション効果の実装

今日、私はブログサイト shoptalkshow を閲覧していて、非常に興味深いこのインターフェース...

MySQL でデータ テーブルを作成し、主キーと外部キーの関係を確立する方法の詳細な説明

序文MySQL テーブルの主キーと外部キーを作成するときは、次の点に注意する必要があります。主キーと...

MySQL でのテーブルの作成と削除の詳細な例

テーブル作成コマンドには以下が必要です。 テーブルの名前フィールド名各フィールドを定義します(タイ...

Yahooのフロントエンド最適化に関する35のルールについての簡単な説明

概要: 仕事でも面接でも、Web フロントエンドのパフォーマンスを最適化することは非常に重要です。で...

Node.js管理ツールnvmの詳細なインストール手順

いいえnvmはnodejsの複数のバージョンを管理する役割を担っています。インストール: https...

HTMLタグのデフォルトスタイルの配置

html、address、blockquote、body、dd、div、dl、dt、fieldset...

HTML5+CSS3コーディング標準

黄金律プロジェクトに何人の人が取り組んでいるかに関係なく、すべてのコード行が同じ人によって書かれたよ...

MySQLでSQLクエリ文がどのように実行されるかを分析する

目次1. MySQL論理アーキテクチャの概要2. コネクタクエリキャッシュ4. パーサー5. オプテ...

Xshell を使用して VMware 上の Linux 仮想マシンに接続する (グラフィック手順)

はじめに: 最近 Hadoop プラットフォームの構築を勉強し始めたので、ローカルマシンに VMwa...

ホストがアクセスできるようにMySQLの権限を変更する方法

mysqlのリモートアクセス権を有効にするデフォルトでは、MySQL ユーザーにはリモート アクセス...