Fiziksel olarak farklı konumlarda otomatik yük devretme ile yüksek düzeyde kullanılabilir MySQL mimarisi


19

Veri merkezleri arasında MySQL için yüksek kullanılabilirlikli (HA) çözümler araştırıyorum.

Aynı fiziksel ortamda bulunan sunucular için, aktif bir pasif yaklaşım kullanarak kalp atışı (kayan VIP) ile çift master'ı tercih ettim. Kalp atışı hem seri bağlantı hem de ethernet bağlantısı üzerindedir.

Nihayetinde amacım, veri merkezleri arasında aynı düzeyde kullanılabilirliği sağlamak. Her iki veri merkezi arasında manuel müdahale olmadan dinamik olarak yük devretme ve yine de veri bütünlüğünü korumak istiyorum.

Üstte BGP olurdu. Her iki konumda bulunan ve her iki taraf arasındaki veritabanlarına yönlendirme potansiyeli olan web kümeleri. Internet bağlantısı site 1'de kesilirse, istemciler site 2'den Web kümesine ve ardından her iki site arasındaki bağlantı hala devam ediyorsa site 1'deki veritabanına yönlendirilir.

Bu senaryoda, fiziksel bağlantının (seri) olmaması nedeniyle beynin bölünme olasılığı daha yüksektir. WAN her iki site arasında düşerse, VIP her iki sitede sona erecek ve çeşitli hoş olmayan senaryoların desync'i sunabileceği yerdi.

Gördüğüm bir diğer potansiyel sorun, bu altyapıyı gelecekte üçüncü bir veri merkezine ölçeklendirmede zorluk.

Ağ katmanı bir odak noktası değildir. Mimari bu aşamada esnektir. Yine, odak noktam veri bütünlüğünü korumak ve MySQL veritabanları ile otomatik yük devretme için bir çözümdür. Geri kalanını muhtemelen bunun etrafında tasarlardım.

İki farklı fiziksel site arasında MySQL HA için kanıtlanmış bir çözüm önerebilir misiniz?

Bunu okumak için zaman ayırdığınız için teşekkür ederiz. Önerilerinizi okumak için sabırsızlanıyorum.


1
Merhaba - henüz bir yaklaşım belirlediniz mi? Ne yapmaya karar verdiğinizi duymak ilginç olurdu. Aynı problemimiz var.
Martin

Tüm cevapları ve herkesin zamanını takdir ediyorum. Ne yazık ki, bu cevapların hiçbiri sorunun kökünü tam olarak ele almıyor, bu da insanların soruyu bir üretim ortamında başarıyla nasıl çözdüğü. Burada bir sonuca vardığımda, son düşüncelerimi paylaşacağımdan emin olacağım. Şimdiye kadar, bu MySQL'in ölçeklendirme kabiliyeti ile ciddi bir sınırlama gibi görünüyor.
Warner

Belki yazma çözümünü alamıyorsunuz, çünkü yanlış soruyu mu soruyorsunuz? Hangi verileri çoğaltmanız gerekiyor ve neden? Bu soruları sormaya başladığınızda, ilk etapta neden çoğaltmaya ihtiyaç duyduğunuzu öğrenebileceksiniz. Bölünmüş beyin sadece bir mysql problemi değil, aynı zamanda bir küme konseptidir.
Unix Kapıcısı

Burada verdiğim bir cevap bazı ek bilgiler içeriyor: serverfault.com/questions/142683/… Nihai üretim uygulaması yapıldığında da takip sağlayacağım.
Warner

Yanıtlar:


9

"CAP" teoremi problemiyle karşılaşacaksınız. Aynı anda tutarlılık, kullanılabilirlik ve bölüm toleransınız olamaz.

DRBD / MySQL HA, blok cihaz seviyesinde senkron replikasyona dayanır. Her iki düğüm de kullanılabilirken veya geçici bir arıza varsa, yeniden başlatıldığında vb. Bir ağ bölümü aldığınızda sorunlar başlar.

İki veri merkezinde çalışırken ağ bölümleri son derece olasıdır. Esasen, hiçbir taraf bir bölümü başarısız olan diğer düğümden ayırt edemez. İkincil düğüm, devralınması (birincil başarısız) olup olmadığını (bağlantı koptu) bilmiyor.

Makineleriniz aynı konumdayken, bu sorunu çözmek için ikincil bir iletişim kanalı (genellikle bir seri kablo veya çapraz ethernet) ekleyebilirsiniz - böylece ikincil, birincilin gerçekten ne zaman aşağı olduğunu bilir ve bir ağ bölümü değildir .


Bir sonraki sorun performans. Makineleriniz düşük gecikmeli bir bağlantıya sahip olduğunda (örn. Gigabit ethernet - ancak bazı kişiler özel yüksek hızlı ağlar kullandığında) DRBD iyi ** performans verebilirken, ağda daha fazla gecikme süresi olursa, işlem yapmak daha uzun sürer *** . Bunun nedeni, ikincil sunucunun (çevrimiçi olduğunda), yazma işlemlerinin dayanıklılığını sağlamak için uygulamaya "Tamam" demeden önce tüm yazma işlemlerini onaylamasını beklemesi gerektiğidir.

Bunu farklı veri merkezlerinde yaparsanız, yakın olsalar bile genellikle birkaç milisaniye gecikme süresine sahip olursunuz.

** İyi bir yerel IO denetleyicisinden hala çok daha yavaş

*** Yük devretme sırasında gerekli olan kirli olmayan bir kapatma işleminden düzgün / otomatik olarak kurtarılmadığından MyISAM'ı yüksek kullanılabilirlikli bir DRBD sistemi için kullanamazsınız.


Zaman ve düşüncelerinizi takdir ediyorum. Çok iyi kaçınmaya çalıştığım bazı konuları anlattınız. İdeal olarak, veri bozulması riskini en aza indirirken, bakım / hızlı yük devretme için aktif / pasif çift ustanın avantajlarını korumak istiyorum. Dışarıda birinin kabul edilebilir bir çözüm bulduğunu düşünüyorum.
Warner

1
Aslında. Veriler aynı anda iki yer olmak istemiyor.
Matt Simmons

3

İki (veya daha fazla) veri merkezindeki tüm sunucuları birbirine bağlamak için bir VLAN kullanmaya ne dersiniz? Daha sonra otomatik yük devretme için CARP kullanabilirsiniz. Her şeyi senkronize tutmak için veritabanı çoğaltmasını kullanın.

Veri merkezlerine sahipseniz, her veri merkezinin birden fazla WAN bağlantısı bulunduğundan emin olabilirsiniz.


Bu benim ilk düşüncemdi. Katman 2'nin böyle bir dereceye kadar sokulması, her iki saha arasında yukarıdan aşağıya bir yaklaşım gerektirecektir. LinuxHA kullanarak yedekli olan diğer sunucu rollerinin güvenlik duvarları gibi benzer uygulamalara sahip olması gerekir. Aksi takdirde yönlendirme sorunları olacaktır. Nihayetinde, her iki site arasında birden fazla WAN bağlantısı olsa bile, konfor seviyem hem seri hem de ethernet bağlantılarıyla olduğundan çok daha düşük. Bu tahammül edebileceğimden daha fazla risk. Dahası, daha ideal bir çözüm olması gerektiği anlaşılıyor.
Warner

3

İlk adımınız, mevcut HA çözümünüzü Küme üyelik katmanı olarak OpenAIS kullanan bir sürüme yükseltmek olmalıdır: bu size çok fazla esneklik sağlar ve siteler arasında düşük gecikme süreleri verildiğinde, bunlara erişebilirsiniz. PaceMaker ve RHEL Clustering bunu desteklemektedir.

Otomatik veri merkezi yük devretme için, bir bağlayıcı olarak davranmak için gerçekten üçüncü bir siteye ihtiyacınız vardır, aksi takdirde siteleriniz siteler arası yönlendirme sorunları ve uzak site hatası arasında ayrım yapamaz. Microsoft'un alanı kapsayan şaşırtıcı derecede iyi web yayınları var:

Windows Server 2008 çok siteli kümeleme

Açıkçası teknolojinin tamamı Linux etki alanı ile eşleşmiyor, ancak kavramlar aynı.


1

Üzgünüm bu bir yana bir ağ, ama yolda bir düşünce ...

Bahsettiğiniz bölünmüş beyin senaryosu için, bunun gerçekleşme olasılığını azaltmak için iki site arasında yedekli bağlantılarınız olabilir.


Ben ileri geri gidiyorum. İlk olarak, tamamen riskli yazdım. Şimdi tekrar gözden geçiriyorum. Gerçekçi olarak, iki farklı yolla bile veri bozulması riski oldukça yüksektir. Şu an kısa listemde.
Warner

0

En küçük yönlendirilebilir blok 4k, a / 22 olduğu için muhtemelen BGP'yi kullanamayacağınızı unutmayın. Muhtemelen DNS tabanlı bir çözüme ihtiyaç vardır.


Bir doz gerçeklik için +1. UltraDNS ve site izleme hizmeti "SiteBacker" gibi iyi yönetilen bir DNS hizmetini kullanarak oradan en iyi şekilde yararlanabilirsiniz.
Martin

1
Halihazırda BGP'miz var. Bu, sorumun kapsamı dışında.
Warner

2
Hayır, yönlendirilebilir en küçük blok / 24'tür. Aslında, hayır .. Fiziksel olarak yönlendirilebilen en küçük blok / 28'dir, ancak muhtemelen herkes tarafından göz ardı edilecektir. Dinlenecek en küçük önek / 24'tür.
Tom O'Connor

0

Doğru bir cevap vermek, sahip olduğunuz veri miktarına, buna sığdırmak istediğiniz sunucuların miktarına, vb. Bağlı olarak zor olabilir.

MySQL ile birden fazla site için kanıtlanmış bir çözüm yoktur. Ama işe yarayan bir çözüm var. Bazılarının belirttiği gibi, evet DRDB iyi çalışıyor ancak kurulumunuza bağlı olarak sınırı veya olası sorunu var.

Hiç üçüncü bir siteye (başka bir veri merkezine) ihtiyacınız olacak mı? Eğer öyleyse, bunu yapmak için ne kadar zaman ve paraya ihtiyacınız olacak?

Her master / slave / dns sunucusu, yedeklemeler, ... eklediğinizde, kendinizi yönetmek için bir sunucu eklersiniz, sunucu sayısı açısından yönetim kapasiteniz nedir? Bu sayıyı tanımlayabilirseniz, yönetimin bir darboğaz haline gelmemesi için bazı olası çözümleri atmanız ve sayılarınıza uyacak çözümlerle çalışmanız gerekebilir.

Veri merkezlerinin sık sık düşmediği düşünüldüğünde, birden fazla site yük dengeleme ve bazı DNS korsanlığı anlamına gelir, bu aynı veri merkezinde mi olacak? Eğer öyleyse, bir veri merkezi herhangi bir nedenden ötürü çökerse, DNS ve yük dengelemenizin iyi bir kısmı bu veri merkezinde olacağı için sorun yaşarsınız.

Yani bu bölünmüş beyin durumunu planlamanız gerekebilir. Her olası kurulum için tükürük beyni durumunu çözmenin yolu farklıdır. Ayrıca, her bir çözüm X miktarını alır.
Başından itibaren 3 veri merkezini kullanmayı planlamak çok daha kolay olabilir. Ben MySQL uzmanı değilim ama üretimde hiç sorun yaşarsanız 2 Master 3 daha kolay olduğunu duydum.

Size yardımcı olabilecek bir şey Zeus gibi bazı ağ satıcı tarafından sunulan yük dengeleme hizmettir, bir göz burada muhtemelen çok daha fazla bu tür bir hizmet sunan yoktur. Eminim bir fiyata gelir ama bazen başka şeyleri kısmanıza izin verir.

İyi şanslar!


Veri nispeten küçük, her şey düşünüldü. Tartışma uğruna birkaç yüz gigabayt. Muhtemelen üçüncü site. Gerekirse, şimdi daha iyi bir çözüm için mimariden ödün vermeye ve daha sonra üçte biri için tekrar ziyaret etmeye hazırım. "Yönetim darboğazı" veya diğer idari kaygılar sorunun kapsamı dışındadır. Artıklık tüm üretim teknolojileri için geçerli olacaktır. Buradaki odak noktası MySQL.
Warner

0

DRBD, uzak veri merkezleri için önerilen bir çözüm değildir, çünkü veritabanınızın ve çoğaltmanızın hızını etkileyebilecek bant genişliği gerektirir. Önerilen çözüm Master - Master Replication'dır. Bununla ilgili tek sorun, otomatik artış alanlarının kademelendirilmesi gerektiğidir.

MySQL için gerçekten bir HA çözümüne ihtiyacınız varsa, DRBD arıza durumunda size veri bütünlüğü sağlayamadığından MySQL Kümesi ile gitmeniz gerekir.



0

Seri kablo eksikliğini aşmak gerçekten çok kolay, karanlık çağlardan modem denilen bir şey kullanıyorsunuz - her iki ucunda da bir tane var ve daha sonra PPP bağlantısı üzerinden Heartbeat'ı çalıştırıyorsunuz. Çerçeve rölesini de kullanabilirsiniz. Her iki yöntem de layer1 / 2 yedekli yollarla ilgili endişelerinizi düzeltir.

Ancak söyleniyor - DRBD yaklaşık 300µs (0.3ms thats not) gecikme ile herhangi bir bağlantı üzerinden çalışan çok hızlı bir şekilde saçma olur.

Başarısızlık yapmak için standart MySQL çoğaltma ve PPP & eth üzerinden LinuxHA kullanarak daha iyi hizmet olacaktır.

En azından geçmişte müşteriler için yaptığım şey bu.


İlginç fikir. Daha önce bir PtP'de çevirmeli bağlantı olarak çevirmeli bağlantı kullandım. CAP teoremi sorununu tamamen ortadan kaldıracağını düşünmese de, bunun bölünmüş beyni daha az meydana getirme olasılığını artırabileceğine inanıyorum. Birkaç ayak doğrudan fiziksel bağlantı tarafından yaratılanla aynı düzeyde güven yaratmak zordur.
Warner
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.