Nainstalujte a nakonfigurujte PostgreSQL na CentOS

V tomto článku nainstalujeme DBMS PostgreSQL 11 v systému Linux CentOS 7, provedeme základní konfiguraci serveru a DBMS, vezmeme v úvahu hlavní parametry konfiguračního souboru a způsoby ladění výkonu. PostgreSQL je populární bezplatný systém správy objektově relačních databází. Ačkoli to není tak rozšířené jako MySQL / MariDB, je to nejprofesionálnější.

Silné stránky PostgreSQL:

  • Plná shoda s normami SQL;
  • Vysoký výkon prostřednictvím vícerozměrného řízení souběžnosti (MVCC);
  • Škálovatelnost (široce používaná ve vysoce zatížených prostředích);
  • Podpora mnoha programovacích jazyků;
  • Spolehlivé transakční a replikační mechanismy;
  • Podpora dat JSON.

Obsah:

  • Nainstalujte PostgreSQL na CentOS / RHEL
  • Připojte se k PostgreSQL, vytvořte databázi, uživatel
  • Základní možnosti konfiguračního souboru PostgreSQL
  • Zálohování a obnovení databáze v PostgreSQL
  • Optimalizace a ladění PostgreSQL

Nainstalujte PostgreSQL na CentOS / RHEL

Přestože PostgreSQL lze nainstalovat ze základního úložiště CentOS, budeme jej instalovat od vývojářů, protože vždy má nejnovější verzi balíčku.

Prvním krokem je instalace úložiště PosgreSQL (v současné době se instaluje následujícím způsobem):

yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

Toto úložiště obsahuje nejnovější verze PostgreSQL i starší verze. Informace o úložišti jsou následující:

Nainstalujte nejnovější dostupnou verzi (PostrgeSQL 11) pomocí yum.

yum install postgresql11-server -y

Během instalace je nainstalován samotný server PostgreSQL a potřebné knihovny:

Instalace: libicu-50.2-3.el7.x86_64 1/4 Instalace: postgresql11-libs-11.5-1PGDG.rhel7.x86_64 2/4 Instalace: postgresql11-11.5-1PGDG.rhel7.x86_64 3/4 Instalace: postgresql11-server- 11,5-1PGDG.rhel7.x86_64 4/4

Po instalaci balíčků je třeba inicializovat databázi:

/ usr / pgsql-11 / bin / postgresql-11-setup initdb

Ihned přidejte databázový server ke spuštění a spusťte jej:

systemctl povolit postgresql-11

systemctl start postgresql-11

Chcete-li se ujistit, že server byl spuštěn a že neexistují žádné problémy, zkontrolujte jeho stav:

[root @ server ~] # systemctl status postgresql-11

● postgresql-11.service - databázový server PostgreSQL 11 Načten: načten (/usr/lib/systemd/system/postgresql-11.service; povolen; předvolba dodavatele: zakázán) Aktivní: aktivní (spuštěný) od St 2019-09-18 13:01:56 +06; Před 26 lety Dokumenty: https://www.postgresql.org/docs/11/static/ Proces: 6614 ExecStartPre = / usr / pgsql-11 / bin / postgresql-11-check-db-dir $ PGDATA (code = exit, status = 0 / SUCCESS) Hlavní PID: 6619 (postmaster) CGroup: /system.slice/postgresql-11.service ├─6619 / usr / pgsql-11 / bin / postmaster -D / var / lib / pgsql / 11 / data / ├─6621 postgres: logger ├─6623 postgres: checkpointer ├─6624 postgres: pozadí spisovatel ├─6625 postgres: walwriter ├─6626 postgres: autovacuum launcher ├─6627 postgres: sběratel statistik └─6628 postgres: logical replication launcher 18. září 13:01:56 server.1.com systemd [1]: Spuštění databázového serveru PostgreSQL 11 ... 18. září 13:01:56 server.1.com postmaster [6619]: 2019-09-18 13: 01: 56.399 +06 [6619] PŘIHLÁŠENÍ: poslouchání na IPv6 adrese ":: 1", port 5432 18. září 13:01:56 server.1.com postmaster [6619]: 2019-09-18 13: 01: 56,399 +06 [6619 ] LOG: poslouchání na IPv4 adrese „127.0.0.1“, port 5432 18. září 13:01:56 server.1.com postmaster [6619]: 2019-09-18 13: 01: 56.401 +06 [6619] PŘIHLÁŠENÍ: poslouchání na Unix soketu "/var/run/postgresql/.s.PGSQL.5432" 18. září 13:01:56 server.1.com postmaster [6619]: 2019-09-18 13: 01: 56.409 +06 [6619] LOG: poslouchání na Unix soketu "/tmp/.s.PGSQL.5432" 18. září 13:01:56 server.1.com postmaster [6619]: 2019-09-18 13: 01: 56.427 +06 [ 6619] LOG: přesměrování výstupu protokolu do procesu sběru protokolování 18. 9. 13:01:56 server.1.com postmaster [6619]: 2019-09-18 13: 01: 56.427 +06 [6619] TIP: Objeví se budoucí záznam protokolu v adresáři "log". 18. září 13:01:56 server.1.com systemd [1]: Zahájen databázový server PostgreSQL 11. 

