EQVPS
Kontrol paneliHemen başla

VPS'e Redis nasıl kurulur: bellek sınırı, kalıcılık ve kaybolmayan bir parola

Ubuntu 24.04'e Redis kurun, sunucunun tamamını kaplamaması için belleğini sınırlayın, verilerinizi silmeden AOF dosyasını açın ve yeniden başlatmalarda kalan bir parola belirleyin. Bu adımların ikisinde, kendi test sunucumuzda düştüğümüz tuzaklar var.

Redis verileri bellekte tutar ve yaklaşık bir milisaniyede yanıt verir; bu yüzden pek çok uygulamanın arkasında önbellek, kuyruk ya da oturum deposu olarak durur. Kurulum tek bir komut. Asıl iş varsayılanlarda: bellek sınırı yok, son yazmaları kaybedebilen anlık görüntüler ve verilerinizi sessizce silen ya da parolanızı devre dışı bırakan iki kolay hata. Bu rehber hepsini Ubuntu 24.04 üzerinde ele alıyor. Her adımı kendi imajımızda çalıştırdık; sayılar bir Micro sunucusundan (2 vCPU, 2 GB).

sudo yetkili bir kullanıcıya ihtiyacınız var. Ubuntu kurulum rehberi bir tane oluşturur.

1. Kurulum

sudo apt update
sudo apt install -y redis-server
redis-server --version
redis-cli ping

Kurulum 13 saniye sürdü ve Redis 7.0.15'i getirdi. Hemen ve her açılışta başlar, PONG yanıtını verir ve yalnızca sunucunun kendisinde dinler: 127.0.0.1:6379 ve [::1]:6379, protected-mode yes ile. Veri yokken 13,5 MB RAM kullanıyordu.

Günlükte daha şimdiden bir uyarı vardı:

WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition.

Redis diske, fork ile oluşturduğu kendi kopyasından kaydeder ve çekirdeğin varsayılan ayarıyla bu fork, bellek darken başarısız olabilir. Bir kez düzeltin:

echo 'vm.overcommit_memory = 1' | sudo tee /etc/sysctl.d/90-redis.conf
sudo sysctl -p /etc/sysctl.d/90-redis.conf
sudo systemctl restart redis-server

Yeniden başlatmadan sonra uyarı kayboldu.

2. Belleğini sınırlayın

Kutudan çıktığı haliyle maxmemory değeri 0, yani sınırsız, politika da noeviction. Redis, sunucuda bellek bitene kadar RAM almaya devam eder. Bir tavan koyun ve tavana ulaşınca ne olacağına karar verin:

redis-cli CONFIG SET maxmemory 256mb
redis-cli CONFIG SET maxmemory-policy allkeys-lru
redis-cli CONFIG REWRITE

İki politikayı 64 MB sınır ve 400.000 yazmayla denedik:

  • noeviction (varsayılan): bellek 63 MB'ta durdu ve yeni yazmalar OOM command not allowed when used memory > 'maxmemory' hatasıyla başarısız oldu. Bir kuyruk ya da kaybetmeyi göze alamayacağınız her şey için doğru seçim.
  • allkeys-lru: Redis en uzun süredir kullanılmayan anahtarları, toplam 48.606 tanesini attı ve tüm yazmalar geçti. Önbellek için doğru seçim.

CONFIG REWRITE çalışan ayarları /etc/redis/redis.conf dosyasına kaydeder, böylece yeniden başlatmada kaybolmazlar. Ayrıca 4. adımdan önce bilmeniz gereken bir satır ekler.

3. Diske nasıl kaydedeceğini seçin

Varsayılan olarak Redis, bir saatte 1, beş dakikada 100 ya da bir dakikada 10.000 değişiklikten sonra bir anlık görüntü (/var/lib/redis/dump.rdb) yazar. Durdurmanın üç yolunu denedik:

Redis nasıl durduYalnızca anlık görüntü (varsayılan)AOF dosyasıyla
systemctl restartKayıp yok: kapanırken kaydederKayıp yok
kill -9 ile öldürüldüSon anlık görüntüden sonra yazılan anahtar yoktuKill'den 2 saniye önce yazılan anahtar yerindeydi

İki durumda da systemd, Redis'i birkaç saniye içinde kendiliğinden yeniden başlattı.

Redis'te kaybedince arayacağınız veriler varsa AOF dosyasını (append-only file) açın. Her yazmayı kaydeder ve saniyede bir diske boşaltır. Bunu dosyayı düzenleyerek değil, çalışan sunucuda yapın:

redis-cli CONFIG SET appendonly yes
redis-cli CONFIG REWRITE
redis-cli INFO persistence | grep aof_

Önce öteki yolu denedik ve verilerimize mal oldu. redis.conf içinde appendonly no satırını appendonly yes yaptık ve yeniden başlattık. Redis boş bir AOF ile açıldı ve anlık görüntüden hiçbir şey yüklemedi; mevcut tüm anahtarlar gitti. Sonra kapanırken yeni içeriğini, eski anahtarlar olmadan, bir de dump.rdb üzerine yazdı. CONFIG SET bunu önler: Redis önce AOF'u bellekteki verilerden yazar. Yeniden başlatmadan sonra tüm anahtarlarımız yerindeydi.

Redis boş başlayabilecek saf bir önbellekse tersini yapın ve kaydetmeyi redis-cli CONFIG SET save "" ile kapatın.

4. Bir parola belirleyin

İşte ikinci tuzak. Herhangi bir CONFIG REWRITE sonrasında Redis 7, redis.conf dosyasının sonuna şu satırı ekler:

