Nextcloud Memory Caching Mekanizması ile Performansı Arttırmak

Nextcloud Memory Caching

Nextcloud, bulut tabanlı dosya depolama ve işbirliği platformudur. Açık kaynaklı bir yazılım olduğu için kullanıcıların kendi sunucularında veya üçüncü taraf sağlayıcıların sunucularında kurulabilir. Nextcloud sayesinde kullanıcılar dosyalarını saklayabilir, paylaşabilir, senkronize edebilir ve çeşitli cihazlardan erişebilirler.

Nextcloud kullanıcılarının depolanan dosyaları artmaya başladıkça zaman içerisinde performans sorunları ortaya çıkmaya başlamaktadır. Bu makalemde de performansa ciddi oranda katkısı olan Memory Caching mekanizmasından ve nasıl devreye alınabileceğinden bahsedeceğim. Bu makaleyi yazarken Nextcloud uygulamanızın kurulu olduğu var sayılmıştır.

Makale Hazırlanırken Kullanılan Sistemin Özellikleri

  • Ubuntu Server 20.04.2 LTS
  • Apache Server
  • PHP 8.1
  • Nextcloud Hub 5 (27.0.0)
  • Yapı tek makine olarak kurgulanmıştır.

Memory Caching Nedir?

Nextcloud gibi web tabanlı uygulamalarda Memory caching, performansı artırmak ve veri tabanı yükünü azaltmak için kullanılır. Memory caching RAM üzerinde çalışır ve verilerin hızlı bir şekilde erişilebilir olmasını sağlar. Nextcloud’da Memory caching kullanmanın bazı avantajları şunlardır:

  1. Performans Artışı: Memory caching, sık kullanılan verileri ve sonuçları bellekte tutarak, tekrarlanan talepleri hızlı bir şekilde karşılar. Bu sayede uygulamanın çalışma hızı önemli ölçüde artar.
  2. Daha Düşük Tepki Süresi: Bellek, verilere çok hızlı erişebilen bir hafıza türüdür. Bu sebeple kullanıcı taleplerine daha hızlı cevap verebilir ve daha düşük tepki süreleri elde edebilir.
  3. Veritabanı Yükünün Azaltılması: Memory caching, sık kullanılan verileri bellekte tutarak veritabanı yükünü azaltır. Bu, veri tabanının işlemci ve disk kullanımını optimize ederek, veri tabanı sunucusunun aşırı yüklenmesini önler.
  4. Daha Az Veritabanı İşlemi: Veritabanı işlemleri, disk tabanlı işlemlerdir ve bellek işlemlerine göre daha yavaş olabilir. Memory caching, sık kullanılan verileri bellekte sakladığından, veritabanı işlem sayısını azaltır ve sistem performansını artırır.
https://linuxiac.b-cdn.net/wp-content/uploads/2021/06/redis-how-it-works.png

Bununla birlikte, Memory caching’in dezavantajı, bellek kullanımının artmasıdır. Önbellekte saklanan veriler bellekte yer kaplar ve bu nedenle daha fazla bellek kullanımına neden olabilir. Çoğu durumda Memory caching’in avantajları, dezavantajlarından çok daha ağır bastığı ve performans artışı gösterdiği için tercih sebebidir. Nextcloud gibi web uygulamaları için Memory caching, genellikle tercih edilen yöntemdir.

Nextcloud Memory Caching Yapılandırma

1) Gerekli Paketlerin Kurulması

sudo apt install php-apcu redis-server php-redis
sudo service apache2 restart

php-apcu nextcloud için önbellek mekanizması olan APCu’yu yükler. redis-server ve php-redis ise Redis desteği için gerekli paketlerdir. Paketler kurulduktan sonra Apache servisimizi yeninden başlatıyoruz.

2) Redis Yapılandırma Dosyasının Düzenlenmesi

sudo nano /etc/redis/redis.conf

Bu komut, Redis yapılandırma dosyasını açar. Ardından, aşağıda belirtildiği gibi ilgili ayarları bulup düzenliyoruz. Eğer bu ayarlardan olmayan varsa da ekliyoruz. redis.conf dosyasındaki en başta bulunan # karakteri ilgili satırın pasif olduğu anlamına gelir. # sembolünü kaldırdığınız satırlar aktif hale gelir.

port 6379
unixsocket /var/run/redis/redis.sock
unixsocketperm 770
requirepass RedisParolanız
supervised systemd
bind 127.0.0.1 ::1

port 6379: Bu satır, Redis sunucusunun çalışacağı port numarasını belirtir. Varsayılan olarak Redis, 6379 numaralı portu kullanır. Farklı bir port numarası kullanmak isterseniz, bu satırı düzenleyerek istediğiniz portu belirtebilirsiniz.

unixsocket /var/run/redis/redis.sock: Redis sunucusunun Unix soketini iletişim için belirtilen dosya yolunu belirtir. Redis’in çalıştığı dizinde redis.sock adlı bir soket dosyası oluşturacak ve bu soket üzerinden iletişim sağlanacaktır.

unixsocketperm 770: Bu satır, Redis Unix soketinin izinlerini belirtir.

requirepass RedisParolanız: Bu satır, Redis sunucusuna erişmek için gereken parolayı belirtir. Redis sunucusu, varsayılan olarak şifresiz çalışır. Ancak, güvenlik açısından eklemek faydalıdır. Buradaki “RedisParolanız” kısmını kendi istediğiniz bir parolayla değiştirerek Redis sunucusu parolasını belirlemiş oluyoruz.

