流复制(级联,3节点)
Master - 172.16.40.100
mkdir /pgccc/master
chown -R postgres:postgres /pgccc/master
su - postgres
/usr/pgsql-14/bin/initdb -D /pgccc/master
cd /pgccc/master
vi postgresql.conf
listen_addresses =’*’
port = 2001
wal_level = replica
vi pg_hba.conf
host replication repl 172.16.40.101/32 md5
/usr/pgsql-14/bin/pg_ctl -D /pgccc/master -l logfile start
psql -p 2001
create role repl login replication encrypted password ‘repl123!’;
================
Slave1 - 172.16.40.101
mkdir /pgccc/slave1
chown -R postgres:postgres /pgccc/slave1
su - postgres
设置免登录
touch .pgpass
chmod 0600 .pgpass
vi ~/.pgpass
172.16.40.100:2001:replication:repl:repl123!
pg_basebackup -h 172.16.40.100 -p 2001 -U repl -D /pgccc/slave1 -Xs -P -R (如果有R就会把主机的信息反复到auto里,改配置的时候就要在auto里改)
cd /pgccc/slave1
vi postgresql.auto.conf
primary_conninfo = ‘user=repl password=’‘repl123!’’ channel_binding=prefer host=172.16.40.100 port=2001 application_name=slave1 sslmode=prefer sslcompression=0 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres target_session_attrs=any’
vi postgresql.conf
primary_conninfo = ‘user=repl passfile=’’/home/postgres/.pgpass’’ host=172.16.40.100 port=2001 application_name=slave1’
chmod 700 -R /pgccc/slave1
/usr/pgsql-14/bin/pg_ctl -D /pgccc/slave1 -l logfile start
级联用
vi pg_hba.conf
host replication repl 172.16.40.102/32 md5
/usr/pgsql-14/bin/pg_ctl -D /pgccc/slave1 restart
================
Slave2 - 172.16.40.102
mkdir /pgccc/slave2
chown -R postgres:postgres /pgccc/slave2
su - postgres
设置免登录
touch .pgpass
chmod 0600 .pgpass
vi ~/.pgpass
172.16.40.100:2001:replication:repl:repl123!
pg_basebackup -h 172.16.40.101 -p 2001 -U repl -D /pgccc/slave2 -Xs -P -R
cd /pgccc/slave2
vi postgresql.auto.conf
primary_conninfo = ‘user=repl password=’‘repl123!’’ channel_binding=prefer host=172.16.40.102 port=2001 application_name=slave2 sslmode=prefer sslcompression=0 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres target_session_attrs=any’
vi postgresql.conf
primary_conninfo = ‘user=repl passfile=’’/home/postgres/.pgpass’’ host=192.168.108.101 port=2001 application_name=slave2’
如果权限有问题
chmod 700 -R /pgccc/slave2
/usr/pgsql-14/bin/pg_ctl -D /pgccc/slave2 -l logfile start
================
查看级联复制状态
主库
psql -p 2001
Select pid,usename,application_name,client_addr,state,sync_state,sync_priority from pg_stat_replication;
create table t(id int4);
Insert into t values(1);
从库
psql -p 2001
select * from pg_stat_wal_receiver;
select * from t;
单机版与多机版的主要区别是前者要注意修改Port,后者要注意修改IP