Instalirajte i konfigurirajte PostgreSQL na CentOS-u

U ovom ćemo članku instalirati DBMS PostgreSQL 11 na Linuxu CentOS 7, izvršit ćemo osnovnu konfiguraciju poslužitelja i DBMS, razmotriti glavne parametre konfiguracijske datoteke kao i načine podešavanja performansi. PostgreSQL je popularan besplatni objektni sustav za upravljanje objektima. Iako nije toliko rasprostranjen kao MySQL / MariDB, ipak je najprofesionalniji.

Prednosti PostgreSQL-a:

  • Potpuno udovoljavanje SQL standardima;
  • Visoke performanse kroz multivarijantno upravljanje istodobnim valutama (MVCC);
  • Skalabilnost (široko korištena u visoko opterećenim okruženjima);
  • Podrška za mnoge programske jezike;
  • Pouzdani mehanizmi transakcija i replikacija;
  • Podrška za JSON.

sadržaj:

  • Instalirajte PostgreSQL na CentOS / RHEL
  • Spajanje na PostgreSQL, stvaranje baze podataka, korisnika
  • Osnovne opcije konfiguracijske datoteke PostgreSQL
  • Izrada sigurnosne kopije i obnavljanje baze podataka u PostgreSQL
  • PostgreSQL optimizacija i podešavanje

Instalirajte PostgreSQL na CentOS / RHEL

Iako se PostgreSQL može instalirati iz osnovnog spremišta CentOS, to ćemo spremište instalirati od programera, jer uvijek ima najnoviju verziju paketa.

Prvi korak je instalacija PosgreSQL spremišta (trenutno je instalirano na sljedeći način):

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

Ovo spremište sadrži i najnovije verzije PostgreSQL-a i starije verzije. Podaci o spremištu su sljedeći:

Instalirajte najnoviju dostupnu verziju (PostrgeSQL 11) koristeći yum.

yum instalirati postgresql11-server -y

Tijekom instalacije instaliran je sam PostgreSQL poslužitelj i potrebne knjižnice:

Instalacija: libicu-50.2-3.el7.x86_64 1/4 Instalacija: postgresql11-libs-11.5-1PGDG.rhel7.x86_64 2/4 Instalacija: postgresql11-11.5-1PGDG.rhel7.x86_64 3/4 Instalacija: postgresql11-server- 11.5-1PGDG.rhel7.x86_64 4/4

Nakon što instalirate pakete, morate inicijalizirati bazu podataka:

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

Također, odmah dodajte poslužitelj baze podataka da biste ga pokrenuli i pokrenuli ga:

systemctl omogućuju postgresql-11

systemctl start postgresql-11

Da biste bili sigurni da se poslužitelj pokrenuo i nema problema, provjerite njegov status:

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

● postgresql-11.service - Poslužitelj baze podataka PostgreSQL 11 učitan: učitan (/usr/lib/systemd/system/postgresql-11.service; omogućeno; unaprijed postavljeno dobavljač: onemogućeno) Aktivno: aktivno (radi) od srije 2019-09-18 13:01:56 +06; Prije 26 sati Dokumenti: https://www.postgresql.org/docs/11/static/ Proces: 6614 ExecStartPre = / usr / pgsql-11 / bin / postgresql-11-check-db-dir $ PGDATA (code = izašao, status = 0 / SUCCESS) Glavni PID: 6619 (poštarski urednik) CGroup: /system.slice/postgresql-11.service ├─6619 / usr / pgsql-11 / bin / postmaster -D / var / lib / pgsql / 11 / data / ├─6621 postgres: drvosječa ├─6623 postgres: checkpointer ├─6624 postgres: pisac pozadine ├─6625 postgres: walwriter ├─6626 postgres: autovacuum launcher ├─6627 postgres: statistika kolekcionara └─6628 postgres: pokretač logičke replikacije 18. rujna 13:01:56 server.1.com systemd [1]: Pokretanje PostgreSQL 11 poslužitelja baza podataka ... 18. rujna 13:01:56 poslužitelja.1.com poštar [6619]: 2019-09-18 13: 01: 56.399 +06 [6619] LOG: slušanje na IPv6 adresi ":: 1", port 5432, 18. rujna 13:01:56 poslužitelj.1.com poštar [6619]: 2019-09-18 13: 01: 56.399 +06 [6619 ] LOG: preslušavanje na IPv4 adresi "127.0.0.1", port 5432 rujna 18 13:01:56 server.1.com poštarski urednik [6619]: 2019-09-18 13: 01: 56.401 +06 [6619] LOG: slušanje na Unix socketu "/var/run/postgresql/.s.PGSQL.5432" 18. rujna 13:01:56 server.1.com poštar [6619]: 2019-09-18 13: 01: 56.409 +06 [6619] LOG: slušanje na Unix socketu "/tmp/.s.PGSQL.5432" 18. rujna 13:01:56 server.1.com poštar [6619]: 2019-09-18 13: 01: 56.427 +06 [ 6619] LOG: preusmjeravanje izlaznog dnevnika na proces sakupljanja zapisa dnevnika 18. rujna 13:01:56 server.1.com postmaster [6619]: 2019-09-18 13: 01: 56.427 +06 [6619] SAVJET: Pojaviti će se budući izlazni zapisnik u imeniku "zapisnik". 18. rujna 13:01:56 server.1.com systemd [1]: Pokrenut poslužitelj baze podataka PostgreSQL 11. 

Ako vam je potreban pristup PostgreSQL izvana, morate otvoriti TCP / 5432 port u standardnom vatrozidu u Centos 7:

# firewall-cmd --getget-active-zone

javna sučelja: eth0

# firewall-cmd --zone = public --add-port = 5432 / tcp - trajan
# firewall-cmd - ponovno učitavanje

Ili putem iptablesa:

# iptables-A INPUT -m stanje - drzava NOVO -m tcp -p tcp --dport 5432 -j PRIHVAT

Ponovo pokreni #service iptables

Ako je omogućen SELinux, učinite:

setsebool -P httpd_can_network_connect_db 1

Spajanje na PostgreSQL, stvaranje baze podataka, korisnika

Prilikom instalacije PostgreSQL-a, u sustavu se nalazi jedan korisnički -postgres.

Ne preporučujem njegovo korištenje za rad s bazama podataka, bolje je stvoriti korisnike za svaku bazu podataka zasebno.

Za povezivanje na postgres poslužitelj morate unijeti naredbu:

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

psql (11.5) Upišite "help" za pomoć.

postgres = #

Konzola PostgreSQL se otvorila. Pokažimo nekoliko jednostavnih primjera PostgreSQL kontrole s psql konzole.

jer bilo koji korisnik sustava može se prijaviti u postrgesql, prvo morate promijeniti lozinku korisnika postgres-a.

ALTER ROLE postgres s PASSWORD 'super_str0ng_pa $$ word';

Odmah stvorite novu bazu podataka, korisnika i dajte mu puna prava na ovu bazu podataka:

postgres = # IZRADI DATABU mydbtest;

postgres = # USPOREDI KORISNIKA mydbuser SA lozinkom '123456789';

postgres = # PODELI SVE PRIVILEGE NA BAZI PODATAKA mydbtest TO mydbuser;

Spajanje na bazu podataka:

postgres = # \ c naziv baze podataka

Popis tablica:

postgres = # \ dt

Navedi upite u bazu podataka:

postgres = # select * od pg_stat_activity gdje je datname = "dbname"

Poništite sve veze baze podataka:

postgres = # odaberite pg_terminate_backend (pid) iz pg_stat_activity gdje je ime = 'dbname'

Informacije o trenutnoj sesiji mogu se dobiti na sljedeći način:

postgres = # \ conninfo

