REDİS Nedir? Nasıl Kullanılır ve Openshift Redis Kurulumu.

Uğur Duran
5 min readJun 6, 2021

--

Selamlar ,ben Uğur :) workfordreamseries dördüncü sayısında Openshift Roadmap konulu yazımızda bahsettiğim Stateful Set olarak Openshift üzerinde Redis Cluster kurulumu yapıyor olacağız.

Öncesinde Redis nedir ? Neden Redis kullanıyoruz ve nasıl kullanılır gibi soruları cevapladığım konu hakkında kalemi elime alıyorum.

Redis

Redis, key-value şeklinde tasarlanmış bir open-source NoSQL çözümüdür. Key-value olarak veri tutmaya muhtemelen C# geliştiricisiyseniz Dictionary’den, Java geliştiricisiyseniz de Map’ten aşinasınızdır. Ancak redisi farklı kılan bazı özellikleri var.

Örneğin, rediste key’e karşılık gelen valuelerin string olma gibi bir zorunluluğu yoktur. Redis Lists, hash ve sets gibi veri tiplerini destekler. Redis hakkındaki bir diğer önemli konu ise verileri memory’de tutuyor olmasıdır. Redis dataları öncelikli olarak kendi koştuğu makinanın RAM’inde tutar. Bunun dışında redis ile istenilirse RAM’de tutulan veriler disk’e de yazılabilir.

Herşeyi bellekte tuttuğunu söyledik. Bu durumda insanın aklına hemen çok fazla bellek kullanabileceği geliyor. Redis, hiç bir veri barındırmazken bellekte sadece 1 mb yer kaplıyor. Eğer siz basit bir key-value eşlemesi, örneğin <String,String> şeklinde bir eşleme, tutmak isterseniz, bir milyon adedi bellekte sadece 100 mb yer kaplıyor. Ben bu kadar basit veriler tutmayacağım benim verilerim daha karmaşık derseniz, <Hash, Obj> şeklindeki verilerin (burada value alanındaki nesnemizin 5 kırılımı olduğunu varsayıyoruz) bir milyon adedi ise bellekte sadece 200mb yer kaplıyor.

PAC

Redis verileri Ramde tutmasıyla Memcache’e benzer bir yapı sunabilir. Ancak aralarında önemli farklar vardır. Memcached, veriyi bellekte tutar ama bu veriyi dosyaya yazmaz sadece bellekte tutar. Server kapandığı zaman memcached de tutulan datalar silinir ancak Redisde yukarıda da bahsettiğim gibi, istediğiniz takdirde verileri diske yazabilirsiniz. Memcachce ile sadece veri girişi ve çıkışı yapabilir, datayı set eder sonra get ile okursunuz ama Redis, veri yapıları kullandığı için bir çok fonksiyonu destekler.

Openshift Redis Cluster Kurulumu -

Bir önceki Openshift Roadmap konulu yazımda bahsettiğim adımları tanımlayarak openshift üzerinde bir cloud ortamı kurup ve bu ortam üzerinde geliştirmelerinizi yapabileceğinizden bahsetmiştim.

1- Stateful Sets :

Burada Stateful Set olarak Openshift gui üzerinden Stateful Sets sekmesine gidilir. Daha sonra açılan pencerede Create Stateful Set tıklanır.

Redis-cluster (Stateful Sets )

Açılan pencereden aşağıdaki bulunan template yaml’ı kullanarak projenizin dinamiklerine göre replica , label , container limit ve pvc konfigrasyonlarını kolayca change edebilirsiniz.

github:https://github.com/duranugur/redis.conf/blob/main/statefullset.yaml

Düzenlemeyi tamamladıktan sonra “ Save ” ederek Create edilir.

