MyCat をベースにした MySQL 分散クラスタの構築

MyCat をベースにした MySQL 分散クラスタの構築

MyCatとは

MyCat は、オープンソースの分散データベース ミドルウェアであり、MySQL プロトコルを実装するサーバーです。フロントエンド ユーザーはこれをデータベース プロキシと見なし、MySQL クライアント ツールとコマンド ラインを使用してアクセスできます。一方、バックエンドは、MySQL ネイティブ プロトコルを使用して複数の MySQL サーバーと通信したり、JDBC プロトコルを使用してほとんどの主流のデータベース サーバーと通信したりできます。その中核機能はテーブルとデータベースのシャーディング、つまり大きなテーブルを N 個の小さなテーブルに水平に分割し、バックエンドの MySQL サーバーまたは他のデータベースに保存することです。

MyCat は、テーブルのシャーディング ルールを定義することでシャーディングを実装します。各テーブルはシャーディング ルールにバインドできます。各シャーディング ルールはシャーディング フィールドを指定し、動的なシャーディング アルゴリズムを実装する関数にバインドされます。

  1. スキーマ: MySQL のデータベースに対応する論理ライブラリ。論理ライブラリは、含まれるテーブルを定義します。
  2. テーブル: 論理テーブルは物理データベースに保存されるテーブルです。従来のデータベースとは異なり、ここでのテーブルでは、それが保存される論理データ ノード DataNode を宣言する必要があります。ここで、テーブルのシャーディング ルールを指定できます。
  3. DataNode: MyCat の論理データ ノードは、テーブルを格納する特定の物理ノードであり、シャード ノードとも呼ばれます。これは、DataSource を通じてバックエンドの特定のデータベースに関連付けられます。
  4. DataSource: データノードにバインドするために使用される物理ライブラリのアクセス アドレスを定義します。
  5. シャーディング ルール: データのセグメンテーションについては以前に説明しました。大きなテーブルは複数のシャード テーブルに分割され、特定のルールが必要になります。特定のビジネス ルールに従ってデータを特定のシャードに分割するルールがシャーディング ルールです。データのセグメント化には適切なシャーディング ルールを選択することが非常に重要であり、これにより、後続のデータ処理の困難が大幅に回避されます。

MySQL 分散クラスタ アーキテクチャのテスト

このテスト環境に導入されたクラスター アーキテクチャは、MyCat 1.6.5 (2 ノード) + MySQL 8.0.11 (5 ノード) です。

MySQLノードのインストールと構成

まず、5 つのデータベース ノードに MySQL 8.0.11 をインストールします。公式の MySQL ドキュメントを参照してください。 8.0.11 のインストールは基本的に 5.7 と同じです。 MySQL ソフトウェアをインストールすると、各 MySQL データベースが szabm というデータベース名で作成されます。スペースの制限により、MySQL のインストールと構成のプロセスはここでは省略します。

ただし、従来の方法でデータベースをインストールした後、最も重要な構成は大文字と小文字を区別しないことを意味する「lower_case_table_names=1」であることに注意してください。このパラメータが設定されていない場合、大文字と小文字の問題によりテーブルが見つからない可能性があります。

Javaをインストールする

1. ソフトウェアをダウンロードする

Java 公式 Web サイトから Java バイナリ パッケージをダウンロードします。今回ダウンロードしたバージョンはjdk-8u152-linux-x64.tar.gzです。

注意: JDK7 以上が必要です。

2. ソフトウェアを解凍する

tar コマンドを使用して、アップロードされたバイナリ ソフトウェア パッケージを解凍します。管理を容易にするために、Java ソフト リンクを作成します。

  1. tar -xzvf jdk-8u152-linux-x64.tar.gz  
  2. ln -s jdk1.8.0_152 ジャワ

3. Java環境変数を設定する

実際の Java インストール ディレクトリを参照して、環境変数を構成します。以下は参考情報です。

  1. JAVA_HOME =/gpdb/javaをエクスポートします  
  2. エクスポートPATH =$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH  
  3. エクスポートCLASSPATH =.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CLASSPATH

MySQLクライアントをインストールする

1. ソフトウェアをダウンロードする

MySQL の公式 Web サイトからバイナリ パッケージ ソフトウェアをダウンロードします。バックエンドは MySQL データベースを展開する必要があるため、クライアントとして使用するためにサーバーが直接ダウンロードされます。このダウンロードは、mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz です。

2. ソフトウェアを解凍する

