はじめに
仕事でMariaDBのレプリケーションにGalera Clusterを使っています。使い方や、同期されてるかどうかの確認の方法はわかりますが、実際にどんな仕組みで差分を判定し、どんな仕組みで同期をしているかはわかっていません。
そこで公式ドキュメントを読んで理解してみましょう。
Technical Description — Galera Cluster Documentation
かなり物量が多いですね。いくつかピックアップして読んでみましょう。
DATABASE REPLICATION
Database Replication — Galera Cluster Documentation
Database replicationは、database serverである、あるノードから別のノードでデータを頻繁にコピーすることを意味します。すべてのノードが同じレベルの情報を共有する、分散データベースシステムとしてDatabase replicationを考えます。このシステムはよくdatabase clusterとして知られています。
webブラウザやcomputerアプリケーションのような、データベースクライアントはデータベースレプリケーションシステムが見えません。しかし、ネイティブのDBMSの振る舞いに近いことに恩恵を得ています。
MASTER AND SLAVE
多くのデーラベース管理システムはデータベースをレプリケーションします。
もっともよく使うレプリケーションは、オリジナルのデータセットとそのコピーの間の関係をmaster/slaveとして設定するものです。
このシステムでは、masterのデータベースサーバはデータが更新されたことと、ネットワークを通じてslaveにデータを増殖させたことをログに残します。slaveのデータベースサーバはmasterから更新の通知を受け取り、その変更を適用します。
別のレプリケーションは、すべてのノードにmasterの機能を持つmult-masterレプリケーションです。
multi-masterレプリケーションシステムでは、あなたはどのデータベースにも更新を書き込むことができます。これらの更新ははネットワークを通じてすべてのノードに伝搬されます。すべてのデータベースノードはマスターの機能を持つのです。これらには利用可能なログを残さず、システムは更新が成功したかどうかをあなたに示すこともありません。
ASYNCHRONOUS AND SYNCHRONOUS REPLICATION
他のノードへのデータ変更を行う方法に加えて、cluster間のデータ転送方法がいくつかあります。
- 同期レプリケーション
- "eager replication"というアプローチ。1つのトランザクション内で、すべてのノードの更新され、同期が完了する。言い換えると、transactionのコミットが発生した時、すべてのノードが同じ値を持つということです。
- 非同期レプリケーション
Advantages of Synchronous Replication
同期レプリケーションのほうが、いくつか利点を持ちます。
- 高可用性
- 性能改善
- クラスタ間の因果関係
Disadvantages of Synchronous Replication
eager replication protocolはノードに対して1つの操作を同時に行います。これらは2段階のコミットか、ロックを生じます。n個のノードで構成され、oのプロセスがtのトランザクションを行うとき、mのメッセージを受け取ります。その式は
m = n × o × t
これが意味することは、トランザクションのレスポンス時間と競合とデッドとっくが発生する確率が、ノードの数の増加に伴い指数的に増加するということです。
この理由から、非同期レプリケーションが、データベースの性能、スケーラビリティ、可用性という面でもっとも有効なレプリケーションプロトコルとされています。MySQLやPostgreSQLは非同期レプリケーションのみを採用していて、このようにオープンソースのdatabaseに広く適用されています。
SOLVING THE ISSUES IN SYNCHRONOUS REPLICATION
いくつか同期レプリケーションに対して問題を解決するアプローチがあります。ここ数年、研究者が同期レプリケーションに対する別の提案を行ってきました。
理論に加えて、いくつかのプロトタイプ実装が保証を示しました。これらの研究から重要な向上をいくつかもたらしました。
- Group Communication
- データベース間のコミュニケーションパターンを定義する高いレベルの抽象化です。レプリケーションの一貫性を保証します。
- Write-sets
- これは1つのwrite-setメッセージでデータベースの書き込みを束ねます。この実装は同時に1つのノード対する操作をする整合性を回避します。
- Database State Machine
- Tansaction Reordering
- データベースがコミットし、伝搬させる前に、transactionを並べ替えます。この実装は証明テストをpassしたトランザクション数を増加させます。(?)
Galera Clusterが使っている証明ベースのレプリケーションシステムにはこれらのアプローチが組み込まれています。
おわりに
結構時間がかかってしまったのでこのへんで。データベースのレプリケーションに関する一般的な用語や方法を整理したドキュメントですね。同期レプリケーションの優れている点と劣っている点を記載し、mysql(mariadb)では非同期レプリケーションが使われていることがわかりました。また、劣っている点は後半であげた技術によってカバーされていることもわかりました。
全部はやらないと思いますが、あと数回続くと思います!