4. Configurare il database per la replica di streaming come node0
La best practice prevede un utente dedicato per l'accesso alla replica.
Passo 1
Creare un replicator utente.
psql
CREATE USER replicator REPLICATION LOGIN CONNECTION LIMIT 5
PASSWORD 'trUf6yuz2?_Gub';
\q
Passo 2
Modificare postgresql.conf in modo che supporti la replica.
vim /db/postgres/postgresql.conf
Configurare i seguenti parametri:
Parametri postgres.conf per node0
riga
Parametro
Valore
Nodo
1
listen_addresses
*
* include tutti gli indirizzi. Modificare questo valore in base al requisito di protezione.
2
port
5432
3
max_connections
150
4
archive_mode
il
5
wal_level
replica
6
Fsync
il
7
synchronous_commit
il
8
wal_sync_method
open_sync
9
max_wal_sendors
10
10
synchronous_standby_names
"node1,node2"
11
hot_standby
il
12
hot_standby_feedback
il
13
wal_keep_segments
500
14
max_replication_slots
10
15
archive_command
"cp -f %p /db/node0archive/%f</dev/null"
16
checkpoint_segments
3
Passo 3
Lo script start_replication.sh viene utilizzato per iniziare il processo di replica su node1 e node2.
* 
Eseguire lo script start_replication.sh solo da node1 e node2
vim /db/bin/start_replication.sh
con il contenuto seguente:
cp /db/postgres/postgresql.conf /db/bin/postgresql.conf
cp /db/postgres/pg_hba.conf /db/bin/pg_hba.conf
rm -rf /db/postgres
rm -rf /db/thingworx/*
pg_basebackup -h $1 -D /db/postgres -U replicator --xlog-method=stream
-v -P
cp /db/bin/postgresql.conf /db/postgres/postgresql.conf
cp /db/bin/pg_hba.conf /db/postgres/pg_hba.conf
Passo 4
Eseguire lo script retargetMaster.sh per node0.
Creare lo script retargetMaster.sh:
vim /db/bin/retargetMaster.sh
con il contenuto seguente:
#!/bin/bash -x
NEW_MASTER_HOSTNAME=$1
NEW_ARCHIVE_FOLDER=$2
if grep -q "$1" /db/postgres/recovery.conf
then
echo $1 is current target,server does not need a restart, done!
else
#service postgresql stop
/usr/pgsql-10.x/bin/pg_ctl -D /db/postgres stop -m fast
#/db/bin/start_replication.sh $NEW_MASTER_HOSTNAME
# Write out new recovery.conf file
rm /db/postgres/recovery.conf
echo "standby_mode = 'on'" >> /db/postgres/recovery.conf
echo "primary_conninfo = 'port=5432 host=$NEW_MASTER_HOSTNAME user=replicator password=trUf6yuz2?_Gub sslmode=disable sslcompression=1 application_name=node0'" >> /db/postgres/recovery.conf
echo "trigger_file='/db/trigger'" >> /db/postgres/recovery.conf
echo "restore_command = 'cp -f $NEW_ARCHIVE_FOLDER/%f %p>/db/postgres/recovery.conf
echo "archive_cleanup_command = '/usr/bin/pg_archivecleanup $NEW_ARCHIVE_FOLDER %r>/db/postgres/recovery.conf
echo "recovery_target_timeline = 'latest'" >> /db/postgres/recovery.conf
/usr/pgsql-10.x/bin/pg_ctl -D /db/postgres -l /db/postgres.log start
echo target is $1 now
fi
Quindi rendere gli script eseguibili:
chmod a+x /db/bin/start_replication.sh
chmod a+x /db/bin/reargetMaster.sh
Passo 5
Aggiornare l'impostazione di pg_hba.
vim /db/postgres/pg_hba.conf
e aggiornare le righe seguenti:
host all all 10.10.0.0/16 trust
host replicator replicator 10.10.0.0/16 trust
Le impostazioni host precedenti possono variare in base al requisito di protezione. Ad esempio, è possibile utilizzare md5 per l'autenticazione invece che per l'attendibilità.
È stato utile?