Redis sentinel ve kümeleme


111

Redis sentinel'in birden fazla redis örneği arasında HA'yı (yüksek kullanılabilirlik) yapılandırmanın bir yolu olduğunu anlıyorum. Gördüğüm gibi, herhangi bir zamanda müşteri isteklerine aktif olarak hizmet veren bir redis örneği var. Beklemede olan iki ek sunucu daha vardır (bir arızanın olmasını bekler, böylece biri tekrar iş başında olabilir).

  • Kaynak israfı mı?
  • Mevcut kaynakları tam olarak kullanmanın daha iyi bir yolu var mı?
  • Redis, Redis sentinel'e bir alternatif mi?

Sentinel ve kümeleme için redis belgelerine zaten baktım , deneyimi olan biri açıklayabilir mi lütfen?

Redis sentinel'de ana bağımlı konfigürasyon - hatadan önce

Efendi başarısız olur ve köle harekete geçer

GÜNCELLEME

TAMAM. Gerçek dağıtım senaryomda, redis için ayrılmış iki sunucum var. Jboss sunucumun çalıştığı başka bir sunucum var. Jboss'ta çalışan uygulama, redis ana sunucusuna (M) bağlanacak şekilde yapılandırılmıştır.

Yük devretme senaryosu

İdeal olarak, Master cache sunucusu arızalandığında (Redis işlemi düştüğünde veya makine arızalandığında) Jboss'taki uygulamanın Slave önbellek sunucusuna bağlanması gerektiğini düşünüyorum. Bunu başarmak için redis sunucularını nasıl yapılandırabilirim?

+--------+          +--------+
| Master  |---------| Slave  |
|         |         |        |
+--------+          +--------+

Configuration: quorum = 1

2
Bu aynı zamanda yardımcı olabilir - fnordig.de/2015/06/01/redis-sentinel-and-redis-cluster
Itamar Haber

Yanıtlar:


119

Önce nöbetçi konuşalım.

Sentinel yük devretmeyi yönetir, Redis'i HA için yapılandırmaz. Bu önemli bir ayrımdır. İkincisi, gönderdiğiniz diyagram aslında kötü bir kurulumdur - Sentinel'i yönettiği Redis düğümleriyle aynı düğümde çalıştırmak istemezsiniz. O konağı kaybettiğinizde ikisini de kaybedersiniz.

"Kaynak israfı mı?" kullanım durumunuza bağlıdır. Bu kurulumda üç Redis düğümüne ihtiyacınız yok, sadece ikisine ihtiyacınız var. Üç, yedekliliğinizi artırır, ancak gerekli değildir. Eklenen fazlalığa ihtiyacınız varsa, bu bir kaynak israfı değildir. Yedekliliğe ihtiyacınız yoksa, tek bir Redis örneğini çalıştırır ve buna iyi dersiniz - çünkü daha fazla çalıştırmak "israf" olur.

İki köle çalıştırmanın bir başka nedeni de okumaları bölmek olabilir. Yine, ihtiyacın olursa israf olmaz.

"Mevcut kaynakları tam olarak kullanmanın daha iyi bir yolu var mı?" Özel senaryonuza ve kodunuza fazlasıyla bağlı olduğu için buna cevap veremiyoruz. Bununla birlikte, depolanacak veri miktarı "küçük" ise ve komut oranı aşırı yüksek değilse, Redis'e bir ana bilgisayar ayırmanıza gerek olmadığını unutmayın.

Şimdi "Redis kümeleme, Redis sentinel'e bir alternatif mi?" Gerçekten tamamen kullanım durumunuza bağlıdır. Redis Cluster bir HA çözümü değildir - çok yazıcılı / ramdan daha büyük bir çözümdür. Hedefiniz sadece HA ise, o zaman muhtemelen sizin için uygun olmayacaktır. Redis Kümesi, özellikle çok tuşlu işlemlerde sınırlamalarla birlikte gelir, bu nedenle mutlaka basit bir "sadece kümeyi kullan" işlemi değildir.

Redis çalıştıran üç ana makineye (ve çalışan üç nöbetçiye) sahip olmanın boşuna olduğunu düşünüyorsanız, daha fazla kaynak gerektirdiği için Küme'yi daha da fazla tutabilirsiniz.

Sorduğunuz sorular muhtemelen yazıldığı gibi hayatta kalamayacak kadar geniş ve fikir temelli. Üzerinde çalıştığınız belirli bir durum / sorununuz varsa lütfen bununla güncelleyin, böylece size özel yardım ve bilgi sağlayabiliriz.

Özellikler için güncelleme:

Senaryonuzda uygun yük devretme yönetimi için, biri JBoss sunucunuzda çalışan 3 nöbetçi ile giderdim. 3 JBoss düğümünüz varsa, her birinde bir tane bulun. Ayrı düğümlerde bir Redis bölmesine (ana + bağımlı) sahip olurdum ve nöbetçinin yük devretmeyi yönetmesine izin verirdim.

