MySQL 学習メモ: mycat2 の原理と構築

私の猫2

公式サイト:MyCat2(mycatone.top)

学習ビデオを参照してください。データベース ミドルウェア Mycat2 をここまで詳しく徹底的に説明しているのは、Bilibili でこれだけかもしれません。_bilibili_ビリビリ

mycat2とは何ですか?

Mycat は、Alibaba Cobar に基づいてオープン ソース コミュニティによって開発されたデータベース ミドルウェアです。また、Java 言語に基づいて書かれた最も人気のあるデータベース ミドルウェアです。オープン ソースの分散データベース システムであり、MySQL プロトコルを実装するサーバーです。フロントエンド ユーザーは、MySQL クライアント ツールとコマンド ライン アクセス (SQLyog、navigate) を使用するデータベース プロキシとして考えることができ、バックエンドは MySQL ネイティブ (Native) プロトコルを使用して複数の MySQL サーバーと通信でき、 JDBC プロトコルは、ほとんどの主流データベース サーバーと通信します。その中心機能は、テーブルとデータベースのパーティショニングです。つまり、大きなテーブルが N 個の小さなテーブルに水平に分割され、バックエンドの MySQL サーバーまたはその他のデータベースに保存されます。データベースのマスター/スレーブ モードと組み合わせて、読み取りと書き込みの分離も実現できます。

Mycat は現在のバージョンまで開発されており、純粋な MySQL エージェントではなくなりました。そのバックエンドは、MySQL、SQL Server、Oracle、DB2、PostgreSQL などの主流データベースをサポートできます。また、MongoDB、新しいタイプの NoSQL ストレージ、およびより多くの種類のストレージをサポートします。

動作方法としては、Mycat は MySQL サービスとしてデプロイされ、プログラマーは通常のスタンドアロン MySQL サービスと同様に mycat を操作するだけで、サブデータベースとテーブル機能は Mycat によって完成されます。 、MySQL を使用することをお勧めします。

mycat2 を使用する理由

  1. 高いアクセス量と高い同時実行性によりデータベースに負荷がかかる
  2. 読み取り要求データと書き込み要求データが矛盾しています

関数

1. 読み書きの分離

ここに画像の説明を挿入します

2. サブデータベースとサブテーブル

3. 複数のデータソースの統合

原理

mycat の原理で最も重要な動詞はインターセプトです。ユーザーが送信した SQL ステートメントをインターセプトします。まず、SQL ステートメントに対して、断片化分析、ルーティング分析、読み書き分離分析、キャッシュ分析などの特定の分析を実行します。 , などを実行し、この SQL をバックエンドの実データベースに送信し、返された結果に対して適切な処理を実行して、最終的にユーザーに返します。

ここに画像の説明を挿入します

関連概念

1. サブデータベースとサブテーブル

特定のルールに従って、データベース内のテーブルは、データベース インスタンス、物理ライブラリ、物理テーブル アクセス パスを含む複数のサブテーブルに分割されます。

サブライブラリ: 電子商取引プロジェクトは、ユーザー データベース、注文データベースなどに分割されます。

テーブルの分割: 1 つの注文テーブルには数百万のデータが含まれており、MySQL の単一テーブルのボトルネックに達し、複数のデータベースの複数のテーブルに分割されます。

2. ロジックライブラリ

データベース エージェント内のデータベース。複数の論理テーブルを含めることができます。

mycat で定義されたテーブルは論理的には存在しますが、MySQL には物理的に存在せず、複数の MySQL データベースが一緒になって論理ライブラリを形成する可能性があります。

バックエンド上の実際の MySQL データベースへのマッピング

3. ロジックテーブル

データベース エージェント内のテーブルは、エージェントが接続するデータベース内の物理テーブルを 1 対 1 または 1 対多でマップできます。

4.物理ライブラリ

MySQL 実データベース

5.物理テーブル

MySQL 実データベースの実データ テーブル

6. 分割キー

シャーディング キー。論理テーブルを分割するためのデータ ルールを記述するフィールド

たとえば、注文テーブルは、それが属するユーザー ID に従って分割でき、ユーザー ID が分割キーになります。

7. プロトタイプライブラリ(プロトタイプ)

プロトタイプ ライブラリは、mysql ライブラリなど、mycat2 の背後にあるデータベースです。

プロトタイプ ライブラリは、データを格納する実際のデータベースです。プロトタイプ ライブラリは、データ ソースの構成時に指定する必要があります。

インストールと展開

1. 公式Webサイトからソースコードパッケージをダウンロードします。

コア ソース パッケージ jar パッケージ/2.0/1.22-release/ のインデックス (mycat.org.cn)

シェル zip パッケージ/2.0/install-template/ のインデックス (mycat.org.cn)

2. ソースコードパッケージの統合

zip パッケージを解凍し、解凍された zip パッケージの /mycat/lib ディレクトリに jar パッケージを置きます。

ここに画像の説明を挿入します

3. 統合された mycat ソース コード パッケージを Linux の /usr/local ディレクトリにアップロードします。

[root@mysqlrouter1 lib]# ls
libwrapper-aix-ppc-32.a       libwrapper-linux-x86-32.so             libwrapper-macosx-universal-64.jnilib  mycat2-1.22-release-jar-with-dependencies-2022-10-13.jar
libwrapper-aix-ppc-64.a       libwrapper-linux-x86-64.so             libwrapper-solaris-sparc-32.so         wrapper.jar
libwrapper-hpux-parisc-64.sl  libwrapper-macosx-ppc-32.jnilib        libwrapper-solaris-sparc-64.so         wrapper-windows-x86-32.dll
libwrapper-linux-ppc-64.so    libwrapper-macosx-universal-32.jnilib  libwrapper-solaris-x86-32.so           wrapper-windows-x86-64.dll

4. 起動エラーを防ぐためにファイルのアクセス許可を変更する

[root@mysqlrouter1 mycat]# cd bin/
[root@mysqlrouter1 bin]# ls
mycat               wrapper-aix-ppc-64      wrapper-linux-x86-32   wrapper-macosx-universal-32  wrapper-solaris-sparc-64    wrapper-windows-x86-64.exe
mycat.bat           wrapper-hpux-parisc-64  wrapper-linux-x86-64   wrapper-macosx-universal-64  wrapper-solaris-x86-32
wrapper-aix-ppc-32  wrapper-linux-ppc-64    wrapper-macosx-ppc-32  wrapper-solaris-sparc-32     wrapper-windows-x86-32.exe
[root@mysqlrouter1 bin]# chmod 777 mycat
[root@mysqlrouter1 bin]# chmod 777 wrapper-linux-x86-64 
[root@mysqlrouter1 bin]# chmod 777 wrapper-linux-x86-32 
[root@mysqlrouter1 bin]# chmod 777 wrapper-linux-ppc-64 

ここに画像の説明を挿入します

5. mycat に接続されている MySQL データベースに許可されたユーザーを追加します。

ユーザー名 mycat、パスワード 123456 でユーザーを作成し、権限を付与します。

root@(none) 01:14  mysql>create user 'mycat'@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

root@(none) 01:15  mysql>grant all on *.* to 'mycat'@'%';
Query OK, 0 rows affected (0.00 sec)

root@(none) 01:16  mysql>flush privileges;
Query OK, 0 rows affected (0.00 sec)

6. mycat プロトタイプの構成を変更する

Mycat2 のネイティブ mysql 環境構成。mycat2 は mysql サービスとしてデプロイされているため、mycat2 の操作は mysql の操作と同じです。

mycat を開始する前に、プロトタイプ データ ソースに対応する mysql データベース構成を確認し、URL 内の対応するユーザー ユーザー、パスワード、および IP を変更する必要があります。

[root@mysqlrouter1 datasources]# vim prototypeDs.datasource.json 

{
        "dbType":"mysql",
        "idleTimeout":60000,
        "initSqls":[],
        "initSqlsGetConnection":true,
        "instanceType":"READ_WRITE",
        "maxCon":1000,
        "maxConnectTimeout":3000,
        "maxRetryCount":5,
        "minCon":1,
        "name":"prototypeDs",
        "password":"123456",---连接本机mysql数据库的用户密码
        "type":"JDBC",
        "url":"jdbc:mysql://192.168.31.153:3306/mydb1?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",---指定mysql主机的ip地址端口号和数据库
        "user":"mycat", ---远程连接mysql数据库的用户
        "weight":0
}

7. リモート ユーザーへの接続をテストします。

[root@mysqlrouter1 datasources]# mysql -umycat -p'123456' -h 192.168.31.111
[root@mysqlrouter1 datasources]# mysql -umycat -p'123456' -h 192.168.31.153

8.mycatを起動する

[root@mysqlrouter1 bin]# pwd
/usr/local/mycat/bin
[root@mysqlrouter1 bin]# ./mycat start
Starting mycat2...

設定ファイル

1.サービス(サーバー)

サービス関連の設定(1) mycat/conf
ディレクトリ内のデフォルト設定で十分です

2. ユーザー

ユーザー関連情報の設定
(1) ディレクトリ
mycat/conf/users
(2) 命名方法
{username}.user.json
(3) 設定内容

vim mycat/conf/users/root.user.json
{
"ip":null,
"password":"123456",
"transactionType":"xa",
"username":"root",
"isolation":3
}

#フィールドの意味
#ip: ローカル mycat2 クライアントの IP にアクセスします。空にすることをお勧めします。入力後、クライアント IP は制限されます。ローカル マシンの任意の IP のみがログインできます。

ユーザー名: ユーザー名、デフォルトは root です

パスワード: パスワード、デフォルトは 123456

分離: 初期トランザクション分離レベルを設定します。

READ_UNCOMMITTED:1
READ_COMMITTED:2
REPEATED_READ:3、
シリアル化可能:4

transactionType: トランザクション タイプ

オプションの値:
プロキシ ローカル トランザクション。複数のデータベースが関与するトランザクションでは、コミット フェーズでの失敗が不整合につながりますが、
互換性
ストレージ ノード クラスタ タイプが XA をサポートしているかどうかを確認する必要があります

settransaction_policy = 'xa'
settransaction_policy = 'proxy'ステートメントを使用して切り替えます。 SELECT @@transaction_policy
ステートメントを使用してクエリできます。

3. データソース

Mycat 接続のデータ ソース情報を構成する

ディレクトリ

mycat/conf/データソース

命名方法

{データソース名}.datasource.json

設定内容

vim mycat/conf/datasources/ prototype. datasources.json
{
"dbType": "mysql",
"idleTimeout": 60000,
"initSqls": [],
"initSqlsGetConnection": true,
"instanceType": "READ_WRITE",
"maxCon": 1000,
"maxConnectTimeout": 3000,
"maxRetryCount": 5,
"minCon": 1,
"name": "prototype",
"password": "123456",
"type": "JDBC",
"url":
"jdbc:mysql://127.0.0.1:3306/mysql?useUnicode=true&serverTimezone=UTC",
"user": "root",
"weight": 0,
"queryTimeout":30,//mills
}

フィールドの意味

dbType: データベースの種類、mysql

name: データ ソース名。クラスターにデータ ソースを追加するときに使用されます。

パスワード: バックエンドの実データベースに接続するためのユーザーのパスワード

タイプ: データソースタイプ、デフォルトの JDBC

URL: アクセス データベース アドレス、IP + ポート + 特定のデータベース テーブル (無視することもできます)

