|
--- |
|
# RabbitMQクラスタ構築 |
|
|
|
# グループ「mqnodes」にRabbitMQ各ノードを定義しておく。 |
|
# すでに各ノードにRabbitMQがインストール済みである前提。 |
|
|
|
# 1. スレーブノード(=非マスター)停止 |
|
# 2. マスタの.erlang.cookieファイルをスレーブにコピー |
|
# 3. スレーブノードをクラスタに参加させる |
|
# 4. スレーブノード起動 |
|
# 5. キューのミラーリングポリシーを設定 |
|
|
|
- hosts: mqnodes |
|
become: yes |
|
tasks: |
|
# スレーブノードを停止する |
|
- name: rabbitmq-cluster | stop @ slave |
|
command: rabbitmqctl stop_app |
|
when: inventory_hostname != groups['mqnodes'][0] |
|
- name: rabbitmq-cluster | reset @ slave |
|
command: rabbitmqctl reset |
|
when: inventory_hostname != groups['mqnodes'][0] |
|
- name: rabbitmq-cluster | stop RabbitMQ service @ slave |
|
systemd: state=stopped name=rabbitmq-server |
|
when: inventory_hostname != groups['mqnodes'][0] |
|
|
|
# マスタノードの.erlang.cookieをスレーブノードにコピーする |
|
- name: rabbitmq-cluster | capture .erlang.cookie @ master |
|
command: cat /var/lib/rabbitmq/.erlang.cookie |
|
register: rabbitmq_erlang_cookie |
|
when: inventory_hostname == groups['mqnodes'][0] |
|
- debug: var=hostvars[groups['mqnodes'][0]].rabbitmq_erlang_cookie.stdout |
|
- name: rabbitmq-cluster | copy .erlang.cookie @ slave |
|
copy: |
|
backup: no |
|
dest: /var/lib/rabbitmq/.erlang.cookie |
|
content: | |
|
{{ hostvars[groups['mqnodes'][0]].rabbitmq_erlang_cookie.stdout }} |
|
owner: rabbitmq |
|
group: rabbitmq |
|
mode: 0400 |
|
when: inventory_hostname != groups['mqnodes'][0] |
|
|
|
# スレーブノード再起動・リセット |
|
- name: rabbitmq-cluster | send sigterm @ slave |
|
shell: pkill -u rabbitmq || true |
|
when: inventory_hostname != groups['mqnodes'][0] |
|
- name: rabbitmq-cluster | restart @ slave |
|
systemd: state=restarted name=rabbitmq-server |
|
when: inventory_hostname != groups['mqnodes'][0] |
|
|
|
# スレーブノードをクラスタに参加させる (stop-reset-join) |
|
- name: rabbitmq-cluster | stop_app @ slave |
|
command: rabbitmqctl stop_app |
|
when: inventory_hostname != groups['mqnodes'][0] |
|
- name: rabbitmq-cluster | reset @ slave |
|
command: rabbitmqctl reset |
|
when: inventory_hostname != groups['mqnodes'][0] |
|
- name: rabbitmq-cluster | join to cluster @ slave |
|
command: rabbitmqctl join_cluster "rabbit@{{ groups['mqnodes'][0] }}.node.consul" |
|
when: inventory_hostname != groups['mqnodes'][0] |
|
|
|
# スレーブノード起動 |
|
- name: rabbitmq-cluster | start_app @ slave |
|
command: rabbitmqctl start_app |
|
when: inventory_hostname != groups['mqnodes'][0] |
|
|
|
# クラスタ名変更 |
|
- name: rabbitmq-cluster | change cluster name @ master |
|
command: rabbitmqctl set_cluster_name "rabbit@cluster" |
|
when: inventory_hostname == groups['mqnodes'][0] |
|
|
|
# キューのミラーリングポリシーを設定 (全ノードで同期する) |
|
- name: rabbitmq-cluster | set mirroring policy @ master |
|
rabbitmq_policy: |
|
node: "rabbit@{{ inventory_hostname }}.node.consul" |
|
name: HA |
|
pattern: .* |
|
tags: |
|
ha-mode: all |
|
when: inventory_hostname == groups['mqnodes'][0] |