Wordpress na replikacji IIS z robocopy

10

Konfigurujemy środowisko wordpress na 4 serwerach IIS. Rozważamy użycie zaplanowanego zadania wyzwalającego skrypt robocopy do replikacji katalogu wordpress co 5 minut.

Jakie są opinie na temat takiego podejścia? Czy ktoś kiedykolwiek używał tego lub podobnego?

joebegborg07
źródło
Co to jest serwer 4 IIS w wersji fizycznej lub wirtualnej? Co replikujesz dane lub bazy danych i konfiguracje? Nie jestem pewien, dlaczego 4 serwer 1 byłby nadrzędny (zakładam), a pozostałe pasywne, jeśli próbujesz osiągnąć HA, który nie będzie działał.
Anthony Fornito,
1
drugie pytanie (i chyba najważniejsze), dlaczego używasz wordpressa w systemie Windows?
Anthony Fornito,
Dzięki @AnthonyFornito za odpowiedź. Uruchamianie wordpressa w systemie Windows z wewnętrznych powodów. Po prostu próbuję z tym pracować. Jestem po replikacji plików witryny (replikacja bazy danych jest już obsługiwana przez MYSQL). Interfejsy są maszynami wirtualnymi na platformie Azure. Głównie szukam rozwiązania, w którym wszystkie interfejsy udostępniają te same pliki stron internetowych. Czy mógłbyś coś zasugerować?
joebegborg07

Odpowiedzi:

12

Posiadanie 4 serwerów front-end, które współużytkują te same pliki w tym samym czasie i każdy jest w stanie pisać bez użycia DFS lub programu innej firmy dedykowanego do synchronizacji katalogów, byłoby koszmarną klaczą.

Dzięki lazurowi możesz przyjrzeć się 3 rzeczom.

  1. Magazyn współdzielony, może istnieć pewien koszt związany z uzyskaniem własnego magazynu dedykowanego i nie jestem pewien konfiguracji, jednak platforma Azure to oferuje. Dzięki temu wszystkie twoje pliki będą dostępne na każdym serwerze, jak tylko zostaną zapisane.

  2. Azure DFS, DFS to narzędzie do synchronizacji katalogów oparte na systemie Windows, które działa dość dobrze, nie jest również pewien kosztów, ale konfiguracja może być nieco łatwiejsza. DFS działa asynchronicznie, więc występuje niewielkie opóźnienie, ale niewiele.

  3. (Zamierzam wyjaśnić, jak by to zrobić, a potem nigdy więcej o tym nie rozmawiać, ponieważ jest to okropny pomysł i zawiedzie.) Utwórz skrypt, który najpierw porówna dane na wszystkich czterech serwerach, a następnie skopiuje dane różnicowe. Będziesz musiał udostępnić każdy katalog jednemu serwerowi, na którym działa skrypt, zezwolić na konfigurację, aby serwer mógł czytać i pisać, a następnie rozwiązywać problemy, rozwiązywać problemy.

Każda z powyższych opcji wykona pracę, jeśli twoja praca zależy od tej pracy, polecam trzymać się z dala od opcji 3.

