Docker Swarm のマネージャーノードはいくつが良いのか
Docker Engine が標準的に提供するオーケストラレーションツールである Docker Swarm について、マネージャーノードはいくつが良いのかが分からなかったので、簡単に調べました。それについてちょっとだけまとめておきます。基本的に語っていることは公式のドキュメントと大差ありませんので、より詳細で正確な情報を知りたい場合は、公式ドキュメントをご確認ください。
この投稿で言う「Docker Swarm」は、Docker Engine に標準的に組み込まれている Swarm mode を指しています。
Docker Swarm のマネージャーノードは Raft コンセンサスアルゴリズム(分散合意アルゴリズム)によって状態管理が行われます。通常、このアルゴリズムについて詳しく理解する必要はありませんが、概要を理解することでマネージャーノードの数を決定する役に立ちます。
マネージャーノードの数とパフォーマンス
Docker Swarm でクラスターに追加できるマネージャーノード数には、制限がなく、追加しようと思えばいくらでも追加することができます。基本的な考え方として、マネージャーノードの数が多ければ多いほど、障害耐性が強くなります。しかし、ほとんどの場合でマネージャーノードの増加はパフォーマンスの悪化を引き起こします。これは単純にノードの追加・削除といった処理を多数のノードで行う必要があるためです。数が増えればその分パフォーマンスが悪化します。
マネージャーノードと quorum
Docker Swarm でマネージャーノードが何らかのタスクを実行する際には、quorum と呼ばれるものが必要です。quorum は分散システムでよく利用されるものであり、処理の整合性を保つために使われます。Docker Swarm では、この quorum が全マネージャーノードの半数を超過する必要があります。これは単純な議決のように考えることができ、参加者の半数を超過した数が賛同しなければ、実行することができません。
quorum は全マネージャーノードの半数を超過している必要があります。6ノード存在する場合、半数の3の超過、つまり4以上の quorum が必要です。
では、以上を踏まえて quorum が常に半数以上確保できる環境を考えてみます。
マネージャーノードが1つである場合: もしマネージャーノードが1つダウンした時、クラスターではタスクが実行できなくなります。この場合、必要な quorum が1となる為、1つでもダウンすると必要 quorum に達しません。
マネージャーノードが2つである場合: もしマネージャーノードが1つダウンした時、クラスターではタスクが実行できなくなります。この場合、必要な quorum が2となる為、1つでもダウンすると必要 quorum に達しません。
マネージャーノードが3つである場合: もしマネージャー ノードが1つダウンした時、クラスターでのタスクが実行可能です。この場合、必要な quorum が2となる為、1つのダウンまでは許容されます。2つダウンした場合は、必要 quorum に達しません。
マネージャーノードが4つである場合: もしマネージャーノードが1つダウンした時、クラスターでのタスクが実行可能です。この場合、必要な quorum が3となる為、1つのダウンまでは許容されます。2つダウンした場合は、必要 quorum に達しません。
同様の考え方でそれ以上の数の場合でも考えていくことができます。
quorum について、以下に簡単にまとめます。
Docker Swarm では:
- 最大 (N-1)/2 までの障害が許容されます。
- クラスターでのタスク実行には (N/2)+1 ノードの quorum が必要です。
マネージャーノードの耐障害性
これまでの内容を踏まえ、マネージャーノードの耐障害性について考えていきます。
以下はマネージャーノード数が1~9の場合に必要な quorum と、ダウンが許容されるノード数を表にまとめたものです。表は、「Administer and maintain a swarm of Docker Engines | Docker Documentation」から引用しています。
マネージャノード数 | quorum | 許容値 |
---|---|---|
1 | 1 | 0 |
2 | 2 | 0 |
3 | 2 | 1 |
4 | 3 | 1 |
5 | 3 | 2 |
6 | 4 | 2 |
7 | 4 | 3 |
8 | 5 | 3 |
9 | 5 | 4 |
マネージャーノード数が偶数(2, 4, 6, 8~)である場合、耐障害性に対するメリットはありません。例えば、マネージャーノード数が 4
である場合 2ノード
以上がダウンすると、quorumが足らなくなります。しかし、マネージャーノード数が 3
である場合も同様に 2ノード
以上のダウンでquorumが足らなくなります。マネージャーノード数が 3
もしくは 4
の場合のどちらであっても、ダウンが許容されるノード数は 1
です。
そのためマネージャーノード数は奇数(1, 3, 5, 7, 9)であることが、望ましいです。