Kayıt edilen verinin bir süre sonra kaybolması?

Selamlar,

AWS üzerinde, 1GB ramli toplamda 3 adet (1 master 2 slave olmak üzere) redis sunucum mevcut.

Kayıt ettiğim veri anlamsız şekilde bazen 15 bazen 30 saniyede otomatik siliniyor. Persistent olarak AOF-RDB (ikisini aynı anda kullanıyorum) yapılandırmaları yaptıktan sonra bu durumu farkettim.

Bu konuda tecrübesi olanlar yardımcı olabilirse sevinirim.

Teşekkürler…

SS:

Screenshot_4

Oluşturduğunuz anahtarlara ttl değeri atamış olabilir misiniz?

1 Beğeni

Hayır hocam. Hatta onuda kontrol ettim CLI üzerinden “TTL keyname” şeklinde.
-1 çıkıyor oda süresiz anlamına geliyormuş sanırım.

AOF-RDB acaba kayıt edip memory temizliyor mu diye düşündüm de bir kaynak bulamadım öyle de. Sanırım farklı bir sorun var…

@ozgurozturknet

Master sunucumun conf ayarlarını aşağıya ekliyorum hocam. Slave sunucularda da slaveof şeklinde ek parametre var onun dışında slavelar da bu ayarlarda + sentinel da aynı şekilde.

Tekrar bir deneme yaptım TTL kontrolü şeklinde bir kaç saniye sonra yine gitti.
Replica set kurulumu ile alakalı bir sorun mu diye düşündüm. Set ettiğimde slave sunuculara da anında yazılıyor

*Yorum satırları kaldırılmış şekilde
redis.conf

bind 0.0.0.0
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised systemd
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 16
always-show-logo no
set-proc-title yes
proc-title-template "{title} {listen-addr} {server-mode}"
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
rdb-del-sync-files no
dir /var/lib/redis
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
repl-diskless-load disabled
replica-priority 100
acllog-max-len 128
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-flush no
lazyfree-lazy-user-del no
oom-score-adj no
oom-score-adj-values 0 200 800
disable-thp yes
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-use-rdb-preamble yes
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
jemalloc-bg-thread yes



@ozgurozturknet

Her şey normal gözüküyor açıkçası. Ben biraz araştırıp bir şeyler bulabilirsem size döneceğim.

1 Beğeni

Çok teşekkür ederim. Henüz bende sorunu çözemedim çok iyi olur @ozgurozturknet hocam.

kendimce düşündüğüm şeyler şunlardı;

  • Sentinel tarafında sorun oluşup clusterdaki veriler silinir mi?
  • Redis tarafında sorun oluşup clusterdaki veriler silinir mi?
  • Master ve Slave nodelar da appendOnly açık. AOF-RDB tarafından kaynaklı bir sorun mu? (bu tüm node sunucular kendi kendine kalıcılık sağlarken bi tutarsızlık mı oluyor)

Kurulumu yaptığım kaynak;

Redis Replication, Sentinel, HAProxy Kurulum [Bölüm 1] | by Burakhan ÖZYOL | Medium

Bir tane sıfırdan server kurup sentinel’sız kurulum yaptım veriler kaybolmadı.
Sentinel kurduğumda ise bu sorunu orda da yaşadım.
Sorun sentinel’da gibi duruyor sanki. Sizce hocam?

redis-sentinel yazdığımda; Screenshot by Lightshot
status redis-sentinel yaptığımda; Screenshot by Lightshot

https://redis.io/topics/sentinel
Şuradakine bakarak bir sentinel conf dosyası yaratıp tekrar başlatmayı dener misin?

1 Beğeni

Sıfırdan kurulum yapıp deneyeceğim

1 Beğeni

Selam, bu durumla daha önce Google Cloud ile çalışırken karşılaşmıştım. Redis’e gebersen de keyleri silme diye ayar çekmiştik yine de siliyordu. Redis her ne kadar olgunlaştım artık dese de bence hızlı erişmek için ancak backup’lı olarak kullanılmalı. Yaptığımız uygulamayı önce Redis’e bak yoksa DB’den al davranışını gösterecek şekilde değiştirmiştik.

2 Beğeni

Merhaba,
3 gün önce Bende bu şekilde bir çözüm uyguladım. Gerçekten çok sinir bozucu bir durumdu…

Merhaba hocam @ozgurozturknet
Bu işi farklı yollarla çözsem de içim rahat etmedi peşine düşmek istedim.
Docker kullanarak bu sorunun çözüldüğünü gördüm fakat ek bir şey sormak istiyorum.
Kendi bilgisayarımda çalışırken docker run ile Buradaki ayarlar ile; https://github.com/marcel-dempers/docker-development-youtube-series/tree/master/storage/redis/clustering kurup sorunsuz birbirlerine bağlayıp çalıştırabiliyordum hatta docker exec ile container isimleri ile bağlanabiliyordum fakat bunu 4 nodelu docker swarm üzerinde managerdan stack-compose ile deploy ettiğimde sorunlarla karşılaştım. Sadece manager üzerinde tüm containerların ayağa kalkması, isimleri ile exec edememek(redis-0 yazıp bağlanmak yerine oluşturulan id ile bağlanabiliyorum), master sunucunun Screenshot by Lightshot down olması gibi…

