web-dev-qa-db-ja.com

MariaDBマルチマスタークラスターで2/3ノードの障害を処理する方法。

3ノードのマルチマスターMariaDBガレラクラスターを実行します。それは基本的に私にとってそれがどのように機能するかです。 1つのノードに障害が発生すると、他の2つのノードが機能し、問題はありません。

しかし、1つのノードで動作し続ける方法はあるのでしょうか。 (それは本当にありそうもないですが、私はただ疑問に思います)スプリットブレインを防ぐためのクォーラムがないとクラスターが失敗することを私は知っています。また、1つのノードが残っていると、クラスターがオフになることも知っています。これは、dbへのすべての接続/クエリが失われることを意味します。

シングルノードモードのままになっているマスターを切り替えて動作させ、障害に気づいたら(dbに接続するアプリを停止する)、他のクラスターノードを元に戻してデータを複製させる方法があるのだろうか? (何も失われないように)

仮想クォーラムと呼ばれるものがあることは知っていますが、3マスターノードの状況ではそれが良い選択でしょうか?

2
piotrektt

はい、できます。ノードが1つある場合、スプリットブレインを防ぐために読み取り専用になります。スプリットブレインプロテクションを無効にすることでこれを防ぐことができます(pc.ignore_sb);ただし、そうすることは、2つのノードを持つネットワークブリップがある場合、2つの異なるサーバーでスプリットブレインのリスクがあることを意味します。

個人的に、私は決してそれをしません....それはクレイジーです。フルスタックのガレラサーバーは必要ないが、クォーラムを失うリスクを減らしたい場合は、 garbd を使用して別のノードを実装するだけです。

これに対する簡単な解決策は "rule of 3" です。データセンターの可用性が必要な場合は、同じ数のノードを持つ3つのデータセンターが必要です。 1つのデータセンターに障害が発生した場合でも、クォーラムは維持されます。つまり、クラスターはオンラインのままです。別の見方をすれば、停止によってノードの50%以上がクォーラムを失う可能性がある場合、クラスターはダウンしています。

1
user101130