Da biste dovršili konzolu psql, pokrenite:

postgres = # \ q

Kao što ste već primijetili, sintaksa se ne razlikuje od iste MariaDB ili MySQL, te se stoga nećemo zadržavati na naredbama istog tipa.

Imajte na umu da je za prikladnije upravljanje PostgreSQL bazama podataka s web sučelja preporučljivo koristiti pgAdmin4 (napisano u Python i Javascript / jQuery). Ovo je analogni uobičajenim programerima web PhpMyAdmin.

Osnovne opcije konfiguracijske datoteke PostgreSQL

Konfiguracijske datoteke postgresql nalaze se u direktoriju / var / lib / pgsql / 11 / data:

  • postgresql.conf - Sama konfiguracijska datoteka postgresql
  • pg_hba.conf - datoteka s postavkama pristupa. U ovoj datoteci možete postaviti različita ograničenja za korisnike, postaviti pravilo povezivanja s bazom podataka;
  • pg_ident.conf - Ova se datoteka koristi kada identificira klijente pomoću protokola identiteta.

Da biste spriječili lokalne korisnike da se bez autorizacije prijave u postgres, navedite u datoteci pg_hba.conf:

lokalno sve sve md5 domaćin sve sve 127.0.0.1/32 md5

Razmotrite najvažnije parametre u konfiguracijskoj datoteci postgresql.conf:

  • listen_addresses - označava koje IP adrese poslužitelj će prihvatiti veze klijenta. Prema zadanim postavkama naveden je localhost, što znači da je moguća samo lokalna veza. Da biste to učinili na svim IPv4 sučeljima, odredite 0.0.0.0
  • max_connections - kao u ostalim DBMS-ovima, ovo je maksimalni broj istodobnih veza s poslužiteljem baze podataka;
  • temp_buffers - maksimalna veličina privremenih međuspremnika;
  • shared_buffers - Količina zajedničke memorije koju koristi poslužitelj baze podataka. Obično se postavlja na 25% memorije instalirane na poslužitelju;
  • effective_cache_size - Parametar koji pomaže rasporedu postupaka odrediti količinu dostupne memorije za predmemoriranje na disk. Obično se parametar postavlja na veličinu 50-75% ukupne RAM-a na poslužitelju;
  • work_mem - količina memorije koja će se koristiti unutarnjim operacijama sortiranja DBMS - NARUDŽBA PO, DISTINCT i spajanje;
  • maintenance_work_mem - količina memorije koja će se koristiti unutarnjim operacijama - VACUUM, CREATE INDEX i ALTER TABLE ADD FOREIGN KEY;
  • fsync - ako je ova opcija omogućena, DBMS će čekati da se fizički podaci upišu na tvrdi disk. Ako je omogućena fsync, bit će vam lakše vratiti bazu podataka nakon kvara sustava ili hardvera. Naravno, uključivanje ovog parametra značajno smanjuje performanse DBMS-a, ali povećava pouzdanost pohrane. Kada onemogućite ovaj parametar, vrijedi onemogućiti full_page_writes;
  • max_stack_depth - maksimalna veličina snopa (2 MB prema zadanim postavkama);
  • max_fsm_pages - pomoću ovog parametra možete upravljati slobodnim diskovnim prostorom na poslužitelju. Na primjer, nakon brisanja podataka iz tablice, prethodno zauzeti prostor se ne oslobađa na disku, već se na karti slobodnog prostora označava s oznakom "besplatno" i zatim koristi za nove unose u tablici. Ako poslužitelj aktivno bilježi / briše podatke u tablicama, povećanje ovog parametra pozitivno će utjecati na performanse;
  • wal_buffers - količina zajedničke memorije (shared_buffers) koja se koristi za pohranjivanje WAL podataka;
  • wal_writer_delay - vrijeme između razdoblja pisanja WAL-a na disk;
  • commit_delay - kašnjenje između pisanja transakcije u WAL međuspremnik i ispuštanja na disk;
  • synchronous_commit - parametar određuje da će se rezultat uspješnog završetka transakcije poslati kad se podaci WAL-a fizički zapišu na disk.

