Coğrafi olarak ayrı sunucularda MySQL çoğaltması


11

Kuruluşum, yedeklemeleri çok güncel tutarken ve ideal olarak yükü dağıtırken sunucularımızı coğrafi olarak nasıl dağıtacağını araştırıyor.

Aklımdaki ilk şey MySQL üzerindeki Rails. Yazma oranı çok yüksek değil (bazılarının büyük medya ekleri olmasına rağmen makaleler / yorumlar dakikada 1'den az bırakılıyor).

Yani,

  • çoğaltma geniş alan ağlarında nasıl çalışır?
  • Bağlantının (veya bağımlı sunucunun) kapanması, manuel müdahalenin gerekli olduğu (iki sunucu birbiriyle tekrar konuşabildiğinde) veya kurtarma otomatik mi olduğu anlamına mı geliyor?
  • Eğer kaptan kaybolursa, bir köleyi bir kaptana dönüştürmek için ne gerekir? Bunu yönetmeye yardımcı olacak standart komut dosyaları / araçlar var mı?
  • Başka yakaladınız mı?

Yanıtlar:


6

Bazı Avrupa ülkelerindeki veri merkezleri arasında çoğaltmayı kullanıyoruz (bu yüzden dünya çapında birbirlerinden değiller, ama kesinlikle yerel değiller) ve sorunsuz çalışıyorlar.

Mümkünse çoğaltma otomatik olarak yeniden başlatılır. Bir sorgu ile ilgili bir sorun varsa (örn. Master'da bir veritabanı var, slave değil ve bir sorgu kullanıyorsa), varsayılan olarak manuel düzeltme gerektirir (ancak bu hataları yok sayacak şekilde ayarlayabilirsiniz). Veritabanları tam aynalarsa, çoğaltmayı el ile yeniden başlatmanız gerekmez.

İki sunucunuz varsa ve master kaybolursa, slave'i 'master' haline getirmek için çoğaltmayı durdurun ve kodunuzu değiştirin (yeni 'master'a yazmak için). Üç veya daha fazla sunucunuz varsa ve master kaybolursa, slave'lerde çoğaltmayı durdurun, yeni master'ı kullanmak için değiştirin ve tekrar başlayın. Tam olarak senkronize değilse (ne kadar veri aktarıldığına, sunucuların ne kadar meşgul olduğuna, ağ bağlantısının ne kadar iyi olduğuna vb. Bağlıysa), bundan daha fazla iş yapmanız gerekebilir. MySQL belgelerinin çoğaltma bölümü bunu daha ayrıntılı olarak ele almaktadır .

SSL üzerinden çoğaltma yaptığınızdan emin olmanızı öneririm (yani çoğaltma kullanıcısını SSL bağlantısı gerektirecek şekilde ayarlayın).


4

MySQL 5.1'de çoğaltma önemli ölçüde değişti. 5.0 sürümünde yalnızca Deyime Dayalı Çoğaltma kullanılmıştır. Artık Satır Tabanlı Çoğaltma veya Karışık Tabanlı Çoğaltma yapma seçeneğiniz var. Bu, bir WAN üzerinden çoğaltma şeklinizi büyük ölçüde etkiler.

Aşağıdakilerden birini yapma olanağınız varsa: A) IP devralma (sunucularınız coğrafi olarak ayrılırsa bu olası değildir) B) Çevik DNS değişiklikleri yapma Ana verileri değiştirmek için uygulama kodunu / yapılandırmasını değiştirmekten kaçınabilirsiniz. Dahili DNS'yi kısa önbellekleme ve sahte .internal alan adlarıyla kullanıyoruz. Masterdb.internal'ı başka bir sunucu olarak değiştirmemiz gerekirse, 5 saniye içinde değişiklik ilerler.

Tek bir veri merkezinde IP devralma özelliğini kullanıyoruz. Tüm DB sunucuları, önyüklemede başlatılmayan sanal arabirimlere (eth0: 1, eth0: 2, eth0: 3) sahiptir. Eğer kölelerden birinin ele geçirilmesi gerekiyorsa, sadece eğer eth0: 2 ise ve bu ustadır. Bu senaryoda, eth0, içine girmek için kullandığımız 'if' dir. Uygulamalar, komut dosyam IP'nin alındığını algılarsa önyüklemede etkinleştirilmeyecek olan eth0: 1'e bağlanır. (wikipedia STONITH) Diğer if'ler, başarısız olması gerekebilecek ustaların IP'lerini devralmak içindir.


3

Bir MySQL çoğaltması kullanırken okyanusları geçmenizi tavsiye etmem. Köle teksastayken bir kere Avrupa'daki bir efendiden kopyalamaya çalıştım. Bu projeyi terk edene kadar çoğaltma neredeyse her gün kırıldı. Tabii ki işe yarayabilir, ancak efendi ve köle arasındaki mesafe ne kadar büyük olursa, daha fazla fragil alma eğilimindedir.

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.