Oradan, JBoss / Jedis'i, bilgi ve bağlantı yönetimi için Sentinel'i kullanmak üzere bir kablolama meselesi. Bunları kullanmadığım için hızlı bir arama Jedis'in desteğine sahip olduğu ortaya çıkıyor, sadece doğru şekilde yapılandırmanız gerekiyor. Bulduğum bazı örnekler altındadır Sentinel ile Jedis bir örnek arıyorsunuz ve https://github.com/xetorthio/jedis/issues/725 hakkında konuşmak hangi JedisSentinelPoolbir havuz kullanımı için rota olma.

Sentinel bir yük devretme gerçekleştirdiğinde, istemcilerin bağlantısı kesilir ve Jedis, Sentinellere mevcut yöneticinin kim olduğunu sorarak yeniden bağlanmayı halledecektir (gerekir mi?).


6
Merhaba @ The-Real-Bill, "Sentinel yük devretmeyi yönetir, Redis'i HA için yapılandırmaz." Resmi belgede ( redis.io/topics/sentinel ) "Redis Sentinel, Redis için yüksek kullanılabilirlik sağlar" yazıyor.
Xiao Peng - ZenUML.com

1
HA Redis, birkaç parçanın HA olmasını gerektirir. Sentinel yalnızca bir parçayı işler: yük devretme. Çoğaltmayı ayarlamaz ve HA uç noktası sağlamaz. Servis keşfi sağlar, böylece bir müşteri ustaya ulaşmak için nerede konuşulacağını bilir. Bu, Redis'i HA için yapılandırmaz.
The Real Bill

5
Buradaki iddialar basitçe doğru değildir - sentinel ile redis, birincil düğümden yedek düğümlere çoğaltmayı yönetir. Yük devretme durumunda, ana birim değiştirilir ve çoğaltma, yeni ana düğümden kalan tüm düğümlere taşınır. Kurtarılan bir düğüm, çoğaltma hedefi olarak ikincil bir site haline gelir. Eksik olan parça, MÜŞTERİ'nin durumdaki herhangi bir değişiklik hakkında bilgi almak için nöbetçi ile konuşması gerektiğidir. Yani Sentinel bir Yüksek Kullanılabilirlik çözümüdür.
JasonG

6
Replikasyonu kurmadığını söyledim ve bu doğru. Redis çoğaltmasını bağımlı birimler kurarak yapılandırırsınız. Sonra nöbetçi onu keşfedecek ve yük devretmeleri yönetecektir. Sentinel, yalnızca mevcut bir çoğaltma kurulumunu yönettiği için çoğaltmayı kuramaz. Dene. İki bağımsız Redis sunucusunu açın ve doğrudan köle kullanmadan bir köleyi diğerine yapmak için nöbetçi olun. Çalışmayacak. Yeni köleler de ekleyemez. Böyle yapar. Replikasyonu kurar.
Gerçek Bill

35

Öneri, her yerde, iki veya ikinin katlarını kullanmadan, tek sayıda örnekle başlamaktır. Bu düzeltildi, ancak diğer bazı noktaları düzeltelim.

İlk olarak, Sentinel'in HA olmadan yük devretme sağladığını söylemek yanlıştır. Yük devretmeniz olduğunda, çoğaltılmış uygulama durumunun ek yararı olan HA'ya sahip olursunuz. Buradaki fark, bir sistemde HA'ya sahip olabilmenizdir (bu HA'dır, ancak hataya dayanıklı değildir).

İkinci olarak, hedef redis örneğiyle aynı makinede bir nöbetçi çalıştırmak "kötü bir kurulum" değildir: Gözcünüzü veya redis örneğinizi veya tüm makineyi kaybederseniz, sonuçlar aynıdır. Muhtemelen bu tür konfigürasyonların her örneğinin aynı makinede çalıştığını göstermesinin nedeni budur.


6
Aslında Sentinel'in "nöbetçi nöbetçi" kurulumunda bir seçim başlatamayacağı bir hata var gibi görünüyor ve bunu burada, ML'de ve bireysel danışmanlıkta birçok kez gördüm. Gözcüleri Redis sunucusundan çıkarmak her seferinde onu düzeltti. Bu nedenle, evet, bunu bu şekilde yapmak kötü bir kurulumdur, çünkü ihtiyacınız olduğu anda sizi hayal kırıklığına uğratacaktır. Örnekler bunu böyle gösteriyor çünkü bunlar kapsamlı operasyonel deneyime sahip kişiler tarafından yazılmamış ve daha kolay.
Gerçek Bill

3
Bu hangi hata, bir hata raporu var mı? Hala var olup olmadığını biliyor musun?
sivann