Pokud potřebujete přístup k PostgreSQL zvenčí, musíte otevřít port TCP / 5432 ve standardním firewallu v Centos 7:

# firewall-cmd --get-active-zones

veřejná rozhraní: eth0

# firewall-cmd --zone = public --add-port = 5432 / tcp - permanentní
# firewall-cmd - načíst

Nebo pomocí iptables:

# iptables-A INPUT -m state - status NEW -m tcp -p tcp --port 5432 -j ACCEPT

#service iptables restartovat

Pokud je SELinux povolen, proveďte následující kroky:

setsebool -P httpd_can_network_connect_db 1

Připojte se k PostgreSQL, vytvořte databázi, uživatel

Ve výchozím nastavení je při instalaci PostgreSQL v systému jeden uživatelský postgres.

Nedoporučuji používat pro práci s databázemi, je lepší vytvořit uživatele pro každou databázi zvlášť.

Chcete-li se připojit k serveru postgres, musíte zadat příkaz:

[root @ server /] # sudo -u postgres psql

psql (11.5) Napište "help" pro pomoc.

postgres = #

Otevře se konzole PostgreSQL. Ukážeme několik jednoduchých příkladů řízení PostgreSQL z konzole psql.

Protože každý uživatel systému se může přihlásit do postrgesql, nejdřív si musíte změnit heslo uživatele postgresu.

ALTER ROLE postgres S HESLEM 'super_str0ng_pa $$ word';

Okamžitě vytvořte novou databázi, uživatel a udělte mu plná práva k této databázi:

postgres = # CREATE DATABASE mydbtest;

postgres = # VYTVOŘIT UŽIVATELE mydbuser S heslem '123456789';

postgres = # GRANT VŠECHNY VÝSLEDKY NA DATABÁZE mydbtest TO mydbuser;

Připojte se k databázi:

postgres = # \ c název databáze

Seznamové tabulky:

postgres = # \ dt

Seznam databázových dotazů:

postgres = # select * from pg_stat_activity where datname = "dbname"

Obnovit všechna připojení k databázi:

postgres = # select pg_terminate_backend (pid) z pg_stat_activity kde datname = 'dbname'

Informace o aktuální relaci lze získat následujícím způsobem:

postgres = # \ conninfo

Chcete-li dokončit konzolu psql, spusťte:

postgres = # \ q

Jak jste si již všimli, syntaxe se neliší od stejné MariaDB nebo MySQL, a proto se nebudeme zabývat příkazy stejného typu.

Pro pohodlnější správu PostgreSQL databází z webového rozhraní se doporučuje použít pgAdmin4 (napsaný v Pythonu a Javascriptu / jQuery). Toto je analogický k obvyklým webovým vývojářům PhpMyAdmin.

Základní možnosti konfiguračního souboru PostgreSQL

Konfigurační soubory Postgresql jsou umístěny v adresáři / var / lib / pgsql / 11 / data:

  • postgresql.conf - Samotný konfigurační soubor postgresql
  • pg_hba.conf - soubor s nastavením přístupu. V tomto souboru můžete nastavit různá omezení pro uživatele, nastavit zásady pro připojení k databázi;
  • pg_ident.conf - tento soubor se používá při identifikaci klientů pomocí protokolu ident.

Chcete-li zabránit místním uživatelům v přihlášení do postgresu bez oprávnění, zadejte v souboru pg_hba.conf:

local all all md5 host all all 127.0.0.1/32 md5

