pgpool安裝配置整理

安裝PostgreSQL並配置三節點流複製環境,就不仔細說了,大體步驟以下:php

1.下載源碼node

2.解壓安裝,若是在./configure --prefix=/usr/pgsql-10執行時提示要--without-readline,而系統已經有了readline通常是沒有安裝devel庫sql

3.initdb 數據庫

4.修改data目錄下的postgresql.conf文件,主要有三個地方:listen_address='*',  wal_level=replica(10好像是默認的,9要改成hot_standby),hot_standby=onbash

5.修改data目錄下的pg_hba.conf,添加網段容許app

6.備節點上data目錄下執行pg_basebackup -Fp -R -h 主IP -D ./ ,而後修改recovery.conf文件,添加trigger_file='/tmp/.tfile'到最後一行,啓動數據庫就與主節點保持異步了。若是想保持同步,則在主節點的postgresql.conf中修改synchronse_names='frist 1(*)' , 備節點的recovery.conf的primary_info添加application_name='standby1'便可。ssh

7.其餘備節點同上操做。異步

 

安裝pgpoolpost

1. 下載源碼安裝:spa

wget http://www.pgpool.net/download.php?f=pgpool-II-3.7.4.tar.gz

 

2. 解壓並安裝

tar -xzvf download.php\?f\=pgpool-II-3.7.4.tar.gz

cd pgpool-II-3.7.4/

./configure --prefix=/usr/pgpool --with-pgsql=/usr/pgsql-10/

make && make install

 

3.配置節點互信

ssh-keygen

而後將全部的id_rsa.pub彙總到au裏面,而後分發到每一個節點

 

4.添加環境變量

echo "export PATH=$PATH:/usr/pgpool/bin">>~/.bash_profile

source ~/.bash_profile

 

5.修改pcp.conf

cd /usr/pgpool/etc

cp pcp.conf.sample pcp.conf

 

pg_md5 -u postgres postgres 生成的密碼是錯的,很奇怪。

pg_md5 -u postgres postgres 

e8a48653851e28c69d0506508fb27fc5

添加-m參數會在該目錄下生成一個pool_passwd文件,裏面的md5密碼又是對的

 

經過SQL語句查出來的密碼是:

postgres=# select passwd from pg_shadow where usename='postgres';

md53175bce1d3201d16594cebf9d7eb3f9d

 

echo "postgres:md53175bce1d3201d16594cebf9d7eb3f9d">>pcp.conf

 

6.生成pool_passwd

pg_md5 -m -u postgres postgres (使用該命令會自動生成文件)

 

7.修改pgpool.conf

cp pgpool.conf.sample pgpool.conf

listen_addresses = '*' ...... backend_hostname0 = '10.9.8.185' # Host name or IP address to connect to for backend 0 backend_port0 = 5432 # Port number for backend 0 backend_weight0 = 1 # Weight for backend 0 (only in load balancing mode) backend_data_directory0 = '/var/lib/pgsql/10/data' # Data directory for backend 0 backend_flag0 = 'ALLOW_TO_FAILOVER' # Controls various backend behavior # ALLOW_TO_FAILOVER, DISALLOW_TO_FAILOVER # or ALWAYS_MASTER backend_hostname1 = '10.9.8.189' backend_port1 = 5432 backend_weight1 = 1 backend_data_directory1 = '/var/lib/pgsql/10/data' backend_flag1 = 'ALLOW_TO_FAILOVER' backend_hostname2 = '10.9.8.191' backend_port2 = 5432 backend_weight2 = 1 backend_data_directory2 = '/var/lib/pgsql/10/data' backend_flag2 = 'ALLOW_TO_FAILOVER'

......

follow_master_command = '/usr/pgpool/etc/failover.sh %H %R'

 

 

8.修改failover.sh腳本

new_master=$1 pgdata=$2 # Do nothing if standby goes down. if [ $failed_node = 1 ]; then exit 0; fi # Create the trigger file. #/usr/bin/ssh -T $new_master /bin/touch $trigger_file /usr/bin/ssh -T $new_master /usr/pgsql-10/bin/pg_ctl promote -D $pgdata exit 0;

 

9.修改pool_hba.conf文件

echo "host    all         all         10.9.8.1/24           md5" >> pool_hba.conf

 

10.啓動pgpool 查看節點狀態

pgpool -n>/var/log/pgpool.log 2>&1 &

psql -h 10.9.8.187 -U postgres -p 9999 -d postgres

postgres=# show pool_nodes; node_id |  hostname  | port | status | lb_weight |  role  | select_cnt | load_balance_node | replication_delay ---------+------------+------+--------+-----------+--------+------------+-------------------+-------------------
 0       | 10.9.8.185 | 5432 | up     | 0.333333  | master | 0          | true              | 0
 1       | 10.9.8.189 | 5432 | up     | 0.333333  | slave  | 0          | false             | 0
 2       | 10.9.8.191 | 5432 | up     | 0.333333  | slave  | 0          | false             | 0 (3 行記錄) postgres=#

 

後面須要驗證的問題有:

1.主從切換後,另一個slave會不會和新的主節點保持同步?

2.主從切換是找同步節點嗎,仍是在兩個slave節點中node_id順序靠前的這個?

3.若是兩個slave都是異步節點,會找xlog(wal)lsn最大的節點作master嗎?

4.主節點從新上線,會自動跟新主節點保持同步嗎?

相關文章
相關標籤/搜索