Resmi web sitesine göre Redis (Remote Dictionary Server), veritabanı, önbellek, mesaj aracısı ve akış motoru olarak kullanılan açık kaynaklı bir in-memory veri yapısı deposudur.

Saniyede 120.000’den fazla isteği işlediği için, öncelikle yüksek yükler altında performansı iyileştirmek için diğer veritabanı sistemleriyle birlikte önbelleğe alma amacıyla kullanılır. Parçalama teknikleriyle birlikte ana/köle modellerini kullanarak yüksek kullanılabilirlik ve eş zamanlı okuma/yazma işlemleri sağlar. Tüm bunlar Redis’i basit anahtar-değer kayıtlarından tam sayfa önbelleklere kadar çok çeşitli veri türlerini depolamak için harika bir seçim haline getirir.

Bu yazıda, client ve node’dan node’a iletişimler için TLS kullanan bir Redis kümesinin nasıl kurulacağını açıklayacağım.

Redis, açık kaynaklı, in-memory bir veritabanı yönetim sistemidir. Başlıca hedeflerinden biri yüksek performanslı ve ölçeklenebilir veritabanları sağlamaktır. Redis, key-value deposu olarak çalışır ve hızlı erişim için verileri bellekte tutar. Ayrıca verileri diske depolamak için de kullanılabilir. Redis, özellikle önbelleğe alma, oturum yönetimi, sıralama ve gerçek zamanlı uygulamalar gibi alanlarda popüler bir veritabanı çözümüdür.

  • Redis, 512 MB kadar büyük key ve value çiftlerinin depolanmasına izin verir. 512 MB kadar büyük nesnelerin büyük key’lerine ve value’lerine sahip olabilirsiniz, bu da Redis’in tek bir giriş için 1 GB’a kadar veriyi destekleyeceği anlamına gelir.
  • Redis, Redis Karma adlı kendi karma mekanizmasını kullanır. Redis, verileri bir key ve bir harita biçiminde, yani dize alanları ve dize değerleri şeklinde depolar.
  • Redis data replication sunar. Replication, master-slave önbellek node’larını ayarlama sürecidir. Slave node’lar her zaman ana node dinler, bu da ana node güncellendiğinde slave’lerin de otomatik olarak güncelleneceği anlamına gelir. Redis ayrıca slave’leri eşzamansız olarak güncelleyebilir.
  • Redis önbelleği arızalara dayanabilir ve kesintisiz hizmet sağlayabilir. Redis, verimli replication ayarlamak için kullanılabildiğinden, herhangi bir zamanda önbellek hizmeti çalışır durumda olacaktır; slave node’lardan herhangi biri kapalı olsa bile. Ancak node’lar dayanıklıdır ve arızanın üstesinden gelip hizmet vermeye devam edecektir.
  • Redis’in tüm popüler programlama dillerinde client’ları vardır. Redis’in C, Ruby, Java, JavaScript ve Python gibi tüm popüler dillerde geliştirilmiş client API’leri vardır. Redis’in desteklediği dillerin tam listesi Redis Wikipedia sayfasında bulunabilir.
  • Redis bir pub/sub mesajlaşma sistemi sunar. Redis pub/sub mekanizmasını kullanarak istediğiniz herhangi bir dili kullanarak yüksek performanslı bir mesajlaşma uygulaması geliştirebilirsiniz.
  • Redis, büyük miktarda veriyi önbelleğine çok kolay bir şekilde eklemenize olanak tanır. Bazen, kısa bir süre içinde milyonlarca veri parçasını önbelleğe yüklemek gerekir. Bu, Redis tarafından desteklenen bir özellik olan toplu ekleme kullanılarak kolayca yapılabilir.
  • Redis, Raspberry Pi ve ARM cihazlarına kurulabilir. Redis’in küçük bir bellek alanı vardır ve IoT tabanlı uygulamaları etkinleştirmek için Raspberry Pi’ye kurulabilir.
  • Redis protokolü bir istemcinin uygulanmasını kolaylaştırır. Bir Redis istemcisi, RESP (Redis Serileştirme Protokolü) kullanarak sunucusuyla iletişim kurar. Bu protokol uygulanması kolaydır ve insan tarafından okunabilir.
  • Redis işlemleri destekler, bu da komutların tek tek yürütülmesi yerine bir queue olarak yürütülebileceği anlamına gelir. Genellikle, MULTI’den sonraki komutlar bir kuyruğa eklenir ve EXEC verildiğinde, kuyrukta kaydedilen tüm komutlar aynı anda yürütülür.
  • Key (Anahtar): Redis’teki veriler anahtar-değer (key-value) şeklinde saklanır. Anahtar, bir değeri temsil eden benzersiz bir tanımlayıcıdır.
  • Value (Değer): Anahtara karşılık gelen verilerdir. String, liste, set, hash, sorted set gibi farklı türlerde olabilir.
  • Persistence (Kalıcılık): Redis, verileri diske kaydetmek için iki farklı yöntem kullanır:
  • RDB (Redis Database File): Periyodik olarak bellekteki veriyi dosyaya yazar.
  • AOF (Append Only File): Yapılan tüm işlemleri sırasıyla bir dosyaya kaydeder.
  • Replication (Çoğaltma): Redis, master-slave replikasyonu destekler. Master sunucu, verileri slave sunuculara kopyalayabilir.
  • Sharding (Bölme): Büyük veri kümelerini birden fazla Redis sunucusuna bölerek dağıtma yöntemidir.
  • Eviction (Silme Politikaları): Bellek sınırına ulaşıldığında eski veya en az kullanılan verileri silmeye yönelik algoritmalardır.
  • Pub/Sub (Publish/Subscribe): Redis’in mesajlaşma mekanizmasıdır. Kanallar aracılığıyla mesaj yayınlanabilir ve dinleyiciler bu mesajları alabilir.

