ノードの挙動¶
Docker 1.12 で swarm mode(スウォーム・モード)を導入しました。これは1つまたは複数の Docker エンジン上に、 swarm (訳者注:「群れ」の意味。swarm mode)と呼ぶクラスタを作成できます。1つまはた複数のノードでswarm を構成します。つまり、swarm モードは Docker Engine 1.12 以降の物理または仮想マシン上で動作します。
ヒント
訳者注: Docker のドキュメントで「swarm」という言葉が出てくる場合は、ソフトウェア名称としての「swarm」ではなく、Docker Engine のノードで構成する「クラスタ」の意味で用いられるのが大半です。たとえば、「swarm を作成する」という表現は「swarm クラスタを作成する」と置き換えて読む必要があります。
もしも Swarm モード概要 や Swarm モードの重要な概念 を未読であれば、ご覧ください。
manager ノード¶
manager ノードはクラスタ管理タスクを扱います:
- クラスタの状態を維持
- サービスのスケジューリング
- swarm モードの HTTP API エンドポイント を提供
swarm 全体の内部状態と swarm 上で稼働している全サービスの一貫性を、manager が Raft の実装を使って維持します。swarm 上で 単一の manager しか実行しないのは、テスト用途であれば構いません。しかし、一つしかない swarm のマスタで障害が発生すると、サービスは動き続けるものの、復旧のためには新しいクラスタの作成が必要です。
swarm モードの耐障害性(fault-tolerance)機能を活かすために Docker が推奨するのは、組織における高可用性の要件に応じ、ノード数を奇数にすることです。複数の manager があれば、manager で障害が発生したとしても、停止時間なく復旧可能です。
- 3 つのマネージャ がある swarm では、1つの manager の障害に耐えます
- 5 つのマネージャ がある swarm では、最大で 2 つの manager ノードの同時障害に耐えます
N
つの manager クラスタは、最大で(N-1)/2
manager の障害に耐えます- Docker が推奨するのは、 swarm に対して最大 7 つの manager ノードです
重要
manger を増やすことが、スケーラビリティや性能の向上を意味「しません」。通常は全く逆です。
worker ノード¶
worker ノードもまた Docker Engine のインスタンスであり、コンテナの実行を唯一の目的とします。worker ノードは Raft 分散状態、スケジューリングの決定、swarm モード HTTP API の提供を行いません。
単一の manager ノード上で swarm を作成できますが、全く manager ノードがない worker ノードだけで swarm を作成できません。単一 の manager ノードクラスタであれば、 docker service create
のようなコマンドを実行し、ローカルの Engine 上で全てのタスクをスケジュール可能です。
複数のノードがある swarm で、manager ノード上にタスクがスケジュールされるのを防ぐには、 manager ノードに対して Drain
(排出)という可用性を指定できます。 Drain
モードでは、スケジューラはノード上のタスクを丁寧に停止し、他の Active
なノード上にタスクをスケジュールします。 スケジューラは、Drain
可用性の指定があるノード上に新しいタスクを割り当てません。
ノードの可用性を変える方法は、 docker node update コマンドライン・リファレンスをご覧ください。
役割の変更¶
docker node promote
の実行によって、worker ノードを manager へと昇格(promote)できます。たとえば、メンテナンスによって manager ノードがオフラインになるとき、worker ノードを昇格したい場合に使えます。 node promote をご覧ください。
manager ノードを worker ノードに降格(demote)も可能です。 node demote をご覧ください。