Biorąc to pod uwagę, a nie próbujesz wydawać żadnych pieniędzy, wykonaj poniższe czynności.

  1. spójrz na program o nazwie „bezpłatna synchronizacja plików”. Istnieje kilka naprawdę dobrych funkcji w darmowej wersji. Wierzę, że jest płatna za wersję, ale nie jestem pewien, jakie ulepszenia otrzymujesz. Używałem tego w wielu moich środowiskach programistycznych, gdy próbowałem osiągnąć coś podobnego do tego, co chcesz zrobić, i miałem leniwość przy konfigurowaniu DFS.

  2. Ustaw tylko jeden serwer do zapisu, można to łatwo zrobić, konfigurując identyfikator URI na każdym serwerze, który mówi, że jeśli utworzysz artykuł, przejdź do ServerA, lub przepisujesz adres URL w pliku web.config, lub że WordPress to php:

    nagłówek („Lokalizacja: http://myhost.com/mypage.php ”);

Każdy wymaga trochę kodowania i znajomości PHP, IIS.

  1. Naprawdę fajna część, ponieważ ServerA jest serwerem autorskim (tylko serwer z możliwością zapisu), w jaki sposób kierujemy ruch do ServerB, ServerC i ServerD w celu odczytu bez modułu równoważenia obciążenia?

Krótka odpowiedź, której nie możesz, no cóż, to nie do końca prawda. Miałem kiedyś klienta, który był nieugięty, aby nie używać modułu równoważenia obciążenia, który był w stanie przeprowadzić serię skryptów PowerShell, aby przenieść połączenie z jednego serwera na inny na podstawie ilości procesy robocze na każdym pudełku lub coś takiego. Tak czy inaczej bardzo trudne do zrobienia i nie warte czasu i energii.

Sprawdź, czy nie możesz skonfigurować równoważenia obciążenia sieciowego na serwerach, będzie to wymagało dodatkowego adresu IP, ale będzie to tylko jedna zmiana DNS, a ruch może zostać rozdzielony na odczyt na 3 serwerach.

Powodzenia!

Anthony Fornito
źródło
Wielkie dzięki za sugestie. Pojedyncza pamięć centralna była dla nas wąskim gardłem, ponieważ mieliśmy taką konfigurację wcześniej, ale nie radziliśmy sobie z dużym ruchem. Potrzebowaliśmy szybkiego rozwiązania ze względu na termin. Ostatecznie zastosowaliśmy resilio, które jest rozwiązaniem synchronizacji peer-to-peer w czasie rzeczywistym, które wykrywa zmiany na dowolnym serwerze i replikuje się na innym serwerze. Mam nadzieję, że każdy, kto ma takie same lub podobne problemy, może rozwiązać ten problem w taki sam sposób, jak dla nas. Testuję twoją sugestię dotyczącą ponownego zapisywania adresów URL dla zaplecza WP i wypychania zmian na inne komputery. Dzięki jeszcze raz.
joebegborg07
NLB nie działa na platformie Azure (nie ma warstwy 2, jeśli chcesz naprawdę okropnych koszmarów, po prostu spójrz na tabelę ARP na maszynie wirtualnej platformy Azure).
Massimo,
12

Dzięki za wszystkie sugestie ludzi.

Nasze rozwiązanie wykorzystywało podejście synchronizacji peer-to-peer za pomocą narzędzia o nazwie resilio.

Resilio pozwoliło nam skonfigurować wiele komputerów (w tym przypadku interfejsów IIS) w klastrze synchronizacji peer-to-peer. Folder jest wybierany z każdego komputera w klastrze, który ma być używany w procesie synchronizacji.

Usługa resilio (usługa systemu Windows działająca w tle) monitoruje te foldery pod kątem wszelkich zmian, a jeśli zmiany zostaną wprowadzone w którymkolwiek z określonych folderów na odpowiednich interfejsach, resilio prześle tę zmianę na inne serwery.

Mam nadzieję, że może to pomóc innym w obliczu podobnego problemu w przyszłości.

joebegborg07
źródło
11

Nie sądzę, aby zaplanowane zadania i Robocopy były świetnym podejściem. Ze względu na 5-minutowe okno będą chwile, w których zasób zostanie zażądany, ale serwer wybrany przez moduł równoważenia obciążenia nie będzie go miał dostępny. W przypadku witryn w dużej mierze statycznych zdarza się to znacznie rzadziej niż w przypadku często zmienianych zajętych witryn. Wyższa częstotliwość lub użycie innej technologii synchronizacji, takiej jak Bittorrent Sync (teraz nazywana Resilio Sync ), poprawiłoby to nieco, ale nie wyeliminowało problemu.

Lepszym rozwiązaniem byłoby umieszczenie zawartości wp-content lub po prostu folderu wp-content / uploads na dysku współdzielonym. Innym sposobem spojrzenia na to byłoby posiadanie jednego z serwerów hostujących ten folder i udostępnianie go innym. Przy buforowaniu dysku obciążenie na serwerze nie powinno być o wiele wyższe niż na innych serwerach.

Aktualizacja

Zapoznaj się z tym artykułem, aby znaleźć pomysły na buforowanie stron, a ten z CDN. Chodzi o Nginx, więc musisz to wypracować dla IIS, ale teoria ta jest poprawna dla każdego serwera WWW.

Tim
źródło
Dzięki za sugestię @ Tim. Jak powiedziałeś, strona jest dynamiczna, z regularnymi drobnymi aktualizacjami plików z powodu wtyczek wordpress; Oznacza to, że każdy interfejs może mieć czasami inne pliki. Czy kiedykolwiek testowałeś takie środowisko produkcyjne (około 500 - 1000 jednoczesnych użytkowników); tzn. przechowywanie plików strony internetowej w centralnym repozytorium i mapowanych przez udostępniony dysk? Jeśli tak, jakie było doświadczenie.
joebegborg07
Nie, nie przetestowałem tego scenariusza - nie muszę, ponieważ buforuję i używam CDN. Będziesz musiał załadować test serwerów frontonu, w tym serwera plików zaplecza. Jeśli jednak strony nie są podzielone na fragmenty dla każdego użytkownika buforowanie stron może znacznie zmniejszyć obciążenie, podobnie jak w przypadku dystrybucji treści - CloudFlare ma darmową warstwę. Dotyczy to nawet aktualizacji co 5 minut. Google „Nginx Microcaching” za teorię, która za tym stoi, ale oczywiście będziesz musiał zaimplementować ją inaczej w IIS. Nagłówki buforowania są bardzo ważne, jeśli wybierzesz tę trasę. Zobacz także aktualizację powyżej.
Tim