Belge

Ubuntu Sunucusunda Percona ile MySQL/MariaDB Veritabanı Performans İzleme

Bu yazıda, MySQL/MariaDB veritabanı performansını izlemek için Ubuntu’da PMM’nin (Percona Monitoring and Management) nasıl kurulacağını okuyacaksınız .

Percona İzleme ve Yönetim (PMM) Özellikleri

Percona, açık kaynaklı veritabanı çözümleri sağlayıcısıdır. PMM özellikleri:

  • Ücretsiz ve açık kaynak. PMM, istemci-sunucu modelini kullanır. İstemci ve sunucu yazılımı kendi donanımınıza yüklenir.
  • MySQL/MariaDB, PostgreSQL, MongoDB ve ProxySQL’i destekler, böylece tüm açık kaynak veritabanlarınızı tek bir yerden izleyebilirsiniz.
  • MySQL/MariaDB için InnoDB, XtraDB ve MyRocks depolama motorlarını destekler.
  • MongoDB için WiredTiger, MMAPv1, InMemory ve RocksDB depolama motorlarını destekler.
  • Sorgu analitiği ve metrik izleyicileri.
  • Genel veritabanı güvenlik sorunları için kontroller çalıştırmanızı sağlar
  • Veri güvenliğini artırmak için beklenmeyen veritabanı sorgularını kolayca belirleyin.
  • Percona XtraDB Kümesini destekler.

PMM’yi kullanmak için, sunucu bileşenini merkezi bir sunucuya kurmanız, ardından istemci bileşenini izlemek istediğiniz MySQL/MariaDB sunucunuza kurmanız gerekir. İstemci, performans istatistiklerini sunucuya gönderir. Yalnızca bir MySQL/MariaDB sunucunuz varsa, hem sunucu hem de istemci bileşeni yükleyebilirsiniz.

Adım 1: Docker’ı Ubuntu 22.04/20.04 Sunucusuna Kurun

PMM sunucu bileşeni bir Docker görüntüsü olarak dağıtılır, bu nedenle Docker’ı yüklememiz gerekiyor.

Docker, Ubuntu yazılım deposuna dahildir. Ancak en son sürüme sahip olduğumuzdan emin olmak için onu Docker’ın APT deposundan yüklememiz gerekiyor. Ubuntu sunucunuza Docker deposu eklemek için aşağıdaki komutu çalıştırın.

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

Ardından, APT’nin kurulum sırasında paket bütünlüğünü doğrulayabilmesi için Docker GPG anahtarını Ubuntu sistemine aktarmak için aşağıdaki komutu çalıştırın.

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

Ve bu depo, tüm yazılım havuzlarının kullanmasını önerdiğim HTTPS bağlantısını kullandığı için, apt-transport-https ve ca-certificates paketini de yüklememiz gerekiyor.

sudo apt install apt-transport-https ca-certificates

Son olarak, Ubuntu sisteminizdeki paket dizinini güncelleyin ve docker-ce’yi (Docker Community Edition) kurun.

sudo apt update

sudo apt install docker-ce

Docker yüklendikten sonra Docker arka plan programı otomatik olarak başlatılmalıdır. Durumunu şu şekilde kontrol edebilirsiniz:

systemctl status docker

Çalışmıyorsa, arka plan şu komutla eğitim:

sudo systemctl start docker

Ve otomatik olarak devreye girmeyi etkinleştirin:

sudo systemctl enable docker

Docker kontrol sistemi edin.

docker -v

Adım 2: PMM Sunucu Bileşenlerini Kurun

PMM sunucusu için Docker veri birimi oluşturun.

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

PMM sunucusu Docker kapsayıcısını çalıştırın.

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

Çalışan Docker kapsayıcılarını listeleyin.

sudo docker ps

pmm-server Docker konteynerinin çalıştığını bulmalısınız.

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

Artık PMM web tabanlı kontrol paneline https://server-ip:8443 üzerinden erişebilirsiniz. Varsayılan olarak, kendinden imzalı bir TLS sertifikası kullanır, bu nedenle web tarayıcınıza bir güvenlik istisnası eklemeniz gerekir.

  • Firefox’ta Gelişmiş’e tıklayın ve Riski kabul et ve Devam’a tıklayın.
  • Google Chrome’da Gelişmiş’i tıklayın ve sunucu-ip’nize (güvensiz) ilerleyin.

Varsayılan kullanıcı adı/parola admin:admin’dir. İlk girişten sonra yeni bir parola belirlemeniz gerekir. (Parola “/” karakteri içermemelidir, aksi takdirde PMM istemcisi PMM sunucusuna bağlanmada sorun yaşar.)

UFW güvenlik duvarını etkinleştirdiyseniz , PMM panosuna erişmek için 8443 numaralı TCP bağlantı noktasına izin vermeniz gerekir.

sudo ufw allow 8443/tcp

PMM kontrol paneli

Adım 3: MySQL/MariaDB Sunucunuza PMM İstemci Bileşenini Kurun

PMM istemcileri, Debian/Ubuntu için Deb paketi deposuna sahiptir.

PMM veri havuzu paketini indirin.

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

