[Playbook] PostgreSQL 다중화 구성
PostgreSQL 다중화 구성
미리 /etc/hosts 파일에 pgsql01,02,03의 ip를 넣어줬습니다.
inventory
[master] pgsql01 [slave] pgsql02 pgsql03 . . . [postgres:children] master slave ansible_user=root ansible_password=<mypassword>
10,11 버전 사용가능. (9.6 사용 불가)
ansible-playbook -i inventory inst_psql.yml –extra-vars “version=11”
--- - name: PostgreSQL install hosts: postgres gather_facts: yes vars: pgsql_ver: "{{ version }}" pgdata: "/var/lib/pgsql/{{ pgsql_ver }}" pg_bin: "pgsql-{{ pgsql_ver }}" tasks: - name: Add postgres Group group: name: postgres gid: 5001 state: present - name: Add Postgres User user: name: postgres shell: /bin/bash uid: 5001 group: postgres home: /home/postgres - name: create directory file: path: "{{ pgdata }}" state: directory owner: postgres group: postgres - name: Setting bash_profile blockinfile: path: /home/postgres/.bash_profile block: | [ -f /etc/profile ] && source /etc/profile export PGDATA={{ pgdata }}/data # If you want to customize your settings, # Use the file below. This is not overridden # by the RPMS. [ -f /home/postgres/.pgsql_profile ] && source /home/postgres/.pgsql_profile export PS1="\[\e[32;1m\]\u@\[\e[34;1m\]\h:\[\e[31;1m\]\w]$ \[\e[0m\]" export PATH=$PATH:$HOME/bin:/usr/{{ pg_bin }}/bin alias vi='vim' - name: install postgresql pgdg repository yum: name: https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm state: present - name: install postgresql yum: name: - postgresql{{ pgsql_ver }} - postgresql{{ pgsql_ver }}-server - postgresql{{ pgsql_ver }}-contrib state: present - name: Master setup hosts: master become: yes become_user: postgres vars: pgdata_path: /var/lib/pgsql/{{ pgsql_ver }}/data shared_buffer: "{{ (ansible_memory_mb.real.total / 2048) |round(0,'common')|int|abs }}" tasks: - name: PostgreSQL initdb shell: "/usr/pgsql-{{ pgsql_ver }}/bin/initdb -D {{ pgdata_path }}" - name: set postgresql.conf replace: path: "{{ pgdata_path }}/postgresql.conf" regexp: "{{ item.regexp1 }}" replace: "{{ item.replace }}" with_items: - { regexp1: '#wal_level = replica', replace: 'wal_level = replica' } - { regexp1: '#work_mem = 4MB', replace: 'work_mem = 20MB' } - { regexp1: '#maintenance_work_mem = 64MB', replace: 'maintenance_work_mem = 512MB' } - { regexp1: '#archive_mode = off', replace: 'archive_mode = on' } - { regexp1: "#archive_command = ''", replace: "archive_command = 'true'" } - { regexp1: "#listen_addresses = 'localhost'", replace: "listen_addresses = '*'" } - { regexp1: 'max_connections = 100', replace: 'max_connections = 300' } - { regexp1: 'shared_buffers = 128MB', replace: 'shared_buffers = {{ shared_buffer }}GB' } - { regexp1: 'max_wal_size = 1GB', replace: 'max_wal_size = 2GB' } - { regexp1: 'min_wal_size = 80MB', replace: 'min_wal_size = 2GB' } - { regexp1: '#max_wal_senders = 10', replace: 'max_wal_senders = 4' } - { regexp1: '#wal_keep_segments = 0', replace: 'wal_keep_segments = 10' } - { regexp1: '#hot_standby = on', replace: 'hot_standby = on' } - { regexp1: "log_line_prefix = '%m \\[%p\\] '", replace: "log_line_prefix = '%t %u@%r/%d \\[%p\\] '" } - { regexp1: "log_filename = 'postgresql-%a.log'", replace: "log_filename = 'pglog-%Y%m%d%H.log'" } - name: set pg_hba.conf lineinfile: path: '{{ pgdata_path }}/pg_hba.conf' line: "{{ item.line1 }}" with_items: - { line1: "host all all 0.0.0.0/0 md5" } - { line1: "host replication postgres 192.168.10.0/24 trust" } - name: Start Database shell: "/usr/pgsql-{{ pgsql_ver }}/bin/pg_ctl start -D {{ pgdata_path }}" - name: Slave Setup hosts: slave become: yes become_user: postgres vars: pgdata_path: /var/lib/pgsql/{{ pgsql_ver }}/data tasks: - name: to Slave bakcup streaming shell: "/usr/pgsql-{{ pgsql_ver }}/bin/pg_basebackup -h pgsql01 -U postgres -D {{ pgdata_path }} -X stream -P" - name: create recovery.conf file: path: "{{ pgdata_path }}/recovery.conf" owner: postgres group: postgres state: touch - name: recovery.conf setup blockinfile: path: "{{ pgdata_path }}/recovery.conf" block: | recovery_target_timeline = 'latest' standby_mode = on primary_conninfo = 'host=pgsql01 port=5432 user=postgres' - name: start slave database shell: "/usr/pgsql-{{ pgsql_ver }}/bin/pg_ctl start -D {{ pgdata_path }}"
shared_buffer는 Total Memory의 절반을 사용합니다.
최신 댓글