MySQL Galera Cluster 4.0は、非常に興味深い新機能を備えたデータベースブロックの新しい子供です。現在、MariaDB 10.4の一部としてのみ利用可能ですが、将来的にはMySQL 5.6、5.7、および8.0でも機能するようになります。このブログ投稿では、GaleraCluster4.0に付属するいくつかの新機能について説明します。
このリリースの最も重要な新機能は、ストリーミングレプリケーションです。これまでのところ、Galera Clusterの認証プロセスは、トランザクション全体が完了後に認証される必要がある方法で機能していました。
- テーブル内のホットスポット、複数のノードで非常に頻繁に更新される行 -複数のノードで実行されている何百もの高速トランザクション。同じ行セットを変更すると、頻繁にデッドロックが発生し、トランザクションがロールバックされます。
- 長時間実行されるトランザクション -トランザクションの完了にかなりの時間がかかる場合、これにより、他のトランザクションが、その間に別のノードで、長いトランザクションによって更新された行の一部を変更する可能性が大幅に高まります。その結果、認証中にデッドロックが発生し、トランザクションの1つをロールバックする必要がありました。
- 大規模なトランザクション -トランザクションがかなりの数の行を変更する場合、同時に別のノード上の別のトランザクションが、大規模なトランザクションによってすでに変更されている行の1つを変更する可能性があります。これにより、認証中にデッドロックが発生し、トランザクションの1つをロールバックする必要があります。これに加えて、大規模なトランザクションは、処理され、クラスター内のすべてのノードに送信され、認証されるまでにさらに時間がかかります。これは、コミットに遅延を追加し、クラスター全体の速度を低下させるため、理想的な状況ではありません。
幸いなことに、ストリーミングレプリケーションはこれらの問題を解決できます。主な違いは、認証がチャンクで行われ、トランザクション全体が完了するのを待つ必要がないことです。その結果、トランザクションが大規模または長期であっても、行の大部分(または、後で説明する設定によってはすべて)がすべてのノードでロックされ、他のクエリがそれらを変更できないようにします。
MySQLGaleraクラスターストリーミングレプリケーションオプション
ストリーミングレプリケーションには、次の2つの構成オプションがあります。
wsrep_trx_fragment_size
これは、フラグメントの大きさを示します(デフォルトでは、0に設定されています。これは、ストリーミングレプリケーションが無効になっていることを意味します)
wsrep_trx_fragment_unit
これは、フラグメントが実際に何であるかを示します。デフォルトではバイトですが、「ステートメント」または「行」にすることもできます。
これらの変数はセッションレベルで設定できます(設定する必要があります)。これにより、ユーザーはストリーミングレプリケーションを使用してレプリケートする特定のクエリを決定できます。単位を「ステートメント」に設定し、サイズを1に設定すると、たとえば、ホットスポットを更新する単一のクエリに対してのみストリーミングレプリケーションを使用できます。
変更したすべての行を認証し、その間にすべてのノードのロックを取得するようにGalera4.0を構成できます。これにより、ストリーミングレプリケーションは、Galera 4.0より前は、すべての書き込みを単一のノードにリダイレクトすることによってのみ解決できた、頻繁なデッドロックの問題を解決するのに最適です。
WSREPテーブル
Galera 4.0には、クラスターの状態を監視するのに役立ついくつかのテーブルが導入されています。
- wsrep_cluster
- wsrep_cluster_members
- wsrep_streaming_log
ストリーミングレプリケーションのおかげで、XAトランザクションのサポートが可能になります。つまり、XAトランザクションは、複数のノードにまたがって実行できる分散トランザクションです。 2フェーズコミットを利用します。これは、最初にすべてのノードでトランザクションを実行するために必要なすべてのロックを取得し、それが完了したら、変更をコミットする必要があります。以前のバージョンでは、Galeraにはリモートノード上のリソースをロックする手段がありませんでしたが、ストリーミングレプリケーションではこれが変更されました。
Gcacheは、書き込みセットを格納するファイルです。その内容は、データ転送を要求するジョイナーノードに送信されます。すべてのデータがgcacheに格納されている場合、joinerは、Incremental State Transfer(IST)と呼ばれるプロセスで欠落しているトランザクションのみを受け取ります。 gcacheに必要なすべてのデータが含まれていない場合は、状態スナップショット転送(SST)が必要になり、データセット全体を参加ノードに転送する必要があります。
Gcacheには最近の変更に関する情報が含まれているため、セキュリティを強化するために内容が暗号化されているのを確認できます。ますます多くの規制を通じてより優れたセキュリティ標準が導入されているため、ソフトウェアがコンプライアンスを達成する上でより優れたものになることが重要です。
GaleraCluster4.0がMariaDBよりもデータベースでどのように機能するかを楽しみにしています。ガレラクラスターでMySQL5.7または8.0をデプロイできることは本当に素晴らしいことです。結局のところ、Galeraは、市場で入手可能な最も広くテストされた同期レプリケーションソリューションの1つです。