pgpoolインストール構成整理

8724 ワード

PostgreSQLをインストールし、3ノードストリームレプリケーション環境を構成するには、詳しくは説明しません.大体の手順は以下の通りです.
1.ソースのダウンロード
2.インストールを解凍し、./configure--prefix=/usr/pgsql-10実行時に--without-readlineというプロンプトが表示されますが、システムにreadlineがすでに存在します.一般的にdevelライブラリがインストールされていません.
3.initdb 
4.dataディレクトリのpostgresqlを変更する.confファイル、主に3つの場所があります:listen_address='*',  wal_レベル=replica(10はデフォルトのようですが、9はhot_standbyに変更します)、hot_standby=on
5.dataディレクトリのpg_を変更するhba.conf,セグメント許可の追加
6.スタンバイノード上のdataディレクトリの下でpg_を実行するbasebackup-ep-R-h主IP-D./,次にrecoveryを変更します.confファイル、trigger_を追加file='/tmp/.tfile'は最後の行になると、データベースを起動してプライマリノードと非同期になります.同期を維持するには、プライマリノードのpostgresql.confでsynchronse_を変更するnames='frist 1(*)',スペアノードのrecovery.confのprimary_infoアプリケーションの追加name='standby 1'でいいです.
7.他のスペアノードは上と同じように動作します.
 
pgpoolのインストール
1.ダウンロードソースのインストール:
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_md 5-u postgres postgresが生成したパスワードは間違っていて、おかしいです.
pg_md5 -u postgres postgres 
e8a48653851e28c69d0506508fb27fc5
-mパラメータを追加すると、ディレクトリの下にpool_が生成されます.passwdファイル、中のmd 5パスワードはまた正しいです
 
SQL文で調べたパスワードは次のとおりです.
postgres=# select passwd from pg_shadow where usename='postgres';
md53175bce1d3201d16594cebf9d7eb3f9d
 
echo "postgres:md53175bce1d3201d16594cebf9d7eb3f9d">>pcp.conf
 
6.pool_を生成passwd
pg_md 5-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.主従切替は同期ノードを探すか、それとも2つのslaveノードのnode_idの順番が前のこれ?
3.もし2つのslaveが非同期ノードであれば、xlog(wal)lsn最大のノードを探してmasterをしますか?
4.マスターノードが再オンラインになると、自動的に新しいマスターノードと同期しますか?
 
転載先:https://www.cnblogs.com/kuang17/p/9264449.html