makaleler / Debian / Ubuntu / Pardus / Docker üzerinde Redis kurgusu

Docker üzerinde Redis kurgusu

27.04.2019 22:43:07

Docker üzerinde Redis konteyner'lar üzerinden load balance işlemi

Bu senaryo aynı sunucu üzerinde sanallaştırma tarzı ama Docker Container'lardan yararlanarak Redis için Loadbalance yapmayı örneklemeye çalışacağım.


Kullanılacak Uygulamalar;
  • HaProxy
  • Docker

Örnek oluşturması açısından Dockerfile dosyamızı aşağıdaki gibi yapılandırdım. Debian Stable versiyonu üzerinde Redis kurulumu yapacağız ve Redis default 6379 portu yerine 6380 numaralı portu kullanacağız.


# Pull base image.
FROM debian:stable

# Install Redis.
RUN \
  apt-get update && \
  apt-get -y install apt-utils gcc make wget telnet && \
  cd /tmp && \
  wget [url]http://download.redis.io/redis-stable.tar.gz[/url] && \
  tar xvzf redis-stable.tar.gz && \
  cd redis-stable && \
  make && \
  make install && \
  cp -f src/redis-sentinel /usr/local/bin && \
  mkdir -p /etc/redis && \
  cp -f *.conf /etc/redis && \
  rm -rf /tmp/redis-stable* && \
  sed -i 's/6379/6380/g' /etc/redis/redis.conf && \
  sed -i 's/protected-mode yes/protected-mode no/g' /etc/redis/redis.conf && \
  sed -i 's/^\(bind .*\)$/# \1/' /etc/redis/redis.conf && \
  sed -i 's/^\(daemonize .*\)$/# \1/' /etc/redis/redis.conf && \
  sed -i 's/^\(dir .*\)$/# \1\ndir \/data/' /etc/redis/redis.conf && \
  sed -i 's/^\(logfile .*\)$/# \1/' /etc/redis/redis.conf

# Define mountable directories.
VOLUME ["/data"]

# Define working directory.
WORKDIR /data

# Define default command.
CMD ["redis-server", "/etc/redis/redis.conf"]

# Expose ports.
EXPOSE 6380

Bu Dockerfile üzerinde herhangi bir değişiklik yapabilme olasılığına karşı Github üzerinde yayınlamaya karar verdim oradan takip edebilirsiniz..

https://github.com/huseyinozdemir/RedisDocker [github.com]

Docker Image Oluşturma

Dockerfile dosyamızı oluşturduğumuz path içinde olmaya dikkat edelim.


docker image build -t redis-6380 .

Docker Hub'a Gönderme

Burada önemli olan nokta kullanıcı adını göndereceğimiz dosyanın uzantısına eklemek. Gönderdiğimiz Image'ları daha sonra kullanım için erişmemize kolaylık sağlayacak.


docker image push husonet/redis-6380:latest

https://cloud.docker.com/repository/docker/husonet/redis-6380 [cloud.docker.com]

Imagelarımız hazır olduğuna göre Docker Container oluşturabilir ve sistemi ayağa kaldırabiliriz.

Ip verme işlemiyle uğraşmamak adına ve alians üzerinden kendi içlerinde erişim ihtiyacım ileride oluşabileceği olasılığına karşı Redis adında bir Network oluşturmaya karar verdim.


docker network create redis

Evet şimdi ikitane Docker Container oluşturalım.


docker container run -d  -it --network redis --network-alias rediscache --sysctl net.core.somaxconn=511 husonet/redis-6380
docker container run -d  -it --network redis --network-alias rediscache --sysctl net.core.somaxconn=511 husonet/redis-6380

Container'larımızı listeleyelim.


docker conteyner ls
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS               NAMES
5a557e27a051        husonet/redis-6380   "redis-server /etc/r…"   16 seconds ago      Up 14 seconds       6380/tcp            amazing_williams
46a8684b747d        husonet/redis-6380   "redis-server /etc/r…"   18 seconds ago      Up 16 seconds       6380/tcp            stupefied_mestorf

Evet Container'larımız ayakta ve çalışıyor. Şimdi yapacağımız isteklerimizi yönlendirebileceğimiz bir HaProxy üzerinden yönlendirme işlemini yapalım. Docker kısmını basitleştirmek için HaProxy'i Docker üzerinden çalıştırmayacam local üzerinden çalıştıracam bu yüzden çalışan Container'ların ip bilgilerine erişmem lazım.


docker container inspect amazing_williams
                    "Gateway": "172.18.0.1",
                    "IPAddress": "172.18.0.2",
docker container inspect stupefied_mestorf
                    "Gateway": "172.18.0.1",
                    "IPAddress": "172.18.0.3",

Şimdi HaProxy kurulumunu ve yapılandırmasını yapalım.
su -
apt install haproxy

Yapılandırma için


vim /etc/haproxy/haproxy.cfg

defaults REDISCLUSTER
    mode tcp
    timeout connect  4s
    timeout server  30s
    timeout client  30s

frontend frontend_redis
    bind 127.0.0.1:6380 name redis
    default_backend backend_redis

backend backend_redis
        option tcp-check
            tcp-check send PING\r\n
            tcp-check expect string +PONG
            tcp-check send info\ replication\r\n
            tcp-check expect string role:master
            tcp-check send QUIT\r\n
        tcp-check expect string +OK
    maxconn 20000
    retries 3
    server R1 172.18.0.2:6380 check inter 1s
    server R2 172.18.0.3:6380 check inter 1s
yazar husonet

Yorumlar

Bu içerik için sizde yorum yapabilirsiniz!
anasayfa | makaleler | haberler | dosyalar | linkler | hakkımızda