Zvažte nejdůležitější parametry v konfiguračním souboru postgresql.conf:

  • poslech_adresek - označuje, které adresy IP server přijme připojení klienta. Ve výchozím nastavení je zadán localhost, což znamená, že je možné pouze místní připojení. Chcete-li to provést na všech rozhraních IPv4, zadejte 0.0.0.0
  • max_connections - jako v jiných DBMS je to maximální počet současných připojení k databázovému serveru;
  • temp_buffers - maximální velikost dočasných vyrovnávacích pamětí;
  • shared_buffers - Množství sdílené paměti používané databázovým serverem. Obvykle je nastavena na 25% paměti nainstalované na serveru;
  • efektivní velikost - Parametr, který pomáhá plánovači postgresu určit množství dostupné paměti pro ukládání do mezipaměti na disk. Parametr je obvykle nastaven na velikost 50-75% celkové paměti RAM na serveru;
  • work_mem - množství paměti, které bude použito interních třídicích operací DBMS - OBJEDNÁVKA, DISTINCT a sloučení;
  • maintenance_work_mem - velikost paměti, která bude použita při interních operacích - VACUUM, CREATE INDEX a ALTER TABLE ADD FOREIGN KEY;
  • fsync - Pokud je tato volba povolena, DBMS bude čekat na zapsání fyzických dat na pevný disk. Po aktivaci fsync bude pro vás snazší obnovit databázi po selhání systému nebo hardwaru. Zahrnutí tohoto parametru přirozeně výrazně snižuje výkon DBMS, ale zvyšuje spolehlivost úložiště. Při deaktivaci tohoto parametru se vyplatí deaktivovat full_page_writes;
  • max_stack_depth - maximální velikost zásobníku (ve výchozím nastavení 2 MB);
  • max_fsm_pages - pomocí tohoto parametru můžete spravovat volné místo na disku na serveru. Například po odstranění dat z tabulky se dříve obsazené místo na disku neuvoľní, ale je označeno na mapě volného prostoru štítkem „free“ a poté použito pro nové položky v tabulce. Pokud server aktivně zaznamenává / mazá data v tabulkách, zvýšení tohoto parametru bude mít pozitivní vliv na výkon;
  • wal_buffers - množství sdílené paměti (shared_buffers), která se používá k ukládání dat WAL;
  • wal_writer_delay - čas mezi periody zápisu WAL na disk;
  • commit_delay - zpoždění mezi zápisem transakce do vyrovnávací paměti WAL a vyprázdněním na disk;
  • synchronous_commit - parametr určuje, že výsledek úspěšného dokončení transakce bude odeslán, když jsou data WAL fyzicky zapsána na disk.

Zálohování a obnovení databáze v PostgreSQL

Existuje několik způsobů, jak zálohovat databázi PostgreSQL. Uvažujme nejjednodušší možnost..

Nejprve zkontrolujte, které databáze jsou spuštěny na serveru:

postgres = # \ list

Máme 4 databáze, z nichž 3 jsou systém (postgres a šablona).

Dříve jsme vytvořili databázi s názvem „mydbtest“, pomocí jejího příkladu a zálohy.

Jeden způsob zálohování je spuštění pomocí obslužného programu pg_dump:

sudo -u postgres pg_dump mydbtest> /root/dupm.sql - provedeme požadavek od uživatele postgres, zadáme požadovanou databázi a cestu k souboru, kam chcete uložit výpis z databáze. Váš záložní systém může vyzvednout výpis z databáze, nebo pokud používáte webový server, můžete jej odeslat do cloudového úložiště.

Chcete-li obnovit zadaný výpis do požadované databáze, můžete použít nástroj psql:

sudo -u postgres psql mydbtest < /root/dupm.sql

Můžete také vytvořit zálohu ve speciálním formátu výpisu a komprimovat pomocí gzip:

sudo -u postgres pg_dump -Fc mydbtest> /root/dumptest.sql

Takový výpis je obnoven pomocí obslužného programu pg_restore:

sudo -u postgres pg_restore -d mydbtest /root/dumptest.sql

Podrobnější nastavení najdete v nápovědě pro tyto nástroje:

muž psql
muž pg_dump
muž pg_restore

Optimalizace a ladění PostgreSQL

V předchozím článku o MariaDB jsme ukázali, jak lze parametry konfiguračního souboru my.cnf redukovat na ideální pomocí tunerů. Pro PostgreSQL existuje, i když bylo správnější říci takový nástroj jako PgTun, ale bohužel to nebylo dlouho aktualizováno. Zároveň existuje mnoho online služeb, pomocí kterých můžete nakonfigurovat optimální konfiguraci PostgreSQL. Líbí se mi služba pgtune.leopard.in.ua.

Rozhraní je velmi jednoduché. Musíte zadat parametry serveru (profil, procesory, paměť, typ disků) a kliknout na tlačítko „Generovat“. V důsledku toho vám bude nabídnuta varianta konfiguračního souboru postgresql.conf s doporučenými hodnotami hlavních parametrů DBMS.

Například pro server VPS SSD s 2 GB RAM, 2 CPU se pro spuštění několika webů doporučuje následující nastavení v postgresql.conf:

# Verze DB: 11 # Typ OS: linux # Typ DB: web # Celková paměť (RAM): 2 GB # Počet procesorů: 2 # Počet připojení: 20 # Úložiště dat: ssd max_connections = 20 shared_buffers = 512MB efektivní_cache_size = 1536MB maintenance_work_mem = 128MB checkpoint_completion_target = 0,7 wal_buffers = 16MB default_statistics_target = 100 random_page_cost = 1,1 efektivní_io_concurrency = 200 work_mem = 26214kB min_wal_size = 1GB max_wal_size = 2GB max_worker_processes = 2 max_parallel_ers =

A ve skutečnosti to není jediný zdroj, v době psaní byly k dispozici podobné služby:

  • Cybertec PostgreSQL Configurator
  • Nástroj pro konfiguraci PostgreSQL

Pomocí těchto služeb můžete rychle nakonfigurovat počáteční parametry DBMS pro vaše zařízení a úkoly. V budoucnu se musíte spolehnout nejen na prostředky serveru, ale také analyzovat databázi jako celek, její velikost, počet připojení a na základě toho provést další doladění parametrů PostgreSQL..