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 a dokáže zvládnout 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 (hlavní) do databáze na jiném serveru (podřízené). 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 PostgreSQL 9.6 Master-Slave Replication na serveru Ubuntu 16.04. 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.
- Nakonfigurujte bránu firewall UFW.
- Nakonfigurujte MASTER Server.
- Nakonfigurujte SLAVE Server.
- Zkopírujte data PostgreSQL z MASTER do SLAVE.
- Testování.
Předpoklad:
- 1 server Ubuntu 16.04
- MISTR - Povolení čtení a zápisu - IP:10.0.15.10
- 1 server Ubuntu 16.04
- SLAVE - Pouze pro čtení - IP:10.0.15.11
- Kořenová oprávnění
Krok 1 – Instalace PostgreSQL 9.6
V tomto tutoriálu nainstalujeme nejnovější verzi PostgreSQL 9.6. V oficiálním úložišti Ubuntu poskytují pouze PostgreSQL 9.5, takže musíme nainstalovat nejnovější verzi přímo z úložiště PostgreSQL.
Přidejte úložiště postgreSQL 9.6 do adresáře sources.list.d.
echo 'deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main' | tee /etc/apt/sources.list.d/postgresql.list
A importujte podpisový klíč PostgreSQL do systému.
wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -
Nyní aktualizujte systémové úložiště pomocí příkazu apt.
apt-get update
Dále nainstalujte balíček PosgreSQL 9.6 pomocí příkazu apt níže.
apt-get install -y postgresql-9.6 postgresql-contrib-9.6
Pokud byla instalace dokončena, přidejte ji, aby se automaticky spustila při spouštění.
systemctl enable postgresql
Ve výchozím nastavení běží PostgreSQL na IP adrese localhost (127.0.0.1) s portem 5432 na Ubuntu, zkontrolujte to příkazem netstat.
netstat -plntu
V systému běží PostgreSQL 9.6. V dalším kroku musíme nakonfigurovat heslo pro uživatele postgres.
Z účtu root se přihlaste k uživateli postgres pomocí příkazu su a poté přejděte na front-end terminál psql postgres.
su - postgres
psql
Změňte prosím heslo pro uživatele postgres a zkontrolujte informace o připojení pomocí postgres dotazů níže.
\password postgres
\conninfo
PostgreSQL 9.6 byl nainstalován v systému, běží bez chyby a heslo pro uživatele postgres bylo aktualizováno.
Krok 2 – Konfigurace brány UFW
UFW nebo Uncomplicated Firewall je aplikace pro správu firewallu založeného na iptables na Ubuntu. UFW je výchozí konfigurační nástroj brány firewall pro Ubuntu Linux a poskytuje uživatelsky přívětivý způsob konfigurace brány firewall.
Můžeme nainstalovat ufw z hlavního úložiště Ubuntu pomocí příkazu apt.
apt-get install -y ufw
Přidejte nové služby do firewallu UFW:přidejte služby SSH a PostgreSQL pomocí příkazů níže.
ufw allow ssh
ufw allow postgresql
Povolte bránu firewall UFW a zkontrolujte stav.
ufw enable
ufw status
Byl nainstalován UFW firewall a byla přidána služba PostgreSQL.
POZNÁMKA:
Spusťte krok 1 a krok 2 na MASTER a SLAVE serveru.
Krok 3 – Konfigurace serveru PostgreSQL MASTER Server
Hlavní server má IP adresu 10.0.15.10 a služba postgres poběží pod touto IP s výchozím portem. Hlavní server bude mít oprávnění ke čtení a zápisu do databáze a k provádění streamingové replikace na podřízený server.
Přejděte do konfiguračního adresáře postgres '/etc/postgresql/9.6/main a upravte soubor postgresql.conf soubor s vim.
cd /etc/postgresql/9.6/main/
vim postgresql.conf
Odkomentujte řádek 'listen_addresses' a změňte hodnotu na IP adresu hlavního serveru '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 změňte volbu archive_command na příkaz 'cp %p /var/lib/postgresql/9.6/main/archive/%f'.
archive_mode = on
archive_command = 'cp %p /var/lib/postgresql/9.6/main/archive/%f'
Pro nastavení 'Replikace' v tomto tutoriálu používáme pouze 2 servery, master a slave, zrušte komentář u 'wal_sender a změňte hodnotu na 2 a pro 'wal_keep_segments hodnota je 10 .
max_wal_senders = 2
wal_keep_segments = 10
U názvu aplikace odkomentujte řádek 'synchronous_standby_names' a změňte hodnotu na název 'pgslave001 '.
synchronous_standby_names = 'pgslave001'
Uložte soubor a ukončete editor.
V souboru postgresql.conf je povolen režim archivace, takže musíme vytvořit nový adresář pro archiv. Vytvořte nový adresář archivu, změňte oprávnění a změňte vlastníka na uživatele postgres.
mkdir -p /var/lib/postgresql/9.6/main/archive/
chmod 700 /var/lib/postgresql/9.6/main/archive/
chown -R postgres:postgres /var/lib/postgresql/9.6/main/archive/
Dále upravte soubor pg_hba.conf pro konfiguraci ověřování.
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žte a ukončete, poté restartujte PostgreSQL.
systemctl restart postgresql
PostgreSQL běží pod IP adresou 10.0.15.10, zkontrolujte ji pomocí příkazu netstat.
netstat -plntu
Dále vytvořte nového uživatele pro replikaci. Vytvoříme nového uživatele s názvem 'replika ' s heslem '[e-mail chráněn] '. Pro nastavení si zde vyberte bezpečné heslo! Přihlaste se k uživateli postgres a získejte přístup k postgres front-end terminálu psql.
su - postgres
psql
Vytvořit novou 'repliku ' uživatel s heslem '[e-mail chráněný] ' s postgresovým dotazem níže.
CREATE USER replica REPLICATION LOGIN ENCRYPTED PASSWORD '[email protected]';
Nyní zkontrolujte nového uživatele pomocí 'du ' dotaz níže a uvidíte uživatele repliky s oprávněními pro replikaci.
\du
Konfigurace MASTER serveru byla dokončena.
Krok 4 – Konfigurace SLAVE serveru
SLAVE server má IP adresu 10.0.15.11. A tento server bude mít pouze oprávnění ke čtení databáze. Databázový server Postgres poběží pod IP adresou serveru, nikoli pod IP localhost.
Zastavte službu postgres na podřízeném serveru pomocí příkazu systemctl níže.
systemctl stop postgresql
Přejděte do konfiguračního adresáře Postgres '/etc/postgresql/9.6/main ', poté upravte konfigurační soubor 'postgresql.conf '.
cd /etc/postgresql/9.6/main/
vim postgresql.conf
Odkomentujte řádek listen_addresses a nahraďte hodnotu IP adresou podřízeného serveru 10.0.15.11 .
listen_addresses = '10.0.15.11'
Odkomentujte řádek 'wal_level' a změňte hodnotu na 'hot_standby '.
wal_level = hot_standby
Pro úroveň synchronizace odkomentujte řádek synchronous_commit a změňte hodnotu, jak je uvedeno níže.
synchronous_commit = local
Pro nastavení replikace odkomentujte řádek max_wal_senders a nahraďte hodnotu „2 Protože stačí použít 2 servery. A pro wal_keep_segments změňte hodnotu na '10 '.
max_wal_senders = 2
wal_keep_segments = 10
Odkomentujte řádek 'synchronous_standby_names' pro název aplikace a změňte hodnotu na název 'pgslave001 '.
synchronous_standby_names = 'pgslave001'
Povolit hot_standby pro podřízený server zrušením komentáře na následujícím řádku a změnou hodnoty na 'on '.
hot_standby = on
Uložte soubor a ukončete editor.
Krok 5 – Zkopírování dat PostgreSQL z MASTER do SLAVE
Dále chceme nahradit hlavní adresář postgres na 'SLAVE ' server s hlavním datovým adresářem od 'MASTER ' server.
Přihlaste se na SLAVE server a získejte přístup k uživateli postgres.
su - postgres
Přejděte do adresáře dat postgres 'main a zálohujte jej přejmenováním názvu adresáře.
cd 9.6/
mv main main-bekup
Vytvořit nový 'hlavní ' jako 'postgres ' a ujistěte se, že máte oprávnění jako adresář main-bekup.
mkdir main/
chmod 700 main/
Dále zkopírujte hlavní adresář z MASTER serveru na SLAVE server pomocí pg_basebackup příkazu, použijeme k provedení této kopie dat uživatele repliky.
pg_basebackup -h 10.0.15.10 -U replica -D /var/lib/postgresql/9.6/main -P --xlog
Password:
Po dokončení přenosu dat přejděte do hlavního adresáře dat a vytvořte nový recovery.conf soubor.
cd /var/lib/postgresql/9.6/main/
vim recovery.conf
Vložte konfiguraci níže:
standby_mode = 'on'
primary_conninfo = 'host=10.0.15.10 port=5432 user=replica [email protected] application_name=pgslave001'
restore_command = 'cp /var/lib/postgresql/9.6/main/archive/%f %p'
trigger_file = '/tmp/postgresql.trigger.5432'
Uložte a ukončete, poté změňte oprávnění souboru na 600 pomocí chmod.
chmod 600 recovery.conf
Nyní spusťte PostgreSQL 9.6 na SLAVE serveru a ujistěte se, že služba postgres běží na IP adrese 10.0.15.11 s netstat.
systemctl start postgresql
netstat -plntu
Přenos dat a konfigurace pro SLAVE server byly dokončeny.
Krok 6 – Testování
Pro testování zkontrolujeme stav replikace PostgreSQL 9.6 a pokusíme se vytvořit novou tabulku na serveru MASTER, poté zkontrolujeme replikaci kontrolou všech dat ze serveru SLAVE.
Přihlaste se k serveru MASTER a přihlaste se k uživateli postgres.
su - postgres
Spuštěním příkazů psql níže zobrazíte stav replikace.
psql -c "select application_name, state, sync_priority, sync_state from pg_stat_replication;"
psql -x -c "select * from pg_stat_replication;"
Dostanete výsledky, jak je uvedeno níže.
Dále zkuste vytvořit novou tabulku ze serveru MASTER. Přihlaste se k uživateli postgres na hlavním serveru.
su - postgres
psql
A vytvořte novou tabulku s názvem 'replica_test ' a vložte data do tabulky spuštěním postgresových dotazů níže.
CREATE TABLE replica_test (hakase 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');
Dále se přihlaste k uživateli postgres na serveru SLAVE a přejděte na terminál psql.
su - postgres
psql
Zkontrolujte data na 'replica_test ' tabulka s postgresovým dotazem níže.
select * from replica_test;
A získáte stejná data jako na MASTER, jsou replikována z MASTER serveru na SLAVE server.
Dodatečný test:
Otestujte zápis na SLAVE server pomocí níže uvedeného dotazu.
INSERT INTO replica_test VALUES ('this is SLAVE');
A zobrazí se chybová zpráva „Nelze provést INSERT ' dotaz na SLAVE serveru.
Instalace a konfigurace PostgreSQL 9.6 s replikací Master-Slave na Ubuntu 16.04 Xenial Xerus byla úspěšná.