Ansible Tower 3.1 では、冗長化の代わりのアプローチとしてクラスタリングが導入され、プライマリーインスタンスとセカンダリーインスタンスを使用する active-passive ノードで設定されていた冗長化ソリューションの後継となります。3.1 より前のバージョンは、以前のバージョンの Ansible Tower Administration Guide のクラスタリングの章を参照してください。
クラスタリングでは、ホスト間で負荷が共有されます。各ノードは、UI および API アクセスのエントリーポイントとして機能します。これにより、Tower の管理者が複数のノードの手前でロードバランサーを使用できるようになり、データの可視性が向上されるはずです。
注釈
負荷分散はオプションで、必要に応じて 1 つまたはすべてのノードで受信することも可能です。
各ノードは、Tower のクラスターに参加して、ジョブの実行機能を拡張することができます。現在これは簡単なシステムになっており、ジョブの実行場所を指定するのではなく、ジョブをどこでも実行できます。
新規クラスタリング環境における重要な留意事項:
inventory
ファイルは保存/永続化する必要があります。新規ノードをプロビジョニングする場合は、パスワード、設定オプション、ホスト名をインストーラーで利用できるようにしなければなりません。新規ノードのプロビジョニングは、inventory
ファイルを更新して、設定 Playbook を再実行するだけです。このファイルには、クラスターのインストール時に使用するすべてのパスワードと情報が含まれていることが重要です。含まれていない場合には、他のノードが再設定される場合があります。現在のスタンドアロンのノード設定は、3.1 のデプロイメントでは変更はありません。inventory
ファイルには重要な変更が含まれています。
tower
に置き換えられました。ただし、データベースのグループは、外部の Postgres を指定するために残されています。[tower]
hostA
hostB
hostC
[database]
hostDB
注釈
クラスターには最低でも 3 つの Tower ノードを使用することを推奨しています。
redis_password
フィールドは [all:vars]
から削除されています。
RabbitMQ の新規フィールドは以下のとおりです。
rabbitmq_port=5672
: RabbitMQ は、各ノードにインストールされ、オプションではありません。またこれは外部に設定することはできません。この設定により、どのポートをリッスンするのかを指定します。
rabbitmq_vhost=tower
: Tower が RabbitMQ virtualhost を構成して分離するための設定を制御します。
rabbitmq_username=tower
およびrabbitmq_password=tower
: 各ノードおよびノード毎の Tower インスタンスがこれらの値で設定されます。これは、Tower で他に使用するユーザー名/パスワードと似ています。
rabbitmq_cookie=<somevalue>
: この値は、スタンドアロンのデプロイメントでは使用されませんが、クラスターのデプロイメントには必要不可欠です。これは、RabbitMQ クラスターのメンバーがお互いを識別できるように、シークレットキーとして機能します。
rabbitmq_use_long_names
: RabbitMQ は、各ノードの名称に厳密に反応しますが、Tower は柔軟性が高く、FQDN (host01.example.com)、短い名前 (host01) または ip アドレス (192.168.5.73) に対応できます。インベントリーファイルで各ホストの特定に使用する方法によって、この値は変化する可能性があります。
- FQDN および IP アドレスの場合は、この値は
true
です。- 短い名前の場合は、値を
false
に設定します。- localhost を使用する場合は、
rabbitmq_use_long_name=false
のデフォルト設定を true に変更しないでください。
以下の設定は、RabbitMQ のデフォルト設定です。
rabbitmq_port=5672
rabbitmq_vhost=tower
rabbitmq_username=tower
rabbitmq_password=''
rabbitmq_cookie=cookiemonster
# For FQDNs and IP addresses, this value needs to be true
rabbitmq_use_long_name=false
# Needs to remain false if you are using localhost
Tower が使用するポートとノードは以下のとおりです。
クラスタリング/RabbitMQ ポート:
Tower は、/api/v1/ping
で、クラスターのヘルスを検証するために Browsable API を使用してステータスをできるだけレポートします。以下に例を示します。
各 Tower ノードは、複数の異なるサービスで構成されており、これらのサービスは連携しています。
サービスやコンポーネントに障害が発生すると、全サービスが再起動されるように Tower は構成されています。サービスやコンポーネントが短期間で何度も機能しなくなった場合には、予期せぬ動作を発生させずに修正できるように自動的に全ノードがオフラインに切り替えられます。
ジョブの実行や、Tower の「通常」ユーザーへレポートする方法は変更されません。システム側には、注目すべき相違点が複数あります。
Tower ノードはオンラインになると、1 つの全体ユニット (クラスターの容量) として測定されるので、Tower システムの作業容量が効率的に拡張されます。反対に、ノードのプロビジョニングを解除すると、クラスターからの容量がなくなります。詳細は、次のセクションの「ノードのプロビジョニング解除」を参照してください。
注釈
すべてのノードを同じ容量でプロビジョニングする必要はありません。
プロジェクトの更新は、以前とは動作が異なります。以前のリリースでは、単一のノードで実行される通常のジョブでした。今回のリリースでは、ジョブを実行可能なノードであればどこでも正常に実行できることが重要です。プロジェクトは、ジョブの実行直前に、ノード上で正しいバージョンに同期されます。
Tower のプロビジョニングを解除すると、自動的にノードのプロビジョニングが解除されます。これは現在、ノードがオフラインになった理由が意図的なのか、障害が原因なのかをクラスターでは識別できないためです。代わりに、Tower ノードの全サービスをシャットダウンしてから、他のノードからプロビジョニング解除ツールを実行します。
ansible-tower-service stop
のコマンドで、ノードをシャットダウンするか、サービスを停止します。
別のノードから $ tower-manage deprovision_node —-name=<name used in inventory file>
のプロビジョニング解除のコマンドを実行して、Tower のクラスターレジストリーと、RabbitMQ クラスターレジストリーから削除します。
例:
tower-manage deprovision_node -—name=hostB