tar コマンドを使用して、アップロードされた MySQL バイナリ パッケージを解凍します。管理を容易にするために、MySQL のソフト リンクが作成されます。

  1. tar -xzvf mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz  
  2. ln -s mysql-8.0.11-linux-glibc2.12-x86_64 mysql

3. MySQL環境変数を設定する

MySQL クライアント環境変数の場合、bin ディレクトリ パスを構成するだけで済みます。

PATH=$PATH:$/gpdb/mysql/bin をエクスポートします

MyCat ソフトウェアのインストール

1. ソフトウェアをダウンロードする

MyCat の公式 Web サイトから MyCat ソフトウェアをダウンロードします。今回は、かなり前にダウンロードしたMyCat 1.6.5バージョンを使用しました。

2. ソフトウェアを解凍する

ソフトウェアを解凍するには、tar コマンドを使用します。解凍後、現在のディレクトリに MyCat ディレクトリが直接生成されます。

tar -xzvf MyCat-server-1.6.5-リリース-20180122220033-linux.tar.gz

3. 環境変数を設定する

MyCat を実行するには、MYCAT_HOME 環境変数と bin ディレクトリを構成する必要があります。

  1. MYCAT_HOME =/gpdb/MyCatをエクスポートします 
  2. エクスポートPATH =$PATH:$MYCAT_HOME/bin

4. MyCatを起動する

1) MyCatを起動する

MyCat サービスを開始するには、MyCat start コマンドを使用します。 MyCat のデフォルトのサービス ポートは 8066 で、管理ポートは 9066 です。

MyCatスタート

実行が完了したら、$MYCAT_HOME ディレクトリの下の logs ディレクトリにある wrapper.log ログ ファイルを確認します。起動が成功した場合のプロンプトは次のとおりです。

  1. ステータス |ラッパー | 2018/07/02 18:20:04 | JVM を起動しています...  
  2. 情報 | jvm1 | 日本語2018/07/02 18:20:04 |ラッパー (バージョン 3.2.3) http://wrapper.tanukisoftware.org  
  3. 情報 | jvm1 | 日本語2018/07/02 18:20:04 | Copyright 1999-2006 Tanuki Software, Inc. 無断複写・転載を禁じます。  
  4. 情報 | jvm1 | 日本語2018/07/02 18:20:04 |  
  5. 情報 | jvm1 | 日本語2018/07/02 18:20:06 | log4j:WARN ロガー (io.MyCat.memory.MyCatMemory) のアペンダーが見つかりませんでした。  
  6. 情報 | jvm1 | 日本語2018/07/02 18:20:06 | log4j:WARN log4j システムを適切に初期化してください。  
  7. 情報 | jvm1 | 日本語2018/07/02 18:20:06 | log4j:WARN 詳細については、http://logging.apache.org/log4j/1.2/faq.html#noconfig を参照してください。  
  8. 情報 | jvm1 | 日本語2018/07/02 18:20:10 | MyCat Serverが正常に起動しました。 logs/MyCat.log のログを参照してください

2) 起動時に発生した問題

このテストでは、MyCat が起動に失敗し、メモリ パラメータに問題があることが示されました。したがって、$MYCAT_HOME/conf ディレクトリに移動し、wrapper.conf ファイルを見つけて、メモリ関連のパラメータを見つけます。

  1. 2018-06-29 14:53:02.257 INFO [WrapperSimpleAppMain] (io.MyCat.MyCatServer.startup(MyCatServer.java:329)) - 起動プロセッサ...、プロセッサ合計数: 32、AIO スレッド プール サイズ: 64
  2. 各プロセスはソケット バッファ プール バイトを割り当てました。ページ サイズ:2097152 ページのチャンク数 (PageSize/ChunkSize) は 512 です。バッファ ページ数は 640 です。
  3.   2018-06-29 14:53:02.257 INFO [WrapperSimpleAppMain] (io.MyCat.MyCatServer.startup(MyCatServer.java:330)) - sysconfig パラメータ:SystemConfig [ processorBufferLocalPercent = 100 frontSocketSoRcvbuf = 1048576 frontSocketSoSndbuf = 4194304 backSocketSoRcvbuf = 4194304 backSocketSoSndbuf = 1048576 frontSocketNoDelay = 1 backSocketNoDelay = 1 maxStringLiteralLength = 65535 frontWriteQueueSize = 2048 bindIp = 0.0.0.0 serverPort = 8066 managerPort = 9066 charset = utf8 プロセッサ= 32 プロセッサExecutor = 64 タイマーExecutor = 2 マネージャExecutor = 2 アイドルタイムアウト= 1800000 catletClassCheckSeconds = 60 sqlExecuteTimeout = 300 プロセッサチェック期間= 1000 データノードIdleCheckPeriod = 300000 データノードHeartbeatPeriod = 10000 クラスタHeartbeatUser = _HEARTBEAT_USER_ クラスタHeartbeatPass = _HEARTBEAT_PASS_ クラスタHeartbeatPeriod = 5000 クラスタHeartbeatTimeout = 10000 クラスタHeartbeatRetry = 10 txIsolation = 3 パーサーコメントバージョン= 50148 sqlRecordCount = 10 bufferPoolPageSize = 2097152 bufferPoolChunkSize = 4096 bufferPoolPageNumber = 640 maxResultSet = 524288 bigResultSizeSqlCount = 10 bufferUsagePercent = 80 flowControlRejectStrategy = 0 clearBigSqLResultSetMapMs = 600000 defaultMaxLimit = 100 sequnceHandlerType = 2 sqlInterceptor = io .MyCat.server.interceptor.impl.DefaultSqlInterceptor、 sqlInterceptorType = select sqlInterceptorFile =/gpdb/MyCat/logs/sql.txt、 mutiNodeLimitType = 0 mutiNodePatchSize = 100 defaultSqlParser = druidparser usingAIO = 0 packetHeaderSize = 4 maxPacketSize = 16777216 MyCatNodeId = 1 ]
  4.   2018-06-29 14:53:03.319 エラー [WrapperSimpleAppMain] (io.MyCat.MyCatStartup.main(MyCatStartup.java:62)) - 2018-06-29 14:53:03 起動エラー
  5.   java.lang.NumberFormatException: サイズは、バイト (b)、キビバイト (k)、メビバイト (m)、ギビバイト (g)、テビバイト (t)、またはペビバイト (p) として指定する必要があります。例: 50b、100k、または 250m。
  6.  バイト文字列の解析に失敗しました: -375809638B
  7.   io.MyCat.memory.unsafe.utils.JavaUtils.byteStringAs(JavaUtils.java:223) で ~[MyCat-server-1.6.5-release.jar:?]

関連ドキュメントを参照し、メモリパラメータを何度も試した後、最終的に次の 2 つのパラメータを有効にしてサービスを正常に開始できました。

  1. # 初期 Java ヒープ サイズ (MB)  
  2. wrapper.java.initmemory = 16    
  3. # 最大 Java ヒープ サイズ (MB)  
  4. wrapper.java.maxmemory = 4096  

MyCatプロフィール

1. MyCat設定ファイルの説明

すべての MyCat 構成ファイルは $MYCAT_HOME/conf ディレクトリに保存され、主に 3 つのファイルで構成され、すべて XML 形式で記述されています。

  • server.xml: MyCat サーバーのパラメータ調整とユーザー認証用の構成ファイル。
  • schema.xml: 論理ライブラリ定義、テーブルおよびシャード定義の構成ファイルです。
  • rule.xml: シャーディング ルールの構成ファイルです。シャーディング ルールの特定のパラメータ情報は、ファイルとして個別に保存されます。

注意: 設定ファイルが変更された場合は、MyCat を再起動するか、ポート 9066 経由で再ロードする必要があります。

2. MyCat 設定ファイルのアーキテクチャ

MyCat プロフィールの変更

1. MyCatポートを変更する

MyCat のデフォルトのサービス ポートは 8066 です。MySQL でよく使用されるポートとの一貫性を保つために、このテストではポートが 3306 に変更されました。この構成セクションは server.xml 構成ファイルでコメント アウトされているため、ポート番号をどのように変更しても、コメントを削除しない限り変更は有効にならないことに特に注意してください。このテストでは、サービス ポート番号が直接コピーされ、新しい行が追加されます。

  1. <!--  
  2. <プロパティ 名前= "serverPort" > 3306 </プロパティ>   <プロパティ 名前= "managerPort" > 9066 </プロパティ>     
  3. <プロパティ 名前= "idleTimeout" > 300000 </プロパティ>   <プロパティ 名前= "bindIp" > 0.0.0.0 </プロパティ>     
  4. <プロパティ 名前= "frontWriteQueueSize" > 4​​096 </プロパティ>   <プロパティ  name = "プロセッサ" > 32 </プロパティ> -- >  

今回は、server.xml ファイルに新しい行のパラメータ設定が追加されます。

  1. <プロパティ 名前= "serverPort" > 3306 </プロパティ>   <プロパティ 名前= "managerPort" > 9066 </プロパティ>  

2. MyCatユーザーを追加する

MyCat にログインするユーザーは、server.xml 構成ファイルの最後に保存されます。最善の方法は、ユーザーを直接コピーしてから、関連する変更を加えることです。

