Replikací databáze na dvou hlavních serverech nelze získat příliš mnoho výkonu. Pokud však aplikaci nakódujete správně, existuje šikovná část přepnutí při selhání.
Nastavení Master-Master je v podstatě stejné jako nastavení Slave-Master, ale má spuštěné oba Slave a důležitou změnu vašich konfiguračních souborů na každém boxu.
Master MySQL 1:
auto_increment_increment = 2
auto_increment_offset = 1
Master MySQL 2:
auto_increment_increment = 2
auto_increment_offset = 2
Tyto dva parametry zajišťují, že když dva servery z nějakého důvodu bojují o primární klíč, nedojde k duplikaci a neukončení replikace. Namísto zvýšení o 1 se každé pole automatického přírůstku ve výchozím nastavení zvýší o 2. Na jednom boxu začne offset od 1 a spustí se sekvence 1 3 5 7 9 11 13 atd. Na druhém boxu začne offset na 2 a běžte po 2 4 6 8 10 12 atd. Z aktuálního testování se zdá, že automatické zvýšení zabírá další volné číslo, nikoli to, které předtím zbylo.
Např. Pokud server 1 vloží první 3 záznamy (1 3 a 5), když server 2 vloží čtvrtý, bude mu přidělen klíč 6 (nikoli 2, který zůstane nevyužitý).
Jakmile to nastavíte, spusťte je oba jako Slave.
Poté, abyste ověřili, že oba fungují v pořádku, připojte se k oběma strojům a proveďte příkaz SHOW SLAVE STATUS
a měli byste si uvědomit, že oba Slave_IO_Running
a Slave_SQL_Running
měli by oba říci „ANO“ na každém poli.
Pak samozřejmě vytvořte několik záznamů v tabulce a ujistěte se, že do jednoho pole se vkládají pouze primární klíče s lichým číslem a do druhého pouze se zvyšujícími se sudými klíči.
Poté proveďte všechny testy, abyste se ujistili, že můžete provádět všechny standardní aplikace na každé krabici s replikací na druhou.
Jakmile to jde, je to relativně jednoduché.
Jak už ale bylo zmíněno, MySQL od toho odrazuje a doporučuje, abyste na tuto funkci pamatovali při psaní kódu aplikace.
Upravit: Předpokládám, že je teoreticky možné přidat více předloh, pokud zajistíte, že offsety jsou správné a tak dále. Realističtěji však můžete přidat nějaké další otroky.