PostgreSQL o Postgres è un sistema di gestione di database relazionali a oggetti (ORDBMS) open source con oltre 15 anni di sviluppo attivo. È un potente server di database in grado di gestire carichi di lavoro elevati. PostgreSQL può essere utilizzato su server Linux, Unix, BSD e Windows.
La replica del database master/slave è un processo di copia (sincronizzazione) dei dati da un database su un server (il master) a un database su un altro server (lo slave). Il vantaggio principale di questo processo è la distribuzione dei database su più macchine, quindi quando il server master ha un problema, è disponibile una macchina di backup con gli stessi dati per gestire le richieste senza interruzioni.
PostgreSQL fornisce diversi modi per replicare un database. Può essere utilizzato per scopi di backup e per fornire un server di database ad alta disponibilità. In questo tutorial, ti mostreremo come installare e configurare la replica Master-Slave di PostgreSQL 9.6 su un server CentOS 7. Useremo la modalità Hot standby, ed è un ottimo punto di partenza per imparare a fondo PostgreSQL.
Cosa faremo
- Installa PostgreSQL 9.6
- Avvia e configura PostgreSQL 9.6
- Configura Firewalld
- Configura il server principale
- Configura server slave
- Test
Prerequisito
- 1 server CentOS 7
- Maestro - Autorizzazione di lettura e scrittura - IP:10.0.15.10
- 1 server CentOS 7
- Schiavo - Autorizzazione di sola lettura- IP:10.0.15.11
- privilegi radice
Passaggio 1:installazione di PostgreSQL 9.6
In questo tutorial, discuteremo come installare l'ultima versione di PostgreSQL 9.6 sul server CentOS 7. Per impostazione predefinita, il repository ufficiale di CentOS offre una versione precedente, quindi è necessario installare PostgreSQL dal repository ufficiale.
Aggiungi un nuovo repository PostgreSQL 9.6 al sistema.
yum -y install https://yum.postgresql.org/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
Ora installa PostgreSQL 9.6 usando il seguente comando yum.
yum -y install postgresql96-server postgresql96-contrib
Quindi, in questo modo, puoi installare PostgreSQL 9.6.
Passaggio 2 - Avvia e configura PostgreSQL 9.6
Prima di avviare il servizio postgres, è necessario inizializzare il database. Per questo, vai su '/usr/pgsql-9.6/bin ' directory e inizializza il database con postgres setup 'postgresql96-setup '.
cd /usr/pgsql-9.6/bin
./postgresql96-setup initdb
Quindi, avvia il servizio postgres e abilitalo per l'avvio automatico all'avvio del sistema.
systemctl start postgresql-9.6
systemctl enable postgresql-9.6
Per impostazione predefinita, postgres viene eseguito sulla porta 5432. Quindi assicurati che lo stato della porta 5432 sia 'ASCOLTA ' eseguendo il comando netstat nel modo seguente.
netstat -plntu
Se non hai un comando netstat, installa net-tools. Fa parte degli strumenti di rete.
yum -y install net-tools
Quindi PostgreSQL 9.6 è stato avviato. Ma dobbiamo ancora configurare la password per l'utente postgres. Accedi come utente 'postgres', quindi accedi alla shell 'psql' di postgres.
su - postgres
psql
Dai il 'postgres ' utente nuova password con la query sottostante.
\password postgres
Enter new password:
Quindi PostgreSQL 9.6 è stato avviato ed è stata configurata una nuova password per l'utente postgres.
Passaggio 3 - Configura Firewalld
Firewalld è uno strumento di gestione del firewall predefinito su CentOS 7. Inizieremo questo servizio e apriremo la porta per la connessione PostgreSQL.
Avvia firewalld e abilitalo per l'avvio automatico all'avvio del sistema utilizzando i seguenti comandi:
systemctl start firewalld
systemctl enable firewalld
Quindi, aggiungi il nuovo servizio postgres a firewalld con i seguenti comandi.
firewall-cmd --add-service=postgresql --permanent
firewall-cmd --reload
Ora controlla la porta aperta del servizio.
firewall-cmd --list-all
E vedrai che il servizio PostgreSQL è stato aggiunto al firewalld.
NOTA: Esegui i passaggi 1, 2 e 3 su tutti i master e gli slave.
Fase 4:configura il server principale
In questo passaggio configureremo un server master per la replica. Questo è il server principale, che consente il processo di lettura e scrittura dalle applicazioni in esecuzione su di esso. PostgreSQL sul master viene eseguito solo sull'indirizzo IP '10.0.15.10' ed esegue la replica in streaming sul server slave.
Vai alla directory dei dati di pgsql '/var/lib/pgsql/9.6/data ' e modifica il file di configurazione 'postgresql.conf '.
cd /var/lib/pgsql/9.6/data
vim postgresql.conf
Decommenta la riga 'listen_addresses' e cambia il valore dell'indirizzo IP del server in '10.0.15.10'.
listen_addresses = '10.0.15.10'
Decommenta la riga 'wal_level' e cambia il valore in 'hot_standby '.
wal_level = hot_standby
Per il livello di sincronizzazione, utilizzeremo la sincronizzazione locale. Decommenta e modifica la riga del valore come di seguito.
synchronous_commit = local
Abilita la modalità di archiviazione e assegna alla variabile archive_command un comando come valore.
archive_mode = on
archive_command = 'cp %p /var/lib/pgsql/9.6/archive/%f'
Per le impostazioni "Replica", decommenta la riga "wal_sender" e cambia il valore in 2 (in questo tutorial usiamo solo 2 server master e slave) e per il valore "wal_keep_segments" è 10.
max_wal_senders = 2
wal_keep_segments = 10
Per il nome dell'applicazione, decommenta la riga 'synchronous_standby_names' e cambia il valore in 'pgslave01 '.
synchronous_standby_names = 'pgslave01'
Questo è tutto. Salva queste modifiche ed esci dall'editor.
Andando avanti, nel file postgresql.conf, la modalità di archiviazione è abilitata, quindi dobbiamo creare una nuova directory per scopi di archiviazione.
Crea una nuova directory, cambia la sua autorizzazione e cambia il proprietario nell'utente postgres.
mkdir -p /var/lib/pgsql/9.6/archive/
chmod 700 /var/lib/pgsql/9.6/archive/
chown -R postgres:postgres /var/lib/pgsql/9.6/archive/
Ora modifica il file pg_hba.conf.
vim pg_hba.conf
Incolla la configurazione di seguito fino alla fine della riga.
# Localhost
host replication replica 127.0.0.1/32 md5
# PostgreSQL Master IP address
host replication replica 10.0.15.10/32 md5
# PostgreSQL SLave IP address
host replication replica 10.0.15.11/32 md5
Salva ed esci. Tutta la configurazione è completa. Ora riavvia PostgreSQL 9.6 usando il seguente comando.
systemctl restart postgresql-9.6
Successivamente, dobbiamo creare un nuovo utente con privilegi di replica. Creeremo un nuovo utente chiamato 'replica '.
Accedi come utente postgres e crea una nuova 'replica ' utente con password '[email protetta] '.
su - postgres
createuser --replication -P replica
Enter New Password:
Quindi, con questo, la configurazione Master di PostgreSQL 9.6 è stata completata e viene creato l'utente per la replica.
Passaggio 5:configurazione del server slave
In questo passaggio, configureremo il server Slave. Vogliamo sostituire la directory dei dati postgres sul server slave con i dati postgres dal server master, quindi configurare il server slave per l'esecuzione con l'indirizzo IP '10.0.15.11' e infine abilitare hot_standby su di esso per consentire solo la lettura senza scrittura.
Prima di iniziare a configurare il server slave, interrompi il servizio postgres utilizzando il comando systemctl di seguito.
systemctl stop postgresql-9.6
Quindi vai alla directory postgres e alla directory dei dati di backup.
cd /var/lib/pgsql/9.6/
mv data data-backup
Crea una nuova directory di dati e cambia i permessi di proprietà della directory con l'utente postgres.
mkdir -p data/
chmod 700 data/
chown -R postgres:postgres data/
Quindi, accedi come utente postgres e copia tutta la directory dei dati dal 'Master ' allo 'Slave ' server come utente di replica.
su - postgres
pg_basebackup -h 10.0.15.10 -U replica -D /var/lib/pgsql/9.6/data -P --xlog
Password:
Digita la tua password e attendi il trasferimento dei dati dal server master al server slave.
Al termine del trasferimento, vai alla directory dei dati di postgres e modifica il file postgresql.conf sul server slave.
cd /var/lib/pgsql/9.6/data/
vim postgresql.conf
Modifica il valore di 'listen_addresses' con l'indirizzo IP del server slave '10.0.15.11'.
listen_addresses = '10.0.15.11'
Abilita 'hot_standby ' sul server slave decommentando la riga seguente e modificando il valore in 'on '.
hot_standby = on
Questo è tutto. Salva le modifiche ed esci dall'editor.
Quindi crea il nuovo 'recovery.conf ' file con vim.
vim recovery.conf
Incolla la seguente configurazione al suo interno.
standby_mode = 'on'
primary_conninfo = 'host=10.0.15.10 port=5432 user=replica [email protected] application_name=pgslave01'
trigger_file = '/tmp/postgresql.trigger.5432'
Salva le modifiche ed esci dal file.
Nota: Su primary_conninfo , inserisci i dettagli del tuo server.
Modifica le autorizzazioni di proprietà del file recovery.conf con quelle dell'utente 'postgres'.
chmod 600 recovery.conf
chown postgres:postgres recovery.conf
E avvia PostgreSQL 9.6 sul server slave.
systemctl start postgresql-9.6
La configurazione del server slave è stata completata.
Ora, quando controlli il server Slave, vedrai che PostgreSQL 9.6 è in esecuzione sul server con l'indirizzo IP '10.0.15.11 '.
netstat -plntu
Fase 6 - Test
L'installazione e la configurazione per la replica Master-Slave di PostgreSQL 9.6 sono complete. Per testare la configurazione, controlla il flusso di stato della replica e verifica la replica dei dati dal master allo slave.
Accedi al server Master e passa all'utente postgres.
su - postgres
Quindi, controlla la replica dello stato di streaming di PostgreSQL con i seguenti comandi.
psql -c "select application_name, state, sync_priority, sync_state from pg_stat_replication;"
psql -x -c "select * from pg_stat_replication;"
Dovresti vedere che il valore dello stato è 'streaming ' e sync_state è 'sync '.
Quindi, prova inserendo i dati dal master e quindi controlla tutti i dati sul server slave.
Accedi come utente postgres e accedi alla shell PostgreSQL su 'MASTER ' server.
su - postgres
psql
Crea una nuova tabella 'replica_test ' e inserisci alcuni dati al suo interno con le seguenti query di inserimento.
CREATE TABLE replica_test (test varchar(100));
INSERT INTO replica_test VALUES ('howtoforge.com');
INSERT INTO replica_test VALUES ('This is from Master');
INSERT INTO replica_test VALUES ('pg replication by hakase-labs');
E ora accedi a 'SLAVE ' server simile a quello che hai fatto sul master.
su - postgres
psql
Controlla tutti i dati dalla tabella 'replica_test' utilizzando la query seguente.
select * from replica_test;
Quindi vedrai che tutti i dati sono replicati dal 'MASTER ' al server 'SLAVE ' server.
Test aggiuntivo
Prova per eseguire l'azione 'SCRITTURA' dal server 'SLAVE'.
INSERT INTO replica_test VALUES ('this is SLAVE');
E il risultato dovrebbe essere "Impossibile eseguire INSERT '.
Quindi l'installazione e la configurazione di PostgreSQL 9.6 Master-Slave Replication su CentOS 7 ha esito positivo.
Riferimenti
- https://www.postgresql.org/download/linux/redhat/
- https://www.server-world.info/en/note?os=CentOS_7