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

推薦する

Tomcatのサーバーオプションの詳細な説明

1. 構成デフォルトでは、最初の 2 つはチェックされていないので、チェックする必要があります。 (...

ウェブページのフラッシュアニメーションが表示されない問題の解決策

<br />解決手順は次のとおりです。スタート -> 実行 -> reged...

ウェブデザイン経験

<br />著者はかつてWebデザインの初心者でしたが、継続的な探求と実践を通じて、今で...

Apacheドメイン名設定の落とし穴の詳細な説明

私はApacheを使ったことがありません。仕事を始めてからはずっとnginxを使っていました(運用保...

MySQLにおける分散ロックの考え方をDBの助けを借りて詳しく説明します

序文スタンドアロン ロックであっても分散ロックであっても、共有データに基づいて現在の操作の動作を判断...

MySQLソートにおけるCASE WHENの使用例

序文以前のプロジェクトでは、SQL の CASE WHEN ソート関数が使用されました。ではブログメ...

MySQLリモート接続権限の詳細な説明

1. MySQLデータベースにログインするmysql -u ルート -pユーザーテーブルを表示する ...

JavaScript データ プロキシとイベントの詳細な分析

目次データブローカーとイベントObject.defineProperty メソッドのレビューデータブ...

さまざまなHTTPリターンステータスコードの詳細な説明

サイト上のページを表示するためのリクエストがサーバーに送信されると(たとえば、ユーザーがブラウザでペ...

JavaScript オブジェクトを作成する 3 つの方法

目次1. オブジェクトリテラル2. newキーワードはオブジェクトを作成する3. Object.cr...

ネイティブ Js で実装されたシンプルなシームレス スクロール カルーセルのサンプル コード

シンプルなシームレススクロールカルーセルには多くの抜け穴があり、後から画像を追加するのは非常に不便で...

IDEA 構成の Tomcat 起動エラーの問題を解決する

異なるサーブレット パスを構成するときに、次の 2 つのエラーが発生しました。 java.lang....

MySQL の自己結合重複排除に関する注意事項

機能シナリオを簡単に説明しましょう。データ行フィールドは次のとおりです。名前開始日時タイプこの表では...

ReactRouterの実装

ReactRouterの実装ReactRouterはReactのコアコンポーネントです。主にReac...

mysql 8.0.16 winx64.zip インストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.16 winx64.zipのインストールと設定方法の具体的なコード...