Sanırım yapılandırmalarda bir yanlışlık yapıyorum çünkü bilgisayarımda swarm kullanmadan önce sorunsuz çalışıyordu.

Compose dosyam;

docker stack -c docker-compose.yml teststack

Screenshot by Lightshot

version: '3.8' 
services: 
  redis-0: 
    image: redis:6.0-alpine 
    container_name: redis-0 
    restart: always 
    deploy:
      replicas: 1
    volumes: 
      - ${PWD}/redis-0:/etc/redis/
    command: redis-server /etc/redis/redis.conf
    networks:
      - redis
  redis-1: 
    image: redis:6.0-alpine
    container_name: redis-1 
    restart: always 
    deploy:
      replicas: 1    
    volumes: 
      - ${PWD}/redis-1:/etc/redis/
    command: redis-server /etc/redis/redis.conf
    networks:
      - redis
    depends_on: 
      - redis-0      
  redis-2: 
    image: redis:6.0-alpine
    container_name: redis-2 
    restart: always 
    deploy:
      replicas: 1   
    volumes: 
      - ${PWD}/redis-2:/etc/redis/
    command: redis-server /etc/redis/redis.conf
    networks:
      - redis
    depends_on: 
      - redis-1        
  sentinel-0: 
    image: redis:6.0-alpine 
    container_name: sentinel-0
    restart: always 
    deploy:
      replicas: 1   
    volumes: 
      - ${PWD}/sentinel-0:/etc/redis/
    command: redis-sentinel /etc/redis/sentinel.conf 
    networks:
      - redis
    depends_on: 
      - redis-0
  sentinel-1: 
    image: redis:6.0-alpine 
    container_name: sentinel-1
    restart: always 
    deploy:
      replicas: 1   
    volumes: 
      - ${PWD}/sentinel-1:/etc/redis/
    command: redis-sentinel /etc/redis/sentinel.conf 
    networks:
      - redis
    depends_on: 
      - redis-1
  sentinel-2: 
    image: redis:6.0-alpine 
    container_name: sentinel-2
    restart: always 
    deploy:
      replicas: 1
    volumes: 
      - ${PWD}/sentinel-2:/etc/redis/
    command: redis-sentinel /etc/redis/sentinel.conf 
    networks:
      - redis
    depends_on: 
      - redis-2
networks:
  redis:
    driver: overlay

Tam olarak neyi sorduğunuzu inanın anlamadım? stack olarak deploy ettiğinizde isimlendirmelerin mi nasıl olduğunu soruyorsunuz?

1 Beğeni

Aslında birden fazla şey sordum şöyle maddeler halinde tekrar toparlayayım.

ŞURADAKİ linkte adam tek node üzerinde docker run ile containerları (redis clusterı) kuruyor. Tek node üzerinde sorunsuz bende çalıştırdım fakat bunu docker swarm üzerinde (4 node üzerinde) service olarak dağıtmak istiyorum amaç yani özetle bu, bunu soru olarak baz alabilirsiniz.
4 node üzerinde bu 3 redis- 3 sentinelı birbirleri ile --name ile haberleşecek şekilde dağıtmak istiyorum.
Mesela aşağıdaki şekilde dağıtamıyorum.

#redis-0
docker service create -d --name redis-0 `
    --net redis `
    -v ${PWD}/redis-0:/etc/redis/ `   
    redis:6.0-alpine redis-server /etc/redis/redis.conf

Yukarıda anlatmak istediğimde bunları yaparken Compose dosyamda da olduğu gibi alt alta yazıp stack ile dağıtmaya çalıştığımda tek node üzerinde (managerda) hepsi oluşuyordu dağıtmıyordu diğer bir örnek ise container isimleri ile erişemiyordum (redis cluster içerisinde master redis-0 diyelim, redis-1 redis.conf dosyası içerisine sen redis-0 'ın slave 'ısın dediğimde erişilmiyordu masterı görmüyordu haliyle redis clusterdaki master down oluyordu vs vs)

@ozgurozturknet

@Anilz biraz meşgulüm müsait olduğum anda bunu kendi sistemimde deneyeceğim. Ama sanırım sorunun service isimleriyle alakalı. GitHub - behoyh/redis-swarm-cluster şuradaki örneğe bir göz atar mısın?

2 Beğeni

@ozgurozturknet

Çok iyi olur hocam teşekkür ederim. Bende bu süreçte araştırmaya devam edeceğim.


Emin olmak için bir şey daha sormak istiyorum;

-v ${PWD}/redis-0:/etc/redis/ `

Şu kısımda adam redis-0 klasörünü /etc/redis’e mount ediyor değil mi hocam? Bunun docker service oluştururken karşılığı –mount {PWD}/redis-0:/etc/redis/ değil miydi? -v yerine --mount
Bunu yaptığımda da oluşturamadım. invalid argument “/redisconf/redis-0:/etc/redis/” for “–mount” flag: invalid field ‘/redisconf/redis-0:/etc/redis/’ must be a key=value pair

Hocam docker-swarm yerine uygulamayı k8s’te koşturmayı düşünürseniz bu isimlendirme problemiyle ilgili k8s’te statefulsets kullanabilirsiniz.

1 Beğeni

Teşekkür ederim hocam bakacağım.

1 Beğeni