Gözcüleri uygulama makinelerine koyarken benzer sorunlar var mı?
OrangeDog

31

Bu, sorunuzun doğrudan cevabı değil, ama düşünün, benim gibi Redis'e yeni başlayanlar için yararlı bilgiler. Ayrıca bu soru, Google'da "Redis kümesine karşı sentinel" arandığında ilk bağlantı olarak görünür.

Redis Sentinel, Redis yüksek kullanılabilirlik çözümünün adıdır ... Redis Cluster ile hiçbir ilgisi yoktur ve Redis Cluster'a ihtiyaç duymayan kişiler tarafından kullanılmak üzere tasarlanmıştır, ancak bir master olduğunda otomatik yük devretmeyi gerçekleştirmenin bir yoludur. örnek düzgün çalışmıyor.

Alındığı Redis Sentinel tasarım taslak 1.3

Redis'te yeni olduğunuzda ve yük devretme çözümünü uyguladığınızda bu çok da gereksiz değildir. Gözcü ve kümeleme hakkındaki resmi belgeler birbiriyle karşılaştırılamaz, bu nedenle tonlarca belgeyi okumadan doğru yolu seçmek zordur.


10

Belgeler boyunca kafamı vurduktan sonra anladığım budur.

Sentinel, kölelerin kopyalanarak ve herhangi bir zamanda terfi edilmeye hazır tutulduğu bir tür hazır bekleme çözümüdür. Ancak, herhangi bir çok düğümlü yazmayı desteklemez. Slave'ler okuma işlemleri için konfigüre edilebilir. Sentinel'in HA sağlamayacağı doğru DEĞİLDİR, tipik bir aktif-pasif kümenin tüm özelliklerine sahiptir (ancak burada kullanmak için doğru terim bu değildir).

Redis kümesi, parçaların üzerinde çalışan, aşağı yukarı dağıtılmış bir çözümdür. Her veri parçası, ana bilgisayarlar ve ikincil düğümler arasında dağıtılır. Minimum çoğaltma faktörü 2, ana ve ikincil aygıtlarda iki etkin parçaya sahip olmanızı sağlar. Mongo veya Elasticsearch'teki parçalanmayı biliyorsanız, onu yakalamak kolay olacaktır.


6

Redis, bölümlenmiş kümede (bu ana makinelerin birçok ana ve ikincil öğesiyle) veya tek bir örnek modunda (çoğaltma ikincil öğelerine sahip tek ana) çalışabilir.
Buradaki bağlantı şöyle diyor:

Redis'i tek bir Redis sunucusunun tüm bölümlenmemiş veritabanını yönettiği tek örnek modunda kullanırken, kullanılabilirliğini yönetmek için Redis Sentinel kullanılır

Ayrıca şöyle diyor:

Verilerin birden çok birincil örnek arasında bölündüğü bir Redis kümesi, kullanılabilirliği kendi başına yönetir ve fazladan bileşen gerektirmez.

Dolayısıyla belirtilen 2 senaryoda HA sağlanabilir. Umarım bu şüpheleri giderir. Redis kümesi ve nöbetçiler birbirine alternatif değildir. Bunlar sadece farklı bölümlenmiş veya bölümlenmemiş ana sistem durumlarında HA sağlamak için kullanılırlar.


4

Redis Sentinel, bir ana makinenin çalışmadığını gördüklerinde yük devretmeyi destekleyen kopyaları gerçekleştirir. Genellikle tek sayıda nöbetçi düğüm istersiniz. Bir ana ve bir kopya örneğinde, karar üzerinde fikir birliği sağlanabilmesi için 3 nöbetçi kullanılmalıdır. İdeal olarak 3. nöbetçi 3. bir sunucu üzerindedir, bu nedenle karar çarpıtılmaz (başarısızlığa bağlı olarak). Sentinel, yükseltme ve eşitlemenin doğru sırada gerçekleşmesi için düğümlerinizdeki ana / çoğaltma yapılandırma ayarlarını değiştirmeye özen gösterir ve artık eski verileri içeren eski bir başarısız ana bilgisayarı getirerek verilerin üzerine yazmazsınız.

Nöbetçi düğümlerinizi yük devretme gerçekleştirmek için ayarladıktan sonra, doğru örneğe işaret ettiğinizden emin olmanız gerekir. Bunun için bir HAProxy yapılandırması örneğine bakın . HAProxy, sağlık kontrolleri gerçekleştirir ve bir arıza oluşursa yeni ana bilgisayarı işaret eder.

Kümeleme, yatay olarak ölçeklendirmenize olanak tanır ve yüksek yüklerin üstesinden gelmenize yardımcı olabilir. Önceden kurmak ve yapılandırmak biraz çalışma gerektirir.

Aktif kopya seçeneğiyle sentinel düğümlere olan ihtiyacı ortadan kaldıran “KeyDB” adında açık kaynak kodlu bir Redis çatalı vardır. Bu, çoğaltma düğümünün okumaları ve yazmaları kabul etmesine izin verir. Bir yük devretme gerçekleştiğinde, HAProxy, başarısız olan düğümle okumaları / yazmaları durdurur ve yalnızca zaten eşitlenmiş olan kalan etkin düğümü kullanır. Zaman damgası, başarısız düğümlerin otomatik olarak yeniden katılmalarını ve çevrimiçi olduklarında veri kaybetmeden yeniden senkronize olmalarını sağlar. Kurulum basittir ve daha yüksek trafik için okumaları çoğaltma düğümüne yönlendirmek ve ana makineye okumak / yazmak için özel bir ön kuruluma ihtiyacınız yoktur. Burada aktif çoğaltma örneğine bakın . KeyDB ayrıca, bazı uygulamalar için kümelemeye alternatif olabilecek, ancak gerçekten ihtiyaçlarınızın ne olduğuna bağlı olan çok iş parçacıklıdır.

El ile ve küme oluşturma aracıyla kümelemenin kurulmasına bir örnek de vardır . Redis kullanıyorsanız, bunlar aynı adımlardır (talimatta 'keydb'yi' redis 'ile değiştirin)


1

Yukarıdaki cevaplara ek bilgi

Redis Kümesi

  • Redis kümesinin temel amaçlarından biri, veri yükünüzü parçalayarak eşit / tek tip olarak dağıtmaktır.

  • Redis Cluster tutarlı hashing kullanmaz, ancak her anahtarın kavramsal olarak hash slot denilen şeyin bir parçası olduğu farklı bir sharding biçimi kullanır.

  • Redis Kümesinde 16384 karma yuvası vardır, Bir Redis Kümesindeki her düğüm, karma yuvalarının bir alt kümesinden sorumludur, bu nedenle, örneğin, 3 düğümlü bir kümeniz olabilir, burada:

    Düğüm A, 0 ile 5500 arasındaki karma yuvaları içerir, Düğüm B, 5501'den 11000'e kadar karma yuvaları içerir, Düğüm C, 11001'den 16383'e kadar karma yuvaları içerir

Bu, kümedeki düğümleri kolayca eklememizi ve kaldırmamızı sağlar. Örneğin, yeni bir D düğümü eklemek istiyorsak, bazı hash yuvalarını A, B, C düğümlerinden D'ye taşımamız gerekir.

  • Redis kümesi, ana-yardımcı yapıyı destekler, bir küme oluştururken ana A, B, C ile birlikte A1, B1, C2 köleleri oluşturabilirsiniz, böylece ana B aşağı gittiğinde, B1 ana olarak yükseltilir

Redis Kümesini kullanırken ek yük devretme işlemine ihtiyacınız yoktur ve kesinlikle Sentinel örneklerini Küme düğümlerinden herhangi birine yönlendirmemelisiniz.

Yani pratik açıdan, Redis Cluster ile ne elde edersiniz?

1. Veri kümenizi birden çok düğüm arasında otomatik olarak bölme yeteneği.

2. Düğümlerin bir alt kümesi arızalar yaşadığında veya kümenin geri kalanıyla iletişim kuramadığında işlemlere devam etme yeteneği.

Redis Sentinel

  • Redis, bir ana düğümden verileri çoğaltan birden çok bağımlıyı destekler.
  • Bu, ana düğümdeki verilerin yedeğini sağlar.
  • Redis Sentinel, master ve slave'i yönetmek için tasarlanmış bir sistemdir. Ayrı bir program olarak çalışır. İdeal bir sistemde gereken minimum nöbetçi sayısı 3'tür. Kendi aralarında iletişim kurarlar ve Üstadın hayatta olduğundan emin olurlar, eğer hayatta değilse kölelerden birini efendi olarak terfi ettirirler, böylece daha sonra ölü düğüm döndüğünde olacaktır. yeni usta için köle gibi davranmak
  • Çekirdek yapılandırılabilir. Temelde, usta düştükçe anlaşması gereken nöbetçi sayısıdır. N / 2 +1 aynı fikirde olmalıdır. N, Bölmedeki düğüm sayısıdır (bu kurulumun bir bölme olarak adlandırıldığını ve bir küme olmadığını unutmayın)

Yani pratik açıdan, Redis Sentinel ile ne elde edersiniz?

Master'ın her zaman ulaşılabilir olmasını sağlayacaktır (eğer usta düşerse, köle usta olarak yükseltilecektir)

Referans :

https://fnordig.de/2015/06/01/redis-sentinel-and-redis-cluster/

https://redis.io/topics/cluster-tutorial

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.