Izrada sigurnosne kopije i obnavljanje baze podataka u PostgreSQL

Postoji nekoliko načina sigurnosne kopije PostgreSQL baze podataka. Razmotrimo najjednostavniju opciju..

Prvo provjerite koje se baze podataka pokreću na poslužitelju:

postgres = # \ popis

Imamo 4 baze podataka od kojih su 3 sistemske (postgres i template).

Ranije smo stvorili bazu podataka s nazivom "mydbtest" koristeći njezin primjer i izradu sigurnosne kopije.

Jedan od načina sigurnosne kopije je izvršenje pomoću uslužnog programa pg_dump:

sudo -u postgres pg_dump mydbtest> /root/dupm.sql - izvršimo zahtjev od korisnika poštara, odredimo željenu bazu podataka i put do datoteke u koju želite spremiti deponij baze podataka. Sustav sigurnosne kopije može pokupiti deponije baze podataka ili ako koristite web poslužitelj možete je poslati u pohranu u oblaku.

Za vraćanje navedenog ispisa u željenu bazu podataka možete koristiti uslužni program psql:

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

Možete stvoriti i sigurnosnu kopiju u posebnom formatu dump i komprimirati pomoću gzip:

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

Takav se deponij obnavlja pomoću uslužnog programa pg_restore:

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

Naprednije postavke potražite u pomoći za ove alate:

čovjek psql
čovjek pg_dump
čovjek pg_restore

PostgreSQL optimizacija i podešavanje

U prethodnom članku o MariaDB-u pokazali smo kako se parametri konfiguracijske datoteke my.cnf mogu svesti na ideal pomoću tunera. Za PostgreSQL postoji, iako je ispravnije bilo reći da je takav program kao što je PgTun postojao, ali nažalost nije dugo ažuriran. U isto vrijeme, postoji mnogo mrežnih servisa s kojima možete konfigurirati optimalnu konfiguraciju za PostgreSQL. Sviđa mi se usluga pgtune.leopard.in.ua.

Sučelje je vrlo jednostavno. Trebate navesti parametre vašeg poslužitelja (profil, procesore, memoriju, vrstu diskova) i kliknite gumb "Generiraj". Kao rezultat toga, bit će vam ponuđena varijanta konfiguracijske datoteke postgresql.conf s preporučenim vrijednostima glavnih DBMS parametara.

Na primjer, za VPS SSD poslužitelj s 2 GB RAM-a, 2 CPU-a preporučuju se sljedeće postavke u postgresql.conf za pokretanje nekoliko web lokacija:

# DB verzija: 11 # Tip OS: linux # DB Tip: web # Ukupna memorija (RAM): 2 GB # Broj CPU-a: 2 # Broj priključaka: 20 # Pohrana podataka: ssd max_connections = 20 shared_buffers = 512MB efektivna_cache_size = 1536MB održavanje_work_mem = 128MB checkpoint_completion_target = 0.7 wal_buffers = 16MB default_statistics_target = 100 random_page_cost = 1.1 efektivna_io_konzornost = 200 work_mem = 26214kB min_wal_size = 1GB max_wal_size = 2GB max_worker_process = 2 max_parallel_workers

A ovo zapravo nije jedini resurs, u vrijeme pisanja knjiga bile su dostupne slične usluge:

  • Cybertec PostgreSQL konfigurator
  • Alat za konfiguriranje PostgreSQL

Pomoću ovih usluga možete brzo konfigurirati početne DBMS parametre za svoju opremu i zadatke. Ubuduće se morate oslanjati ne samo na resurse poslužitelja, već i analizirati bazu podataka u cjelini, njezinu veličinu, broj veza i na temelju toga izvršiti daljnju preciznu prilagodbu PostgreSQL parametara.