kind: StatefulSet
apiVersion: apps/v1
metadata:
name: redis-cluster
namespace: YOURNAMESPACE
spec:
replicas: 6
selector:
matchLabels:
app: redis-cluster
template:
metadata:
creationTimestamp: null
labels:
app: redis-cluster
spec:
volumes:
- name: conf
configMap:
name: redisconf
defaultMode: 493
containers:
- resources:
limits:
cpu: 800m
memory: 2Gİ
requests:
cpu: 100m
memory: 512Mi
terminationMessagePath: /dev/termination-log
name: redis
command:
- /conf/update-node.sh
- redis-server
- /conf/redis.conf
env:
- name: POD_IP
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
ports:
- name: client
containerPort: 6379
protocol: TCP
- name: gossip
containerPort: 16379
protocol: TCP
imagePullPolicy: IfNotPresent
volumeMounts:
- name: conf
mountPath: /conf
- name: redis-data
mountPath: /var/lib/redis/data
terminationMessagePolicy: File
image: 'redis:6.0.8'
restartPolicy: Always
terminationGracePeriodSeconds: 30
dnsPolicy: ClusterFirst
securityContext: {}
schedulerName: default-scheduler
volumeClaimTemplates:
- kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: redis-data
creationTimestamp: null
spec:
accessModes:
- ReadWriteOnce
resources:
limits:
storage: 3Gi
requests:
storage: 3Gi
volumeMode: Filesystem
serviceName: redis-cluster
podManagementPolicy: OrderedReady
updateStrategy:
type: RollingUpdate
rollingUpdate:
partition: 0
revisionHistoryLimit: 10

2- Config Maps :

Config maps , Stateful Sets ‘de cluster ayağa kalkmadan önce okucağı konfigrasyon dosyası olarak create edilir. Burada yine projenizin dinamiklerine ve kullanım amacınıza göre redis.conf dosyasında permissions ve redis-cluster şifresi gibi değerleri yaml dosyasında bulabilir ve değişikliklerle kullanabilirsiniz.

port 6379
cluster-enable yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendolny yes

github : https://github.com/duranugur/redis.conf

configmap (redis.conf)

3- Services :

Redis Service , microservis mimarisinde uygulamaların openshift cluster içinde haberleşmeleri için configmap’lerde uygulamarın birbiri ile bağlı bağımlılıkları var ise servisler aracılığı ile konuşturmak için kullanabiliriz.

github : https://github.com/duranugur/redis.conf/blob/main/service.yaml

Burada her Redis-cluster’ın name , label ve port olarak her bir biribirinden izole bir şekilde manage ediyoruz. Örnek vericek olursam , nodejs uygulamasında session get ve put işlemleri için kullanıyorum. Cluster içinde sağlıklı haberleşmesi için servis ve portu ile erisim sağlayabilirsiniz.

kind: Service
apiVersion: v1
metadata:
name: redis-cluster
namespace: YOUR_NAMESPACE
spec:
ports:
- name: client
protocol: TCP
port: 6379
targetPort: 6379
- name: gossip
protocol: TCP
port: 16379
targetPort: 16379
selector:
app: redis-cluster
type: ClusterIP
sessionAffinity: None
status:
loadBalancer: {}

4- CLI commands :

Steteful Sets , Service ve Configmaps create edildikten sonra otomatik olarak her pod step by step auto create şekilde ayağa kalkıcaktır.

oc get pods -o wide | grep redis

komutu iler redis-cluster ‘ımızın health durumu görebilirsiniz.

5- CLUSTER NODES :

Openshift üzerinde pod olarak Running durumda gördükten sonra , cluster içinde 3 master 3 slave node larını , pod’lar üzerinde oluşan ClusterIp ‘lerini kullanarak create edeceğiniz.

redis-cli - -cluster create -a secret 100.127.30.14:6379 100.127.29.14:6379 100.127.27.21:6379 100.127.4.44:6379 100.127.38.14:6379 100.127.36.17:6379 - -cluster-replicas 1

Komutu ile cluster’ı node’a bağlanır.

redis-cli -p 6379 -a secret cluster nodes

komutu ile aşağıdaki gibi çıktıyı görüntülediyseniz tebrikler kurulum tamamlandı.

Redis-cluster nodes

— — — — — — — — — — — — — — — — — — — — — — — — — —

WorkForDreamSeries ‘in dördüncü yazısında Devops Engineer olarak özetle Openshift Container Platform’unda Redis nedir ve redis-cluster kurulumunu bilgim dahilinde bahsetmek istedim.

Umarım sizler içindede faydalı bir makale ve projelerinizde kullanabileceğiniz bir döküman olarak sizlerle paylaşıyorum.

Bir sonraki seride görüşmek üzere.. Teşekkürler :)

Uğur Duran
Bestcloudfor.me Cloud Native Engineer
#workfordreamseries

--

--