[mysql] replikacja --> co zmienic w skrypcie

0

Juz za kilka dni bede wdrazal replikacje mysql'a bo otrzymamy nowy serwer.
Zalozmy kilka rzeczy, replikacja jest juz ustawiona, mam MASTER'a i SLAVE'a.

Czy musze teraz dostosowac skrypt ktory korzysta z tej bazy danych do replikacji?
Zalozmy ze uzywamy darmowego skryptu for dyskusyjnych phpbb.

Jest tam warstwa abstrakcji do operacji na bazie danych przykladowo $db->sql_query.
Teraz najwazniejsze, slyszalem ze trzeba dostosowac w tym przypadku ta warstwe (w innym przypadku po prostu zapytania) do SLAVE'a i osobno do MASTER'a.

  1. Chodzi o to ze tylko czesc zapytan moze dzialac na SLAVE'ie prawda?
    Do tego musze wybrac ktore, czyli wiekszosc selectow ale nie wszystkie, czemu? Jesli uzytkownik o nazwie "Janek" zarejestruje sie na MASTRZE a sekunde po tym bedzie sie chcial zarejestrowac uzytkownik rowniez o nazwie "Janek" na SLAVE'ie to wywali blad bo SLAVE zrobi SELECT nazwe usera z bazy i nieznajdzie bo jest opoznienie miedzy MASTER'em a SLAVE'em wiec przepusci dalej do INSERTA i bum blad...

Czyli musze przewidziec takie sytuacje i zmodyfikowac skrypt na SLAVE'ie do korzystania z tych zapytan tylko, ktore moga pozwolic sobie na opoznienie?
Przekierowac to zapytanie SELECT przy rejestracji ze SLAVE'a do MASTER'a?

  1. Co musze jeszcze wiedziec o dostosowaniu skryptu do replikacji?

Pozdrawiam

0

Najprościej by było, gdyby replikacja była synchroniczna, ale niestety, jest jak jest i mamy MySQLa, który ma słabą replikację (zrobiliśmy system na kilkadziesiąt serwerów na tym i jaja są czasem takie że tylko na TheDailyWTF wklejać). :(

Najważniejsze pytanie: do czego Wam ta replikacja ma służyć? Jaki jest cel, że tak powiem "biznesowy"?
Mogą być różne opcje:

  1. Zwiększenie wydajności (co 2 serwery to nie jeden)
  2. Niezawodność ("sprzątaczka znowu wyjęła wtyczkę, żeby włączyć odkurzacz")
  3. Geograficzne rozdzielenie danych ("my tu mamy filię i nie chcemy się łączyć za każdym razem z centralą by sprawdzić cenę / dostępność produktu, a dane się tak często nie zmieniają")

Jeśli np. tylko odpowiedź 2, to wystarczy wszystkie zapytania kierować do węzła MASTER, a jedynie jeśli nastąpi jego awaria, szybko przełączyć na SLAVE (później niestety trzeba ręcznie zamienić slave na master i zsynchronizować serwery - trochę zabawy z tym jest).
Jeśli odpowiedź 1, to tak jak pisałeś, z tą różnicą, że problem nie jest chyba tak poważny - przecież możesz narzucić conststraint, zeby rekordy sie nie powtarzały (update i tak idzie tylko do mastera).

0

Chodzi tylko o wydajnosc.

przecież możesz narzucić conststraint, zeby rekordy sie nie powtarzały (update i tak idzie tylko do mastera).

Zgadza sie, insert tez, tylko ze select zostaje na SLAVE'ie wiec nieznajdzie uzytkownika na slave'ie bo dopiero co zostal dodany na masterze i niezdazyl sie SLAVE jeszcze zupdatowac. Przez to, sprawdzanie czy taki uzytkownik istnieje zwroci ze nie na SLAVE'ie i przepusci dalej do INSERT'a ktory pojdzie na master. Oczywiscie INSERT ten zwroci blad bo niezduplikuje sie rekord, tylko ze userowi zamiast komunikat ze uzytkownik juz istnieje, zwroci blad mysql'a (duplicate entry).

Odchodzac od tego przykladu, bede musial zrobic 2 wersje skryptu, w wersji skryptu dla serwera z MASTER'em nic niebedzie zmienione, wszystkie zapytania beda szly normalnie do MASTER'a.
W skrypcie na SLAVE'ie wszystkie inserty i update'y beda przekierowane na master'a, natomiast SELECT'y zostana na SLAVE'ie.

(wtedy load ballancer bedzie przydzielal uzytkownika do serwera MASTER badz SLAVE wedle wybranego algorytmu, jednak czy taki podzial jest prawidlowy? MASTER bedzie duzo bardziej obciaziony a SLAVE niebedzie wykorzystywany zabardzo poniewaz obsluzy jedynie SELECTY [oba serwery sa taksamo mocne Core 2 Quad 2.4, 4 GB ram]) Zeby odciazyc master'a a obciazyc slave'a moznaby przeniesc wyszukiwarke tylko na slave'a przykladowo... hmm

0

stary topic ale w sumie mam pytania w podobnej sprawie.

  1. Czy jesli skonfiguruje replikacje oznacza to ze zapytania będą odnosily sie do mastera i slave'a w sposob przezroczysty dla programisty? Czy moze wszystko dziala na jednej bazie i updatuje sie na drugiej bazie po zmianach? (zapytania do bazy beda wysylane z aplikacji ejb na glassfishu jesli to ma jakies znaczenie).
  2. Jest jakies ograniczenie w ilosci slave'ow?

1 użytkowników online, w tym zalogowanych: 0, gości: 1