İki yöntemi vardır.

Redis Cluster: Redis Cluster high availability ve horizontal scaling sağlar. Verileri birden fazla node’a dağıtılmış parçalara böler. Her parçanın birincil bir node’u ve hata toleransı için replikaları vardır. Bu, Redis Cluster’ının daha büyük veri clusterlar’ını ve daha yüksek yazma verimini işlemesini sağlar.

Redis Sentinel: Redis Sentinel, Redis instance’larını izleyen ve birincil replika mimarisi için otomatik failover sağlayan high availability bir araçtır. Birincil node kullanılamaz hale geldiğinde, Sentinel replikalardan birini birincil olarak yükseltir ve kalan replikaları yeni birincil ile senkronize olacak şekilde günceller.

Redis Cluster ve Sentinel Karşılaştırması

Bu yazıda redis cluster kullanılacaktır.

3 yöntemi vardır.

RDB (Redis Database File – Anlık Yedekleme): Belirli aralıklarla tüm veriyi disk dosyasına (dump.rdb) yazar.

AOF (Append Only File – Günlük Kaydı): Yapılan tüm işlemleri (set, del, vb.) sırayla bir dosyaya (appendonly.aof) ekler.

Hybrid (RDB + AOF Birlikte Kullanımı): Hem RDB hem de AOF aynı anda çalıştırılır. Redis, hızlı başlatma için RDB’yi kullanır, veri kaybını önlemek için AOF’yi takip eder.

Redis AOF, RDB ve AOF+RDB(Hibrit) Karşılaştırılması

Bu yazıda AOF+RDB kullanılacaktır.

Bu yazıda Redis cluster olarak Linux bir makineye nasıl kurulur ondan bahsedilecektir. Linux olarak Ubuntu 20.04.6 LTS tercih edilmiştir. Cluster 3 sanal sunucuya 6 node olarak kurulacaktır.

Örnek topoloji:

Redis Cluster Örnek Topoloji

Bütün sunucularda öncelikle gerekli repository ve key eklemelerini yapıyoruz.

Sonra bütün sunucularda redis server kurulumu yapabiliriz.

Cluster TLS kurulacağı için öncelikli bütün sunucularda sertifika path’leri ve sertifikalar sadece bir sunucuda oluşturulur.

Root CA Sertifikası:

Server Sertifikası:

Client Sertifikası:

Sertifikalar her sunucu ‘/etc/redis/tls’ path’ine kopyalanır.

Sertifika dosya izinleri ayarlanır.

Bütün sunucularda run dosyası oluşturup izinleri veriyoruz.

Redis cluster configleri aşağıdaki gibi olacaktır.

Portları servis olarak konfigüre ediyoruz.

Yeni bir servis oluşturduğumuz systemd reload ediyoruz. Bütün sunucularda servislerin otomatik up olması için enable ediyoruz ve servisleri başlatıyoruz.

Herhangi bir sunucuda cluster aşağıdaki komutla oluşturuyoruz.

Redisin önerdiği memory ayarlarını aşağıdaki şekilde yapabiliriz.

Bağlantıyı aşağıdaki şekilde test edebiliriz.

Cluster’a bağlanıp komutları çalıştrabiliriz.


0 yorum

Bir yanıt yazın

Avatar yer tutucu

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir