{"id":21475,"date":"2026-09-17T08:33:16","date_gmt":"2026-09-17T06:33:16","guid":{"rendered":"https:\/\/webhosting.de\/redis-replication-offset-analyse-datenkonsistenz-cluster\/"},"modified":"2026-09-17T08:33:16","modified_gmt":"2026-09-17T06:33:16","slug":"redis-replikacja-przesuniecie-analiza-spojnosc-danych-klaster","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pl\/redis-replication-offset-analyse-datenkonsistenz-cluster\/","title":{"rendered":"Zrozumienie i analiza przesuni\u0119cia replikacji w Redis w celu zapewnienia wysokiej sp\u00f3jno\u015bci danych"},"content":{"rendered":"<p>Poka\u017c\u0119, jak <strong>Przesuni\u0119cie w Redis<\/strong> celowo czytam, analizuj\u0119 i dbam o wysok\u0105 jako\u015b\u0107 danych<strong>Sp\u00f3jno\u015b\u0107<\/strong> korzystam. W ten spos\u00f3b wcze\u015bnie wykrywam luki w replikacji, oceniam ryzyko zwi\u0105zane z prze\u0142\u0105czeniem awaryjnym oraz niezawodnie synchronizuj\u0119 klastry produkcyjne.<\/p>\n\n<h2>Punkty centralne<\/h2>\n\n<p>Poni\u017csze kluczowe stwierdzenia stanowi\u0105 konkretne wprowadzenie do tematu, terminologii i praktycznego zastosowania.<\/p>\n<ul>\n  <li><strong>Przesuni\u0119cie<\/strong> mierzy post\u0119p strumienia replikacji bajt po bajcie.<\/li>\n  <li><strong>Lag<\/strong> jest to r\u00f3\u017cnica mi\u0119dzy warto\u015bciami master_repl_offset i slave_repl_offset.<\/li>\n  <li><strong>ID+przesuni\u0119cie<\/strong> oznacza konkretn\u0105 wersj\u0119 danych przeznaczon\u0105 do cz\u0119\u015bciowych synchronizacji.<\/li>\n  <li><strong>zaleg\u0142o\u015bci<\/strong> chroni przed pe\u0142n\u0105 synchronizacj\u0105 w przypadku kr\u00f3tkich przerw w po\u0142\u0105czeniu.<\/li>\n  <li><strong>Monitoring<\/strong> za pomoc\u0105 INFO\/wska\u017anik\u00f3w klastr\u00f3w steruje systemem alarmowania i prze\u0142\u0105czaniem awaryjnym.<\/li>\n<\/ul>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/datenreplikation-4625.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Co oznacza offset replikacji w Redis?<\/h2>\n\n<p>Przesuni\u0119cie replikacji to ci\u0105g\u0142y licznik 64-bitowy, kt\u00f3ry dla ka\u017cdego przes\u0142anego <strong>Pr\u0105d bajtowy<\/strong> mi\u0119dzy serwerem g\u0142\u00f3wnym a replik\u0105. Na tej podstawie mog\u0119 sprawdzi\u0107, na jakim etapie znajduje si\u0119 replikacja i czy replika ma jeszcze co\u015b do zrobienia. Ten <strong>master_repl_offset<\/strong> Na serwerze g\u0142\u00f3wnym warto\u015b\u0107 ta ro\u015bnie wraz z ka\u017cdym nowo wygenerowanym bajtem, podczas gdy replika zwi\u0119ksza sw\u00f3j w\u0142asny licznik zaraz po zastosowaniu polece\u0144. R\u00f3\u017cnice te powoduj\u0105 op\u00f3\u017anienie wyra\u017cone w bajtach i wskazuj\u0105, czy replika pozostaje w tyle. Ta prosta, ale skuteczna semantyka sprawia, \u017ce przesuni\u0119cie staje si\u0119 kluczow\u0105 warto\u015bci\u0105 dla synchronizacji, analizy awarii i podejmowania trafnych decyzji dotycz\u0105cych prze\u0142\u0105czania awaryjnego.<\/p>\n\n<h2>Odczytywanie offset\u00f3w: jak prawid\u0142owo korzysta\u0107 z funkcji INFO replication<\/h2>\n\n<p>Diagnoz\u0119 prawie zawsze rozpoczynam od <strong>INFO<\/strong> replikacja, poniewa\u017c polecenie to w zwi\u0119z\u0142y spos\u00f3b podaje odpowiednie pola. Na serwerze g\u0142\u00f3wnym sprawdzam warto\u015b\u0107 master_repl_offset oraz status po\u0142\u0105czonych replik wraz z ich przesuni\u0119ciami. Na serwerze replikacyjnym sprawdzam dodatkowo master_link_status oraz stany synchronizacji, aby wykry\u0107 trwaj\u0105ce pe\u0142ne synchronizacje lub synchronizacje cz\u0119\u015bciowe. W celu przeprowadzenia bardziej szczeg\u00f3\u0142owej analizy korzystam z ustrukturyzowanych wynik\u00f3w i koreluj\u0119 przesuni\u0119cia z warto\u015bciami procesora, operacji wej\u015bcia\/wyj\u015bcia oraz sieci. Gruntowne wprowadzenie do tego polecenia zapewnia mi niniejszy przewodnik: <a href=\"https:\/\/webhosting.de\/pl\/redis-polecenie-info-monitorowanie-statystyki-wydajnosc-obserwowalnosc-analiza\/\">Redis INFO do monitorowania<\/a>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/redis_repl_offset_5432.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Identyfikator replikacji + przesuni\u0119cie: unikalna wersja danych<\/h2>\n\n<p>Aby uzyska\u0107 jednoznaczn\u0105 wersj\u0119, stosuj\u0119 kombinacj\u0119 <strong>Replikacja<\/strong> ID i offset. ID okre\u015bla histori\u0119, a offset \u2013 pozycj\u0119 w tej historii. Je\u015bli ID i offset s\u0105 zgodne dla dw\u00f3ch instancji, zak\u0142adam, \u017ce obie maj\u0105 ten sam stan danych. Ta kombinacja umo\u017cliwia cz\u0119\u015bciow\u0105 resynchronizacj\u0119, poniewa\u017c replika mo\u017ce dok\u0142adnie poinformowa\u0107 serwer g\u0142\u00f3wny, w kt\u00f3rym miejscu ostatnio si\u0119 znajdowa\u0142a. Na tej podstawie rozpoznaj\u0119 r\u00f3wnie\u017c, czy prze\u0142\u0105czenie awaryjne przebiegnie bez rozbie\u017cno\u015bci danych, czy te\u017c konieczna b\u0119dzie pe\u0142na synchronizacja.<\/p>\n\n<h2>Okre\u015blenie wielko\u015bci zaleg\u0142o\u015bci w replikacji i luki<\/h2>\n\n<p>Primary utrzymuje jeden <strong>zaleg\u0142o\u015bci<\/strong> jako bufor pier\u015bcieniowy, kt\u00f3ry przechowuje najnowsze operacje zapisu i umo\u017cliwia cz\u0119\u015bciow\u0105 synchronizacj\u0119. Je\u015bli bufor jest zbyt ma\u0142y, podczas szczyt\u00f3w obci\u0105\u017cenia bajty szybciej z niego wypadaj\u0105, a replika, kt\u00f3ra na kr\u00f3tko straci\u0142a po\u0142\u0105czenie, nie zd\u0105\u017cy wykona\u0107 cz\u0119\u015bciowej resynchronizacji. Wybieram rozmiar w zale\u017cno\u015bci od profilu zapisu i cel\u00f3w RPO, aby kr\u00f3tkie przerwy w po\u0142\u0105czeniu nie powodowa\u0142y kosztownych pe\u0142nych synchronizacji. Jako og\u00f3ln\u0105 wytyczn\u0105 wybieram rozmiar, kt\u00f3ry buforuje co najmniej przewidywan\u0105 ilo\u015b\u0107 danych z okresu od kilku sekund do kilku minut. W ten spos\u00f3b zmniejszam luk\u0119 mi\u0119dzy serwerem g\u0142\u00f3wnym a replik\u0105 i zapewniam sprawne ponowne po\u0142\u0105czenie.<\/p>\n\n<h2>Dok\u0142adne okre\u015blenie wielko\u015bci zaleg\u0142o\u015bci<\/h2>\n\n<p>W praktyce wielko\u015b\u0107 zaleg\u0142o\u015bci nie jest ustalana wy\u0142\u0105cznie na podstawie intuicji, ale na podstawie faktycznie obserwowanego strumienia bajt\u00f3w:<\/p>\n<ul>\n  <li>Okre\u015blam <strong>Przepustowo\u015b\u0107 w bajtach\/s<\/strong>, mierz\u0105c wzrost warto\u015bci master_repl_offset w okre\u015blonych odst\u0119pach czasu (np. 10\u201360 s) i odnotowuj\u0105c warto\u015bci szczytowe.<\/li>\n  <li>Definiuj\u0119 <strong>dopuszczalny czas trwania przerwy<\/strong> (np. okna serwisowe, awarie sieciowe) w sekundach.<\/li>\n  <li>Mno\u017c\u0119 warto\u015b\u0107 szczytow\u0105 w bajtach na sekund\u0119 przez czas trwania przerwy i dodaj\u0119 <strong>Wsp\u00f3\u0142czynnik bezpiecze\u0144stwa<\/strong> (1,5\u20133\u00d7) doda\u0107.<\/li>\n<\/ul>\n<p>Przyk\u0142ad: 80 MB\/s szczytowe, 20 s przewidywanej przerwy, wsp\u00f3\u0142czynnik 2 \u2192 80\u00d720\u00d72 = 3 200 MB zaleg\u0142o\u015bci. W ten spos\u00f3b zapewniam, \u017ce nawet przy niekorzystnym zgraniu w czasie uda si\u0119 przeprowadzi\u0107 cz\u0119\u015bciow\u0105 synchronizacj\u0119. Nast\u0119pnie sprawdzam w systemie monitorowania, czy zaleg\u0142o\u015b\u0107 rzadko osi\u0105ga granic\u0119 swojej pojemno\u015bci; je\u015bli tak si\u0119 dzieje, stopniowo j\u0105 zwi\u0119kszam.<\/p>\n\n<h2>Optymalizacja cz\u0119stotliwo\u015bci, wielko\u015bci partii i sieci<\/h2>\n\n<p>Opr\u00f3cz zaleg\u0142o\u015bci bior\u0119 pod uwag\u0119 r\u00f3wnie\u017c <strong>hz<\/strong>-Ustawienie to, poniewa\u017c wp\u0142ywa na wewn\u0119trzne cykle konserwacyjne, a tym samym na \u015brednie op\u00f3\u017anienie. Dodatkowo sprawdzam rozmiary partii zapisu, wykorzystanie potoku oraz parametry TCP, aby zapewni\u0107 p\u0142ynniejszy przep\u0142yw replikacji. Niskie op\u00f3\u017anienie mi\u0119dzy serwerem g\u0142\u00f3wnym a replik\u0105 bezpo\u015brednio przek\u0142ada si\u0119 na mniejsze r\u00f3\u017cnice w przesuni\u0119ciu. W\u0105skie gard\u0142a po stronie repliki, takie jak wolne no\u015bniki danych lub niewystarczaj\u0105ca moc procesora, r\u00f3wnie\u017c zwi\u0119kszaj\u0105 op\u00f3\u017anienie. Dlatego zmieniam zawsze tylko jeden czynnik, mierz\u0119 wp\u0142yw na r\u00f3\u017cnic\u0119 offsetu i jasno dokumentuj\u0119 ten efekt.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/redis-replication-offset-data-4938.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Synchronizacja bez dysku i wp\u0142yw migawek na przesuni\u0119cie<\/h2>\n\n<p>W przypadku pe\u0142nej synchronizacji najch\u0119tniej korzystam z <strong>synchronizacja bez dysku<\/strong>, poniewa\u017c serwer Primary dostarcza w\u00f3wczas strumie\u0144 RDB bezpo\u015brednio przez sie\u0107 i nie generuje dodatkowego obci\u0105\u017cenia zapisu na lokalnych no\u015bnikach danych. Zmniejsza to szczytowe obci\u0105\u017cenia we\/wy i stabilizuje przesuni\u0119cia podczas faz pod\u0142\u0105czania i od\u0142\u0105czania. Umiarkowane op\u00f3\u017anienie (<em>repl-diskless-sync-delay<\/em>) daje innym replikom czas na do\u0142\u0105czenie si\u0119, dzi\u0119ki czemu strumie\u0144 RDB jest wykorzystywany wielokrotnie. Obserwuj\u0119 przy tym obci\u0105\u017cenie procesora i sieci, poniewa\u017c nawet transfer bez dost\u0119pu do dysku mo\u017ce przy bardzo du\u017cych ilo\u015bciach danych powodowa\u0107 kr\u00f3tkotrwa\u0142e op\u00f3\u017anienia.<\/p>\n<p>Snapshoty (RDB) powoduj\u0105 podczas tworzenia rozga\u0142\u0119zienia kopi\u0119 typu \u201ecopy-on-write\u201d. W systemach o intensywnym zapisie powoduje to tymczasowy wzrost zapotrzebowania na pami\u0119\u0107 i mo\u017ce wp\u0142yn\u0105\u0107 na <strong>Wsp\u00f3\u0142czynnik stosowania<\/strong> spowolni\u0107 dzia\u0142anie repliki. Dlatego te\u017c planuj\u0119 tworzenie migawek na spokojniejsze pory dnia, sprawdzam rezerwy pami\u0119ci i dbam o to, by \u015bcie\u017cki replikacji i AOF nie kolidowa\u0142y ze sob\u0105.<\/p>\n\n<h2>Cz\u0119\u015bciowa resynchronizacja w praktyce<\/h2>\n\n<p>Je\u015bli replika na chwil\u0119 przestaje dzia\u0142a\u0107, zawsze najpierw pr\u00f3buj\u0119 <strong>Por\u00f3wnanie cz\u0119\u015bciowe<\/strong> osi\u0105gn\u0105\u0107. Podczas ponownego \u0142\u0105czenia replika zg\u0142asza identyfikator replikacji (Replication ID) oraz ostatni offset, po czym serwer g\u0142\u00f3wny (Primary) dostarcza brakuj\u0105ce bajty z zaleg\u0142o\u015bci. Je\u015bli zaleg\u0142o\u015bci s\u0105 niewystarczaj\u0105ce lub identyfikator uleg\u0142 zmianie, uruchamia si\u0119 pe\u0142na synchronizacja z transferem RDB i faz\u0105 nadrabiania zaleg\u0142o\u015bci. W tym momencie obserwuj\u0119 przesuni\u0119cia, aby sprawdzi\u0107, jak szybko replika nadrabia zaleg\u0142o\u015bci i od kiedy oba liczniki zn\u00f3w znajduj\u0105 si\u0119 blisko siebie. Je\u015bli cz\u0119\u015bciowa synchronizacja zako\u0144czy si\u0119 powodzeniem, op\u00f3\u017anienia i szczyty operacji wej\u015bcia\/wyj\u015bcia pozostaj\u0105 znacznie mniejsze.<\/p>\n\n<h2>Identyfikatory replikacji, PSYNC2 i zachowanie przy resetowaniu<\/h2>\n\n<p>Aby zapewni\u0107 poprawne interpretacje, polegam na semantyce PSYNC2. Sygna\u0142 Primary zawiera aktualn\u0105 <strong>Identyfikator replikacji<\/strong> oraz dodatkowo identyfikator historii wraz z odpowiadaj\u0105cym mu przesuni\u0119ciem. W przypadku <strong>Ponowne uruchomienia lub zmiany na stanowiskach kierowniczych<\/strong> zmienia si\u0119 identyfikator pierwotny; stary identyfikator pozostaje zachowany w historii wraz z ko\u0144cowym przesuni\u0119ciem. Dzi\u0119ki temu replika mo\u017ce nadal nadrabia\u0107 zaleg\u0142o\u015bci poprzez synchronizacj\u0119 cz\u0119\u015bciow\u0105 pomimo zmiany identyfikatora, o ile wymagany zakres znajduje si\u0119 w zaleg\u0142o\u015bciach. Analizuj\u0119 w <em>INFO replikacja<\/em> Dlatego analizuj\u0119 oba identyfikatory wraz z przesuni\u0119ciami i w ten spos\u00f3b rozpoznaj\u0119, czy zmiana identyfikatora w\u0142a\u015bnie mia\u0142a miejsce, czy te\u017c ma nast\u0105pi\u0107.<\/p>\n<p>Wa\u017cne jest to, \u017ce przesuni\u0119cie wynosi <strong>monotonicznie wed\u0142ug historii<\/strong>, ale zmiana identyfikatora definiuje now\u0105 lini\u0119 czasow\u0105. Dokumentuj\u0119 t\u0119 zmian\u0119 podczas pracy, aby analizy trend\u00f3w prawid\u0142owo uwzgl\u0119dni\u0142y ten skok. Przesuni\u0119cie 64-bitowe praktycznie nigdy nie przekracza granicy; znacznie wi\u0119ksze znaczenie maj\u0105 ponowne uruchomienia, prze\u0142\u0105czenia awaryjne lub po\u0142\u0105czenia z zaleg\u0142o\u015bciami, kt\u00f3re wp\u0142ywaj\u0105 na histori\u0119.<\/p>\n\n<h2>Potwierdzenia klienta i okres wa\u017cno\u015bci w kontek\u015bcie offsetu<\/h2>\n\n<p>Poka\u017c przesuni\u0119cia <strong>Post\u0119p<\/strong>, ale nie udzielam \u017cadnych gwarancji dotycz\u0105cych trwa\u0142o\u015bci. Je\u015bli potrzebuj\u0119 potwierdze\u0144 dotycz\u0105cych replik, korzystam dodatkowo z:<\/p>\n<ul>\n  <li><strong>WAIT<\/strong>: Serwer g\u0142\u00f3wny potwierdza, gdy N replik odbierze polecenie zapisu i zapisze je w swoich buforach wej\u015bciowych. Jest to szybsze ni\u017c zabezpieczenie typu \u201efull sync\u201d, ale nie gwarantuje trwa\u0142o\u015bci danych na no\u015bnikach.<\/li>\n  <li><strong>min-replik-do-zapisania<\/strong> oraz <strong>min-replicas-max-lag<\/strong>: Serwer g\u0142\u00f3wny akceptuje operacje zapisu tylko wtedy, gdy pod\u0142\u0105czonych jest wystarczaj\u0105co du\u017co replik znajduj\u0105cych si\u0119 wystarczaj\u0105co blisko, a ich op\u00f3\u017anienie nie przekracza okre\u015blonego progu. Zmniejsza to ryzyko wyst\u0105pienia zjawiska \u201esplit-brain\u201d.<\/li>\n<\/ul>\n<p>Wykorzystuj\u0119 te mechanizmy w po\u0142\u0105czeniu z offsetem: offset sprawdza <em>rzeczywista<\/em> Pr\u0119dko\u015b\u0107 nadrabiania zaleg\u0142o\u015bci i d\u0142ugoterminowe trendy w przypadku replik WAIT\/min <em>na polecenie<\/em> Zapewniaj\u0105 ochron\u0119. W przypadku rygorystycznych RPO \u0142\u0105cz\u0119 je i rejestruj\u0119 oba widoki w systemie monitorowania.<\/p>\n\n<h2>Powiadomienia i wska\u017aniki w stosie monitorowania<\/h2>\n\n<p>W celu monitorowania ustalam jasne <strong>Warto\u015bci progowe<\/strong> na podstawie r\u00f3\u017cnicy offsetu w bajtach. \u0141\u0105cz\u0119 ten wska\u017anik z szeregami czasowymi z Prometheusa\/Grafany i uruchamiam alarmy, gdy r\u00f3\u017cnica przekroczy zdefiniowany czas trwania. Ponadto rejestruj\u0119 trendy, aby wykrywa\u0107 szczyty obci\u0105\u017cenia i planowa\u0107 dzia\u0142ania zaradcze. Pulpity nawigacyjne wizualizuj\u0105 master_repl_offset, przesuni\u0119cia replik oraz obliczone op\u00f3\u017anienie, co znacznie przyspiesza analiz\u0119 danych w trakcie pracy. Praktyczne wskaz\u00f3wki dotycz\u0105ce konfiguracji z wykorzystaniem szereg\u00f3w czasowych znajduj\u0119 tutaj: <a href=\"https:\/\/webhosting.de\/pl\/monitorowanie-redis-prometheus-grafana-obserwowalnosc\/\">Monitorowanie Redis za pomoc\u0105 Prometheusa i Grafany<\/a>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/redis_replication_offset_4438.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Podr\u0119czniki post\u0119powania i \u015bcie\u017cki eskalacji<\/h2>\n\n<p>Przedstawiam ustandaryzowane kroki, kt\u00f3re pozwol\u0105 zespo\u0142om podejmowa\u0107 ukierunkowane dzia\u0142ania w przypadku wzrostu op\u00f3\u017anienia:<\/p>\n<ul>\n  <li><strong>Ostrze\u017cenie<\/strong>: Obci\u0105\u017cenie &gt; X MB przez &gt; Y s \u2192 Sprawdzi\u0107 przepustowo\u015b\u0107 i op\u00f3\u017anienie po\u0142\u0105czenia replikacyjnego, zidentyfikowa\u0107 konkurencyjne zadania (migawki, du\u017ce skrypty Lua).<\/li>\n  <li><strong>Major<\/strong>: Obci\u0105\u017cenie stale ro\u015bnie \u2192 nale\u017cy sprawdzi\u0107 korelacj\u0119 mi\u0119dzy zaleg\u0142o\u015bciami w przetwarzaniu, obci\u0105\u017ceniem procesora i wej\u015bcia\/wyj\u015bcia repliki oraz b\u0142\u0119dami sieciowymi (ponowne transmisje, utraty pakiet\u00f3w); w razie potrzeby ograniczy\u0107 obci\u0105\u017cenie zapisem.<\/li>\n  <li><strong>Krytyczny<\/strong>: Istnieje ryzyko przepe\u0142nienia kolejki zada\u0144 \u2192 nale\u017cy odci\u0105\u017cy\u0107 replik\u0119 (np. tymczasowo przekierowa\u0107 obci\u0105\u017cenie odczytowe), zaplanowa\u0107 okno pe\u0142nej synchronizacji lub uruchomi\u0107 dodatkow\u0105 replik\u0119.<\/li>\n<\/ul>\n<p>Dokumentuj\u0119 drzewa decyzyjne, aby by\u0142o jasne, kiedy prze\u0142\u0105czenie awaryjne wi\u0105\u017ce si\u0119 jeszcze z niewielkim ryzykiem, a kiedy powinienem poczeka\u0107, a\u017c r\u00f3\u017cnica offsetowa si\u0119 wyr\u00f3wna.<\/p>\n\n<h2>Klaster Redis: ocena offset\u00f3w dla poszczeg\u00f3lnych fragment\u00f3w<\/h2>\n\n<p>W klastrze sprawdzam przesuni\u0119cia <strong>na ka\u017cdy shard<\/strong>, poniewa\u017c ka\u017cdy fragment prowadzi w\u0142asny strumie\u0144 replikacji. Polecenie CLUSTER SHARDS dostarcza mi zakresy slot\u00f3w, role w\u0119z\u0142\u00f3w oraz odpowiednie przesuni\u0119cia dla instancji g\u0142\u00f3wnej i repliki. Du\u017ce r\u00f3\u017cnice w obr\u0119bie jednego fragmentu wskazuj\u0105 na ryzyko zwi\u0105zane z uporz\u0105dkowanym prze\u0142\u0105czeniem awaryjnym tego fragmentu. Dlatego systematycznie por\u00f3wnuj\u0119 przesuni\u0119cia wszystkich fragment\u00f3w i traktuj\u0119 w\u0119z\u0142y o minimalnym op\u00f3\u017anieniu jako priorytetowych kandydat\u00f3w do pe\u0142nienia roli wiod\u0105cej. W ten spos\u00f3b zapewniam sp\u00f3jno\u015b\u0107 ca\u0142o\u015bciowego obrazu i zapobiegam niespodziankom podczas prze\u0142\u0105czania.<\/p>\n\n<h2>Codzienne funkcjonowanie klastra: monitorowanie procesu reshardingu i migracji slot\u00f3w<\/h2>\n\n<p>Na stronie <strong>Przesuni\u0119cia gniazd<\/strong> obci\u0105\u017cenie zapisem cz\u0119sto ro\u015bnie nier\u00f3wnomiernie. Mierz\u0119 przesuni\u0119cia dla poszczeg\u00f3lnych fragment\u00f3w podczas faz MIGRATE, aby sprawdzi\u0107, czy poszczeg\u00f3lne repliki pozostaj\u0105 w tyle. Szczeg\u00f3lnie delikatn\u0105 kwesti\u0105 s\u0105 d\u0142u\u017csze okna migracji w po\u0142\u0105czeniu z niewielkimi zaleg\u0142o\u015bciami: W takich przypadkach planuj\u0119 albo wi\u0119ksze zaleg\u0142o\u015bci, albo rozk\u0142adam migracje, aby nie utraci\u0107 cz\u0119\u015bciowych synchronizacji. Przed ka\u017cdym prze\u0142\u0105czeniem awaryjnym fragmentu oceniam, czy w\u0119ze\u0142 docelowy przej\u0105\u0142 ostatnio obci\u0105\u017cenie slotu i czy jego przesuni\u0119cie repliki pozostaje stabilne.<\/p>\n\n<h2>Przyk\u0142ady zastosowa\u0144: celowa interpretacja offsetu<\/h2>\n\n<p>Aby oceni\u0107 op\u00f3\u017anienie replikacji, systematycznie por\u00f3wnuj\u0119 <strong>magister<\/strong>_repl_offset z ka\u017cdym offsetem repliki i na tej podstawie okre\u015blam wiek potencjalnie nieaktualnych danych. Przed planowanym prze\u0142\u0105czeniem oceniam ryzyko awarii, identyfikuj\u0105c najbli\u017csz\u0105 replik\u0119 i potwierdzaj\u0105c jej sp\u00f3jno\u015b\u0107 w ci\u0105gu kilku minut. Je\u015bli op\u00f3\u017anienie wielokrotnie wzrasta, koreluj\u0119 je z metrykami sieciowymi, obci\u0105\u017ceniem procesora i operacjami wej\u015bcia\/wyj\u015bcia, aby zidentyfikowa\u0107 w\u0105skie gard\u0142a i celowo je usun\u0105\u0107. W przypadku rygorystycznych cel\u00f3w dotycz\u0105cych trwa\u0142o\u015bci danych sprawdzam r\u00f3wnie\u017c, czy operacje zosta\u0142y potwierdzone w pliku AOF oraz jak zachowuj\u0105 si\u0119 w tym kontek\u015bcie przesuni\u0119cia. Te wzorce pomagaj\u0105 mi opiera\u0107 decyzje na obiektywnych danych liczbowych i ogranicza\u0107 przestoje do minimum.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/redis-analyse-arbeitsplatz-8245.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Replikacja kaskadowa i uk\u0142ady geograficzne<\/h2>\n\n<p>W konfiguracjach rozproszonych cz\u0119sto wybieram <strong>Naszyjniki Replica<\/strong> (Replica-of-Replica), aby odci\u0105\u017cy\u0107 ruch mi\u0119dzysieciowy. Zwracam przy tym uwag\u0119, \u017ce przesuni\u0119cie obowi\u0105zuje osobno dla ka\u017cdej kraw\u0119dzi i <em>WAIT \u2013 tylko bezpo\u015brednio po\u0142\u0105czone repliki<\/em> liczy si\u0119. W przypadku replikacji geograficznej ustalam realistyczne limity op\u00f3\u017anie\u0144 i mierz\u0119 przesuni\u0119cia oddzielnie dla ka\u017cdego regionu. Planowane prze\u0142\u0105czenie awaryjne na inny region jest uzasadnione dopiero wtedy, gdy najbli\u017cszy kandydat do przej\u0119cia obci\u0105\u017cenia wykazuje minimaln\u0105 luk\u0119 przez d\u0142u\u017cszy czas, a \u015bcie\u017cki sieciowe s\u0105 stabilne. W przypadku du\u017cych odleg\u0142o\u015bci ograniczam zapisy w trybie burst, umiarkowanie korzystam z potokowania i zwi\u0119kszam zaleg\u0142o\u015bci w w\u0119z\u0142ach o najwi\u0119kszym RTT.<\/p>\n\n<h2>Praktyczne wykorzystanie w \u015brodowiskach hostingowych<\/h2>\n\n<p>W \u015brodowisku zarz\u0105dzanym stawiam na jasne <strong>Pulpity nawigacyjne<\/strong>, kt\u00f3re \u0142\u0105cz\u0105 przesuni\u0119cia, op\u00f3\u017anienia i stany zdrowia. Zespo\u0142y, kt\u00f3re chc\u0105 przyspieszy\u0107 proces diagnostyki, powinny zwr\u00f3ci\u0107 uwag\u0119 na narz\u0119dzia zapewniaj\u0105ce dog\u0142\u0119bny wgl\u0105d w Redis i przejrzyst\u0105 wizualizacj\u0119. Dzi\u0119ki temu mog\u0119 wcze\u015bnie wykrywa\u0107 narastaj\u0105ce przesuni\u0119cia i podejmowa\u0107 dzia\u0142ania zaradcze, zanim zaleg\u0142o\u015bci si\u0119 skumuluj\u0105 lub pe\u0142ne synchronizacje spowoduj\u0105 szczyty obci\u0105\u017cenia. Ponadto przeprowadzam testy prze\u0142\u0105czania awaryjnego w \u015brodowiskach testowych i mierz\u0119, jak szybko przesuni\u0119cia zbli\u017caj\u0105 si\u0119 do siebie po prze\u0142\u0105czeniu. Praktyczne wprowadzenie do analizy graficznej zapewnia mi ten przewodnik: <a href=\"https:\/\/webhosting.de\/pl\/monitorowanie-redis-redis-insight-diagnostyka-pamieci-podrecznej-przewodnik\/\">Redis Insight do cel\u00f3w diagnostycznych<\/a>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/redis-replication-offset-7392.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Wzorce rozwi\u0105zywania problem\u00f3w w przypadku rosn\u0105cego op\u00f3\u017anienia<\/h2>\n\n<p>Gdy r\u00f3\u017cnica offsetowa ro\u015bnie, post\u0119puj\u0119 zgodnie z powtarzaj\u0105cymi si\u0119 schematami:<\/p>\n<ul>\n  <li><strong>Procesor Replica pracuje na pe\u0142nych obrotach<\/strong>: W\u0105skie gard\u0142a zwi\u0105zane z jednoprzewodowym przetwarzaniem lub kosztowne skrypty Lua spowalniaj\u0105 przetwarzanie; weryfikuj\u0119 to na podstawie szybko\u015bci przetwarzania i wyg\u0142adzam skoki.<\/li>\n  <li><strong>Ci\u015bnienie w zbiorniku lub ci\u015bnienie we\/wy<\/strong>: AOF-Rewrite, Snapshot lub ha\u0142a\u015bliwi s\u0105siedzi zwi\u0119kszaj\u0105 op\u00f3\u017anienie; przenosz\u0119 zadania, optymalizuj\u0119 klasy pami\u0119ci masowej lub w\u0142\u0105czam synchronizacj\u0119 bezdyskow\u0105.<\/li>\n  <li><strong>\u015acie\u017cka sieciowa ulega zmianom<\/strong>: Retransmisje, utraty pakiet\u00f3w lub niezgodno\u015bci MTU; sprawdzam b\u0142\u0119dy interfejs\u00f3w, rozmiary bufor\u00f3w i ograniczam utrat\u0119 pakiet\u00f3w.<\/li>\n  <li><strong>Bufor wyj\u015bciowy repliki<\/strong>: Je\u015bli limit replik zostanie ustawiony na zbyt ma\u0142\u0105 warto\u015b\u0107, serwer g\u0142\u00f3wny przerywa po\u0142\u0105czenie; ustawiam <em>limit bufora wyj\u015bciowego klienta<\/em> do replik dostosowanych do obci\u0105\u017cenia.<\/li>\n  <li><strong>Obci\u0105\u017cenie zwi\u0105zane z protoko\u0142em TLS<\/strong>: Na s\u0142abym procesorze szyfrowanie mo\u017ce obni\u017ca\u0107 wydajno\u015b\u0107; mierz\u0119 koszty kryptograficzne i skaluj\u0119 liczb\u0119 rdzeni lub odci\u0105\u017cam system dzi\u0119ki przyspieszeniu sprz\u0119towemu.<\/li>\n  <li><strong>Narz\u0119dzia diagnostyczne powoduj\u0105ce skutki uboczne<\/strong>: <em>MONITOR<\/em> lub zbyt intensywne rejestrowanie danych spowalnia dzia\u0142anie systemu; korzystam z takich narz\u0119dzi oszcz\u0119dnie i tylko przez ograniczony czas.<\/li>\n<\/ul>\n<p>Dbam o to, by te schematy by\u0142y obecne w zespole, tak aby w razie pojawienia si\u0119 sygna\u0142\u00f3w ostrzegawczych nie zaczynali\u015bmy szuka\u0107 od nowa, lecz szybko weryfikowali\u015bmy i odrzucali\u015bmy hipotezy.<\/p>\n\n<h2>Przegl\u0105d w formie tabeli: kluczowe wska\u017aniki w skr\u00f3cie<\/h2>\n\n<p>Ch\u0119tnie przedstawiam poni\u017cszy przegl\u0105d podczas pracy, poniewa\u017c zawiera on najwa\u017cniejsze <strong>Kluczowe dane<\/strong> i skupia wszystkie dzia\u0142ania w jednym miejscu.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Sygna\u0142<\/th>\n      <th>Znaczenie<\/th>\n      <th>Typowe \u017ar\u00f3d\u0142o<\/th>\n      <th>Dzia\u0142anie\/Interpretacja<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>master_repl_offset<\/td>\n      <td>Bajty wygenerowane przez serwer g\u0142\u00f3wny w strumieniu replikacji<\/td>\n      <td>INFO replikacja<\/td>\n      <td>Warto\u015b\u0107 bazowa do obliczenia op\u00f3\u017anienia, obserwacja przebiegu<\/td>\n    <\/tr>\n    <tr>\n      <td>slave_repl_offset<\/td>\n      <td>Bajty, kt\u00f3re replika ju\u017c zastosowa\u0142a<\/td>\n      <td>INFO: replikacja, sekcja \u201eReplika\u201d<\/td>\n      <td>Odj\u0105\u0107 od master_repl_offset, okre\u015bli\u0107 r\u00f3\u017cnic\u0119<\/td>\n    <\/tr>\n    <tr>\n      <td>Identyfikator replikacji<\/td>\n      <td>Oznaczniki historii\/generacji danych<\/td>\n      <td>INFO replikacja<\/td>\n      <td>Po\u0142\u0105czy\u0107 z przesuni\u0119ciem, sprawdzi\u0107 cz\u0119\u015bciowe wyr\u00f3wnanie<\/td>\n    <\/tr>\n    <tr>\n      <td>Wielko\u015b\u0107 zaleg\u0142o\u015bci<\/td>\n      <td>Bufor pier\u015bcieniowy dla najmniejszych pr\u00f3bek<\/td>\n      <td>Konfiguracja, INFO replikacja<\/td>\n      <td>Wybierz wi\u0119kszy rozmiar w przypadku du\u017cej liczby wydruk\u00f3w<\/td>\n    <\/tr>\n    <tr>\n      <td>przesuni\u0119cie replikacji (klaster)<\/td>\n      <td>Przesuni\u0119cia na fragment dla instancji g\u0142\u00f3wnej\/repliki<\/td>\n      <td>FRAGMENTY KLASTRA<\/td>\n      <td>Ocena kandydat\u00f3w na shardy pod k\u0105tem prze\u0142\u0105czenia<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<h2>Podsumowanie: Jak opanowa\u0107 efekt offsetu i unikn\u0105\u0107 awarii<\/h2>\n\n<p>Ustawi\u0142em <strong>Przesuni\u0119cie<\/strong> jako g\u0142\u00f3wny wska\u017anik, aby skutecznie kontrolowa\u0107 sp\u00f3jno\u015b\u0107, cz\u0119\u015bciowe synchronizacje i zachowanie podczas prze\u0142\u0105czania awaryjnego. Dzi\u0119ki replikacji INFO, odpowiedniej wielko\u015bci zaleg\u0142o\u015bci i sprawnemu systemowi alert\u00f3w utrzymuj\u0119 \u015bcis\u0142\u0105 synchronizacj\u0119 replikowanych w\u0119z\u0142\u00f3w. W topologiach klastrowych oceniam przesuni\u0119cia dla ka\u017cdego fragmentu i nadaj\u0119 priorytet kandydatom o minimalnym op\u00f3\u017anieniu. Optymalizacja cz\u0119stotliwo\u015bci (hz), sieci i \u015bcie\u017cek pami\u0119ciowych dodatkowo zmniejsza op\u00f3\u017anienia i zapobiega kosztownym pe\u0142nym synchronizacjom. Kto konsekwentnie monitoruje przesuni\u0119cia, ten ogranicza przestoje i znacznie zwi\u0119ksza niezawodno\u015b\u0107 ca\u0142ego stosu Redis.<\/p>","protected":false},"excerpt":{"rendered":"<p>Dowiedz si\u0119, jak analizowa\u0107 przesuni\u0119cie replikacji Redis, aby wykrywa\u0107 op\u00f3\u017anienia w replikacji w konfiguracji Redis i zapewni\u0107 sp\u00f3jno\u015b\u0107 danych w klastrze.<\/p>","protected":false},"author":1,"featured_media":21468,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[781],"tags":[],"class_list":["post-21475","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-datenbanken-administration-anleitungen"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"99","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"Redis Offset","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"21468","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/21475","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/comments?post=21475"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/21475\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media\/21468"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media?parent=21475"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/categories?post=21475"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/tags?post=21475"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}