bind 127.0.0.1 ::1: Bu satır, Redis sunucusunun hangi IP adreslerine bağlanacağını belirtir. Burada 127.0.0.1 ve ::1, Redis’in sadece yerel makineden (localhost) gelen bağlantılara izin vermesi anlamına gelir. Bu, Redis sunucusunun sadece yerel makineden erişilebilir olduğu anlamına gelir ve dış ağlardan erişimi engeller.

3) Redis Yetkilendirme ve Başlatma

sudo usermod -aG redis www-data
sudo systemctl start redis-server
sudo systemctl enable redis-server

İlk satırda Redis ile iletişim için gerekli olan izni veriyoruz. İkinci satırda Redis sunucusunu başlatıyoruz. Son satırda ise Redis sunucusunun sistem başlangıcında otomatik olarak başlamasını sağlıyoruz

Buraya kadar olan kısımla birlikte Cache mekanizması ile ilgili olan gerekli kurulumları tamamlamış olduk. Şimdi bu mekanizmayı Nextcloud uygulamamızda kullanacağız.

4) Nextcloud Yapılandırma Dosyasını Düzenlemek

sudo nano /var/www/nextcloud/config/config.php

Bu komut, Nextcloud yapılandırma dosyasını açar. Aşağıdaki satırları dosyamıza ekliyoruz.

'filelocking.enabled' => true,
  'memcache.local' => '\\OC\\Memcache\\APCu',
  'memcache.distributed' => '\\OC\\Memcache\\Redis',
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'redis' => array(
     'host' => 'localhost',
     'port' => 6379,
     'timeout' => 0.0,
     'password' => 'RedisParolanız',
     'dbindex' => 0,
  ),

‘filelocking.enabled’ => true: Bu ayar, dosya kilitleme mekanizmasını etkinleştirir. Nextcloud, dosya işlemleri sırasında paralel işlemleri engellemek ve veri bütünlüğünü sağlamak için dosya kilitleme kullanır. Redis bu süreci daha verimli hale getirilir.

‘memcache.local’ => ‘\\OC\\Memcache\\APCu’: Bu ayar, APCu önbellek kullanımını etkinleştirir.

‘memcache.distributed’ => ‘\\OC\\Memcache\\Redis’:Bu ayar, dağıtılmış önbellek kullanımını etkinleştirir. Bu ayar yalnızca Nextcloud Enterprise sürümünde kullanılabilir.

‘memcache.locking’ => ‘\\OC\\Memcache\\Redis’: Bu ayar, Redis’i kilitleme mekanizması olarak kullanmayı etkinleştirir.

‘redis’ => array(…): Bu bölüm, Redis yapılandırma bilgilerini içerir. Redis sunucusuna erişim için gerekli bağlantı ayarları burada belirtilir. ‘host’ => ‘localhost’: Redis sunucusunun bulunduğu adrestir. ‘port’ => 6379‘: Redis sunucusunun çalıştığı port numarasıdır (genellikle 6379). ‘timeout’ => 0.0: Redis ile bağlantı zaman aşımı süresidir. Sıfır, bağlantının zaman aşımı olmadığı anlamına gelir. ‘password’ => ‘RedisParolanız’: Redis sunucusuna bağlanırken kullanılacak paroladır. “RedisParolanız” yazan yere Redis sunucusu yapılandırma dosyasında belirlediğiniz parolayı yazmalısınız.

Dosyamızın son hali aşağıdaki görseldeki gibi olacaktır.

5) APCu için Background jobs Oluşturmak

Cron, zamanlanmış işleri çalıştırmak için kullanılan bir zamanlama aracıdır. www-data kullanıcısı için otomatik bir görev oluşturacağız.

crontab -u www-data -e

crontab -u www-data -e komutu ile www-data kullanıcısı için tanımlama yapacağımız ekran açılmış oluyor.

*/5  *  *  *  * php --define apc.enable_cli=1 -f /var/www/nextcloud/cron.php

Açılan ekrana yukarıdaki kodu ekliyoruz. Bu sayede www-data kullanıcısı ile her 5 dakikada bir /var/www/nextcloud/cron.php dosyasını çalıştıracak şekilde ayar yapmış oluyoruz. Kaydedip çıkıyoruz. Bazı sunucularda –define apc.enable_cli=1 yazılmayabiliyor. Aşağıdaki komut ile istersek eklediğimiz satırı kontrol edebiliriz.

crontab -u www-data -l

Örnek tanımlama aşağıdaki görseldeki gibidir.

Son olarak Nextcloud yönetim arayüzüne girerek background jobs kısmından Cron seçeneğini seçiyoruz.

6) Apache Servisini Yeniden Başlatmak

Bu aşamaya geldiğimizde Memory Caching ile ilgili tüm ayarları tamamlamış oluyoruz. Son olarak Apache servisini yeniden başlatıyoruz.

sudo systemctl restart apache2

7) Kontrol

Yönetim sayfasındaki Özet ekranında bulunan “No memory cache has been configured. To enhance your performance please configure a memcache if available.” uyarı mesajı kaldırılmış ise kurulum sorunsuz tamamlanmıştır. Örnek yol: (http://domainadiniz.com/index.php/settings/admin/overview)

Makalenin ihtiyaç sahiplerine yardımcı olması temennisi ile hayırla ve sağlıcakla kalınız.

Ek Kaynaklar;

Memory caching — Nextcloud latest Administration Manual latest documentation

You may also like...