Replikace MySQL/MariaDb

JmJ

  • ****
  • 315
    • Zobrazit profil
Replikace MySQL/MariaDb
« kdy: 19. 10. 2015, 11:27:10 »
Zdravim,

nejsem databazovy guru a protoze me uplne nenapada nejvhodnejsi dotaz na google, tak se zkusim poradit s vami ;-).

Situace:
klientske stanice, na kterych bezi aplikace, ktera uklada data do db. Tyto stanice musi bezet vzdy, bez ohledu na to, zda maji spojeni na sit nebo ne. Proto maji sve db.

Server (sberne misto). Pokud klientske stanice maji spojeni na sit a vidi server, pak se synchronizuji s db serveru. Tedy klienti odeslou nova data na server, pokud na serveru dostlo napriklad ke smazani nejakych dat, ktera se soucasne vyskytuji na nektere stanici, tak se smazou i na stanici a tak podobne.

Je tohle resitelne replikaci db? Tedy funguje replikace tak, ze uprava v jakekoliv kopii db se promitne do vsech ostatnich kopii?

Jak jse vyse naznacil, idealne by mel server fungovat jako jakesi sberne misto, ve kterem jsou data ze vsech stanic, ale stanice maji jen sva data. Tedy na stanici A nejsou data ze stanice B, ale na serveru jsou oboji data z A i z B a lze je modifikovat a modifikace se pak promitnou i na prislusne stanici.

Dokaze i toto zaridit MySQL/MariaDB samotna?

Diky za postrehy.


maxlink

Re:Replikace MySQL/MariaDb
« Odpověď #1 kdy: 19. 10. 2015, 12:06:25 »
NE, potreboval by si napr. galera cluster nebo si to osetrit sam, aby se zmeny promitnuly do ostatnich db(nodu),

Je nutne pouzit zrovna MariaDB? Zkus se podival bych se po CouchDB, ta umi replikaci, replikoval by jsi ze stanic na server(sberne misto).

O jaka data jde, mnozstvi, velikost, frekvenci ? Je nutne mit na stanicich vubec nejake DB systemy? Nebylo by lepsi pouzit napr nejaky protokolo pro telemetrii , viz. MQTT, predavat je na server brokerovi a ten uz poresit pres vlastniho lokalniho SUB prepis do db?

Max

Ivan Nový

Re:Replikace MySQL/MariaDb
« Odpověď #2 kdy: 19. 10. 2015, 12:13:12 »

Dzavy

Re:Replikace MySQL/MariaDb
« Odpověď #3 kdy: 19. 10. 2015, 14:46:55 »
Pokud jsem to pochopil dobre, tak potrebujes multi-master replikaci. To na urovni DB podle me uplne bezne nejde.

https://en.wikipedia.org/wiki/Multi-master_replication

Pokud by to mohlo nejakym zpusobem fungovat nad souborama, tak bych se podival na Bittorent Sync.

eL

Re:Replikace MySQL/MariaDb
« Odpověď #4 kdy: 19. 10. 2015, 23:54:51 »
Potrebujes na serveru bezpodminecne do dat zapisovat nebo to slouzi jako backup nebo na analytiku? Kdyby ne, trochu si zjednodusis zivot a poslouzi ti replikace master-slave. Klienti budou masteri s DB A,B a budou se replikovat na server, kde pobezi slave DB A' a B'. V pripade, ze se nekdo neco pokazi je snadne replikace obnovit, protoze vis, ze platna data jsou jen u klientu.

Pokud musi zapisovat server i klient, pak master-master varianta. Pouzivas autoincrement? Pokud ano, musis pocitat s tim, ze je obvykly princip, ze master A bude mit licha a B suda idecka(mirne zjednodusene). V pripade, ze se replikace rozpadne muze byt znovuobnoveni replikace trosku slozitejsi.


uxes

Re:Replikace MySQL/MariaDb
« Odpověď #5 kdy: 20. 10. 2015, 00:12:27 »
SQLite a git? Nebo podobným směrem

Re:Replikace MySQL/MariaDb
« Odpověď #6 kdy: 20. 10. 2015, 08:22:57 »
Vzhledem k tomu že klientské stanice nejsou vždy online master-master replikace neprichazi v uvahu. Ja bych to resil produkuktem Lotus Domino od IBM. Opensource reseni bohuzel neznam.

k

Re:Replikace MySQL/MariaDb
« Odpověď #7 kdy: 20. 10. 2015, 08:59:22 »
Pokud data vznikají off-line na různých stanicích, pak je to na úrovni DB řešitelné velmi těžce.
Na tento problém je vhodnější aby si každá stanice komunikovala pouze ze svojí DB a stanice posílaly zprávy o změnách z/na server.

pb.

Re:Replikace MySQL/MariaDb
« Odpověď #8 kdy: 20. 10. 2015, 09:20:51 »
Couchdb. To je databáze stavěná přímo na tyto situace.

JmJ

  • ****
  • 315
    • Zobrazit profil
Re:Replikace MySQL/MariaDb
« Odpověď #9 kdy: 20. 10. 2015, 09:25:54 »
Potrebujes na serveru bezpodminecne do dat zapisovat nebo to slouzi jako backup nebo na analytiku? Kdyby ne, trochu si zjednodusis zivot a poslouzi ti replikace master-slave. Klienti budou masteri s DB A,B a budou se replikovat na server, kde pobezi slave DB A' a B'. V pripade, ze se nekdo neco pokazi je snadne replikace obnovit, protoze vis, ze platna data jsou jen u klientu.

