Linux (Centos) Sunucuya Redis Kurmak

Çoğu zaman ‘yum install redis’ komutunun çalıştırılması kadar kolay olmasını beklediğiniz bu süreç bazen sarpa sarabiliyor. Özellikle (farklı nedenlerden dolayı) benim yaşadığım gibi Plesk kurulu bir sunucuya Redis kurmaya çalışıyorsanız bu sorunlarla karşılaşma olasılığınız daha yüksek.

Bu yazının başlığı neden Redis kullanmalıyım? ya da Redis’in avantajları neler? başlıklarından birisi değil. Ama yine de üzerinde çalıştığımız projede Redis’i nerede kullandığımı belirtmek istiyorum:
– Kullanıcı kaydından sonra kullanıcı e-postalarını doğrulamak için atılan maillerdeki anahtarların (key) geçici süreliğine (örn: 36 saat) saklanması
– Benzer şekilde kullanıcılar şifremi sıfırlamak istiyorum gibi bir talepte bulunduklarında gönderilen şifre sıfırlama maillerindeki kodların geçici süreliğine saklanması

*** Yukarıdaki durumlarda Redis’e başvuruyorsanız ya data kaybı olmayacağından emin olacak şekilde redisin çalıştığı sunucuya güvenmelisiniz ya da verilerinizi aynı zamanda veritabanlarında da saklamalısınız.

Linux bir sunucuya Redis kurmaya çalışmanın ilk yolu yukarıda da belirttiğim gibi ‘yum install redis’ komutunu çalıştırmak, ikinci yol ise aşağıdaki kodları sırasıyla çalıştırmak

# wget http://download.redis.io/redis-stable.tar.gz
# tar xvzf redis-stable.tar.gz
# cd redis-stable
# make

Eğer yukarıdaki kodların sonuncusu yani ‘make’ komutu sorunsuz çalıştıysa redisi başarıyla kurdunuz demektir. Yapmanız gereken, doğrudan aşağıdaki Redis’i Çalıştırmak başlığına atlamak.

Eğer ‘make’ komutunu çalıştırırken hata alıyorsanız bazı sorunlarla yüzleşmek zorundasınız demektir. Bu sorunlar (muhtemelen benim yaşadığım gibi) Redis’ten önce kurmanız gereken bazı programların kurulu olmaması ya da versiyonlarının uyumlu olmamasından kaynaklanıyor. Peki ne yapabiliriz?

Aşağıdaki iki koddan birini çalıştırarak Redis için önceden kurulması gereken yazılımları edinebiliriz. Ama hangisini?

# yum group install "Development Tools"
# yum yum install gcc-c++ pcre-devel zlib-devel make unzip

Aslında iki kodda aynı işlevi görüyor, peki hangisini tercih edeceğim diyorsanız cevabı şu: Eğer hazır kurulu bir sistem üzerinde çalışıyorsanız (örneğin benim kurmaya çalıştığım sunucuda Plesk’in ve başka sitelerin kurulu olması gibi) ikincisini tercih etmeniz daha mantıklı olacaktır. Eğer sunucu test ya da geliştirme (development) için ayrılmışsa iki kod satırından herhangi birini çalıştırabilirsiniz.

Bu adımdan sonra tekrardan ‘redis-stable’ klasörüne giriniz ve ‘make’ komutunu çalıştırınız. Eğer sorun çözüldüyse yapmanız gereken, doğrudan aşağıdaki Redis’i Çalıştırmak başlığına atlamak.

Sorun hala devam ediyor

Yine benzer bir problemle karşılaştıysanız büyük bir ihtimalle doğru gcc (GNU Compiler Collection) versiyonuna sahip değilsiniz demektir (Örneğin benim durumumda redis v6.0 için gcc v4.9+ gerekirken sunumcumdaki gcc versiyonu v4.8.5’ti). Böyle bir sorununuz varsa muhtemelen içerisinde aşağıdaki gibi bir metin bulunan bir hata alacaksınız:

In file included from server.c:30:0:
server.h:1044:5: error: expected specifier-qualifier-list before ‘_Atomic’
     _Atomic unsigned int lruclock; /* Clock for LRU eviction */
     ^

Eğer gcc versiyonunuzu öğrenmek istiyorsanız, aşağıdaki komutu çalıştırmalısınız:

# gcc --version

Bu durumda önümüzde 2 seçenek var:

  1. gcc versiyonunuzu güncellemek ve ardından tekrar ‘redis-stable’ klasörüne girerek ‘make’ komutunu çalıştırma
  2. daha eski bir redis sürümünü kurmak

İlk olarak, gcc versiyonunuzu güncellemek için aşağıdaki kodu çalıştırmayı denemelisiniz:

# yum update gcc

Yukarıdaki kodda sorun yaşarsanız (ki ben yaşadım ve ikinci yolu tercih ettim) ‘How to update gcc on Centos’ şeklinde arama yaparak, gcc versiyonunuzu yükseltmeye çalışabilirsiniz.

Benim için redis 6.0 ile redis 5.8 arasında herhangi bir farklılık olmayacağını düşündüğüm için (ki söz konusu sunucu geçici olarak kullanılacaktı) ikinci yolu denedim ve başarılı oldu.

İkinci olarak, redis’in eski bir versiyonunu kurmak için tek yapmanız gereken yukarıdaki kodları bu kez versiyon belirterek çalıştırmak.

# wget http://download.redis.io/releases/redis-5.0.8.tar.gz
# tar xvzf redis-5.0.8.tar.gz
# cd redis-5.0.8
# make

Benim sorunum buradaki ‘make’ komutunu çalıştırınca çözüldü. Yani başarılı bir şekilde kurulum tamamlandı. Daha sonra ana dizine giderek ‘rm -rf redis-stable.tar.gz redis-stable’ kodunu çalıştırarak v6.0’ın klasörlerini kaldırdım.

Eğer sizin sorununuz hala devam ediyorsa benden daha şanssızsınız demektir. Bu durumda farklı kaynakları araştırmanızı tavsiye ediyorum.

Redis’i çalıştırmak

Normal şartlarda Redis’i çalıştırmak için ihtiyaç duyacağınız kod aşağıdaki kodlardan birisi gibi olmalıdır.

# systemctl start redis
//veya
# systemctl start redis-server

Tabi her zaman olduğu gibi bu kodlar çalışmayabilir ve siz ‘Failed to start redis.service: Unit not found.’ gibi bir hata alabilirsiniz. Bu durumda yapmanız gereken redis kurulu klasöre girerek (cd redis-stable ya da cd redis-5.8.0) aşağıdaki kodları sırasıyla çalıştırmak:

# src/redis-server redis.conf
# src/redis-server

Eğer benim kadar şanslıysanız artık redis çalışıyor olacak. Bu durumda kullandığınız pencereyi kapatarak yeni bir pencere açın ve tekrar redis klasörüne girerek aşağıdaki kodu çalıştırın, eğer sonuç ‘PONG’ ise artık redis çalışıyor demektir.

# src/redis-cli ping
PONG