Skip to content

Instantly share code, notes, and snippets.

@shoito
Last active August 31, 2018 10:05
Show Gist options
  • Save shoito/0ef4791e149e2c97f54b5aaa876212e1 to your computer and use it in GitHub Desktop.
Save shoito/0ef4791e149e2c97f54b5aaa876212e1 to your computer and use it in GitHub Desktop.
Galera ClusterのGCacheについてのメモ書き

GCacheについて、サービス開発・運用する人誰もが知っとくべき情報

https://www.percona.com/blog/2016/11/16/all-you-need-to-know-about-gcache-galera-cache/

gcacheは「キャッシュ」と名前だが、「メモリ」とは無関係のもの。 データ構造としてはリングバッファ。

クラスタ内のノードがダウンしてしまった場合、ノードが復旧しクラスタに再加入した際のデータの差分を埋めるための方法として、Galeraは以下の2つの方法がある。

3ノード構成のクラスタで、以下の状態を想定して説明

  • ノードA, B: 稼働中のノード(プライマリ)
  • ノードC: ダウンしたノード

2つの方法

  1. IST (Incremental State Transfer) ダウン時のノードCのデータと、現在のノードA, B間のデータとの間の差分のみを埋める (増分バックアップのようなイメージ)

  2. SST (State Snapshot Transfer) ノードA, Bから、現在のデータ全体を受け取り、ノードCのデータにインポートする (全体バックアップのようなイメージ)

上記の中で、「ノードA, B間のデータとの間の差分」を記録するための領域がgcache。

このキャッシュ領域は、メモリではなくディスク上のファイルとしてMariaDBのインスタンス起動時に作成される。

(gcache.size=10Gであれば、10GBのgalera.cacheファイルが作成される)

gcacheは、各ノードに1つずつ存在し、実行されたトランザクションが順番に記録される。

そして、ノードダウンが発生し、ノードが復旧した時に、このgcache内を確認し、ダウン時のトランザクションから、現在のトランザクションまでの全てgcache内に記録されている場合、ISTが選択・実行される。 それ以外の場合は、SSTが選択・実行される。

そのため、gcacheのサイズが大きければノード復旧時にIST(増分バックアップ)が適用される可能性が大きくなる。 gcacheの記録処理自体はそれ程負荷にはならないため、パフォーマンスへの影響は少ない。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment