Praćenje performansi MySQL/MariaDB baze podataka s Perconom na Ubuntu poslužitelju


Ovaj vodič će vam pokazati kako instalirati PMM (Percona nadzor i upravljanje) na Ubuntu za praćenje performansi MySQL/MariaDB baze podataka.

Percona značajke nadzora i upravljanja (PMM).

Percona je pružatelj rješenja za baze podataka otvorenog koda. Značajke PMM-a:

  • Besplatno i otvorenog koda. PMM koristi model klijent-poslužitelj. Klijentski i poslužiteljski softver instalirani su na vašem vlastitom hardveru.
  • Podržava MySQL/MariaDB, PostgreSQL, MongoDB i ProxySQL, tako da možete pratiti sve svoje baze podataka otvorenog koda na jednom mjestu.
  • Podržava InnoDB, XtraDB i MyRocks motore za pohranu za MySQL/MariaDB.
  • Podržava WiredTiger, MMAPv1, InMemory i RocksDB motore za pohranu za MongoDB.
  • Praćenje analitike upita i metrike.
  • Pokrenite provjere uobičajenih sigurnosnih problema baze podataka.
  • Jednostavno identificirajte neočekivane upite baze podataka kako biste poboljšali sigurnost podataka.
  • Podržava Percona XtraDB klaster.

Da biste koristili PMM, morate instalirati komponentu poslužitelja na središnjem poslužitelju, zatim instalirati komponentu klijenta na svoje MySQL/MariaDB hostove koje želite nadzirati. Klijent poslužitelju šalje statistiku performansi. Ako imate samo jedan MySQL/MariaDB host, tada možete instalirati i poslužiteljsku i klijentsku komponentu na ovom hostu.

Korak 1: Instalirajte Docker na Ubuntu 22.04/20.04 poslužitelj

Komponenta PMM poslužitelja distribuira se kao Docker slika, tako da moramo instalirati Docker.

Docker je uključen u repozitorij softvera Ubuntu. Međutim, kako bismo bili sigurni da imamo najnoviju verziju, moramo je instalirati iz Dockerovog APT repozitorija. Pokrenite sljedeću naredbu za dodavanje Docker repozitorija na vaš Ubuntu poslužitelj.

echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list

Zatim pokrenite sljedeću naredbu za uvoz Docker GPG ključa u Ubuntu sustav tako da APT može provjeriti integritet paketa tijekom instalacije.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

A budući da ovo spremište koristi HTTPS vezu, koju preporučujem da koriste sva softverska spremišta, također moramo instalirati paket apt-transport-https i ca-certificates.

sudo apt install apt-transport-https ca-certificates

Konačno, ažurirajte indeks paketa na vašem Ubuntu sustavu i instalirajte docker-ce (Docker Community Edition).

sudo apt update

sudo apt install docker-ce

Nakon što je Docker instaliran, Docker demon bi se trebao automatski pokrenuti. Njegov status možete provjeriti pomoću:

systemctl status docker

Ako ne radi, pokrenite demon ovom naredbom:

sudo systemctl start docker

I omogućite automatsko pokretanje tijekom pokretanja sustava:

sudo systemctl enable docker

Provjerite verziju Dockera.

docker -v

Uzorak rezultata:

Docker version 20.10.18, build b40c2f6

Korak 2: Instalirajte komponentu PMM poslužitelja

Stvorite Docker volumen podataka za PMM poslužitelj.

sudo docker create -v /srv --name pmm-data percona/pmm-server:latest /bin/true

Pokrenite Docker spremnik PMM poslužitelja.

sudo docker run -d -p 8000:80 -p 8443:443 --volumes-from pmm-data --name pmm-server --restart always percona/pmm-server:latest

Popis pokrenutih Docker spremnika.

sudo docker ps

Trebali biste pronaći pmm-server Docker spremnik radi.

CONTAINER ID   IMAGE                  COMMAND                CREATED         STATUS                                                                                            
c9199659fdd9   percona/pmm-server:2   "/opt/entrypoint.sh"   9 seconds ago   Up 8 seconds (healthy)

Sada možete pristupiti PMM web-baziranoj nadzornoj ploči putem https://your-server-ip:8443. Prema zadanim postavkama koristi samopotpisani TLS certifikat, tako da morate dodati sigurnosnu iznimku u svoj web preglednik.

  • U Firefoxu kliknite Napredno i kliknite Prihvati rizik i nastavi.
  • U pregledniku Google Chrome kliknite Advaned i Proceed to your-server-ip(unsafe) .

Zadano korisničko ime/lozinka je admin:admin. Nakon prve prijave morate postaviti novu lozinku. (Lozinka ne smije sadržavati znak / ili će PMM klijent imati problema s povezivanjem s PMM poslužiteljem.)

Ako ste omogućili UFW vatrozid, morate dopustiti TCP priključak 8443 kako biste pristupili PMM nadzornoj ploči.

sudo ufw allow 8443/tcp

PMM nadzorna ploča

Postoji zadani host na nadzornoj ploči, tj. Docker spremnik pmm-server.

Korak 3: Instalirajte PMM klijentsku komponentu na vaš MySQL/MariaDB host

PMM klijenti imaju Deb spremište paketa za Debian/Ubuntu.

Preuzmite paket PMM repozitorija.

wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb

Instalirajte paket.

sudo apt install ./percona-release_latest*.deb

Sada je Percona repozitorij dodan, ažurirajte lokalni indeks paketa i instalirajte PMM klijent.

sudo apt update

sudo apt install pmm2-client

PMM agent će se automatski pokrenuti, kao što možete vidjeti s:

systemctl status pmm-agent

Ako je pokrenut, možete ga pokrenuti pomoću:

sudo systemctl enable pmm-agent --now

Zatim spojite klijenta na poslužitelj sljedećom naredbom.

sudo pmm-admin config --server-insecure-tls --server-url=https://admin:admin_assword@your-server-ip:8443

Uzorak rezultata:

Checking local pmm-agent status...
pmm-agent is running.
Registering pmm-agent on PMM Server...
Registered.
Configuration file /usr/local/percona/pmm2/config/pmm-agent.yaml updated.
Reloading pmm-agent configuration...
Configuration reloaded.
Checking local pmm-agent status...
pmm-agent is running.

Ponovno učitajte nadzornu ploču PMM poslužitelja. MySQL/MariaDB host možete pronaći na dnu stranice.

Savjet: Ako želite konfigurirati PMM agenta za povezivanje s drugim PMM poslužiteljem, jednostavno ponovno pokrenite gornju naredbu. Naravno, trebate promijeniti IP adresu i lozinku.

Sada moramo konfigurirati PMM klijent za praćenje MySQL/MariaDB baze podataka. Prijavite se na MySQL/MariaDB konzolu.

sudo mysql -u root

ili

mysql -u root -p

Stvorite PMM korisnika za praćenje.

CREATE USER 'pmm'@'localhost' IDENTIFIED BY 'secret_password' WITH MAX_USER_CONNECTIONS 10;

Dodijeli dopuštenja.

GRANT SELECT, PROCESS, SUPER, REPLICATION CLIENT, RELOAD ON *.* TO 'pmm'@'localhost';

Tablica povlastica za ispiranje

FLUSH PRIVILEGES;

I izlaz.

EXIT;

Pokrenite sljedeću naredbu za dodavanje usluge MySQL/MariaDB u PMM.

sudo pmm-admin add mysql --username=pmm --password=secret_password --query-source=perfschema

Uzorak rezultata:

MySQL Service added.
Service ID  : /service_id/8597086d-828e-47aa-a74f-9c86918af208
Service name: linux-terminal.com-mysql

Table statistics collection disabled (the limit is 1000, the actual table count is 2600).

Korak 4: Pratite MySQL/MariaDB bazu podataka

Ako je vaš MySQL/MariaDB spor, prva stvar koju trebate učiniti je provjeriti QPS (Queries per second), što je metrika koja prati opterećenje poslužitelja baze podataka. Kao što možete vidjeti na sljedećoj snimci zaslona, jedan od mojih poslužitelja baze podataka MariaDB pod velikim je opterećenjem (oko 700 upita u sekundi).

Tada ćete morati koristiti Query Analytics (QAN) za analizu tih SQL upita.

Ako postoji više baza podataka, ploča Analitika upita može vam pokazati koja je baza podataka najprometnija.

Koji je savršen hardver za pokretanje MySQL/MariaDB?

  • Ako je vaša baza podataka velika i trebate skalirati svoju aplikaciju, pripremite se za najmanje 8 CPU jezgri.
  • Koristite NVMe SSD
  • Koristite RAID za povećanje IO performansi.
  • Što više RAM-a imate, više podataka iz baze podataka možete čuvati u memoriji, čime se izbjegava pristup disku.
  • Ne biste trebali koristiti swap prostor, koji će uvelike umanjiti performanse baze podataka. Međutim, Linux voli mijenjanje iz nekoliko razloga. Možete pročitati sljedeći članak da naučite kako stvoriti i kako onemogućiti swap prostor.

Stvorite swap datoteku na poslužitelju Cloud Linux kako biste spriječili nedostatak memorije

Dizajn baze podataka

Nakon odabira hardvera, sljedeći korak za učinkovitu MySQL/MariaDB bazu podataka je kako dizajnirati svoju bazu podataka, što je posao programera. Treba uzeti u obzir sljedeće čimbenike:

  • Shema: Dizajnirajte svoju shemu baze podataka tako da se podaci mogu dohvatiti što je brže moguće.
  • Vrste podataka: odaberite pravu vrstu podataka za učinkovito pohranjivanje na disku.

Ako koristite etabliranu web aplikaciju kao što je WordPress/WooCommerce ili Magento, onda je dizajn baze podataka već zbrinut.

Jednostavno MySQL/MariaDB podešavanje performansi

Ovdje je InnoDB konfiguracija u mojoj /etc/mysql/mariadb.conf.d/50-server.cnf datoteci. Ovo je vrlo jednostavno podešavanje performansi.

innodb_buffer_pool_size = 2048M
innodb_buffer_pool_dump_at_shutdown = ON
innodb_buffer_pool_load_at_startup  = ON
innodb_log_file_size = 512M
innodb_log_buffer_size = 8M

#Improving disk I/O performance
innodb_file_per_table = 1
innodb_open_files = 400
innodb_io_capacity = 400
innodb_flush_method = O_DIRECT
innodb_read_io_threads = 64
innodb_write_io_threads = 64
innodb_buffer_pool_instances = 3

Gdje :

  • Veličina skupa međuspremnika InnoDB mora biti najmanje polovica ukupnog RAM-a ili 70% slobodnog RAM-a. ( Napomena: trebali biste izbjegavati zamjenu.) InnoDB međuspremnik je privremena predmemorija u memoriji za MySQL/MariaDB, pa ako imate dovoljno RAM-a, trebali biste povećati parametar. Najbolji scenarij je da se svi vaši podaci nalaze u memoriji, tako da pristup disku može biti eliminiran.
  • Veličina datoteke dnevnika InnoDB mora biti 25% veličine međuspremnika.
  • InnoDB može koristiti izravni IO na Linuxu i FreeBSD-u.
  • Postavite čitanje IO niti i pisanje IO niti na maksimum (64)
  • Neka MariaDB koristi 3 instance InnoDB međuspremnika. Broj instanci mora biti (broj CPU jezgri) * (niti po jezgri) na vašem sustavu.

Nakon spremanja promjena ponovno pokrenite MariaDB.

sudo systemctl restart mariadb

Korištenje mysqltunera

mysqltuner je skripta za podešavanje performansi MySQL/MariaDB. Instalirajte ga iz Ubuntu repozitorija.

sudo apt install mysqltuner

Zatim jednostavno trčite

sudo mysqltuner

Analizirat će vaš poslužitelj baze podataka i dati preporuke. Na primjer, mysqltuner je otkrio da je veličina mojih podataka 23,5G, pa sugerira da moram povećati innodb_buffer_pool_size na 23,5G.

