PHP ve Memcache Üzerine Uyutmayan Problemler

Sabah 6 da blog yazıyorsam bilin ki bu durum çok sevdiğimiz Linux yüzündendir. Yaptığım bir proje için harici bir sunucu üzerinden Memcache kullanmaya karar verdim ve yaklaşık 3 saat sonunda mutlu sona ulaştım. Şimdi yaptığım bazı hatalardan ve çözümlerden bahsedeceğim.

Memcached vs Memcache? Kavram karmaşası.

Bu kavram karmaşası genelde ilk kez memcache ile çalışacak olanlarda ortaya çıkıyor. Şu an vereceğim bilgileri aslında hala karıştırıyorum :) Memcached, sunucudur. Memcache ise, memcached sunucularıyla iletişime geçen modüllerdir. Yani php5_memcache diye birşey varken(var mı yok mu bilmiyorum) php5_memcached diye birşey yoktur.

Öncelikle Memcached kurun

Memcached kurulumu oldukça basittir. Çok sevgili Ubuntu/Debian’da apt-get install memcached yazarak kurulum yapabilirsiniz.

Telnet’i düzgün kullanın

Memcached sunucunu test etmenin en kolay yolu telnet ile sunucuya ulaşmak. Ama benim gibi telnet 127.0.0.1:11211 yazarsanız telnet’in bağlanamıyoruuuum hatasını alırsınız. Ondan sonra yarım saat,  ps -eaf | grep memcached sonucunda görünmesine rağmen bu memcached sunucusu neden çalışmıyor diye düşünürsünüz. Halbuki telnet 127.0.0.1 11211 yazarsanız sunucuya ulaşabilirsiniz.

Uzak sunucudan memcached erişimi

Server üzerinde telnet çektiğinizde memcached’in çalıştığını gördünüz. Ama bilgisayarınızdan da ulaşmak istiyorsunuz.  İşte o zaman bir arayışa geçersiniz. Iptables diyen çıkar, memcached i x y z komutlarını vererek çalıştırın diyen çıkar. İnternet çöplük. Çözüm basit. conf dosyası. Evet şu çok sevdiğimiz (?!?!?!?!) conf dosyası ile çözüme ulaşabilirsiniz.

Ubuntu’da memcached konfigürasyon dosyası genelikle şudur: /etc/memcached.conf Favori editörünüzle dosyası açın(Favorim nano/pico). Bazı acayip şeyler göreceksiniz. Örneğin -m, memcached’in kullanacağı bellek miktarını belirler. -p, port u belirler. -l ise, dinleyeceği ip adresini belirler. Standart olarak -l 127.0.0.1 olarak gelir. Bunu -l 0.0.0.0 yaparsanız, o sunucuya her yerden ulaşabilirsiniz demektir. Şimdi usulca dosyayı kaydedin ve memcached sunucuyu yeniden başlatın. (/etc/init.d/memcached restart)
* İleride tüm iplerden erişmeyi değil de, sadece belirli iplerden erişim sağlamayı bulabilirsem yazıyı güncelleyeceğim. Sunucuyu herkese açmak bir nevi intihardır.

Sancılı Memcache modül kurulumu

Ubuntu’da olay basit. apt-get install php5-memcached yazarsanız ve apache yi yeniden başlatırsanız kolayca çalıştırırsınız. Ama Centos’ta durumlar farklı.

Yine çok sevdiğimiz, adamlar yapmış be dediğimiz Cpanel, bildiğiniz gibi EasyApache diye bir modül sunuyor. Bu modül ile, Apache ve PHP modüllerini tek tıkla seçip kurulum işlemlerini yapabiliyorsunuz. Amma ve lakin ki durum öyle değil. Memcache modülünü seçsek dahi kurulum gerçekleşmiyor ne hikmetse.

Bunun için sudo pecl install memcache komutunu kullanabilirsiniz. Yok eğer olmuyorsa kendiniz derleyeceksiniz. Derlemesi kolay, şu adresten (http://pecl.php.net/package/memcache) istediğiniz sürümü wget (veya başka birşey) ile sunucunuzda bir klasöre indirin. tar xvfz ile içindeki klasörü dışarı çıkartın. Sonra cd ile klasörün içine girip, öncelikle phpize yazın. Ne işe yarıyor hiç bilmiyorum. Daha sonra ./configure;make;make install yazın ve modülü derleyin. Derlenen modül, yanılmıyorsam phpize sayesinde doğru yere ulaşacak. Şimdi php.ini dosyanızın en sonuna şu kodu ekleyin: extension=memcache.so

Web sunucunuzu yeniden başlatın, ve artık memcache i kullanmanın zevkini yaşayın. Tabi bu zevki yaşamadan önce phpinfo ile memcache nin yüklenip yüklenmediğine iyice bir bakın. Şimdi bu zevki nasıl yaşayacağınızı bir kaç satır kodla göstermek isterdim ama hiç işim olmaz. Framework kullanın. Frameworkler sizin için bu tarz şeyleri çok basite indirger. 10 satır kod yerine, 3 satırda işinizi halledersiniz. (Siz yine de Oral’ın blogundaki kodları inceleyebilirsiniz. Hatta o da kendince anlatmış nasıl kurulduğunu)

Windows üzerinde memcache modülü

Her ne kadar bu durumdan nefret etsem de daha rahat bir çalışma ortamı sağladığı için Windows kullanıyorum. Windows için de kurulum basit aslında. memcache için dll dosyasını php’nin ext klasörüne yüklüyorsunuz. Daha sonra php.ini den bu dll i aktif hale getiriyorsunuz. Sunucuyu yeniden başlatıp kullanmaya başlıyorsunuz.

Ancak işler her zaman istediğiniz gibi gitmez. Örneğin ben, dll i aktif hale getirdim ama memcache i kurmayı bir türlü başaramadım. (phpinfo memcache modülünün kurulu olup olmadığını size söyler)

Sorunu önce internette aradım. Sorunun ne olduğunu dahi bilmiyordum. İşte o noktada aklıma log dosyalarına bakmak geldi. php nin error_log dosyasına baktım ve şaşkınlığa uğradım. Memcache’nin php için derlendiği sürümle php’nin derlendiği sürüm uyuşmuyordu. Burada sorun, internetteki kaynaklardan kaynaklanıyor. Çünkü windows kurulumu için 10 siteye girseniz 10 unda aynı dll dosyalarını görürsünüz. Dll dosyalarını resmi kaynaklardan indirin. Bunun için size bir güzellik yapıp resmi kaynağı vereyim: http://windows.php.net/downloads/pecl/snaps/memcache/ Php sürümünüze uygun olarak ilgili dll dosyasını indirip, gerekli işlemleri yapın ve memcache modülünü kullanmaya başlayın.

Uykuları kaçıran bir gecenin daha sonuna geldik. Herkese mutlu yıllar.

4 Comments

  1. bence güzel bir anlatım. En çok tercih edilen cachleme sistemi hakkında böyle güzel yazılar olunca mutlu oluyor adam.

  2. selam benim başlıktadada dediğiniz gibi uyutmayan mcache sorunum var yardımcı olursanız inanın çok memnun olurum erol.***@***.com adresim eklermisiniz lütfen gerçekten oldukça uğraşmama rahmen başarılı olamadım yardımcı olmanızı diliyorum allah a emanetsiniz hayırlı geceler.

Leave a Reply

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