diff --git a/defaults/main.yml b/defaults/main.yml index a77959c..0df7618 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -124,17 +124,6 @@ psql_db_name: db_name psql_db_user: db_user psql_db_pwd: "We cannot save the password into the repository. Use another variable and change pgpass.j2 accordingly. Encrypt the file that contains the variable with ansible-vault" -######## -# -# Pgpool-II -# -# Those need to be installed on the postgresql server. -# -pgpool_version: '4.1.4' -pgpool_fixed_version: '={{ pgpool_version }}-2.pgdg18.04+1' -postgresql_pgpool_pkgs: - - 'postgresql-{{ psql_version }}-pgpool2{{ pgpool_fixed_version }}' - #psql_db_data: # Example of line needed to create a db, create the user that owns the db, manage the db accesses (used by iptables too). All the fields are mandatory. #- { name: '{{ psql_db_name }}', encoding: 'UTF8', user: '{{ psql_db_user }}', pwd: '{{ psql_db_pwd }}', roles: 'NOCREATEDB,NOSUPERUSER', extensions: [ 'postgis', 'pgpool_regclass', 'pgpool_recovery' ], allowed_hosts: [ 'xxx.xxx.xxx.xxx/32', 'yyy.yyy.yyy.yyy/32' ], managedb: True } @@ -143,112 +132,6 @@ postgresql_pgpool_pkgs: # Example of line needed to remove a db, create the user that owns the db, manage the db accesses (used by iptables too). All the fields are mandatory. #- { name: '{{ psql_db_name }}', encoding: 'UTF8', user: '{{ psql_db_user }}', pwd: '{{ psql_db_pwd }}', managedb: True, roles: 'NOCREATEDB,NOSUPERUSER', extensions: [ 'postgis', 'pgpool_regclass', 'pgpool_recovery' ], allowed_hosts: [ 'xxx.xxx.xxx.xxx/32', 'yyy.yyy.yyy.yyy/32' ], state=absent } - -# pgpool-II -pgpool_pkgs: - - 'pgpool2{{ pgpool_fixed_version }}' - - iputils-arping - -pgpool_el_pkgs: - - 'pgpool-II-{{ psql_version }}' - - 'pgpool-II-{{ psql_version }}-extensions' - -pgpool_enabled: True -pgpool_listen_addresses: 'localhost' -pgpool_port: 5433 -pgpool_listen_backlog_multiplier: 2 -pgpool_pcp_user: admin -# Define pcp_pwd in a vault file -pgpool_pcp_listen_addresses: '*' -pgpool_pcp_port: 9898 -#pgpool_backends: -# - { id: 0, hostname: 'backend0', backend_port: '{{ psql_db_port }}', backend_weight: 1, backend_data_directory: '{{ psql_data_dir }}', backend_flag: 'ALLOW_TO_FAILOVER' } -pgpool_enable_pool_hba: 'on' -pgpool_pool_passwd: 'pool_passwd' -pgpool_num_init_children: 32 -pgpool_max_pool: 4 -pgpool_child_life_time: 300 -pgpool_child_max_connections: 0 -pgpool_connection_life_time: 0 -pgpool_client_idle_limit: 0 -pgpool_log_destination: syslog -pgpool_log_connections: 'on' -pgpool_log_hostname: 'on' -pgpool_log_statement: 'off' -pgpool_log_per_node_statement: 'off' -pgpool_debug_level: 0 -pgpool_replication_mode: 'on' -pgpool_replicate_select: 'off' -pgpool_insert_lock: 'on' -pgpool_lobj_lock_table: '' -pgpool_replication_stop_on_mismatch: 'on' -pgpool_failover_if_affected_tuples_mismatch: 'off' -pgpool_recovery_timeout: 30 -pgpool_client_idle_limit_in_recovery: -1 -pgpool_load_balance_mode: 'on' -pgpool_ignore_leading_white_space: 'on' -pgpool_recovery_user: postgres -# pgpool_recovery_user_pwd: use a vault file for this one -pgpool_recovery_stage1_script: pgpool_recovery_stage_1 -pgpool_recovery_stage2_script: pgpool_recovery_stage_2 -pgpool_remote_start_script: pgpool_remote_start -pgpool_white_function_list: '' -pgpool_black_function_list: 'nextval,setval' -pgpool_allow_sql_comments: 'on' -pgpool_fail_over_on_backend_error: 'on' -pgpool_relcache_expire: 3600 -# -pgpool_memory_cache_enabled: False -# memcached, shmem -pgpool_memqcache_method: shmem -pgpool_memqcache_memcached_host: localhost -pgpool_memqcache_memcached_port: 11211 -pgpool_memqcache_expire: 0 -pgpool_memqcache_auto_cache_invalidation: 'on' -pgpool_serialize_accept: 'off' -# HA and watchdog -pgpool_use_watchdog: 'off' -pgpool_wd_trusted_servers: 'localhost,localhost' -pgpool_wd_port: 9000 -pgpool_wd_priority: 1 -# Warning: setting pgpool_wd_heartbeat_mode to False enables -# the 'query mode' that is untested and not working without manual intervention -pgpool_wd_heartbeat_mode: True -pgpool_wd_heartbeat_port: 9694 -pgpool_wd_heartbeat_keepalive_int: 3 -pgpool_wd_heartbeat_deadtime: 30 -pgpool_wd_heartbeat_dest0: 'localhost' -pgpool_wd_heartbeat_dest0_port: '{{ pgpool_wd_heartbeat_port }}' -#pgpool_wd_authkey: 'set it inside a vault file' - -# SSL as a special case -pgpool_enable_ssl: False -pgpool_letsencrypt_managed: True -pgpool_ssl_key: /etc/pki/pgpool2/pgpool2.key -pgpool_ssl_cert: '/var/lib/acme/live/{{ ansible_fqdn }}/cert' -pgpool_ssl_ca: '/var/lib/acme/live/{{ ansible_fqdn }}/fullchain' -pgpool_ssl_ca_dir: /etc/ssl/certs -pgpool_virtual_ip: 127.0.0.1 -pgpool_virtual_netmask: 24 - -# WAL files archiving is mandatory for pgpool recovery -psql_wal_files_archiving_enabled: '{{ psql_pgpool_install }}' -psql_restart_after_wal_enabling: True -psql_wal_archiving_log_dir: '{{ psql_data_dir }}/archive_log' -psql_base_backup_dir: '{{ pg_backup_base_dir }}/base_backup' -psql_wal_files_conf: - - { name: 'wal_level', value: 'archive', set: '{{ psql_wal_files_archiving_enabled }}' } - - { name: 'wal_sync_method', value: 'fdatasync', set: '{{ psql_wal_files_archiving_enabled }}' } - - { name: 'full_page_writes', value: 'on', set: '{{ psql_wal_files_archiving_enabled }}' } - - { name: 'wal_log_hints', value: 'on', set: '{{ psql_wal_files_archiving_enabled }}' } - - { name: 'archive_mode', value: 'on', set: '{{ psql_wal_files_archiving_enabled }}' } - - { name: 'archive_command', value: "'test ! -f {{ psql_wal_archiving_log_dir }}/%f && cp %p {{ psql_wal_archiving_log_dir }}/%f'", set: '{{ psql_wal_files_archiving_enabled }}' } - - { name: 'archive_timeout', value: '120', set: '{{ psql_wal_files_archiving_enabled }}' } - - { name: 'max_wal_senders', value: '5', set: '{{ psql_wal_files_archiving_enabled }}' } - - { name: 'wal_sender_timeout', value: '60s', set: '{{ psql_wal_files_archiving_enabled }}' } - - { name: 'max_replication_slots', value: '5', set: '{{ psql_wal_files_archiving_enabled }}' } - - # postgis postgres_install_gis_extensions: False postgres_gis_version: 2.5 diff --git a/files/arping_script b/files/arping_script deleted file mode 100644 index ae7479f..0000000 --- a/files/arping_script +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash -# -# Exec /usr/bin/arping as root via sudo - -RETVAL= -CMD=/usr/bin/arping - -sudo $CMD $@ -RETVAL=$? - -exit $RETVAL - diff --git a/files/ip_script b/files/ip_script deleted file mode 100644 index 225bbb7..0000000 --- a/files/ip_script +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash -# -# Exec /sbin/ip as root via sudo - -RETVAL= -CMD=/sbin/ip - -sudo $CMD $@ -RETVAL=$? - -exit $RETVAL - diff --git a/handlers/main.yml b/handlers/main.yml index 1e3ff73..546b220 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -7,15 +7,6 @@ service: name=postgresql state=reloaded when: ansible_distribution_file_variety == "Debian" -- name: Reload pgpool2 - service: name=pgpool2 state=reloaded - when: ansible_distribution_file_variety == "Debian" - ignore_errors: True - -- name: Restart pgpool2 - service: name=pgpool2 state=restarted - when: ansible_distribution_file_variety == "Debian" - - name: Restart postgresql with pgpool config service: name=postgresql state=restarted when: @@ -29,18 +20,3 @@ - name: Reload postgresql service: name='postgresql-{{ psql_version }}' state=reloaded when: ansible_distribution_file_variety == "RedHat" - -- name: Reload pgpool2 - service: name='pgpool2-{{ psql_version }}' state=reloaded - when: ansible_distribution_file_variety == "RedHat" - ignore_errors: True - -- name: Restart pgpool2 - service: name='pgpool2-{{ psql_version }}' state=restarted - when: ansible_distribution_file_variety == "RedHat" - -- name: Restart postgresql with pgpool config - service: name='postgresql-{{ psql_version }}' state=restarted - when: - - ansible_distribution_file_variety == "RedHat" - - psql_restart_after_wal_enabling diff --git a/meta/main.yml b/meta/main.yml index a770738..c1c334f 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -16,16 +16,11 @@ galaxy_info: - name: Ubuntu versions: - bionic + - name: EL + versions: + - 7 galaxy_tags: - postgresql -dependencies: - - src: git+https://gitea-s2i2s.isti.cnr.it/ISTI-ansible-roles/ansible-role-memcached.git - version: master - name: memcached - state: latest - when: - - pgpool_memory_cache_enabled - - pgpool_memqcache_method == "memcached" - - pgpool_memqcache_memcached_host == "localhost" +dependencies: [] diff --git a/tasks/main.yml b/tasks/main.yml index f8fc8f3..88da328 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -18,21 +18,12 @@ - psql_db_data is defined - import_tasks: postgresql-service-status.yml when: psql_postgresql_install -- import_tasks: postgres_pgpool.yml - when: psql_pgpool_install - import_tasks: manage_pg_db.yml when: - psql_postgresql_install - psql_db_data is defined - import_tasks: postgresql-backup.yml when: psql_postgresql_install -- import_tasks: pgpool-ii.yml - when: psql_pgpool_service_install - import_tasks: postgresql-letsencrypt-acmetool.yml when: - letsencrypt_acme_install is defined and letsencrypt_acme_install -- import_tasks: pgpool-letsencrypt-acmetool.yml - when: - - letsencrypt_acme_install is defined and letsencrypt_acme_install - - diff --git a/tasks/pgpool-ii.yml b/tasks/pgpool-ii.yml deleted file mode 100644 index 2a843da..0000000 --- a/tasks/pgpool-ii.yml +++ /dev/null @@ -1,82 +0,0 @@ ---- -- block: - - name: Install the pgpool package - apt: name={{ pgpool_pkgs }} state={{ psql_pgpool_pkg_state }} cache_valid_time=1800 - - - name: Configure pcp - #template: src=pcp.conf.j2 dest=/etc/pgpool2/pcp.conf owner=root group=postgres mode=0640 - shell: pwd=`pg_md5 {{ pcp_pwd }}` ; echo "{{ pgpool_pcp_user }}:${pwd}" > /etc/pgpool2/pcp.conf ; chmod 640 /etc/pgpool2/pcp.conf; chown root:postgres /etc/pgpool2/pcp.conf - - - name: Install the pgpool configuration file - template: src=pgpool.conf.j2 dest=/etc/pgpool2/pgpool.conf owner=root group=postgres mode=0640 - notify: Restart pgpool2 - - - name: Give access to the remote postgresql clients - lineinfile: name=/etc/pgpool2/pool_hba.conf regexp="^host {{ item.0.name }} {{ item.0.user }} {{ item.1 }}.*$" line="host {{ item.0.name }} {{ item.0.user }} {{ item.1 }} md5" - with_subelements: - - '{{ psql_db_data | default([]) }}' - - allowed_hosts - when: - - psql_db_data is defined - - item.1 is defined - notify: Reload pgpool2 - - - name: Create the pki directory to store the pgpool key - file: dest=/etc/pki/pgpool2 state=directory owner=postgres group=postgres mode=0750 - when: pgpool_enable_ssl - - - name: Create a pgpool accessible ssl key file if it does not exist - copy: src=/var/lib/acme/live/{{ ansible_fqdn }}/privkey dest=/etc/pki/pgpool2/pgpool2.key owner=postgres group=postgres mode=0400 remote_src=True - when: pgpool_enable_ssl - - - name: Install the pool_passwd configuration file - shell: cd /etc/pgpool2 ; pg_md5 -m -u {{ item.user }} {{ item.pwd }} ; chown root:postgres /etc/pgpool2/pool_passwd ; chmod 660 /etc/pgpool2/pool_passwd - with_items: '{{ psql_db_data | default([]) }}' - - - name: Install the sudoers config that permits pgpool change the network configuration during a failover - template: src=pgpool-wd-sudoers.j2 dest=/etc/sudoers.d/pgpool-wd owner=root group=root mode=0440 - - - name: Install the ip script that manage the network configuration during a failover - copy: src={{ item }} dest=/sbin/{{ item }} owner=root group=root mode=0755 - with_items: - - ip_script - - - name: Install the arping scripts that manage the network configuration during a failover - copy: src={{ item }} dest=/usr/local/bin/{{ item }} owner=root group=root mode=0755 - with_items: - - arping_script - - - name: Start and enable pgpool2 - service: name=pgpool2 state=started enabled=yes - - when: - - pgpool_enabled - - ansible_distribution_file_variety == "Debian" - tags: [ 'postgresql', 'postgres', 'pgpool', 'pcp_conf', 'pgpool_conf' ] - - -- block: - - name: Stop and disable pgpool2 - service: name=pgpool2 state=stopped enabled=no - - - name: Install the pgpool packages - apt: name={{ pgpool_pkgs }} state=absent - - - name: Remove the pgpool failover sudoers file - file: dest=/etc/sudoers.d/pgpool-wd state=absent - - - name: Remove the pgpool configuration directory - file: dest=/etc/pgpool2 state=absent - - - name: Remove the scripts that manage the network configuration during a failover - file: dest={{ item }} state=absent - with_items: - - /sbin/ip_script - - /usr/local/bin/arping_script - - when: - - not pgpool_enabled - - ansible_distribution_file_variety == "Debian" - tags: [ 'postgresql', 'postgres', 'pgpool' ] - - diff --git a/tasks/pgpool-letsencrypt-acmetool.yml b/tasks/pgpool-letsencrypt-acmetool.yml deleted file mode 100644 index b868ca5..0000000 --- a/tasks/pgpool-letsencrypt-acmetool.yml +++ /dev/null @@ -1,23 +0,0 @@ ---- -- block: - - name: Create the acme hooks directory if it does not yet exist - file: dest={{ letsencrypt_acme_services_scripts_dir }} state=directory owner=root group=root - - - name: Install a script that fix the letsencrypt certificate for pgpool and then reloads the service - template: src=pgpool-letsencrypt-acme.sh.j2 dest={{ letsencrypt_acme_services_scripts_dir }}/pgpool owner=root group=root mode=4555 - - when: - - psql_pgpool_service_install - - pgpool_letsencrypt_managed - - letsencrypt_acme_install - tags: [ 'postgresql', 'postgres', 'pgpool', 'letsencrypt', 'pgpool_acme_hook' ] - - -- block: - - name: Remove the letsencrypt hook for pgpool - file: dest=/usr/lib/acme/hooks/pgpool state=absent - - when: - - psql_pgpool_service_install - - not pgpool_letsencrypt_managed - tags: [ 'postgresql', 'postgres', 'pgpool', 'letsencrypt', 'pgpool_acme_hook' ] diff --git a/tasks/postgres_pgpool.yml b/tasks/postgres_pgpool.yml deleted file mode 100644 index 6325f6c..0000000 --- a/tasks/postgres_pgpool.yml +++ /dev/null @@ -1,82 +0,0 @@ ---- -- name: Install the packages needed by postgres when running behind a pgpool server - apt: pkg={{ postgresql_pgpool_pkgs }} state={{ psql_pkg_state }} cache_valid_time=3600 - notify: Restart postgresql - when: - - psql_pgpool_install - - ansible_distribution_file_variety == "Debian" - tags: [ 'postgresql', 'postgres', 'pgpool' ] - -- name: PgPool II configuration - block: - - name: Add the postgres user that will manage the recovery, if not postgres - become: True - become_user: postgres - postgresql_user: user={{ pgpool_recovery_user }} password={{ pgpool_recovery_user_pwd }} role_attr_flags=REPLICATION port={{ psql_db_port }} - when: - - ('{{ pgpool_recovery_user }}' != 'postgres') - - pgpool_recovery_user_pwd is defined - - - name: Give access to the pgpool recovery user, if it is not postgres - lineinfile: name={{ psql_conf_dir }}/pg_hba.conf regexp="^host {{ item.0.name }} {{ pgpool_recovery_user }} {{ item.1 }}.*$" line="host {{ item.0.name }} {{ pgpool_recovery_user }} {{ item.1 }} md5" - with_subelements: - - '{{ psql_db_data | default([]) }}' - - allowed_hosts - when: - - psql_db_data is defined - - item.1 is defined - - pgpool_recovery_user_pwd is defined - notify: Reload postgresql - - - name: Add the system user that will manage the recovery, if not postgres - user: user={{ pgpool_recovery_user }} password={{ pgpool_recovery_user_pwd | password_hash('sha512') }} groups=postgres shell=/bin/bash system=yes - when: - - ('{{ pgpool_recovery_user }}' != 'postgres') - - pgpool_recovery_user_pwd is defined - - - name: Create the ssh keys for the recovery user - user: user={{ pgpool_recovery_user }} generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa ssh_key_type=rsa - - - name: Remember to trust the ssh keys between the two nodes - debug: - msg: "Remember to trust the ssh keys between the two nodes. You have to setup the .ssh/authorized_keys manually for the user {{ pgpool_recovery_user }}" - - - name: Install the pgpool recovery and remote restart scripts. They assume that the postgresql hosts can talk to each other - template: src={{ item.1 }}.j2 dest={{ item.0.backend_data_directory }}/{{ item.1 }} owner=postgres group=postgres mode=0500 - with_nested: - - '{{ pgpool_backends | default([]) }}' - - [ '{{ pgpool_recovery_stage1_script }}', '{{ pgpool_recovery_stage2_script }}', '{{ pgpool_remote_start_script }}' ] - - - name: Set the postgresql configuration parameters needed by pgpool - action: configfile path={{ psql_conf_dir }}/postgresql.conf key={{ item.name }} value="{{ item.value }}" - with_items: '{{ psql_wal_files_conf }}' - when: - - item.set - - psql_wal_files_archiving_enabled - notify: Restart postgresql with pgpool config - tags: [ 'postgresql', 'postgres', 'pg_conf', 'pgpool' ] - - - name: Ensure that the postgresql config file has the correct permissions - file: dest={{ psql_conf_dir }}/postgresql.conf owner=root group=postgres mode='0440' - tags: [ 'postgresql', 'postgres', 'pg_conf', 'pgpool' ] - - - name: Add the pgpool postgres extensions to the template1 dbs - become: True - become_user: postgres - postgresql_ext: name={{ item }} db=template1 port={{ psql_db_port }} - with_items: - - pgpool_regclass - - pgpool_recovery - tags: [ 'postgresql', 'postgres', 'pg_extensions' ] - - - name: Install the sudoers config that permits the postgres user to restart the service after a recovery - template: src=postgresql-sudoers.j2 dest=/etc/sudoers.d/postgres-pgpool owner=root group=root mode=0440 - tags: [ 'postgres', 'postgresql', 'sudo', 'pgpool' ] - - - name: Install a script that cleans up the wal log archives - template: src=postgresql_wal_backup_and_removal.j2 dest=/usr/local/sbin/postgresql_wal_backup_and_removal owner=root group=root mode=0755 - - - name: Install a cron job to cleanup the wal log archives - cron: name="Clean up the postgresql WAL log archives" user=postgres job="/usr/local/sbin/postgresql_wal_backup_and_removal > {{ psql_log_dir }}/wal_removal.log 2>&1" special_time=daily - - tags: [ 'postgresql', 'postgres', 'pgpool' ] diff --git a/templates/pcp.conf.j2 b/templates/pcp.conf.j2 deleted file mode 100644 index 26a41d8..0000000 --- a/templates/pcp.conf.j2 +++ /dev/null @@ -1 +0,0 @@ -{{ pgpool_pcp_user }}:{{ '{{ pcp_pwd }}' | pg_md5 }} diff --git a/templates/pgpool-letsencrypt-acme.sh.j2 b/templates/pgpool-letsencrypt-acme.sh.j2 deleted file mode 100644 index 2de9422..0000000 --- a/templates/pgpool-letsencrypt-acme.sh.j2 +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash - -H_NAME=$( hostname -f ) -LE_SERVICES_SCRIPT_DIR=/usr/lib/acme/hooks -LE_CERTS_DIR=/var/lib/acme/live/$H_NAME -LE_LOG_DIR=/var/log/letsencrypt -PGPOOL2_CERTDIR=/etc/pki/pgpool2 -PGPOOL2_KEYFILE=$PGPOOL2_CERTDIR/pgpool2.key -DATE=$( date ) - -[ ! -d $PGPOOL2_CERTDIR ] && mkdir -p $PGPOOL2_CERTDIR -[ ! -d $LE_LOG_DIR ] && mkdir $LE_LOG_DIR -echo "$DATE" >> $LE_LOG_DIR/pgpool2.log - -if [ -f /etc/default/letsencrypt ] ; then - . /etc/default/letsencrypt -else - echo "No letsencrypt default file" >> $LE_LOG_DIR/pgpool2.log -fi - -logger "acme-pgpool-hook: Check if the certificate has been renewed" -cmp ${LE_CERTS_DIR}/privkey ${PGPOOL2_KEYFILE} -RETVAL=$? -if [ $RETVAL -eq 0 ] ; then - logger "acme-pgpool-hook: No new cerficate. Doing nothing" - exit 0 -fi - -logger "acme-pgpool-hook: Copying the key file" -echo "Copy the key file" >> $LE_LOG_DIR/pgpool2.log -cp ${LE_CERTS_DIR}/privkey ${PGPOOL2_KEYFILE} -chmod 440 ${PGPOOL2_KEYFILE} -chown root ${PGPOOL2_KEYFILE} -chgrp postgres ${PGPOOL2_KEYFILE} - -logger "acme-pgpool-hook: Reload the postgresql service after a certificate renewal" -echo "Reload the pgpool2 service" >> $LE_LOG_DIR/pgpool2.log -if [ -x /bin/systemctl ] ; then -{% if ansible_distribution_file_variety == "Debian" %} - systemctl reload pgpool2 >> $LE_LOG_DIR/pgpool2.log 2>&1 -{% else %} - systemctl reload pgpool2-{{ psql_version }} >> $LE_LOG_DIR/pgpool2.log 2>&1 -{% endif %} -else - service pgpool2 reload >> $LE_LOG_DIR/pgpool2.log 2>&1 -fi - -logger "acme-pgpool-hook: Done" -echo "Done." >> $LE_LOG_DIR/pgpool2.log - -exit 0 - diff --git a/templates/pgpool-wd-sudoers.j2 b/templates/pgpool-wd-sudoers.j2 deleted file mode 100644 index 9ba1167..0000000 --- a/templates/pgpool-wd-sudoers.j2 +++ /dev/null @@ -1,3 +0,0 @@ -{{ pgpool_recovery_user }} ALL=(ALL) NOPASSWD: /bin/ip -{{ pgpool_recovery_user }} ALL=(ALL) NOPASSWD: /usr/bin/arping - diff --git a/templates/pgpool.conf.j2 b/templates/pgpool.conf.j2 deleted file mode 100644 index d020caf..0000000 --- a/templates/pgpool.conf.j2 +++ /dev/null @@ -1,693 +0,0 @@ -# ---------------------------- -# pgPool-II configuration file -# ---------------------------- -# -# This file consists of lines of the form: -# -# name = value -# -# Whitespace may be used. Comments are introduced with "#" anywhere on a line. -# The complete list of parameter names and allowed values can be found in the -# pgPool-II documentation. -# -# This file is read on server startup and when the server receives a SIGHUP -# signal. If you edit the file on a running system, you have to SIGHUP the -# server for the changes to take effect, or use "pgpool reload". Some -# parameters, which are marked below, require a server shutdown and restart to -# take effect. -# - - -#------------------------------------------------------------------------------ -# CONNECTIONS -#------------------------------------------------------------------------------ - -# - pgpool Connection Settings - - -listen_addresses = '{{ pgpool_listen_addresses }}' - # Host name or IP address to listen on: - # '*' for all, '' for no TCP/IP connections - # (change requires restart) -port = {{ pgpool_port }} - # Port number - # (change requires restart) -socket_dir = '/var/run/postgresql' - # Unix domain socket path - # The Debian package defaults to - # /var/run/postgresql - # (change requires restart) -listen_backlog_multiplier = {{ pgpool_listen_backlog_multiplier }} - # Set the backlog parameter of listen(2) to - # num_init_children * listen_backlog_multiplier. - # (change requires restart) - -# - pgpool Communication Manager Connection Settings - - -pcp_listen_addresses = '{{ pgpool_pcp_listen_addresses }}' - # Host name or IP address for pcp process to listen on: - # '*' for all, '' for no TCP/IP connections - # (change requires restart) -pcp_port = {{ pgpool_pcp_port }} - # Port number for pcp - # (change requires restart) -pcp_socket_dir = '/var/run/postgresql' - # Unix domain socket path for pcp - # The Debian package defaults to - # /var/run/postgresql - # (change requires restart) - -# - Backend Connection Settings - - -{% for bk in pgpool_backends %} -backend_hostname{{ bk.id}} = '{{ bk.hostname }}' -backend_port{{ bk.id }} = {{ bk.backend_port }} -backend_weight{{ bk.id }} = {{ bk.backend_weight }} -backend_data_directory{{ bk.id }} = '{{ bk.backend_data_directory }}' -backend_flag{{ bk.id }} = '{{ bk.backend_flag }}' -{% endfor %} -# - Authentication - - -enable_pool_hba = {{ pgpool_enable_pool_hba }} - # Use pool_hba.conf for client authentication -pool_passwd = '{{ pgpool_pool_passwd }}' - # File name of pool_passwd for md5 authentication. - # "" disables pool_passwd. - # (change requires restart) -authentication_timeout = 60 - # Delay in seconds to complete client authentication - # 0 means no timeout. - -{% if pgpool_enable_ssl %} -# - SSL Connections - -ssl = on -ssl_key = '{{ pgpool_ssl_key }}' -ssl_cert = '{{ pgpool_ssl_cert }}' -ssl_ca_cert = '{{ pgpool_ssl_ca }}' -ssl_ca_cert_dir = '{{ pgpool_ssl_ca_dir }}' -{% endif %} - -#------------------------------------------------------------------------------ -# POOLS -#------------------------------------------------------------------------------ - -# - Pool size - - -num_init_children = {{ pgpool_num_init_children }} - # Number of pools - # (change requires restart) -max_pool = {{ pgpool_max_pool }} - # Number of connections per pool - # (change requires restart) - -# - Life time - - -child_life_time = {{ pgpool_child_life_time }} - # Pool exits after being idle for this many seconds -child_max_connections = {{ pgpool_child_max_connections }} - # Pool exits after receiving that many connections - # 0 means no exit -connection_life_time = {{ pgpool_connection_life_time }} - # Connection to backend closes after being idle for this many seconds - # 0 means no close -client_idle_limit = {{ pgpool_client_idle_limit }} - # Client is disconnected after being idle for that many seconds - # (even inside an explicit transactions!) - # 0 means no disconnection - - -#------------------------------------------------------------------------------ -# LOGS -#------------------------------------------------------------------------------ - -# - Where to log - - -log_destination = '{{ pgpool_log_destination }}' - # Where to log - # Valid values are combinations of stderr, - # and syslog. Default to stderr. - -# - What to log - - -log_line_prefix = '%t: pid %p: ' # printf-style string to output at beginning of each log line. - -log_connections = {{ pgpool_log_connections }} - # Log connections -log_hostname = {{ pgpool_log_hostname }} - # Hostname will be shown in ps status - # and in logs if connections are logged -log_statement = {{ pgpool_log_statement }} - # Log all statements -log_per_node_statement = {{ pgpool_log_per_node_statement }} - # Log all statements - # with node and backend informations -log_standby_delay = 'none' - # Log standby delay - # Valid values are combinations of always, - # if_over_threshold, none - -# - Syslog specific - - -syslog_facility = 'LOCAL0' - # Syslog local facility. Default to LOCAL0 -syslog_ident = 'pgpool' - # Syslog program identification string - # Default to 'pgpool' - -# - Debug - - -debug_level = {{ pgpool_debug_level }} - # Debug message verbosity level - # 0 means no message, 1 or more mean verbose - -#log_error_verbosity = default # terse, default, or verbose messages - -#client_min_messages = notice # values in order of decreasing detail: - # debug5 - # debug4 - # debug3 - # debug2 - # debug1 - # log - # notice - # warning - # error - -#log_min_messages = warning # values in order of decreasing detail: - # debug5 - # debug4 - # debug3 - # debug2 - # debug1 - # info - # notice - # warning - # error - # log - # fatal - # panic - -#------------------------------------------------------------------------------ -# FILE LOCATIONS -#------------------------------------------------------------------------------ - -pid_file_name = '/var/run/postgresql/pgpool.pid' - # PID file name - # (change requires restart) -logdir = '/var/log/postgresql' - # Directory of pgPool status file - # (change requires restart) - - -#------------------------------------------------------------------------------ -# CONNECTION POOLING -#------------------------------------------------------------------------------ - -connection_cache = on - # Activate connection pools - # (change requires restart) - - # Semicolon separated list of queries - # to be issued at the end of a session - # The default is for 8.3 and later -reset_query_list = 'ABORT; DISCARD ALL' - # The following one is for 8.2 and before -#reset_query_list = 'ABORT; RESET ALL; SET SESSION AUTHORIZATION DEFAULT' - -serialize_accept = {{ pgpool_serialize_accept }} - - -#------------------------------------------------------------------------------ -# REPLICATION MODE -#------------------------------------------------------------------------------ - -replication_mode = {{ pgpool_replication_mode }} - # Activate replication mode - # (change requires restart) -replicate_select = {{ pgpool_replicate_select }} - # Replicate SELECT statements - # when in replication mode - # replicate_select is higher priority than - # load_balance_mode. - -insert_lock = {{ pgpool_insert_lock }} - # Automatically locks a dummy row or a table - # with INSERT statements to keep SERIAL data - # consistency - # Without SERIAL, no lock will be issued -lobj_lock_table = '{{ pgpool_lobj_lock_table }}' - # When rewriting lo_creat command in - # replication mode, specify table name to - # lock - -# - Degenerate handling - - -replication_stop_on_mismatch = {{ pgpool_replication_stop_on_mismatch }} - # On disagreement with the packet kind - # sent from backend, degenerate the node - # which is most likely "minority" - # If off, just force to exit this session - -failover_if_affected_tuples_mismatch = {{ pgpool_failover_if_affected_tuples_mismatch }} - # On disagreement with the number of affected - # tuples in UPDATE/DELETE queries, then - # degenerate the node which is most likely - # "minority". - # If off, just abort the transaction to - # keep the consistency - - -#------------------------------------------------------------------------------ -# LOAD BALANCING MODE -#------------------------------------------------------------------------------ - -load_balance_mode = {{ pgpool_load_balance_mode }} - # Activate load balancing mode - # (change requires restart) -ignore_leading_white_space = {{ pgpool_ignore_leading_white_space }} - # Ignore leading white spaces of each query -white_function_list = '{{ pgpool_white_function_list }}' - # Comma separated list of function names - # that don't write to database - # Regexp are accepted -black_function_list = '{{ pgpool_black_function_list }}' - # Comma separated list of function names - # that write to database - # Regexp are accepted - -database_redirect_preference_list = '' - # comma separated list of pairs of database and node id. - # example: postgres:primary,mydb[0-4]:1,mydb[5-9]:2' - # valid for streaming replicaton mode only. - -app_name_redirect_preference_list = '' - # comma separated list of pairs of app name and node id. - # example: 'psql:primary,myapp[0-4]:1,myapp[5-9]:standby' - # valid for streaming replicaton mode only. -allow_sql_comments = {{ pgpool_allow_sql_comments }} - # if on, ignore SQL comments when judging if load balance or - # query cache is possible. - # If off, SQL comments effectively prevent the judgment - # (pre 3.4 behavior). - -#------------------------------------------------------------------------------ -# MASTER/SLAVE MODE -#------------------------------------------------------------------------------ - -master_slave_mode = off - # Activate master/slave mode - # (change requires restart) -master_slave_sub_mode = 'slony' - # Master/slave sub mode - # Valid values are combinations slony or - # stream. Default is slony. - # (change requires restart) - -# - Streaming - - -sr_check_period = 0 - # Streaming replication check period - # Disabled (0) by default -sr_check_user = 'nobody' - # Streaming replication check user - # This is neccessary even if you disable streaming - # replication delay check by sr_check_period = 0 -sr_check_password = '' - # Password for streaming replication check user -delay_threshold = 0 - # Threshold before not dispatching query to standby node - # Unit is in bytes - # Disabled (0) by default - -# - Special commands - - -follow_master_command = '' - # Executes this command after master failover - # Special values: - # %d = node id - # %h = host name - # %p = port number - # %D = database cluster path - # %m = new master node id - # %H = hostname of the new master node - # %M = old master node id - # %P = old primary node id - # %r = new master port number - # %R = new master database cluster path - # %% = '%' character - -#------------------------------------------------------------------------------ -# HEALTH CHECK -#------------------------------------------------------------------------------ - -health_check_period = 0 - # Health check period - # Disabled (0) by default -health_check_timeout = 20 - # Health check timeout - # 0 means no timeout -health_check_user = 'nobody' - # Health check user -health_check_password = '' - # Password for health check user -health_check_max_retries = 0 - # Maximum number of times to retry a failed health check before giving up. -health_check_retry_delay = 1 - # Amount of time to wait (in seconds) between retries. -connect_timeout = 10000 - # Timeout value in milliseconds before giving up to connect to backend. - # Default is 10000 ms (10 second). Flaky network user may want to increase - # the value. 0 means no timeout. - # Note that this value is not only used for health check, - # but also for ordinary conection to backend. - -#------------------------------------------------------------------------------ -# FAILOVER AND FAILBACK -#------------------------------------------------------------------------------ - -failover_command = '' - # Executes this command at failover - # Special values: - # %d = node id - # %h = host name - # %p = port number - # %D = database cluster path - # %m = new master node id - # %H = hostname of the new master node - # %M = old master node id - # %P = old primary node id - # %r = new master port number - # %R = new master database cluster path - # %% = '%' character -failback_command = '' - # Executes this command at failback. - # Special values: - # %d = node id - # %h = host name - # %p = port number - # %D = database cluster path - # %m = new master node id - # %H = hostname of the new master node - # %M = old master node id - # %P = old primary node id - # %r = new master port number - # %R = new master database cluster path - # %% = '%' character - -{% if pgpool_version is version_compare('4.1.4', '>=') %} -failover_on_backend_error = {{ pgpool_fail_over_on_backend_error }} -{% else %} -fail_over_on_backend_error = {{ pgpool_fail_over_on_backend_error }} -{% endif %} - # Initiates failover when reading/writing to the - # backend communication socket fails - # If set to off, pgpool will report an - # error and disconnect the session. - -search_primary_node_timeout = 10 - # Timeout in seconds to search for the - # primary node when a failover occurs. - # 0 means no timeout, keep searching - # for a primary node forever. - -#------------------------------------------------------------------------------ -# ONLINE RECOVERY -#------------------------------------------------------------------------------ - -recovery_user = '{{ pgpool_recovery_user }}' - # Online recovery user -{% if pgpool_recovery_user_pwd is defined %} -recovery_password = '{{ pgpool_recovery_user_pwd | default() }}' - # Online recovery password -{% else %} -recovery_password = '' -{% endif %} -recovery_1st_stage_command = '{{ pgpool_recovery_stage1_script }}' - # Executes a command in first stage -recovery_2nd_stage_command = '{{ pgpool_recovery_stage2_script }}' - # Executes a command in second stage -recovery_timeout = {{ pgpool_recovery_timeout }} - # Timeout in seconds to wait for the - # recovering node's postmaster to start up - # 0 means no wait -client_idle_limit_in_recovery = {{ pgpool_client_idle_limit_in_recovery }} - # Client is disconnected after being idle - # for that many seconds in the second stage - # of online recovery - # 0 means no disconnection - # -1 means immediate disconnection - - -#------------------------------------------------------------------------------ -# WATCHDOG -#------------------------------------------------------------------------------ - -# - Enabling - - -use_watchdog = {{ pgpool_use_watchdog }} - # Activates watchdog - # (change requires restart) - -# -Connection to up stream servers - - -trusted_servers = '{{ pgpool_wd_trusted_servers }}' - # trusted server list which are used - # to confirm network connection - # (hostA,hostB,hostC,...) - # (change requires restart) -ping_path = '/bin' - # ping command path - # (change requires restart) - -# - Watchdog communication Settings - - -wd_hostname = '{{ ansible_default_ipv4.address }}' - # Host name or IP address of this watchdog - # (change requires restart) -wd_port = 9000 - # port number for watchdog service - # (change requires restart) -wd_authkey = '{{ pgpool_wd_authkey }}' - # Authentication key for watchdog communication - # (change requires restart) - -# - Virtual IP control Setting - - -delegate_IP = '{{ pgpool_virtual_ip }}' - # delegate IP address - # If this is empty, virtual IP never bring up. - # (change requires restart) -if_cmd_path = '/sbin' - # ifconfig command path - # (change requires restart) -if_up_cmd = 'ip_script addr add {{ pgpool_virtual_ip }}/{{ pgpool_virtual_netmask }} dev {{ ansible_default_ipv4.alias }}' - # startup delegate IP command - # (change requires restart) -if_down_cmd = 'ip_script addr del {{ pgpool_virtual_ip }}/{{ pgpool_virtual_netmask }} dev {{ ansible_default_ipv4.alias }}' - # shutdown delegate IP command - # (change requires restart) - -arping_path = '/usr/local/bin' # arping command path - # (change requires restart) - -arping_cmd = 'arping_script -U $_IP_$ -w 1' - # arping command - # (change requires restart) - -# - Behaivor on escalation Setting - - -clear_memqcache_on_escalation = on - # Clear all the query cache on shared memory - # when standby pgpool escalate to active pgpool - # (= virtual IP holder). - # This should be off if client connects to pgpool - # not using virtual IP. - # (change requires restart) -wd_escalation_command = 'date >> {{ psql_log_dir }}/wd_pgpool_escalation.log' - # Executes this command at escalation on new active pgpool. - # (change requires restart) -wd_de_escalation_command = 'date >> {{ psql_log_dir }}/wd_pgpool_de_escalation.log' - -# - Lifecheck Setting - - -# -- common -- -wd_monitoring_interfaces_list = 'any' - -wd_lifecheck_method = 'heartbeat' - # Method of watchdog lifecheck ('heartbeat' or 'query') - # (change requires restart) -wd_interval = 10 - # lifecheck interval (sec) > 0 - # (change requires restart) - -wd_priority = {{ pgpool_wd_priority }} - -{% if pgpool_wd_heartbeat_mode %} -# -- heartbeat mode -- - -wd_heartbeat_port = {{ pgpool_wd_heartbeat_port }} - # Port number for receiving heartbeat signal - # (change requires restart) -wd_heartbeat_keepalive = {{ pgpool_wd_heartbeat_keepalive_int }} - # Interval time of sending heartbeat signal (sec) - # (change requires restart) -wd_heartbeat_deadtime = {{ pgpool_wd_heartbeat_deadtime }} - # Deadtime interval for heartbeat signal (sec) - # (change requires restart) -heartbeat_destination0 = '{{ pgpool_wd_heartbeat_dest0 }}' - # Host name or IP address of destination 0 - # for sending heartbeat signal. - # (change requires restart) -heartbeat_destination_port0 = {{ pgpool_wd_heartbeat_dest0_port }} - # Port number of destination 0 for sending - # heartbeat signal. Usually this is the - # same as wd_heartbeat_port. - # (change requires restart) -heartbeat_device0 = '' - # Name of NIC device (such like 'eth0') - # used for sending/receiving heartbeat - # signal to/from destination 0. - # This works only when this is not empty - # and pgpool has root privilege. - # (change requires restart) - -{% else %} -# -- query mode -- - -wd_life_point = 3 - # lifecheck retry times - # (change requires restart) -wd_lifecheck_query = 'SELECT 1' - # lifecheck query to pgpool from watchdog - # (change requires restart) -wd_lifecheck_dbname = 'template1' - # Database name connected for lifecheck - # (change requires restart) -wd_lifecheck_user = 'nobody' - # watchdog user monitoring pgpools in lifecheck - # (change requires restart) -wd_lifecheck_password = '' - # Password for watchdog user in lifecheck - # (change requires restart) - - -{% endif %} -# - Other pgpool Connection Settings - - -other_pgpool_hostname0 = '{{ pgpool_wd_heartbeat_dest0 }}' - # Host name or IP address to connect to for other pgpool 0 - # (change requires restart) -other_pgpool_port0 = {{ pgpool_port }} - # Port number for othet pgpool 0 - # (change requires restart) -other_wd_port0 = {{ pgpool_wd_port }} - # Port number for othet watchdog 0 - # (change requires restart) - -#------------------------------------------------------------------------------ -# OTHERS -#------------------------------------------------------------------------------ -relcache_expire = {{ pgpool_relcache_expire }} - # Life time of relation cache in seconds. - # 0 means no cache expiration(the default). - # The relation cache is used for cache the - # query result against PostgreSQL system - # catalog to obtain various information - # including table structures or if it's a - # temporary table or not. The cache is - # maintained in a pgpool child local memory - # and being kept as long as it survives. - # If someone modify the table by using - # ALTER TABLE or some such, the relcache is - # not consistent anymore. - # For this purpose, cache_expiration - # controls the life time of the cache. -relcache_size = 256 - # Number of relation cache - # entry. If you see frequently: - # "pool_search_relcache: cache replacement happend" - # in the pgpool log, you might want to increate this number. - -check_temp_table = on - # If on, enable temporary table check in SELECT statements. - # This initiates queries against system catalog of primary/master - # thus increases load of master. - # If you are absolutely sure that your system never uses temporary tables - # and you want to save access to primary/master, you could turn this off. - # Default is on. - -check_unlogged_table = on - # If on, enable unlogged table check in SELECT statements. - # This initiates queries against system catalog of primary/master - # thus increases load of master. - # If you are absolutely sure that your system never uses unlogged tables - # and you want to save access to primary/master, you could turn this off. - # Default is on. - -{% if pgpool_memory_cache_enabled %} -#------------------------------------------------------------------------------ -# IN MEMORY QUERY MEMORY CACHE -#------------------------------------------------------------------------------ -memory_cache_enabled = on - # If on, use the memory cache functionality, off by default -memqcache_method = '{{ pgpool_memqcache_method }}' - # Cache storage method. either 'shmem'(shared memory) or - # 'memcached'. 'shmem' by default - # (change requires restart) -memqcache_memcached_host = '{{ pgpool_memqcache_memcached_host }}' - # Memcached host name or IP address. Mandatory if - # memqcache_method = 'memcached'. - # Defaults to localhost. - # (change requires restart) -memqcache_memcached_port = {{ pgpool_memqcache_memcached_port }} - # Memcached port number. Mondatory if memqcache_method = 'memcached'. - # Defaults to 11211. - # (change requires restart) -memqcache_total_size = 67108864 - # Total memory size in bytes for storing memory cache. - # Mandatory if memqcache_method = 'shmem'. - # Defaults to 64MB. - # (change requires restart) -memqcache_max_num_cache = 1000000 - # Total number of cache entries. Mandatory - # if memqcache_method = 'shmem'. - # Each cache entry consumes 48 bytes on shared memory. - # Defaults to 1,000,000(45.8MB). - # (change requires restart) -memqcache_expire = {{ pgpool_memqcache_expire }} # Memory cache entry life time specified in seconds. - # 0 means infinite life time. 0 by default. - # (change requires restart) -memqcache_auto_cache_invalidation = {{ pgpool_memqcache_auto_cache_invalidation }} - # If on, invalidation of query cache is triggered by corresponding - # DDL/DML/DCL(and memqcache_expire). If off, it is only triggered - # by memqcache_expire. on by default. - # (change requires restart) -memqcache_maxcache = 409600 - # Maximum SELECT result size in bytes. - # Must be smaller than memqcache_cache_block_size. Defaults to 400KB. - # (change requires restart) -memqcache_cache_block_size = 1048576 - # Cache block size in bytes. Mandatory if memqcache_method = 'shmem'. - # Defaults to 1MB. - # (change requires restart) -memqcache_oiddir = '/var/log/pgpool/oiddir' - # Temporary work directory to record table oids - # (change requires restart) -white_memqcache_table_list = '' - # Comma separated list of table names to memcache - # that don't write to database - # Regexp are accepted -black_memqcache_table_list = '' - # Comma separated list of table names not to memcache - # that don't write to database - # Regexp are accepted -{% else %} -#------------------------------------------------------------------------------ -# IN MEMORY QUERY MEMORY CACHE -#------------------------------------------------------------------------------ -memory_cache_enabled = off - # If on, use the memory cache functionality, off by default -memqcache_method = 'shmem' - # Cache storage method. either 'shmem'(shared memory) or - # 'memcached'. 'shmem' by default - # (change requires restart) -{% endif %} diff --git a/templates/pgpool_recovery_stage_1.j2 b/templates/pgpool_recovery_stage_1.j2 deleted file mode 100644 index 9427182..0000000 --- a/templates/pgpool_recovery_stage_1.j2 +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash -# PGpool stage 1 recovery script -# Reference: http://michael.stapelberg.de/Artikel/replicated_postgresql_with_pgpool -# -TS=$(date +%Y-%m-%d_%H-%M-%S) -MASTER_HOST=$(hostname -f) -# $1 is {{ psql_data_dir }} while $3 is {{ psql_data_dir }} -#MASTER_DATA="{{ psql_data_dir }}" -MASTER_DATA="${1}" -RECOVERY_TARGET=${2} -#RECOVERY_DATA="{{ psql_data_dir }}" -RECOVERY_DATA="${3}" - -logger "pgpool_recovery_1: MASTER_DATA=$MASTER_DATA" -logger "pgpool_recovery_1: RECOVERY_DATA=$RECOVERY_DATA" - -# Ensure that postgres is shut down on the target node -ssh -T $RECOVERY_TARGET sudo /etc/init.d/postgresql stop - -# Move the PostgreSQL data directory out of our way. -ssh -T $RECOVERY_TARGET \ - "[ -d $RECOVERY_DATA ] && mv $RECOVERY_DATA $RECOVERY_DATA.$TS" - -# We only use archived WAL logs during recoveries, so delete all -# logs from the last recovery to limit the growth. -rm $MASTER_DATA/archive_log/* - -# With this file present, our archive_command will actually -# archive WAL files. -touch $MASTER_DATA/archive_log/backup_in_progress - -# Perform a backup of the database. -ssh -T $RECOVERY_TARGET \ - "pg_basebackup -h $MASTER_HOST -D $RECOVERY_DATA --xlog" - -# Configure the restore_command to use the archive_log WALs we’ll copy -# over in 2nd_stage.sh. -echo "restore_command = 'cp $RECOVERY_DATA/archive_log/%f %p'" | \ - ssh -T $RECOVERY_TARGET "cat > $RECOVERY_DATA/recovery.conf" - diff --git a/templates/pgpool_recovery_stage_2.j2 b/templates/pgpool_recovery_stage_2.j2 deleted file mode 100644 index 4c22bed..0000000 --- a/templates/pgpool_recovery_stage_2.j2 +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash -# Online recovery 2nd stage script -# -#MASTER_DATA="{{ psql_data_dir }}" -MASTER_DATA="${1}" -RECOVERY_TARGET=${2} -#RECOVERY_DATA="{{ psql_data_dir }}" -RECOVERY_DATA="${3}" - -port="{{ psql_db_port }}" # PostgreSQL port number - -archive_dir="{{ psql_wal_archiving_log_dir }}" - -logger "pgpool_recovery_2: MASTER_DATA=$MASTER_DATA" -logger "pgpool_recovery_2: RECOVERY_DATA=$RECOVERY_DATA" -logger "pgpool_recovery_2: archive_dir=$archive_dir" - -# Force to flush current value of sequences to xlog -psql -p $port -t -c 'SELECT datname FROM pg_database WHERE NOT datistemplate AND datallowconn' template1| -while read i -do - if [ "$i" != "" ];then - psql -p $port -c "SELECT setval(oid, nextval(oid)) FROM pg_class WHERE relkind = 'S'" $i - fi -done - -# Flush all transactions to disk. Since pgpool stopped all connections, -# there cannot be any data that does not reside on disk until the -# to-be-recovered host is back on line. -psql -p $port -c "SELECT pgpool_switch_xlog('$MASTER_DATA/archive_log')" template1 - -# Copy over all archive logs at once. -rsync -avx --delete $MASTER_DATA/archive_log/ \ - $RECOVERY_TARGET:$RECOVERY_DATA/archive_log/ - -# Delete the flag file to disable WAL archiving again. -rm $MASTER_DATA/archive_log/backup_in_progress diff --git a/templates/pgpool_remote_start.j2 b/templates/pgpool_remote_start.j2 deleted file mode 100644 index 397c491..0000000 --- a/templates/pgpool_remote_start.j2 +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -DEST=$1 -DESTDIR=$2 - -# Deploy a base backup -ssh -T $DEST 'cd {{ psql_data_root_dir }}; tar zxf pgsql.tar.gz' 2>/dev/null 1>/dev/null < /dev/null -# Startup PostgreSQL server -ssh -T $DEST sudo /etc/init.d/postgresql start 2>/dev/null 1>/dev/null < /dev/null