{"id":82116,"date":"2020-05-19T13:42:54","date_gmt":"2020-05-19T11:42:54","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/orchestrator-dlya-mysql-pochemu-bez-nego-nelzya-stroit-otkazoustojchivyj-proekt"},"modified":"2020-05-19T13:42:54","modified_gmt":"2020-05-19T11:42:54","slug":"orchestrator-dlya-mysql-pochemu-bez-nego-nelzya-stroit-otkazoustojchivyj-proekt","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/orchestrator-dlya-mysql-pochemu-bez-nego-nelzya-stroit-otkazoustojchivyj-proekt","title":{"rendered":"Orkiestrator dla MySQL: dlaczego nie mo\u017cna budowa\u0107 awaryjnego projektu bez niego","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ka\u017cdy du\u017cy projekt zaczyna\u0142 si\u0119 od kilku serwer\u00f3w. Na pocz\u0105tku by\u0142 jeden serwer DB, potem do niego do\u0142\u0105czy\u0142y s\u0142u\u017cby, aby skalowa\u0107 odczyt. I tutaj \u2014 stop! Mamy jednego mastera, a wiele slave'\u00f3w; je\u015bli jeden ze slave'\u00f3w odejdzie, wszystko b\u0119dzie w porz\u0105dku, a je\u015bli odejdzie master \u2014 b\u0119dzie \u017ale: przest\u00f3j, admini w panice podnosz\u0105 serwer. Co robi\u0107? Zarezerwowa\u0107 mastera. M\u00f3j kolega Pawe\u0142 ju\u017c o tym pisa\u0142, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/citymobil\/blog\/491044\/\">artyku\u0142<\/a><\/noindex>, nie b\u0119d\u0119 tego powtarza\u0107. Zamiast tego opowiem, dlaczego Orkiestrator dla MySQL jest absolutnie niezb\u0119dny!<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nZacznijmy od g\u0142\u00f3wnego pytania: \u201eJak prze\u0142\u0105czymy kod na now\u0105 maszyn\u0119, gdy odejdzie master?\u201d.<\/p>\n<ul>\n<li>Schemat z VIP (Virtual IP) najbardziej mi si\u0119 podoba, o nim porozmawiamy poni\u017cej. Jest najprostszy i najbardziej oczywisty, chocia\u017c ma wyra\u017ane ograniczenie: master, kt\u00f3rego b\u0119dziemy rezerwowa\u0107, musi znajdowa\u0107 si\u0119 w segmencie L2 z now\u0105 maszyn\u0105, wi\u0119c o drugim DC mo\u017cna zapomnie\u0107. I, szczerze m\u00f3wi\u0105c, je\u015bli kierowa\u0107 si\u0119 zasad\u0105, \u017ce du\u017ce L2 to z\u0142o, poniewa\u017c L2 tylko na rega\u0142, a mi\u0119dzy rega\u0142ami L3, a taki schemat ma jeszcze wi\u0119cej ogranicze\u0144.<\/li>\n<li>Mo\u017cna wpisa\u0107 nazw\u0119 DNS w kodzie i rozwi\u0105za\u0107 j\u0105 przez \/etc\/hosts. Tak naprawd\u0119 rozwi\u0105zanie nie nast\u0105pi. Zaleta schematu: brak ogranicze\u0144 typowych dla pierwszej metody, czyli mo\u017cna zorganizowa\u0107 nawet cross-DC. Ale wtedy pojawia si\u0119 oczywiste pytanie, jak szybko za pomoc\u0105 Puppet-Ansible wprowadzimy zmian\u0119 w \/etc\/hosts.<\/li>\n<li>Mo\u017cna nieco zmodyfikowa\u0107 drugi spos\u00f3b: na wszystkich serwerach webowych zainstalowa\u0107 pami\u0119\u0107 podr\u0119czn\u0105 DNS, przez kt\u00f3r\u0105 kod b\u0119dzie \u0142\u0105czy\u0142 si\u0119 z master baz\u0105. Mo\u017cna ustawi\u0107 TTL 60 dla tego wpisu w DNS. Wydaje si\u0119, \u017ce przy poprawnej implementacji spos\u00f3b jest dobry.<\/li>\n<li>Schemat z odkrywaniem us\u0142ug, zak\u0142adaj\u0105cy zastosowanie Consul i etcd.<\/li>\n<li>Ciekawa opcja z <noindex><a rel=\"nofollow\" href=\"https:\/\/proxysql.com\/\">ProxySQL<\/a><\/noindex>. Trzeba ca\u0142y ruch do MySQL skierowa\u0107 przez ProxySQL, kt\u00f3ry sam potrafi okre\u015bli\u0107, kto obecnie jest masterem. Swoj\u0105 drog\u0105, o jednym z zastosowa\u0144 tego produktu mo\u017cna przeczyta\u0107 w moim <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/citymobil\/blog\/501730\/\">artyku\u0142<\/a><\/noindex>.<\/li>\n<\/ul>\n<p>\nAutor Orkiestratora, pracuj\u0105c w Githubie, najpierw wdro\u017cy\u0142 pierwszy schemat z VIP, a potem przerobi\u0142 go na schemat z konsol\u0105.<\/p>\n<p>Typowy schemat infrastruktury:<\/p>\n<p><img decoding=\"async\" alt=\"Orkiestrator dla MySQL: dlaczego nie mo\u017cna budowa\u0107 awaryjnego projektu bez niego\" src=\"\/wp-content\/uploads\/2020\/05\/b08220e7aa6336229cbbfedd78afdcc3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOd razu opisz\u0119 oczywiste sytuacje, kt\u00f3re nale\u017cy uwzgl\u0119dni\u0107:<\/p>\n<ul>\n<li>VIP-adres nie powinien by\u0107 wpisany w konfiguracji na \u017cadnym z serwer\u00f3w. Wyobra\u017amy sobie sytuacj\u0119: master si\u0119 zrestartowa\u0142, a podczas jego uruchamiania Orchestrator przeszed\u0142 w tryb failover i uczyni\u0142 jednym z master\u00f3w jeden z slave'\u00f3w; nast\u0119pnie uruchomi\u0142 si\u0119 stary master, a teraz VIP jest na dw\u00f3ch maszynach. To jest \u017ale.<\/li>\n<li>Dla Orchestratora b\u0119dzie trzeba napisa\u0107 skrypt do komunikacji ze starym masterem i nowym masterem. Na starym nale\u017cy wykona\u0107 ifdown, a na nowym masterze \u2014 ifup vip. Dobrze by\u0142oby r\u00f3wnie\u017c w tym skrypcie uwzgl\u0119dni\u0107, \u017ce w przypadku failover port na switchu starego mastera po prostu zostaje wy\u0142\u0105czony, aby unikn\u0105\u0107 wszelkiego split-brain.<\/li>\n<li>Po tym, jak Orchestrator wywo\u0142a\u0142 tw\u00f3j skrypt, aby najpierw wy\u0142\u0105czy\u0107 VIP i\/lub wy\u0142\u0105czy\u0107 port na switchu, a nast\u0119pnie na nowym masterze wywo\u0142a\u0142 skrypt w\u0142\u0105czaj\u0105cy VIP, nie zapomnij poleceniem arping powiadomi\u0107 wszystkich, \u017ce nowy VIP jest teraz tutaj.<\/li>\n<li>Na wszystkich slave'ach powinno by\u0107 read_only=1, a gdy tylko wypromujesz slave'a do roli mastera, ma on mie\u0107 read_only=0.<\/li>\n<li>Nie zapominaj, \u017ce masterem mo\u017ce sta\u0107 si\u0119 ka\u017cdy slave, kt\u00f3rego wybrali\u015bmy do tego (Orchestrator ma ca\u0142y mechanizm preferencji, kt\u00f3ry slave powinien by\u0107 rozwa\u017cany jako kandydat na nowego mastera w pierwszej kolejno\u015bci, kt\u00f3ry w drugiej, a kt\u00f3ry slave w og\u00f3le nie powinien by\u0107 wybrany na mastera). Je\u015bli slave stanie si\u0119 masterem, to pozostanie na nim obci\u0105\u017cenie slave'a, a dodatkowo przyb\u0119dzie obci\u0105\u017cenie mastera \u2014 to trzeba uwzgl\u0119dni\u0107.<\/li>\n<\/ul>\n<p>\nDlaczego wi\u0119c koniecznie potrzebujesz Orchestratora, je\u015bli go nie masz?<\/p>\n<ul>\n<li>Orchestrator ma bardzo wygodny interfejs graficzny, kt\u00f3ry pokazuje ca\u0142\u0105 topologi\u0119 (zobacz zrzut ekranu poni\u017cej).<\/li>\n<li>Orchestrator mo\u017ce \u015bledzi\u0107, kt\u00f3re slave'y si\u0119 sp\u00f3\u017aniaj\u0105, a gdzie replikacja w og\u00f3le si\u0119 za\u0142ama\u0142a (mamy do Orchestratora pod\u0142\u0105czone skrypty do wysy\u0142ania SMS-\u00f3w).<\/li>\n<li>Orchestrator informuje, na kt\u00f3rych slave'ach wyst\u0119puje b\u0142\u0105d GTID errant.<\/li>\n<\/ul>\n<p>\nInterfejs Orchestratora:<\/p>\n<p><img decoding=\"async\" alt=\"Orkiestrator dla MySQL: dlaczego nie mo\u017cna budowa\u0107 awaryjnego projektu bez niego\" src=\"\/wp-content\/uploads\/2020\/05\/5129a85ad1c0a5db8e3ecf501cff0d0d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nCzym jest GTID errant?<\/p>\n<p>S\u0105 dwa podstawowe wymagania do dzia\u0142ania Orchestratora:<\/p>\n<ul>\n<li>Nale\u017cy, aby na wszystkich maszynach w klastrze MySQL by\u0142 w\u0142\u0105czony pseudo GTID, mamy w\u0142\u0105czony GTID.<\/li>\n<li>Nale\u017cy, aby wsz\u0119dzie by\u0142 jeden typ binlog\u00f3w, mo\u017ce to by\u0107 statement. Mieli\u015bmy tak\u0105 konfiguracj\u0119, w kt\u00f3rej na masterze i na wi\u0119kszo\u015bci slave'\u00f3w by\u0142 Row, a na dw\u00f3ch historycznie pozosta\u0142 tryb Mixed. W rezultacie te slave'y Orchestrator po prostu nie chcia\u0142 pod\u0142\u0105czy\u0107 do nowego mastera.<\/li>\n<\/ul>\n<p>\nPami\u0119taj, \u017ce najwa\u017cniejsza w produkcyjnym slave to jego zgodno\u015b\u0107 z masterem! Je\u015bli zar\u00f3wno na masterze, jak i na slavu w\u0142\u0105czony jest Global Transaction ID (GTID), mo\u017cesz u\u017cy\u0107 funkcji gtid_subset, aby sprawdzi\u0107, czy na tych maszynach wykonano te same zapytania dotycz\u0105ce zmian w danych. Wi\u0119cej informacji na ten temat mo\u017cna przeczyta\u0107. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.percona.com\/blog\/2014\/05\/19\/errant-transactions-major-hurdle-for-gtid-based-failover-in-mysql-5-6\/\">tutaj<\/a><\/noindex>.<\/p>\n<p>W ten spos\u00f3b Orchestrator informuje ci\u0119 o b\u0142\u0119dzie GTID errant, \u017ce na slave znajduj\u0105 si\u0119 transakcje, kt\u00f3rych nie ma na masterze. Dlaczego tak si\u0119 dzieje?<\/p>\n<ul>\n<li>Na slave nie jest w\u0142\u0105czony read_only=1, kto\u015b si\u0119 po\u0142\u0105czy\u0142 i wykona\u0142 zapytanie dotycz\u0105ce zmiany danych.<\/li>\n<li>Na slave nie jest w\u0142\u0105czony super_read_only=1, wi\u0119c administrator, myl\u0105c serwer, wszed\u0142 i wykona\u0142 tam zapytanie.<\/li>\n<li>Je\u015bli uwzgl\u0119dni\u0142e\u015b oba poprzednie punkty, istnieje jeszcze jeden trik: w MySQL zapytanie o flush dziennik\u00f3w binarnych r\u00f3wnie\u017c trafia do dziennika binarnego, dlatego przy pierwszym flush na masterze i na wszystkich slave'ach pojawi si\u0119 GTID errant. Jak tego unikn\u0105\u0107? W wersji perona-5.7.25-28 pojawi\u0142a si\u0119 opcja binlog_skip_flush_commands=1, zabraniaj\u0105ca zapisywania flush w dziennikach. Na stronie mysql.com jest za\u0142o\u017cony. <noindex><a rel=\"nofollow\" href=\"https:\/\/bugs.mysql.com\/bug.php?id=88720\">b\u0142\u0105d<\/a><\/noindex>.<\/li>\n<\/ul>\n<p>\nPodsumowuj\u0105c to, co powiedzia\u0142em wcze\u015bniej. Je\u015bli na razie nie chcesz u\u017cywa\u0107 Orchestratora w trybie failover, ustaw go w trybie monitorowania. Wtedy zawsze b\u0119dziesz mie\u0107 przed oczami map\u0119 interakcji maszyn MySQL oraz wyra\u017ane informacje o tym, jaki typ replikacji jest na ka\u017cdej maszynie, czy slave'y s\u0105 op\u00f3\u017anione i, co najwa\u017cniejsze, w jakim stopniu s\u0105 zgodne z masterem!<\/p>\n<p>Oczywiste pytanie: \u201eJak powinien dzia\u0142a\u0107 Orchestrator?\u201d. Powinien wybra\u0107 nowego mastera spo\u015br\u00f3d obecnych slave'\u00f3w, a nast\u0119pnie prze\u0142\u0105czy\u0107 do niego wszystkie slave'y (dla tego potrzebny jest GTID; je\u015bli u\u017cywa si\u0119 starego mechanizmu z binlog_name i binlog_pos, to prze\u0142\u0105czenie slave'a z obecnego mastera na nowy jest po prostu niemo\u017cliwe!). Zanim pojawi\u0142 si\u0119 Orchestrator, musia\u0142em kiedy\u015b robi\u0107 to wszystko r\u0119cznie. Stary master zawiesi\u0142 si\u0119 z powodu wadliwego kontrolera Adaptec, mia\u0142 oko\u0142o 10 slave'\u00f3w. Musia\u0142em przenie\u015b\u0107 VIP z mastera na jeden z slave'\u00f3w i prze\u0142\u0105czy\u0107 wszystkie pozosta\u0142e slave'y na niego. Ile konsol musia\u0142em otworzy\u0107, ile jednoczesnych polece\u0144 wprowadzi\u0107\u2026 Musia\u0142em czeka\u0107 do 3 nad ranem, zdj\u0105\u0107 obci\u0105\u017cenie ze wszystkich slave'\u00f3w, z wyj\u0105tkiem dw\u00f3ch, uczyni\u0107 pierwsz\u0105 maszyn\u0119 mistrzem z dw\u00f3ch, natychmiast po\u0142\u0105czy\u0107 j\u0105 z drug\u0105 maszyn\u0105, a nast\u0119pnie po\u0142\u0105czy\u0107 wszystkie pozosta\u0142e slave'y z nowym masterem i przywr\u00f3ci\u0107 obci\u0105\u017cenie. W skr\u00f3cie, koszmar\u2026<\/p>\n<p>Jak dzia\u0142a Orchestrator, kiedy przechodzi w tryb failover? Naj\u0142atwiej to pokaza\u0107 na przyk\u0142adzie sytuacji, gdy chcemy, aby mocniejsza i bardziej nowoczesna maszyna sta\u0142a si\u0119 masterem w por\u00f3wnaniu do aktualnej. <\/p>\n<p><img decoding=\"async\" alt=\"Orkiestrator dla MySQL: dlaczego nie mo\u017cna budowa\u0107 awaryjnego projektu bez niego\" src=\"\/wp-content\/uploads\/2020\/05\/d2afe9c74b33765e55641b34def3145e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNa rysunku przedstawiona jest \u015brodkowa cz\u0119\u015b\u0107 procesu. Co zosta\u0142o ju\u017c zrobione do tego momentu? Powiedzieli\u015bmy, \u017ce chcemy, aby jaki\u015b slave by\u0142 nowym masterem, Orchestrator zacz\u0105\u0142 po prostu prze\u0142\u0105cza\u0107 do niego wszystkie inne slaves, przy czym nowy master pe\u0142ni rol\u0119 maszyny tranzytowej. W tej schemacie b\u0142\u0119dy nie wyst\u0119puj\u0105, wszystkie slaves dzia\u0142aj\u0105, Orchestrator zdejmuje VIP z starego mastera, przenosi go na nowy, ustawia read_only=0 i zapomina o starym masterze. Wszystko! Czas przestoju naszego serwisu to czas przeniesienia VIP, to 2-3 sekundy.<\/p>\n<p>Na dzisiaj to wszystko, dzi\u0119kuj\u0119 wszystkim. Wkr\u00f3tce pojawi si\u0119 drugi artyku\u0142 o Orchestratorze. W znanym radzieckim filmie \u201eGara\u017c\u201d jeden z bohater\u00f3w powiedzia\u0142 \u201eNie poszed\u0142bym z nim na zwiad!\u201d C\u00f3\u017c, Orchestrator, z tob\u0105 poszed\u0142bym na zwiad!<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/citymobil\/blog\/501994\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041b\u044e\u0431\u043e\u0439 \u043a\u0440\u0443\u043f\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0441\u044f \u0441 \u043f\u0430\u0440\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432. C\u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u044b\u043b \u043e\u0434\u0438\u043d DB-\u0441\u0435\u0440\u0432\u0435\u0440, \u043f\u043e\u0442\u043e\u043c \u043a \u043d\u0435\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u0441\u043b\u0435\u0439\u0432\u044b, \u0447\u0442\u043e\u0431\u044b \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u0435. \u0418 \u0442\u0443\u0442 \u2014 \u0441\u0442\u043e\u043f! \u041c\u0430\u0441\u0442\u0435\u0440 \u043e\u0434\u0438\u043d, \u0430 \u0441\u043b\u0435\u0439\u0432\u043e\u0432 \u043c\u043d\u043e\u0433\u043e; \u0435\u0441\u043b\u0438 \u0443\u0439\u0434\u0435\u0442 \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u043b\u0435\u0439\u0432\u043e\u0432, \u0442\u043e \u0432\u0441\u0451 \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e, \u0430 \u0435\u0441\u043b\u0438 \u0443\u0439\u0434\u0435\u0442 \u043c\u0430\u0441\u0442\u0435\u0440 \u2014 \u0431\u0443\u0434\u0435\u0442 \u043f\u043b\u043e\u0445\u043e: \u0434\u0430\u0443\u043d\u0442\u0430\u0439\u043c, \u0430\u0434\u043c\u0438\u043d\u044b \u0432 \u043c\u044b\u043b\u0435 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u044e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440. \u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c? \u0420\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0441\u0442\u0435\u0440. \u041c\u043e\u0439 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":82117,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-82116","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041b\u044e\u0431\u043e\u0439 \u043a\u0440\u0443\u043f\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0441\u044f \u0441 \u043f\u0430\u0440\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432. C\u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u044b\u043b \u043e\u0434\u0438\u043d DB-\u0441\u0435\u0440\u0432\u0435\u0440, \u043f\u043e\u0442\u043e\u043c \u043a \u043d\u0435\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u0441\u043b\u0435\u0439\u0432\u044b, \u0447\u0442\u043e\u0431\u044b \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u0435. \u0418 \u0442\u0443\u0442 \u2014 \u0441\u0442\u043e\u043f!\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/orchestrator-dlya-mysql-pochemu-bez-nego-nelzya-stroit-otkazoustojchivyj-proekt\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Orchestrator \u0434\u043b\u044f MySQL: \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u0435\u0437 \u043d\u0435\u0433\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041b\u044e\u0431\u043e\u0439 \u043a\u0440\u0443\u043f\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0441\u044f \u0441 \u043f\u0430\u0440\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432. C\u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u044b\u043b \u043e\u0434\u0438\u043d DB-\u0441\u0435\u0440\u0432\u0435\u0440, \u043f\u043e\u0442\u043e\u043c \u043a \u043d\u0435\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u0441\u043b\u0435\u0439\u0432\u044b, \u0447\u0442\u043e\u0431\u044b \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u0435. \u0418 \u0442\u0443\u0442 \u2014 \u0441\u0442\u043e\u043f!\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/orchestrator-dlya-mysql-pochemu-bez-nego-nelzya-stroit-otkazoustojchivyj-proekt\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-05-19T11:42:54+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-19T11:42:54+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Orchestrator dla MySQL: dlaczego nie mo\u017cna stworzy\u0107 projektu odpornego na awarie bez niego | ProHoster","description":"Ka\u017cdy du\u017cy projekt zaczyna\u0142 si\u0119 od kilku serwer\u00f3w. Na pocz\u0105tku by\u0142 jeden serwer DB, potem do\u0142\u0105czy\u0142y do niego slaves, aby skalowa\u0107 odczyty. I tu - stop!","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/orchestrator-dlya-mysql-pochemu-bez-nego-nelzya-stroit-otkazoustojchivyj-proekt","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Orchestrator \u0434\u043b\u044f MySQL: \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u0435\u0437 \u043d\u0435\u0433\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 | ProHoster","og:description":"\u041b\u044e\u0431\u043e\u0439 \u043a\u0440\u0443\u043f\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0441\u044f \u0441 \u043f\u0430\u0440\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432. C\u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u044b\u043b \u043e\u0434\u0438\u043d DB-\u0441\u0435\u0440\u0432\u0435\u0440, \u043f\u043e\u0442\u043e\u043c \u043a \u043d\u0435\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u0441\u043b\u0435\u0439\u0432\u044b, \u0447\u0442\u043e\u0431\u044b \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u0435. \u0418 \u0442\u0443\u0442 \u2014 \u0441\u0442\u043e\u043f!","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/orchestrator-dlya-mysql-pochemu-bez-nego-nelzya-stroit-otkazoustojchivyj-proekt","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-05-19T11:42:54+00:00","article:modified_time":"2020-05-19T11:42:54+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"82116","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 15:44:22","updated":"2022-10-07 20:28:08","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/82116","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=82116"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/82116\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/82117"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=82116"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=82116"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=82116"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}