Bir köle, birden fazla usta MySql


9

Bir köle iki farklı efendiyi dinleyecek şekilde MySql Çoğaltma'yı kurmak mümkün mü?

Yanıtlar:


3

Tasarım gereği, bir mysqld işlemi aynı anda iki farklı Master dinleyemez.

MASTER TO DEĞİŞTİR komutu sadece bir Master'ı okunacak kaynak olarak ayarlamanızı sağlar.

Bunu taklit etmek için iki Master arasında programlı olarak geçiş yapmanız gerekir. Bunu nasıl yaptın ?

StackOverflow'da, her bir Master'ın bir Dizüstü Bilgisayar ve Slave'in bir Merkezi Bilgisayar olduğu farklı Master'lara bir Slave'i Manuel Olarak Nasıl Bağlayacağımı anlattım.

İşte temel fikir

  • Master M1
  • Master M2
  • Köle s

M1'den S1'e ve ardından M2'den S1'e Çoğaltma Ayarlayın

  • 1) S1'i Kaynak olarak M1 ile DEĞİŞTİR
  • 2) SLAVE BAŞLAT;
  • 3) Çoğaltmayı Bir Süredir Çalıştırın
  • 4) SLAVE DURDUR;
  • 5) S1'i Kaynak olarak M2 ile MASTER TO DEĞİŞTİRİN
  • 6) SLAVE BAŞLAT;
  • 7) Çoğaltmayı Bir Süredir Çalıştırın
  • 8) SLAVE DURDUR;
  • 9) Git Adım 1

Bir Master'dan diğerine her geçişinizde, aşağıdakilerden iki değer kaydetmelisiniz: SHOW SLAVE STATUS\G

  1. Relay_Master_Log_file
  2. Exec_Master_Log_Pos

Bu iki değer, Master'dan gelen ve Slave'de yürütülecek olan son SQL İfadesini temsil eder.

Önemli bir uyarı var: M1 ve M2 birbirini dışlayan veritabanlarını güncellediği sürece, bu algoritma gayet iyi olmalıdır.

İster inanın ister inanmayın , Mayıs 2011'de ServerFault'da böyle bir soruyu ele aldım. Aslında, "Yüksek Performanslı MySQL" kitabına dayanan BLACKHOLE Depolama Motorunu kullanarak gerçek multimaster / tek kölenin nasıl taklit edileceğini anlattım.


Henüz kendime ihtiyacım olmasa da, bu konuyu daha önce düşünüyordum. Temelde ikinci ustanın binlog'unu mysql kölesine bağlamak mümkün olmaz mıydı? Sanırım en iyi şey, her bir sorgunun sonuçlarını da göz önünde tutan ve normal çoğaltma-köle iş parçacığının yaptığı gibi bir hata üzerinde durur bir araç olurdu sanırım. Ancak özünde basit bir boru da yapmalıdır. Tabii ki aynı veritabanına / tabloya yazılan her iki usta da çabucak aldatıcı hale gelecektir. Gururların düşünmesi gereken bir şey mi var?
Jannes

1
Cevabınıza eklemek isterim ki MySQL 5.6 bunu yapmasa da, 5.7 birden fazla master'ı destekleyecek.
Phil Sumner

4

Rolando'nun çözümü birçok uyarı içeriyor. Birincisi bir çoğaltma akışı, diğeri çalışırken çoğaltılmaz. Bu, kölenizin senkronize olmadığı zaman aralıklarını verecektir. Artık her birinin "dönüşü" olduğunda yetişmek için yeterli zamana sahip olduğundan emin olmak için hassas bir dengeleme eylemi oynamanız gerekiyor.

Açıklandığı gibi, geri dönmek için günlük konumlarının defter tutucusunu da oynamanız gerekir. Bu gerçekten sadece buggy gibi görünüyor, eksik veya tutarsız veriler için pencereyi açıyor veya hatta yanlış olduğunda çoğaltmayı kırıyor (günlük konumunda bir 'off by' hatası bile olsa)

Sadece birden fazla mysql örneği çalıştırmanızı tavsiye ederim. Aynı makinede iki veya daha fazla mysql çalıştırmanızı engelleyen hiçbir şey yok. İkisi de aynı liman üzerinde çalışamazlar. Her istemci ve kitaplık 3306'dan başka bir şey belirtmenize izin verdiği için bunu gerçekten bir sorun olarak görmüyorum.

Port = 3307'yi (ya da .cnf dosyalarından herhangi birini) belirtmeniz yeterlidir.

Ayrıca, ayrı ayrı yapılandırılmış arabellek havuzlarının ve diğer bellek yapılandırmalarının birbiriyle çelişmemesine dikkat etmek istersiniz. Bu ayarları gerçekten de bir avantaj olarak görüyorsunuz, çünkü bu ayarları tek tek veritabanlarının özel gereksinimlerine göre daha hassas bir şekilde ayarlayabilirsiniz.

Bu şekilde aynı sunucuda çalışan iki çoğaltma akışınız olur; asla geride kalmaz, kitap tutma gerekmez, "takas" komut dosyası gerekmez.


Birisinin defter tutma deliliğini anladığına sevindim. Güzel cevap da. +1 !!!
RolandoMySQLDBA


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.