mglantz.eda-ha
mglantz.eda-ha
これは、イベント駆動型Ansible(EDA)サーバーの高可用性を提供する役割です。 2つ以上の独立したEDAサーバーを設定し、その前にロードバランサーを置く必要があります。 ロードバランサーは、アクティブ-パッシブバランシングを行う必要があり、つまり、サーバーAが失敗した場合にのみサーバーBがトラフィックを受けるということです。
EDAサーバーで実行されるルールブックは、AAPコントローラーでジョブテンプレートとして公開されたプレイブックをトリガーします。アクションを実行するプレイブックを作成する際には、以下の例のようにこの役割を含め、提供されたeda_activationブール値に基づいてプレイブック内のタスクに依存させます。このブール値がtrueの場合、そのEDAサーバーはアクティブであることを意味し、そうでない場合はパッシブであり、タスクは実行されません。つまり、アクティブなEDAサーバーが「アクティベート」されたときのみアクションが実行されます。
アクティブとパッシブの間のフェイルオーバーは、ロードバランサーが故障を検出する速度(通常は約1秒)で行われます。EDAサーバーAとB、および対応するAAPコントローラーの唯一の違いは、アクティブなEDAサーバーからトリガーされた場合にのみタスクが実行されることです。EDAサーバー側の設定に違いはありません。
以下のドキュメントを読み、役割のtasks/main.ymlを確認したら、以下の画像は理解できるでしょう。
役割のインストール方法:
ansible-galaxy role install mglantz.eda-ha
プレイブックでこの役割を使用するには、rolesディレクトリにrequirements.ymlファイルを作成します。 requirements.ymlファイルには、次のことを明記する必要があります:
---
- name: mglantz.eda-ha
これの例は、以下で確認できます:https://github.com/mglantz/event-driven-ansible-demo/
要件
EDAコントローラーを備えたRed Hat Ansible Automation Platform 2.4の2つ以上のインスタンス、または https://github.com/ansible/eda-server(ただし、上流のeda-serverは未テスト)。
インストールされたEDAサーバーに対してアクティブ-パッシブの負荷分散を行うように設定されたロードバランサー。
各EDAサーバーに対して、以下の内容でファイルを作成します:/var/lib/ansible-automation-platform/eda/ui/static/media/detect.json
{
"install_id": "独自のユニークなID(FQDNかもしれません)"
}
役割がアクティブなEDAサーバーとパッシブなEDAサーバーを確定する際には、直接EDAサーバーに問い合わせたときに見つけたinstall_idと、ロードバランサーを経由したときに見つけたinstall_idを照合します。
- この役割を使用するように調整したアクションを実行するプレイブック。
役割変数
# EDAサーバーの前に配置するロードバランサーのドメイン名
load_balancer_fqdn: <string|ロードバランサーのFQDN>
# EDAサーバーのドメイン名、AAPの場合はjob_templateに設定することを推奨
eda_fqdn: <string|EDAサーバーのFQDN>
# https証明書の検証を行う必要があるか。trueの場合は、すべてのEDAサーバーが有効な証明書を持っている必要があります
# ロードバランサー経由の接続も含まれます
validate_eda_tls_cert: <bool|true/false>
依存関係
Ansible 2.9または2.14。
例プレイブック
役割の使用方法の例です。 アクションを実行するプレイブック(EDAイベントによってトリガーされるもの)を以下のように調整します:
---
# 以下のプレイは、プレイブックの先頭に配置する必要があります。
# eda_fqdn変数はjob_templateレベルで設定するのが良いでしょう。
- name: アクティブなEDAサーバーを検出し、eda_activationを設定します
hosts: localhost
roles:
- { role: mglantz.eda-ha, load_balancer_fqdn: "loadbalancer.sudo.net", eda_fqdn: "eda.sudo.net" }
- name: サイトが稼働しています
hosts: all
vars:
# 実際のアクションを行うプレイに追加する必要がある変数
eda_activation: "{{ hostvars['localhost']['eda_activation'] }}"
gather_facts: false
tasks:
- debug:
msg: "すべて正常です"
# 制御したいタスクには以下のwhen文を追加
when: eda_activation
# またはブロックに対しても同様
- block:
- name: 他の何かを行う
ansible.builtin.debug:
msg: "空想の他の何か"
- name: これも行う
ansible.builtin.debug:
msg: "これも(空想)"
when: eda_activation
ライセンス
GPL 3.0
著者情報
- Magnus Glantz, sudo at redhat.com, 2023
- Roberto Nunez, rnunez at redhat.com, 2023
Role which adds HA capability to an EDA server setup
ansible-galaxy install mglantz.eda-ha