user default on nopass ~* &* +@all

Bu "varsayılan kullanıcının parolaya ihtiyacı yok" demek. Ardından dosyanın daha yukarısına requirepass ekleyip yeniden başlattık. Redis parolasız olarak hâlâ PONG yanıtını veriyordu, çünkü user satırı onu geçersiz kılıyor. Parolayı bunun yerine Redis üzerinden belirleyin:

REDIS_PASS=$(openssl rand -hex 24)
echo "$REDIS_PASS"
redis-cli CONFIG SET requirepass "$REDIS_PASS"
REDISCLI_AUTH="$REDIS_PASS" redis-cli CONFIG REWRITE

Parolayı güvenli bir yerde saklayın. Redis artık onu aynı user default satırında SHA-256 özeti olarak tutuyor. Yeniden başlatmadan sonra redis-cli ping NOAUTH Authentication required. yanıtını verdi ve yalnızca parola işe yaradı. Parolayı redis-cli'ye REDISCLI_AUTH değişkeniyle verin. -a ile süreç listesinde görünür ve redis-cli bu konuda uyarır. Uygulamanızda onu Redis adresine yazın: redis://:PASSWORD@127.0.0.1:6379/0.

5. Bilgisayarınızdan erişin

Redis'i 127.0.0.1 üzerinde bırakın ve bir SSH tüneli kullanın. Sunucunuzun SSH portunu kullanın; NAT planlarında bu sizin kişisel portunuzdur:

ssh -N -L 6380:127.0.0.1:6379 deploy@YOUR_SERVER_IP -p 22

Bu çalıştığı sürece redis-cli -p 6380 ve bilgisayarınızdaki masaüstü araçları sunucudaki Redis ile konuşur. İnternete yeni hiçbir şey açılmaz. SSH anahtarı rehberiyle tünel parolasız giriş yapar.

Ne kadar hızlı

Micro test sunucusunda 50 istemcili redis-benchmark şunu verdi:

TestSaniyedeki istekMedyan gecikme
SET30.3031,0 ms
GET35.1490,9 ms
SET, gidiş-dönüş başına 16 komut272.1092,4 ms
GET, gidiş-dönüş başına 16 komut414.9381,3 ms

Bir web uygulamasının önbelleği ya da iş kuyruğu için bu, ihtiyacınızdan çok daha fazlası. Ekstra hız, komutları toplu göndermekten (pipelining) geliyor.

Hangi plan

Redis'in verileriniz için RAM'e ihtiyacı var, başka pek bir şeye değil. Nano (2 vCPU, 1 GB, $3/ay) maxmemory 256mb ile küçük bir uygulamanın yanında Redis'i çalıştırır. Micro (2 GB, $5/ay) daha büyük bir önbellek ve uygulama için yer bırakır. Başka bir şeyin Redis'e doğrudan bağlanması gerekiyorsa kendi IPv4'ünüzü alın (Nano-IP ile $8/ay'dan başlayarak) ve güvenlik duvarında yalnızca o adrese izin verin. Tüm planlar VPS sayfasında; ödeme Base, Ethereum veya Polygon üzerinde USDT, USDC ya da ETH ile yapılır.

SSS

Redis ne kadar RAM ister?

Redis'in kendisi çok küçük: sunucumuzda kurulumdan hemen sonra 13,5 MB. Asıl ihtiyacı verileriniz için yer, çünkü veriler bellekte durur. maxmemory değerini sunucunun ayırabileceği kadar ayarlayın, örneğin 1 GB'lık bir sunucuda 256 MB, ve dolduğunda ne olacağını seçin.

Redis mi Valkey mi?

Valkey, Redis 7.2'den ayrılan bir Redis çatalıdır ve aynı protokolü konuşur, bu yüzden istemcilerin çoğu ikisiyle de çalışır. Ubuntu 24.04 yalnızca Redis 7.0.15 sunar. Debian 13'te hem Redis 8.0 hem Valkey 8.1 var, Debian 12 ise Valkey 8.0'ı backports'tan alır. Bu rehberdeki adımlar ikisi için de geçerli.

Redis bir çökmeden sonra neden veri kaybediyor?

Varsayılan olarak Redis, kaç anahtarın değiştiğine bağlı olarak birkaç dakikada bir diske anlık görüntü kaydeder. Süreci öldürdüğümüzde, son anlık görüntüden sonra yazılan anahtar yoktu. Her saniye yazan AOF dosyasını açın; bir çökme size en fazla yaklaşık bir saniyelik yazmaya mal olur.

redis.conf'a requirepass ekledim, Redis neden hâlâ parolasız komut kabul ediyor?

Muhtemelen bir noktada CONFIG REWRITE çalıştırıldı. Redis 7'de bu komut redis.conf'un sonuna user default on nopass ~* &* +@all satırını ekler ve bu satır daha yukarıya yazılan requirepass'i geçersiz kılar. Parolayı CONFIG SET requirepass ile, ardından CONFIG REWRITE ile ayarlayın; Redis onu o satıra kaydeder.

6379 portunu internete açabilir miyim?

Açmayın. Açık Redis portları sürekli taranır ve sunuculara girmenin yaygın bir yoludur. Redis'e bilgisayarınızdan bir SSH tüneliyle bağlanın ya da onu kullanan uygulamayla aynı sunucuda tutun.

Yorumlar

Henüz yorum yok. İlk olun.

Bir yorum bırakın

Yorumlar görünmeden önce denetlenir.