Pokud musi zapisovat server i klient, pak master-master varianta. Pouzivas autoincrement? Pokud ano, musis pocitat s tim, ze je obvykly princip, ze master A bude mit licha a B suda idecka(mirne zjednodusene). V pripade, ze se replikace rozpadne muze byt znovuobnoveni replikace trosku slozitejsi.

Na serveru se data z klientu musi slevat do jedne databaze a musi se dat menit, ideal je, kdyz se tyto zmeny promitnou na klienty. Nejde o zalohu, jde predevsim o analyzu dat, bohuzel jde i o mozne upravy dat.

Autoincrement neuzivam, tak nejak jsem uz pred 5 lety tusil, ze to bude cele smerovat timto smerem a ID se generuji jinak.
Jak na klientovi tak na serveru se delaji vylozene databazove operace (prochazeni dat, tisk sestav atd.), takze oboji musim byt nejake forma databaze s rozumnym dotazovacim jazykem. Navic klient muze bezet uplne samostatne bez toho, ze by data nekam dale odesilal. Klientu muze byt teoreticky neomezeny pocet, prakticky 1 az 5.

Jde o aplikaci pro prumysl. Proto musi klienti jet, i kdyz nevidi server a tak podobne.

Z nekterych dalsich odpovedi jsem vyrozumel, ze pokud na sebe jednotlive "uzly" replikace aktualne nevidi, pak nelze do DB zapisovat? Cekla bych, ze to lze a ze az na sebe uzly vidi, tak se sesynchronizuji. Samozrejme za dodrzeni urcitych podminek jako jsou jedinecna ID v ramci vsech uzlu atd. Pokud na sebe totiz opravdu musi stale videt, pak vim, ze se replikaci nemusim dale zabyvat a muzu pokracovat v tom, ze si prenos dat resim sam svym protokolem.

dustin

Re:Replikace MySQL/MariaDb
« Odpověď #10 kdy: 20. 10. 2015, 09:26:54 »
Pokud se s tím bude v návrhu počítat, mohla by fungovat master-master replikace v mariadb (ne galera cluster) http://msutic.blogspot.cz/2015/02/mariadbmysql-master-master-replication.html Ta je asynchronní, takže by výpadek jedné strany neměl nijak vadit a po nahození by se to mělo sesynchronizovat samo (tak docela spolehlivě funguje replikace master-slave, samozřejmě to vyžaduje mít dostatečně velké binlogy, ale to už v dnešní době není problém).

Samozřejmě je potřeba si hlídat kolizní změny, ty v tom pak nadělají paseku. Ale to v každém řešení.

Nahození druhého stroje pomocí xtrabackupex je jednoduché a překvapivě robustní, hodně pomáhají jednoduché GTIDs MariaDB.

Re:Replikace MySQL/MariaDb
« Odpověď #11 kdy: 20. 10. 2015, 13:43:26 »
Asi někdy před půl rokem se zde řešila mobilní aplikace pro sběr dat, na kterou byly kladeny podobné požadavky. Zkuste to ve fóru najít.

Je třeba řešit řadu situací a je to dost komplikované. Hodně záleží na aplikační logice. Nedokážu si představit, že by existovalo nějaké automatické řešení. Co když dva klienti upraví stejný záznam? Anebo jeden klient záznam smaže a druhý ho ofline upravuje? Atd atd.

Nejlépe si to osobně dokážu představit jako práci s decentralizovaným verzovacím systémem. Tam se musí řešit kolize případně se dělají branche. Současně je vyřešeno, jak aplikovat inkrementálně změny na jeden a ten stejný záznam (patch). A potřebujete navíc testy, abyste se dozvěděl, zda výsledek funguje (zda jde program zkompilovat a zda se chová konzistentně vůči nějaké aplikační logice).

Přeji příjemnou zábavu :-)

pb.

Re:Replikace MySQL/MariaDb
« Odpověď #12 kdy: 20. 10. 2015, 17:07:33 »
Je třeba řešit řadu situací a je to dost komplikované. Hodně záleží na aplikační logice. Nedokážu si představit, že by existovalo nějaké automatické řešení. Co když dva klienti upraví stejný záznam? Anebo jeden klient záznam smaže a druhý ho ofline upravuje? Atd atd.

CouchDB

Re:Replikace MySQL/MariaDb
« Odpověď #13 kdy: 20. 10. 2015, 18:14:15 »
S Couchdb jsem neměl tu čest. Znáte to z praxe? Jak se s tím pracuje? Koukám na http://docs.couchdb.org/en/latest/replication/conflicts.html

pb.

Re:Replikace MySQL/MariaDb
« Odpověď #14 kdy: 20. 10. 2015, 19:53:19 »
Ano, používáme to v praxi ve dvou větších aplikacích. Jednou z těch aplkací je CRM, kde byla nezávislost na připojení přímo v zadání. Sdílíme na tom data přes pět počítačů, replikace probíhá obvykle nepravidelně několikrát do týdne.

CouchDB se na některé věci hodí lépe, na některé hůře. Distribuované databáze přes několik počítačů se s tím právě řeší lépe.

http://www.hobrasoft.cz/cs/blog/bravenec/couchdb