Merhaba arkadaşlar, bugün sizlere özellikle MySQL, PostgreSQL gibi veritabanı sunucularınızın performansını ve kararlılığını ciddi oranda artırabileceğiniz, Linux kernel parametrelerini nasıl optimize edeceğinizi anlatacağım. Bu ayarlar, sunucunuzun bellek yönetimi, ağ performansı ve dosya işlemleri gibi kritik alanlarını doğrudan etkiler. Benim yönetimimdeki sunucularda da standart olarak uyguladığım bu optimizasyonları adım adım birlikte yapalım.
Giriş ve Ön Hazırlık
Öncelikle, bu ayarları yapmadan önce mevcut değerleri görmek ve yedek almak çok önemli. Aşağıdaki komutla şu anki tüm aktif sysctl değerlerini bir dosyaya kaydedelim. Bu, bir sorun olursa geri dönüş için hayati önem taşır.
Ana konfigürasyon dosyamız genellikle /etc/sysctl.conf'dur. Bazı dağıtımlarda /etc/sysctl.d/ dizini altında özel dosyalar da oluşturabilirsiniz. Ben direkt ana dosya üzerinden gideceğim.
Bellek ve Swap Optimizasyonu
Veritabanı sunucuları bellek canavarıdır. İşlemlerin mümkün olduğunca swap'e düşmemesi ve belleğin verimli kullanılması gerekir.
Ağ ve Bağlantı Optimizasyonu
Veritabanına yapılacak yüksek sayıda bağlantıyı karşılamak ve ağ performansını artırmak için bu ayarlar kritiktir.
Dosya Sistemi ve Limitler
Bu bölümde, sunucunun aynı anda açabileceği dosya sayısı gibi sistem limitlerini yükseltiyoruz. Özellikle çok sayıda tablo ve bağlantı için şart.
Ayarları Aktif Etme ve Test
Tüm bu değişiklikleri /etc/sysctl.conf dosyasının sonuna ekledikten veya mevcut satırları değiştirdikten sonra, değişiklikleri sisteme uygulamamız gerekiyor.
Komut hata vermeden çalışırsa, ayarlarınız uygulanmış demektir. Önemli ayarlardan birkaçını teyit etmek için kontrol edebilirsiniz.
Sonuç ve Öneriler
Bu rehberde, veritabanı sunucuları için genel geçerli kernel optimizasyonlarını paylaştım. Unutmayın, bu ayarlar sihirli değnek değildir ve sunucunuzun donanımına (RAM, CPU, disk tipi) ve üzerinde çalışan spesifik veritabanı motorunun kendine has tavsiyelerine göre ince ayar yapmanız gerekebilir. Her zaman değişiklik öncesi yedek alın ve test ortamında deneyin.
Siz bu kernel ayarlarını kendi sunucularınızda nasıl yapıyorsunuz? Özellikle PostgreSQL veya MySQL için ekstra önerileriniz var mı? Takıldığınız bir nokta olursa aşağıya yazmaktan çekinmeyin, birlikte çözelim.
Öncelikle, bu ayarları yapmadan önce mevcut değerleri görmek ve yedek almak çok önemli. Aşağıdaki komutla şu anki tüm aktif sysctl değerlerini bir dosyaya kaydedelim. Bu, bir sorun olursa geri dönüş için hayati önem taşır.
Bash:
sudo sysctl -a > /tmp/sysctl_backup_$(date +%F).txt
Ana konfigürasyon dosyamız genellikle /etc/sysctl.conf'dur. Bazı dağıtımlarda /etc/sysctl.d/ dizini altında özel dosyalar da oluşturabilirsiniz. Ben direkt ana dosya üzerinden gideceğim.
Veritabanı sunucuları bellek canavarıdır. İşlemlerin mümkün olduğunca swap'e düşmemesi ve belleğin verimli kullanılması gerekir.
NGINX:
# Swappiness değerini düşürerek, sistemin swap kullanmaya daha geç başlamasını sağlıyoruz.
vm.swappiness = 10
# Dirty page'lerin bellekte kalma sürelerini ve oranlarını veritabanı iş yüküne uygun hale getiriyoruz.
vm.dirty_ratio = 60
vm.dirty_background_ratio = 5
vm.dirty_expire_centisecs = 3000
# Overcommit ayarı. PostgreSQL gibi DB'ler için genellikle '2' önerilir.
vm.overcommit_memory = 2
vm.overcommit_ratio = 80
Veritabanına yapılacak yüksek sayıda bağlantıyı karşılamak ve ağ performansını artırmak için bu ayarlar kritiktir.
NGINX:
# TCP bağlantı parametrelerini genişletiyoruz.
net.core.somaxconn = 4096
net.core.netdev_max_backlog = 4096
net.ipv4.tcp_max_syn_backlog = 4096
# TCP bağlantılarının daha hızlı yeniden kullanılmasını sağlıyoruz.
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
# TCP pencere boyutlarını artırarak yüksek gecikmeli ağlarda performansı iyileştiriyoruz.
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.ipv4.tcp_rmem = 4096 87380 134217728
net.ipv4.tcp_wmem = 4096 65536 134217728
Bu bölümde, sunucunun aynı anda açabileceği dosya sayısı gibi sistem limitlerini yükseltiyoruz. Özellikle çok sayıda tablo ve bağlantı için şart.
NGINX:
# Açık dosya tanımlayıcı limitini (file descriptors) büyük tutuyoruz.
fs.file-max = 2097152
# PID sınırını artırıyoruz.
kernel.pid_max = 4194303
# Core dump'ları devre dışı bırakıyoruz (opsiyonel, güvenlik/performans).
kernel.core_pattern = /dev/null
Tüm bu değişiklikleri /etc/sysctl.conf dosyasının sonuna ekledikten veya mevcut satırları değiştirdikten sonra, değişiklikleri sisteme uygulamamız gerekiyor.
Bash:
sudo sysctl -p
Komut hata vermeden çalışırsa, ayarlarınız uygulanmış demektir. Önemli ayarlardan birkaçını teyit etmek için kontrol edebilirsiniz.
Bash:
sysctl vm.swappiness net.core.somaxconn fs.file-max
Bu rehberde, veritabanı sunucuları için genel geçerli kernel optimizasyonlarını paylaştım. Unutmayın, bu ayarlar sihirli değnek değildir ve sunucunuzun donanımına (RAM, CPU, disk tipi) ve üzerinde çalışan spesifik veritabanı motorunun kendine has tavsiyelerine göre ince ayar yapmanız gerekebilir. Her zaman değişiklik öncesi yedek alın ve test ortamında deneyin.
Siz bu kernel ayarlarını kendi sunucularınızda nasıl yapıyorsunuz? Özellikle PostgreSQL veya MySQL için ekstra önerileriniz var mı? Takıldığınız bir nokta olursa aşağıya yazmaktan çekinmeyin, birlikte çözelim.