Docker swarm yapısında; Ana sunucu ipsinden ve server içi local ip adreslerinden bağımsız olarak her bir container’a public ip (aws elastic ip gibi) ataması yapabiliyor muyuz acaba? Docker böyle bir sistemi içerisinde barındırıyor mu yoksa hayal mi olur bu senaryom merak ettim.
Docker ile mümkün değil fakat kubernetes ile uygun bir cni plug-in’i kullanarak ve bir çok zahmetli ayar sonrası yapılabilir. Ama neden böyle bir şeye ihtiyaç duyuyorsunuz?
Veri aldığım bir sitenin rate limitlerini bu şekilde docker ile aşabilir miyim diye merak ettım. Proxy kullanarak yapmak daha mantıklı olur bunu biliyorum ama fazla bilgi göz çıkarmaz ben biraz uğraşmak istediğim için hep. Çılgın ben
Merhaba hocam,
Farklı Ufak bir sorum olacaktı bu ip adresleri ile ilgili.
1 manager 1 worker (docker swarm) sunucum mevcut. Bu iki sunucunun statik ip adresi mevcut. Diyelim ki ben replicas=1 adet service oluşturup redis image’i kurdum ve bu da worker sunucuda çalışmaya başladı. Herhangi bir sorun oluştu ve bu sefer redis replicası gitti manager’a atandı orda çalışmaya devam etti. Her şey güzel iyi ama ben redise dış dünyadan bağlanırken 2.sunucum yani worker’ın statik ipsini kullanarak bağlanıyordum. Bu gibi senaryolarda nasıl ilerlemeliyim merak ettim.
(docker içerisinde çalıştıracağım şeyler 2 tane cronjob ve bunların geçici olarak verileri yazacağı 1 adet redis olacak)
Biraz kurcaladım sanırım çözdüm. Manager sunucunun ip adresi LB görevi görüyormuş. Redis hangi worker’da olursa olsun manager server ip adresi ile ulaşabiliyorum. @ozgurozturknet
Manager sunucunun ip adresi değil. Şöyle açıklamaya çalışayım. Siz docker swarm’da bir servisi expose ettiğiniz zaman bu servisi expose ettiğiniz port o clusterdaki tüm makinelerde dinlenilmeye başlanır. Buraya ulaşan her istek de ilgili servisin containerina iletilir. Dolayısıyla hangi sunucuya gidersen git o servise ulaşırsınız.
İlk sorunuza cevap vermek gerekirse de bu resimdekine benzer şekilde bu makinelerin önüne bir loadbalancer koyarsanız otomatik olarak bu dağıtımı yapabilirsiniz.
Anladım geri dönüş için teşekkür ederim hocam. Dediğinizi uygulayacağım.
Fakat bu konuda bir şey daha sormak istiyorum.
AWS de EC2 sunucusuna bir EBS volume oluşturup attach yapabiliyorduk ve /dev/xvdf gibi bir dizin oluşturuyordu. Bu /dev/xvdf dizinine docker swarm ile oluşturacağım redis image’ını -v parametresi ile /dev/xvdf alanına direk volume olarak ek bir şey yapmadan bağlayabilir miyim?
*Redis üzerinde (1-2 saatlik ) geçici veriler olacak ama 30 sn den az sürede bir güncelleniyor. En azından sunucunun ana dizininde değilde bir volume üzerinde kalsa çok iyi olur benim için diye düşündüm…
AWS EBS’in docker’a volume olarak atanmasını sadece ECS servisinde destekliyor diye hatırlıyorum. Ama mantığınız doğru.
Redis özelinde konuşursak da redis bir in memory cache sistemi. Siz redisle ilgili diskte ne tutuyorsunuz ki? Diske config dışında bir şey yazıyorsanız bu işte bir yanlışlık var.
Sanırım aws kursunuzda mount etmeyi göstermiştiniz oradan yardım alarak bir volume oluşturup ec2 makineye volume’u attach yapacağım. Redis konusu da şöyle; X api’den belli zaman aralıklarla 2-3 saniyede bir değişen ufak veri alıyorum sadece anahtar ifade gibi 20 byte var ya da yok . Bunu docker swarm üzerinde oluşturduğum cronjob ile alıp redise timestamp ile yazdıracağım. Karşı taraf bana timestamp vermediği için böyle bir şeye başvurdum açıkcası bilmiyorum ne kadar mantıklı. Bende işlemleri diğer oluşturduğum cronjob ile timestamp üzerinden alıp karşılaştırıp işlem yapacağım. Diğer türlü timestamp olmadığı için x zamanda x zaman aralığındaki verileri al diyemiyorum.
Redisi mongo dan daha performanslı diye seçtim araştırdığım kadarıyla. Ama tabi siz böyle bir şeyde sıkıntı çıkartır diyorsanız kullanmam doğru olmaz redis konusunda da yeniyim. Mongodb kullanıyordum hep projelerimde… @ozgurozturknet
AWS üzerinde bulunan private image’ı pull ile sorunsuz sunucuma çekip image’dan container oluşturdum buraya kadar her şey sorunsuz çalıştı fakat iş image’dan servis oluşturmaya geldiğinde şöyle bir sorun oluşuyor bu tam olarak nedir hocam? Sorunsuz container oluşuyor çalışıyor servise geldiğinde erişemedi gibi bir şey diyor. @ozgurozturknet
image id kullanımına izin vermiyor servis. Sonuçta değişik idler olabilir birden fazla sunucu olduğunda. kafa karışıklığı olmaması açısında. image id yerine repositoryname:latest şeklinde yazarsanız olacak.
Redis mongo’nun alternatifi değil. ikisi de farklı ürünler. Redis bir in memory caching çözümü. mongo bir nosql döküman veritabanı. Redis kullanabilirsiniz sizin senaryoda ama diske yazmak diye birşey yok redis’de. Zaten kısa süreli tutuyorsanız veriyi hızlı şekilde alıp sonra siliyorsanız redis daha mantıklı.