参考文献は以下の通りです。

  1. <ユーザー 名前= "テスト" >    
  2. <プロパティ 名前= "パスワード" > 123456 </プロパティ>    
  3. <プロパティ  name = "schemas" > szabm </ property >    
  4. <プロパティ 名前= "readOnly" > false </プロパティ>    
  5. </ユーザー>  

今回は、パスワード「123456」を持つtestという名前の新しいユーザーが追加されます。アクセスできるデータベースは、読み取りおよび書き込み権限を持つ「szabm」です。ここでユーザーがアクセスするデータベースは、schema.xml ファイルで設定する必要があります。

3. MyCatデータベースを追加する

MyCat のデータベースは一般に論理データベースと呼ばれ、バックエンドの MySQL データベースの実際の名前と一貫性を保つことが推奨されます。 server.xml ユーザーによって構成された論理データベースは、schema.xml 内の論理データベースと一致している必要があります。 MyCat を起動すると、自動的にチェックが行われ、一貫性が保たれている必要があります。

このテストでは、schema.xml に szabm 論理データベースが構成されており、これには 4 つのテスト テーブル (abm_acct_balance、abm_counter、abm_realtime_fee、abm_resource_present) が含まれており、テーブル名はバックエンド MySQL データベースの実際のテーブル名と一致している必要があります。各テーブルは 5 つのデータ ノード (ceph3、ceph4、ceph5、ceph6、ceph7) に保存され、各テーブルには 1 つのシャーディング ルールがあります。

  1. <スキーマ 名前= "szabm7"   checkSQLschema = "false"   sqlMaxLimit = "100" >    
  2. <!-- ID による自動シャーディング (long) -->    
  3. < 名前= "abm_acct_balance"  データノード= "ceph3、ceph4、ceph5、ceph6、ceph7"   ルール= "abm_acct_balance-rule"   />    
  4. < 名前= "abm_counter"  データノード= "ceph3、ceph4、ceph5、ceph6、ceph7"  ルール= "abm_counter_rule"   />    
  5. < 名前= "abm_realtime_fee"  データノード= "ceph3、ceph4、ceph5、ceph6、ceph7"  ルール= "abm_realtime_fee_rule"   />    
  6. < 名前= "abm_resource_present"  データノード= "ceph3、ceph4、ceph5、ceph6、ceph7"  ルール= "abm_resource_present_rule"   />    
  7. </スキーマ>  

4. MyCatデータノードを追加する

MyCat のデータ ノードは論理データ ストレージ ノードであり、テーブルとデータ ノードの間には 1 対多の関係があります。各論理ノードはバックエンドの論理ホストと実際のデータベースに対応しており、つまり、論理ノード、論理ホスト、および実際のデータベースの間には 1 対 1 の対応があります。データベース名は同じで、バックエンド MySQL データベースの実際のデータベース名です。

このテストの参照ノードは次のとおりです。

  1. <データノード 名前= "ceph3"  データホスト= "ceph3db"  データベース= "szabm"   />    
  2. <データノード 名前= "ceph4"  データホスト= "ceph4db"  データベース= "szabm"   />    
  3. <データノード 名前= "ceph5"  データホスト= "ceph5db"  データベース= "szabm"   />    
  4. <データノード 名前= "ceph6"  データホスト= "ceph6db"  データベース= "szabm"   />    
  5. <データノード 名前= "ceph7"  データホスト= "ceph7db"  データベース= "szabm"   />  

今回は、5 つの論理ホストに対応する 5 つの論理データ ノードと、同じバックエンド データベース szabm7 が構成されます。

5. MyCatシャーディングルールを追加する

MyCat のシャーディング ルールは、テーブルが異なるノードにデータを格納するために使用するアルゴリズム ルールを示します。 MySQL は現在、さまざまなシャーディング ルールをサポートしています。このシャーディング ルールでは、最も単純なモジュロ剰余を使用します。

  1. <テーブルルール 名前= "abm_acct_balance-rule" >    
  2. <ルール>    
  3. <> ACCT_BALANCE_ID </>    
  4. <アルゴリズム> mod-long_abm </アルゴリズム>    
  5. </ルール>    
  6. </テーブルルール>    
  7. <テーブルルール 名前= "abm_counter_rule" >    
  8. <ルール>    
  9. <> COUNTER_ID </>    
  10. <アルゴリズム> mod-long_abm </アルゴリズム>    
  11. </ルール>    
  12. </テーブルルール>  
  13. <テーブルルール 名前= "abm_realtime_fee_rule" >  
  14. <ルール>    
  15. <columns>サブシッド</columns>    
  16. <アルゴリズム> mod-long_abm </アルゴリズム>    
  17. </ルール>    
  18. </テーブルルール>    
  19. <テーブルルール 名前= "abm_resource_present_rule" >    
  20. <ルール>    
  21. <>リソース ID </>    
  22. <アルゴリズム> mod-long_abm </アルゴリズム>    
  23. </ルール>    
  24. </テーブルルール>    
  25. <機能 名前= "mod-long_abm"  クラス= "io.MyCat.route.function.PartitionByMod" >    
  26. <!-- データノードの数 -->    
  27. <プロパティ 名前= "count" > 5 </プロパティ>    
  28. </関数>  

