web-dev-qa-db-ja.com

データベースサーバーのクラスターをDockerコンテナーで実行することには意味がありますか?

現在、データベースクラスター(MySQL GaleraまたはPercona)のセットアップを検討していますが、マシンは2つしかありません。

ただし、私が読んだ多くの情報源(これはMariadb KBの article )によると、スプリットブレイン状態を回避するために、クラスターの最小ノードサイズは3にする必要があります。

スプリットブレイン状態を回避するために、クラスター内の推奨されるノードの最小数は 。状態転送のブロックは、最低限必要なもう1つの理由です。  メンバーの1つが失敗し、再起動する必要がある場合にサービスの可用性を享受するためのノード。 2人のメンバーが状態の転送に従事している間、残りのメンバーはクライアントの要求に応え続けることができます。

したがって、両方のマシンでデータベースサーバーを実行している3つ(またはそれ以上)のドッカーコンテナーを実行できるかどうか疑問に思っています。マシンの1つに障害が発生しても、クラスターにはまだ3つのノードがあるため、スプリットブレインの問題はありません。

浮気のようですが、やらない理由は考えられません。

この設定は意味がありますか?

5
patatepartie

Galera(MySQL、Percona XtraDBクラスターまたはMariaDBクラスターの場合、基本的には同じですが、ベンダーやベースmysqlのバージョンが異なります)は2台のマシンで完全に機能し、標準のMySQLレプリケーションを置き換えるための非常に一般的な設定です。

3つのノードを必要とすることはGaleraの要件ではありませんが、可用性よりもデータの一貫性を重視するすべてのクラスターで必要です。言い換えると、ネットワークパーティションの影響を受けているノードが1つだけの場合に可用性とデータの整合性を提供します(クラスターで " split brain "が発生します)。奇数のノードが必要で、1つのノードはクラスターではありません:-)。あなたはおそらくそれを知っていましたが、私はこの答えを読んでいる人のためにこれを明確にしたかったのです。

3つのノードを持つ唯一の理由がノード障害/ネットワーク障害の場合の可用性のためであることを考えると、ネットワーク分割保護で2ノードのクラスターをセットアップするための推奨される方法は、 Galera Arbitratorこれは基本的にMySQLノードのエミュレーションですが、ローカルデータを保存していません。ネットワーク遅延の問題がある場合でもクラスターのパフォーマンスに影響を与える可能性があるため、注意が必要ですが、どこにでもインストールできます。

同じ物理ノードで複数のインスタンスを実行しても意味がありません(Dockerは必要ありませんが、ローカル構成を変更するだけで実行できます)。まるで2台のマシンでしか実行できない場合は、自動シャットダウンを無効にする方がよいでしょう。いずれかのノードで、フェイルオーバーを手動で管理します。 3つの制限は、データの一貫性のためだけのものであり、物理的なものや、特定の数のノードを必要とするプロトコルにはありません。

詳細は 公式ドキュメント で読むことができます。

4
jynus