Korištenje Redis Cachea

Redis radi kao MySQL predmemorija upita. (Napomena: predmemorija upita uklonjena je u MySQL 8.) Pohranjuje rezultate upita u memoriju i može dati ogromna poboljšanja performansi.

Instalirajte Redis poslužitelj i PHP ekstenziju

sudo apt install redis-server php-redis

Ako koristite PHP7.4, morate instalirati php7.4-redis.

sudo apt install php7.4-redis

Ako koristite PHP8.1, morate instalirati php8.1-redis

sudo apt install php8.1-redis

Preporučena literatura: Kako instalirati više verzija PHP-a na Ubuntu poslužitelj

Nakon što se instalira, Redis bi se trebao automatski pokrenuti. Provjerite njegov status:

systemctl status redis

Uzorak rezultata:

* redis-server.service - Advanced key-value store
     Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2022-07-30 10:54:02 SAST; 1 months 11 days ago
       Docs: http://redis.io/documentation,
             man:redis-server(1)
   Main PID: 1176 (redis-server)
      Tasks: 4 (limit: 38329)
     Memory: 3.0M
     CGroup: /system.slice/redis-server.service
             `-1176 /usr/bin/redis-server 127.0.0.1:6379

Možete ga i ručno pokrenuti i omogućiti automatsko pokretanje s pokretanjem sustava.

sudo systemctl enable --now redis-server

Zatim provjerite status Redis PHP proširenja.

php --ri redis

Uzorak rezultata:

redis

Redis Support => enabled
Redis Version => 5.3.7
Redis Sentinel Version => 0.1
Available serializers => php, json, igbinary
Available compression => lzf, zstd, lz4

Vidimo da je proširenje omogućeno. Sada je stražnji kraj postavljen, idemo konfigurirati sučelje WordPressa. Moramo instalirati i konfigurirati Redis Object Cache WordPress dodatak.

Ako ste instalirali W3 Total Cache, WP Super Cache ili druge dodatke za predmemoriju u WordPressu, prvo ih uklonite. Zatim instalirajte Redis Object Cache dodatak Till Kruss i aktivirajte ga.

Zatim idite na Postavke > Redis. Kliknite Omogući predmemoriju objekata.

Trebali biste vidjeti da je veza uspostavljena.

Također možete izdati sljedeću naredbu na svom Ubuntu poslužitelju.

redis-cli monitor

Možete vidjeti obradu Redis Cachea u stvarnom vremenu, što znači da Redis cache ispravno radi na vašoj WordPress stranici.

Ako naiđete na sljedeću pogrešku, to znači da Redis poslužitelj zahtijeva lozinku za pristup.

NOAUTH Authentication required

Budući da Redis sluša samo na lokalnom hostu, mislim da lozinka nije potrebna, tako da možete onemogućiti autentifikaciju lozinke. (Ako koristite UFW vatrozid za blokiranje javnog pristupa priključku 6379, to također eliminira potrebu za provjerom autentičnosti lozinke.)

sudo nano /etc/redis/redis.conf

Pronađite redak requirepass i komentirajte ga.

#requirepass secret_password

Spremite i zatvorite datoteku. Ponovno pokrenite Redis.

sudo systemctl restart redis-server

Savjet: WordPress 6.1 uvodi WP-Query predmemoriju, koja proizvodi golema poboljšanja performansi baze podataka.

Završavati

Nadam se da je ovaj članak pomogao instalirati PMM za praćenje performansi MySQL/MariaDB. Želite pratiti izvedbu Nginxa i PHP-FPM-a? Pročitajte sljedeći članak:

  • Praćenje performansi LEMP stacka uz Nginx Amplify na Ubuntu 20.04/18.04

Možda biste također željeli postaviti Nginx FastCGI predmemoriju kako biste smanjili vrijeme odgovora poslužitelja.

  • Postavite Nginx FastCGI predmemoriju da smanjite vrijeme odziva poslužitelja WordPress