MyCat サービス検証

1. MyCatサービスのポートステータスを確認する

MySQL クライアントを使用してログインして検証する前に、まず MyCat サービス ポートと管理ポートが存在するかどうかを確認できます。

参照コマンドは次のとおりです。

  1. netstat -an | grep 8066  
  2. netstat -an | grep 9066

2. MySQLクライアントを使用してMyCatサービスに接続する

MySQL クライアントを使用して MyCat サービスに接続できます。特にポート番号は 8066 です。

参照コマンドは次のとおりです。

  1. mysql -ユーザー -puser -h127.0.0.1 -P8066

<<:  約10億!大型スマートシティ契約を連続で獲得、ファーウェイクラウドが政府関係市場をリード

>>:  商用 IoT 導入におけるエッジ コンピューティングの役割

推薦する

2018年はブランドマーケティングを再認識しましょう!

「企業ブランドマーケティングと国家ブランドマーケティングは、一見異なる概念のように見えますが、実際に...

実体験:ウェブサイト開設から2ヶ月以内にPRが2に上昇

みなさんこんにちは。春節が終わった直後、Google は私たちに素敵な贈り物をくれました。Googl...

クラウドコンピューティングとは何ですか?今知っておくべきことすべて

クラウド コンピューティングは、コンピューティング、ストレージ、ネットワーク インフラストラクチャを...

クラウドネイティブがエンタープライズセキュリティに革命を起こす3つの理由

概要:クラウド ネイティブ セキュリティは本当に違うのでしょうか?それは必須ですか?私の答えは「はい...

APPプロモーションチャンネルでの不正行為の方法、APPプロモーションでの不正行為を防ぐ方法は?

APPプロモーションチャネルでは不正行為が頻繁に発生します。今日は、APPプロモーションの不正行為防...

外部リンク構築における9つの主な問題

ウェブマスターは通常、自分のウェブサイトのランキングをチェックします。ランキング上位のウェブサイトへ...

Pod 内のコンテナをリモートでデバッグする方法 (補足記事)

みなさんこんにちは。私は次男です。この記事は以前にも投稿されていますが、ネットユーザーからの質問に答...

Douban FM: 無料ユーザーから広告料を稼ぎ、「気取った」ユーザーには料金を請求

Douban FMの有料版が最近リリースされ、月額10元で、ユーザー課金モデルの模索が正式に始まった...

aoyoyun (Maxthon Host) ロサンゼルス CU2-China Unicom VIP 回線 VPS、ハイエンド AS9929+AS4809 回線の簡単なレビュー

11年間運営してきた老舗のVPSベンダーであるAoyoyunは、3月にロサンゼルスのデータセンターで...

操作を行うには、データを見るだけでは不十分です

EC業界では、運営者としてPVやUVなどのデータを毎日監視し、レポートを毎日記入することが必須です。...

オープンソースのクラウドネイティブアプリケーション管理プラットフォーム - Rainbond

Rainbond は、使いやすく、コンテナ、Kubernetes、および基盤となる複雑なテクノロジー...

ugvps ブラックフライデーセール $4.99 2G RAM 100M 帯域幅 無制限トラフィック

ugvps ブラックフライデーセール 月額 4.99 ドル、2G メモリ、100M サーバー帯域幅、...

新しい CN ドメイン名ポリシーがドメイン名登録者に与える影響

今月28日、CNNICは新しいドメイン名政策である「中国インターネットネットワーク情報センタードメイ...

最新の Baidu 検索エンジン インデックス標準を公開 (パート 1)

この記事では、Baidu 検索エンジンがウェブサイトを組み込むための基準、ウェブサイトを組み込む際の...

キーワードクリックランキングと検索エンジンについて話す

最近では、多くの人がキーワードを検索し、自分のウェブサイトをクリックしてキーワードランキングを行って...