Paketi kurun.

sudo apt install ./percona-release_latest*.deb

Şimdi Percona deposu eklendi, yerel paket dizinini güncelleyin ve PMM istemcisini kurun.

sudo apt update

sudo apt install pmm2-client

Aşağıdakilerle görebileceğiniz gibi, PMM aracısı otomatik olarak başlayacaktır:

systemctl status pmm-agent

Çalışıyorsa, şununla başlatabilirsiniz:

sudo systemctl enable pmm-agent --now

Ardından, aşağıdaki komutla istemciyi sunucuya bağlayın.

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

Örnek çıktı:

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.

Şimdi MySQL/MariaDB veritabanını izlemek için PMM istemcisini yapılandırmamız gerekiyor. MySQL/MariaDB konsolunda oturum açın.

sudo mysql -u root

veya

mysql -u root -p

İzleme için bir PMM kullanıcısı oluşturun.

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

Gerekli izinleri verin.

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

Değişiklikleri kayıt edin

FLUSH PRIVILEGES;

İşlem bitince çıkış yapabilirsiniz.

EXIT;

MySQL/MariaDB hizmetini PMM’ye eklemek için aşağıdaki komutu çalıştırın.

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

Örnek çıktı:

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

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

Adım 4: MySQL/MariaDB Veritabanını İzleyin

MySQL/MariaDB’niz yavaşsa, yapmanız gereken ilk şey, veritabanı sunucusundaki yükü izleyen bir ölçüm olan QPS’yi (Sorgu/saniye) kontrol etmektir. Aşağıdaki ekran görüntüsünden de görebileceğiniz gibi, MariaDB veritabanı sunucularımdan biri ağır yük altında (saniyede yaklaşık 700 sorgu).

Ardından, bu SQL sorgularını analiz etmek için Sorgu Analizi (QAN) kullanmanız gerekecektir.

Birden çok veritabanı varsa, Sorgu Analizi paneli size hangi veritabanının en yoğun olduğunu gösterebilir.

MySQL/MariaDB’yi Çalıştırmak için Mükemmel Donanım Nedir?

  • Veritabanınız büyükse ve uygulamanızı ölçeklendirmeniz gerekiyorsa en az 8 CPU çekirdeği hazırlayın.
  • NVMe SSD’yi kullanın
  • GÇ performansını artırmak için RAID kullanın.
  • Ne kadar fazla RAM’e sahipseniz, veritabanından o kadar fazla veri bellekte tutulabilir, böylece disk erişiminden kaçınılır.
  • Veritabanı performansını büyük ölçüde düşürecek takas alanı kullanmamalısınız.

Veri tabanı tasarımı

Donanımı seçtikten sonra, performanslı bir MySQL/MariaDB veritabanı için bir sonraki adım, geliştiricinin işi olan veritabanınızı nasıl tasarlayacağınızdır. Aşağıdaki faktörler dikkate alınmalıdır:

  • Şema : Verilerin mümkün olduğu kadar hızlı alınabilmesi için sisteminizi tasarlayın.
  • Veri türleri : Verimli disk depolaması için doğru veriyi seçin.

MySQL/MariaDB Performans Ayar Örneği

İşte /etc/mysql/mariadb.conf.d/50-server.cnf dosyamdaki InnoDB yapılandırması. Bu çok basit bir performans ayarıdır.

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
  • InnoDB arabellek havuzu boyutunun toplam RAM’in en az yarısı veya boş RAM’in %70’i olması gerekir. ( Not: Takas yapmaktan kaçınmalısınız.) InnoDB arabellek havuzu, MySQL/MariaDB için geçici bir bellek içi önbellektir, bu nedenle yeterli RAM’iniz varsa, parametreyi artırmalısınız. En iyi senaryo, tüm verilerinizin bellekte kalmasıdır, böylece disk erişimi ortadan kaldırılabilir.
  • InnoDB günlük dosyası boyutunun arabellek havuzu boyutunun %25’i olması gerekir.
  • InnoDB, Linux ve FreeBSD’de doğrudan IO kullanabilir.
  • Okunan IO dizilerini ayarlayın ve IO dizisini maksimuma yazın (64)
  • MariaDB’nin 3 InnoDB arabellek havuzu örneğini kullanmasını sağlayın. Örnek sayısı, sisteminizde (CPU çekirdek sayısı) * (çekirdek başına iş parçacığı) olmalıdır.

Değişiklikleri kaydettikten sonra MariaDB’yi yeniden başlatın.

sudo systemctl restart mariadb

mysqltuner’ı kullanma

mysqltuner, MySQL/MariaDB performans ayarı için bir komut dosyasıdır. Ubuntu deposundan yükleyin.

sudo apt install mysqltuner

Sonra kolayca çalıştırın

sudo mysqltuner

Veritabanı sunucunuzu analiz edecek ve önerilerde bulunacaktır. Örneğin, mysqltuner veri boyutumun 23.5G olduğunu tespit etti, bu nedenle innodb_buffer_pool_size’ı 23.5G’ye yükseltmem gerektiğini gösteriyor.

Yazının orijinalini buradan okuyabilirsiniz.