enix.postgresql_replication
enix.postgresql_replication
Unixホスト上でPostgreSQLのレプリケーションクラスターをデプロイし、設定するための役割です。Ansibleを使用します。
要件
サポートされるターゲット:
- Debian 8 "Jessie"
- Debian 9 "Stretch"
役割変数
この役割はほぼすべてのデフォルトがプリロードされています。各変数はホストまたはグループの変数、インベントリ、またはプレイの中で上書きできます。設定に関するヘルプはdefaults/main.yml
の注釈付きデフォルトを参照してください。提供されるすべての変数はpostgresql_replication__
で始まります。
この役割は、複数のクラスターを同じインベントリで使用できるように、Ansibleグループを使用して異なるクラスターのホスト役割を独立させる形で動作します。インベントリには3つの異なるグループを定義する必要があります。
postgresql_replication__group
- このクラスターのホストのメイングループ、デフォルト:postgresql
postgresql_replication__group_master
- マスターグループ、ここには1台のホストのみを含める必要があります。デフォルト:postgresql_master
postgresql_replication__group_replicas
- レプリカホストを含むグループ、デフォルト:postgresql_replicas
インベントリは最終的に以下の形式である必要があります(yaml形式の例):
all:
children:
postgresql:
children:
postgresql_master:
hosts:
db-01:
ansible_host: 185.145.251.12
postgresql_replicas:
hosts:
db-02:
ansible_host: 185.145.251.243
postgresql_replication__user
- レプリケーションノードの認証に使用するユーザー名。デフォルト:replicate
。postgresql_replication__password
-postgresql_replication__user
のパスワード。本番クラスターではデフォルトを変更することが重要です。デフォルト:replicate
。postgresql_replication__waldir
- マスターノードからレプリケーションノードに送信されるWALファイルを保存するためのディレクトリ。
送信サーバーの設定。詳細な値については、(https://www.postgresql.org/docs/11/runtime-config-replication.html#RUNTIME-CONFIG-REPLICATION-SENDER)を参照してください。
postgresql_replication__walsenders
- 有効にするWAL送信プロセスの数。デフォルト:3
。postgresql_replication__walsegments
- 保持するWALセグメントの数(16MBごと)。デフォルト:64
。postgresql_replication__trigger_file
- スレーブノードでマスター操作をトリガーするために使用されるファイル。デフォルト:/tmp/MasterNow
postgresql_replication__bootstrap
- 非常に重要です。この変数を"yesiwant"
に設定すると、postgresql_replication__group_replicas
に定義されたホスト上のすべてのデータが削除され、マスターから新たにpg_basebackup
が行われます。この設定を許可し、グループ内でホストを正しく設定しないと、完全にデータを破壊する可能性があるため注意が必要です。
依存関係
使用法
Ansible Galaxyのrequirements.ymlを使用します。
- src: enix.postgresql_replication
これをプレイの役割に追加します:
- hosts: postgresql
roles:
- role: enix.postgresql_replication
postgresql__version: 11
postgresql__global_config_options:
- option: listen_addresses
value: '*'
- option: log_min_duration_statement
value: 1000
postgresql__hba_entries:
- {type: local, database: all, user: postgres, auth_method: peer}
- {type: local, database: all, user: all, auth_method: peer}
- {type: host, database: all, user: all, address: "0.0.0.0/0", auth_method: md5}
- {type: hostssl, database: replication, user: "{{ postgresql_replication__user }}", address: "0.0.0.0/0" ,auth_method: md5}
postgresql__users:
- {name: "{{ postgresql_replication__user }}", password: "{{ postgresql_replication__password }}", role_attr_flags: "REPLICATION"}
この役割をプレイブックとして使用することもできます。どのホストをプロビジョニングするか質問され、--extra-vars
を使用してプレイをさらに構成できます。
$ ansible-playbook -i inventory --extra-vars='{...}' main.yml
まだやること
- 本格的なGitLab / Travis CIの追加
- モレキュールを使ったテストの追加
変更履歴
1.1.0
グループ名をpostgresql_master
およびpostgresql_replicas
に更新しました。
Ansible 2.8以降のグループ名要件に準拠しています。
1.0.0
初版。
ライセンス
GPLv2
著者情報
ロラン・コルベ laurent.corbes@enix.fr - http://www.enix.io