idleTimeout: アイドル接続タイムアウト

initSqls: SQLを初期化します

initSqlsGetConnection: jdbc の場合、接続を取得するたびに initSqls を実行するかどうか

instanceType: インスタンスが読み取り専用か読み取り/書き込みかを構成します。

注: mycat2 では、クラスターにデータ ソース情報を追加するときに、データ ソースのinstanceType が読み取りおよび書き込みの場合、マスター ノードに設定すると読み取りと書き込みが可能になります。スレーブに設定すると読み取りのみ可能になります。しかし書かない。つまり、instanceType がどのように構成されていても、データ ソースがスレーブ ノードとして使用されている場合は、読み取りと書き込みのみが可能です。

オプションの値:
READ_WRITE、READ、WRITE
重み: 負荷分散の重み

接続関連の設定

「maxCon」: 1000、
「maxConnectTimeout」: 3000、
「maxRetryCount」: 5、
「minCon」: 1、

4. クラスター

クラスター情報の構成

ディレクトリ

mycat/conf/クラスター

命名方法

{クラスター名}.cluster.json

設定内容

vim mycat/conf/clusters/prototype.cluster.json
{
"clusterType":"MASTER_SLAVE",
"heartbeat":{
"heartbeatTimeout":1000,
"maxRetryCount":3,//2021-6-4前是maxRetry,后更正为
maxRetryCount
"minSwitchTimeInterval":300,
"slaveThreshold":0
},
"masters":[ //配置多个主节点,在主挂的时候会选一个检测存活的数据源作
为主节点
"prototypeDs"
],
"replicas":[//配置多个从节点
"xxxx"
],
"maxCon":200,
"name":"prototype",
"readBalanceType":"BALANCE_ALL",
"switchType":"SWITCH"
可选
//
,
"timer":{ //MySQL集群心跳周期,配置则开启集群心跳,Mycat主动检测主从延迟以
及高可用主从切换
"initialDelay": 30,
"period":5,
"timeUnit":"SECONDS"
},
//readBalanceName:"BALANCE_ALL",
//writeBalanceName:"BALANCE_ALL",
}

フィールドの意味

クラスタタイプ: クラスタタイプ

オプションの値:
SINGLE_NODE: シングルノード
MASTER_SLAVE: 共通マスター/スレーブ
GARELA_CLUSTER: garela クラスター/PXC クラスター
MHA: MHA クラスター
MGR: MGR クラスター

readBalanceType: クエリ負荷分散戦略

オプションの値:
BALANCE_ALL (デフォルト値)
クラスター内のすべてのデータ ソースを取得します。
BALANCE_ALL_READ
クラスター内で読み取りが許可されているデータ ソースを取得します。
BALANCE_READ_WRITE
クラスター内で読み取りおよび書き込みが許可されているデータ ソースを取得します。
BALANCE_NONEクラスター内で書き込みが許可されているデータ ソースを取得します。つまり、マスター ノードから選択します。

switchType: スイッチタイプ

オプションの値:
NOT_SWITCH: マスター/スレーブ切り替えを実行しません。
SWITCH: マスター/スレーブ切り替えを実行します。

4. 論理ライブラリテーブル(スキーマ)

論理ライブラリテーブルを構成してサブデータベースとサブテーブルを実装する

ディレクトリ

mycat/conf/スキーマ

命名方法

{ライブラリ名}.schema.json

設定内容

vim mycat/conf/schemas/mydb1.schema.json
#库配置
{
"schemaName": "mydb",
"targetName": "prototype"
}

schemaName: 論理ライブラリ名

targetName: 宛先データ ソースまたはクラスター

targetName は、テスト ライブラリの下の物理テーブルまたはビューをプロトタイプ ターゲットから単一のテーブルとして自動的にロードします。プロトタイプは
mysql サーバーである必要があります。

おすすめ

転載: blog.csdn.net/qq_57629230/article/details/130674662