PostgreSQL nebo Postgres je open source objektově-relační databázový systém (ORDBMS) s více než 15 lety aktivního vývoje. Je to výkonný databázový server, který zvládne vysoké pracovní zatížení. PostgreSQL lze použít na serverech Linux, Unix, BSD a Windows.
Replikace databáze master/slave je proces kopírování (synchronizace) dat z databáze na jednom serveru (master) do databáze na jiném serveru (slave). Hlavní výhodou tohoto procesu je distribuce databází na více počítačů, takže když má hlavní server problém, je k dispozici záložní stroj se stejnými daty pro zpracování požadavků bez přerušení.
PostgreSQL poskytuje několik způsobů, jak replikovat databázi. Může být použit pro účely zálohování a poskytování vysoce dostupného databázového serveru. V tomto tutoriálu vám ukážeme, jak nainstalovat a nakonfigurovat replikaci PostgreSQL 9.6 Master-Slave na serveru CentOS 7. Použijeme režim Hot standby a je to velmi dobrý výchozí bod, jak se naučit PostgreSQL do hloubky.
Co uděláme
- Nainstalujte PostgreSQL 9.6
- Spusťte a nakonfigurujte PostgreSQL 9.6
- Nakonfigurujte bránu firewall
- Konfigurace hlavního serveru
- Nakonfigurujte podřízený server
- Testování
Předpoklad
- 1 server CentOS 7
- Mistr - Oprávnění ke čtení a zápisu - IP:10.0.15.10
- 1 server CentOS 7
- Slave - Oprávnění pouze ke čtení - IP:10.0.15.11
- Kořenová oprávnění
Krok 1 – Instalace PostgreSQL 9.6
V tomto tutoriálu probereme, jak nainstalovat nejnovější PostgreSQL verzi 9.6 na server CentOS 7. Oficiální úložiště CentOS standardně nabízí starší verzi, takže musíme nainstalovat PostgreSQL z oficiálního úložiště.
Přidejte do systému nové úložiště PostgreSQL 9.6.
yum -y install https://yum.postgresql.org/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
Nyní nainstalujte PostgreSQL 9.6 pomocí následujícího příkazu yum.
yum -y install postgresql96-server postgresql96-contrib
Takže tímto způsobem můžete nainstalovat PostgreSQL 9.6.
Krok 2 – Spuštění a konfigurace PostgreSQL 9.6
Před spuštěním postgresové služby musíme inicializovat databázi. Chcete-li to provést, přejděte na stránku '/usr/pgsql-9.6/bin ' a inicializujte databázi pomocí nastavení postgres 'postgresql96-setup '.
cd /usr/pgsql-9.6/bin
./postgresql96-setup initdb
Dále spusťte službu postgres a povolte její automatické spouštění při startu systému.
systemctl start postgresql-9.6
systemctl enable postgresql-9.6
Ve výchozím nastavení běží postgres na portu 5432. Ujistěte se tedy, že stav portu 5432 je 'LISTEN ' provedením příkazu netstat následujícím způsobem.
netstat -plntu
Pokud nemáte příkaz netstat, nainstalujte net-tools. Je součástí síťových nástrojů.
yum -y install net-tools
Byl tedy spuštěn PostgreSQL 9.6. Stále však musíme nakonfigurovat heslo pro uživatele postgres. Přihlaste se jako uživatel 'postgres' a poté otevřete shell 'psql' postgres.
su - postgres
psql
Dejte 'postgres ' nové heslo uživatele s dotazem níže.
\password postgres
Enter new password:
PostgreSQL 9.6 byl tedy spuštěn a bylo nakonfigurováno nové heslo pro uživatele postgres.
Krok 3 – Konfigurace brány firewall
Firewalld je výchozí nástroj pro správu firewallu na CentOS 7. Spustíme tuto službu a otevřeme port pro připojení PostgreSQL.
Spusťte firewalld a povolte jeho automatické spouštění při spouštění systému pomocí následujících příkazů:
systemctl start firewalld
systemctl enable firewalld
Dále přidejte novou službu postgres do firewalld pomocí následujících příkazů.
firewall-cmd --add-service=postgresql --permanent
firewall-cmd --reload
Nyní zkontrolujte otevřený port služby.
firewall-cmd --list-all
A uvidíte, že služba PostgreSQL byla přidána do firewallu.
POZNÁMKA: Spusťte Krok 1, Krok 2 a Krok 3 na všech Master a Slave.
Krok 4 – Konfigurace hlavního serveru
V tomto kroku nakonfigurujeme hlavní server pro replikaci. Toto je hlavní server, který umožňuje proces čtení a zápisu z aplikací, které na něm běží. PostgreSQL na hlavním serveru běží pouze na IP adrese '10.0.15.10' a provádí streamovací replikaci na podřízený server.
Přejděte do datového adresáře pgsql '/var/lib/pgsql/9.6/data a upravte konfigurační soubor 'postgresql.conf '.
cd /var/lib/pgsql/9.6/data
vim postgresql.conf
Odkomentujte řádek 'listen_addresses' a změňte hodnotu IP adresy serveru na '10.0.15.10'.
listen_addresses = '10.0.15.10'
Odkomentujte řádek „wal_level“ a změňte hodnotu na „hot_standby '.
wal_level = hot_standby
Pro úroveň synchronizace použijeme místní synchronizaci. Odkomentujte a změňte řádek hodnot, jak je uvedeno níže.
synchronous_commit = local
Povolte režim archivace a zadejte proměnné archive_command příkaz jako hodnotu.
archive_mode = on
archive_command = 'cp %p /var/lib/pgsql/9.6/archive/%f'
Pro nastavení 'Replication' zrušte odkomentování řádku 'wal_sender' a změňte hodnotu na 2 (v tomto tutoriálu používáme pouze 2 servery master a slave) a pro 'wal_keep_segments' je hodnota 10.
max_wal_senders = 2
wal_keep_segments = 10
U názvu aplikace odkomentujte řádek 'synchronous_standby_names' a změňte hodnotu na 'pgslave01 '.
synchronous_standby_names = 'pgslave01'
A je to. Uložte tyto změny a ukončete editor.
V souboru postgresql.conf je povolen režim archivace, takže musíme vytvořit nový adresář pro účely archivace.
Vytvořte nový adresář, změňte jeho oprávnění a změňte vlastníka na uživatele 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/
Nyní upravte soubor pg_hba.conf.
vim pg_hba.conf
Vložte konfiguraci níže na konec řádku.
# 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
Uložit a odejít. Veškerá konfigurace je dokončena. Nyní restartujte PostgreSQL 9.6 pomocí následujícího příkazu.
systemctl restart postgresql-9.6
Dále musíme vytvořit nového uživatele s oprávněními pro replikaci. Vytvoříme nového uživatele s názvem 'replika '.
Přihlaste se jako uživatel postgres a vytvořte novou 'repliku ' uživatel s heslem '[e-mail chráněný] '.
su - postgres
createuser --replication -P replica
Enter New Password:
Takže tímto byla konfigurace PostgreSQL 9.6 Master dokončena a je vytvořen uživatel pro replikaci.
Krok 5 – Konfigurace podřízeného serveru
V tomto kroku nakonfigurujeme Slave server. Chceme nahradit postgres datový adresář na podřízeném serveru postgresovými daty z hlavního serveru a poté nakonfigurovat podřízený server tak, aby běžel pod IP adresou '10.0.15.11', a nakonec na něm povolit hot_standby, který umožňuje pouze čtení bez zápisu.
Než začneme konfigurovat podřízený server, zastavte službu postgres pomocí příkazu systemctl níže.
systemctl stop postgresql-9.6
Poté přejděte do adresáře postgres a adresáře zálohovaných dat.
cd /var/lib/pgsql/9.6/
mv data data-backup
Vytvořte nový datový adresář a změňte oprávnění k vlastnictví adresáře na uživatele postgres.
mkdir -p data/
chmod 700 data/
chown -R postgres:postgres data/
Dále se přihlaste jako uživatel postgres a zkopírujte veškerý datový adresář z 'Master ' serveru na 'Slave ' server jako uživatel repliky.
su - postgres
pg_basebackup -h 10.0.15.10 -U replica -D /var/lib/pgsql/9.6/data -P --xlog
Password:
Zadejte své heslo a počkejte na přenos dat z hlavního na podřízený server.
Po dokončení přenosu přejděte do adresáře dat postgres a upravte soubor postgresql.conf na podřízeném serveru.
cd /var/lib/pgsql/9.6/data/
vim postgresql.conf
Změňte hodnotu 'listen_addresses' na IP adresu podřízeného serveru '10.0.15.11'.
listen_addresses = '10.0.15.11'
Povolit 'hot_standby “ na podřízeném serveru zrušením komentáře na následujícím řádku a změnou hodnoty na „on '.
hot_standby = on
A je to. Uložte změny a ukončete editor.
Poté vytvořte nový 'recovery.conf ' soubor s vim.
vim recovery.conf
Vložte do něj následující konfiguraci.
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'
Uložte změny a ukončete soubor.
Poznámka: Na stránce primary_conninfo , zadejte podrobnosti o svém vlastním serveru.
Změňte oprávnění k vlastnictví souboru recovery.conf na oprávnění uživatele 'postgres'.
chmod 600 recovery.conf
chown postgres:postgres recovery.conf
A spusťte PostgreSQL 9.6 na podřízeném serveru.
systemctl start postgresql-9.6
Konfigurace podřízeného serveru byla dokončena.
Nyní, když zkontrolujete Slave server, uvidíte, že PostgreSQL 9.6 běží na serveru s IP adresou '10.0.15.11 '.
netstat -plntu
Krok 6 – Testování
Instalace a konfigurace pro replikaci PostgreSQL 9.6 Master-Slave jsou dokončeny. Chcete-li otestovat nastavení, zkontrolujte stavový tok replikace a otestujte replikaci dat z Master na Slave.
Přihlaste se na hlavní server a přepněte na uživatele postgres.
su - postgres
Dále zkontrolujte replikaci stavu streamování PostgreSQL pomocí následujících příkazů.
psql -c "select application_name, state, sync_priority, sync_state from pg_stat_replication;"
psql -x -c "select * from pg_stat_replication;"
Měli byste vidět, že hodnota stavu je 'streaming a sync_state je 'sync '.
Dále otestujte vložením dat z hlavního serveru a poté zkontrolujte všechna data na podřízeném serveru.
Přihlaste se jako uživatel postgres a získejte přístup k prostředí PostgreSQL na 'MASTER ' server.
su - postgres
psql
Vytvořte novou tabulku 'replica_test ' a vložte do něj některá data pomocí následujících vkládacích dotazů.
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');
A nyní se přihlaste do 'SLAVE ' server podobný tomu, jaký jste dělali na hlavním serveru.
su - postgres
psql
Zkontrolujte všechna data z tabulky 'replica_test' pomocí dotazu níže.
select * from replica_test;
Uvidíte tedy, že všechna data jsou replikována od 'MASTER ' na server 'SLAVE ' server.
Další test
Otestujte provedení akce 'WRITE' ze serveru 'SLAVE'.
INSERT INTO replica_test VALUES ('this is SLAVE');
A výsledek by měl být „Nelze spustit INSERT '.
Instalace a konfigurace PostgreSQL 9.6 Master-Slave Replication na CentOS 7 je tedy úspěšná.
Odkazy
- https://www.postgresql.org/download/linux/redhat/
- https://www.server-world.info/en/note?os=CentOS_7