Zero przesyłania przestojów / Cofanie w IIS

17

Nie jestem pewien, czy jest to właściwy sposób, aby zadać to pytanie, ale w zasadzie oto, co chciałbym zrobić:

1.) Wciśnij zestaw zmian na stronie w IIS.
2.) Nie przeszkadzaj użytkownikom.
3.) Być w stanie wycofać się bez wysiłku.

Tak więc musi zdarzyć się kilka rzeczy:

1.) Sesja Out of Proc - obsłużona
2.) Out of Proc cache - obsłużona

Pozostają więc pytania:
1.) Jak powstrzymać użytkowników przed zakłócaniem? Jeśli po prostu załaduję pliki do kosza, aplikacja uruchomi się ponownie i zajmie ponad 10 sekund, aby wrócić do trybu online
2.) Jak mogę bez problemu cofnąć?

Myślałem, że możliwym rozwiązaniem byłoby utworzenie dwóch witryn w IIS, jednej publicznej i jednej prywatnej. Przesłane filmy przechodzą do prywatnych i rozgrzewają się. Po rozgrzewce strony są zamieniane. Cofanie wymaga tylko zamiany na prywatne bez przesyłania.

To teoretycznie wydaje się rozsądne, ale nie jestem pewien mechaniki. Jakieś pomysły?

ChickenMilkBomb
źródło
@NickatUship: czy jest tylko 1 serwer, na którym hostowana jest strona internetowa? A jeśli nie, istnieje możliwość dodania sekundy?
MattB
@NickatUship: także na jakiej wersji IIS używasz?
MattB
Możemy potencjalnie rozwiązać to za pomocą naszego modułu równoważenia obciążenia - to prawda. Miałem nadzieję, że będę w stanie zrobić coś na samym serwerze - lepiej by działało to dla naszego przepływu. Jesteśmy na IIS 7.
ChickenMilkBomb
Zastanawiam się, czy moglibyśmy użyć globalnych reguł przepisywania adresów URL dla wdrożenia zerowego przestoju 1) Przepisz * .domain.com do * .arbitrarysiteA.com, która jest aplikacją w IIS 2.) prześlij na * .arbitrarySiteB.com 3.) rozgrzej to w górę 4.) zmień przepisywanie na * .siteB.com
ChickenMilkBomb

Odpowiedzi:

29

Oto jak podejdę do tego problemu - pamiętaj, że nie robiłem tego wcześniej, to tylko koncepcje, które przetestowałem trochę w moim środowisku programistycznym. Powinieneś być w stanie skonfigurować całkiem solidne środowisko, używając tego i niektórych skryptów w swoim wybranym języku. Zasadniczo zamierzamy skonfigurować środowisko równoważenia obciążenia getta i używać go do przełączania między nową witryną a starą witryną.

Aby go skonfigurować, będziesz potrzebować:

Zainstaluj ARR na początek.

Skonfiguruj 3 strony internetowe w IIS:

  • Powiedzmy, że witryna 1 będzie witryną, z którą użytkownicy faktycznie się łączą http://192.168.1.1/. To jest także strona ARR. Wystarczy ustawić pusty katalog, aby wskazywał, i umieścić go we własnej puli aplikacji. Skonfiguruj pulę aplikacji, aby nie przekraczała limitu czasu zgodnie z tymi instrukcjami .
  • Witryny 2 i 3 będą witrynami, które faktycznie hostują Twoje treści. Muszą one znajdować się na własnych adresach IP i ze względu na sposób działania ARR, na innym porcie niż strona internetowa 1. Powiedzmy, że są http://192.168.1.2:8080i http://192.168.1.3:8080. Powinny także znajdować się we własnych pulach aplikacji i wskazywać na różne katalogi w systemie plików (ale oba katalogi mają zwykle tę samą zawartość)

Po zainstalowaniu ARR w Menedżerze IIS pojawi się nowa kategoria o nazwie „Farmy serwerów” - kliknij ją prawym przyciskiem myszy i utwórz nową farmę.

  • nadaj mu imię, które ma dla ciebie znaczenie
  • dodaj Webserver 2 i Webserver 3 jako serwery - kliknij przycisk „Ustawienia zaawansowane”, otwórz kategorię „applicationRequestRouting” i zmień HTTP na 8080 dla każdego serwera
  • Zakończ kreatora - pojawi się pytanie, czy chcesz utworzyć reguły przepisywania adresów URL - kliknij Tak
  • Masz teraz farmę serwerów - aby zakończyć konfigurację, przejdź do farmy i kliknij przycisk Konfiguracja serwera proxy - włącz „odwrotne przepisywanie hosta w nagłówkach odpowiedzi” i zastosuj zmiany
  • W Menedżerze IIS przejdź do kategorii serwera na poziomie katalogu głównego i kliknij przycisk Przepisz URL, pojawi się reguła, która została utworzona dla twojej farmy
    • kliknij dwukrotnie regułę, aby przejść do ustawień
    • otwórz pole Warunki
    • dodaj nowy warunek dla {SERVER_PORT}nie pasuje do 8080
    • zastosuj zmiany

W tym momencie masz podstawy tego, czego potrzebujemy, aby spełnić twoje żądanie. Jeśli przejdziesz do niego http://192.168.1.1/, dostaniesz swoją witrynę z witryny 1 lub witryny 2, ale będzie zupełnie bezproblemowo, że istnieją inne witryny.

Teraz, co możesz zrobić, gdy chcesz wdrożyć nową wersję aplikacji, to:

  • drenstop 1 serwerów w twojej farmie (w narzędziach farmy serwerów, przejdź do „Monitorowania i zarządzania”, wybierz serwer i wybierz „Spraw, aby serwer był niedostępny z wdziękiem”)
  • wdróż nową wersję witryny w systemie offline
  • rozgrzej witrynę, która jest offline, używając alternatywnego adresu IP / portu
  • ponownie udostępnij witrynę farmie
  • powtórz proces dla drugiego serwera

Narzędzie do wdrażania sieci wchodzi w grę, gdy mówisz o tym, że chcesz to wszystko napisać. Ułatwia to utworzenie pakietu dla aplikacji i wdrożenie go z wiersza poleceń. Możesz również łatwo wycofać ten pakiet, jeśli występują problemy. ARR jest również skryptowalny przy użyciu Microsoft.Web.Administrationbibliotek DLL.

Jeszcze jedna rzecz - jeśli faktycznie korzystasz z systemu Windows 2008 R2 (czyli IIS 7.5), zapoznaj się z modułem podgrzewania aplikacji - powinno to ułatwić tobie również jego rozgrzewkę.

MattB
źródło
Wspaniale - dzięki matowy. +1 nawet za odłożenie tego na bok. Zbadam i wrócę do tablicy.
ChickenMilkBomb
Idealne ... może nie być głupim dowodem ... ale badaniem pracy
Vivek Kumbhar
1
To jest odpowiedź na zero przestojów we wdrażaniu aplikacji IIS. Napisałem dogłębny samouczek, jak to zrobić + zautomatyzować to PowerShell.
kavun,
10

MattB wyrzucił go z wody. +1 Odpowiem z większą ilością szczegółów, ale nie chcę brać jego punktów. Dodam do tego, co powiedział.

Mam konfigurację podobną do opisanej przez niego i działa świetnie. ARR to droga, nawet na jednym serwerze.

Chciałbym jednak dodać kilka rzeczy.

Utwórz 2 witryny, jak zalecił Matt. Nazwij ich jak twoja strona.com01 i twoja strona.com02.

Utwórz 2 reguły przepisywania adresów URL. Jeden dla www.twojadomena.com i jeszcze jeden inscenizacja.twojadomena.com. Do produkcji użyj {HTTP_HOST} z wartością (^ www.twojadomena.com $) | (twójIP). (lub dowolne wiązanie, które wolisz) Do przemieszczania użyj {HTTP_HOST} z wartością (^ staging.yourdomain.com $). Zadzwoń do reguł yoursite.com i staging.yoursite.com.

Powiąż regułę = twoja strona.com z witryną = twoja strona.com01 i reguła = staging.twojastrona.com z witryną = twoja strona.com02.

Skonfiguruj FTP na staging.yoursite.com.

Ruch produkcyjny będzie teraz kierowany do reguły = staging.yoursite.com i Site = yoursite.com01. Chwiejność na odwrót.

Możesz wdrożyć do inscenizacji w dowolnym momencie, przetestować, przed spinupem, przetestować innych ludzi itp. Zrób to w ciągu dnia, to nie ma znaczenia. Wdróż za każdym razem na tym samym koncie FTP. Działa świetnie z serwerami kompilacji.

Następnie, gdy będziesz gotowy do uruchomienia, po prostu dokonaj 3 zmian: - przenieś powiązanie FTP z yoursite.com02 na yoursite.com01 - zmień Przepisuj URL Regułę yoursite.com, aby wskazywało na yoursite.com02 - zmień Przepisowanie Przepisuj URL. twoja witryna.com, aby wskazać twoja witryna.com01

Teraz masz zero przestojów, natychmiastowe przełączanie i natychmiastową funkcję wycofywania!

Jedyne, co musisz wziąć pod uwagę, to stan sesji poza procesem. Upewnij się, że serwer stanu akceptuje oba identyfikatory witryn, aby nie stracić stanu sesji podczas wymiany.

Pamiętaj również, że jest to tylko sieć, a nie baza danych.

Do tworzenia skryptów użyj Edytora konfiguracji. Wprowadź odpowiednie zmiany, a następnie kliknij „Wygeneruj skrypt”. Otrzymasz kod C #, appcmd lub AHAdmin.

Mam to już od kilku miesięcy z interfejsem strony do wymiany instancji i nigdy nie patrzę wstecz. To sprawia, że ​​wdrożenia są tak odświeżające w porównaniu do tradycyjnych.

Scott Forsyth - MVP
źródło
@Scott - dzięki za kontynuację, dobrze wiedzieć, że to, co opublikowałem, nie jest ogólnym szaleństwem, ponieważ nigdy wcześniej tego nie robiłem.
MattB,
Nie odniosłem dużego sukcesu w wprowadzaniu zmian do reguł przepisywania adresów URL bez powodowania przestojów. Większość czasu dla mnie to: wszelkie zmiany reguł przepisywania adresów URL na serwerach o dużym ruchu zwiększą procesor do 100% na ~ 5-10 sekund, potencjalnie powodując przekroczenie limitu czasu i zauważalne spowolnienie ze strony użytkowników.
kavun,
1
@kavun Tak, jest w tym prawda. W niektórych aktualizacjach wersji w ciągu ostatnich kilku lat Reguły przepisywania adresów URL na poziomie globalnym zaczęły powodować odzyskiwanie aplikacji dla wszystkich witryn. Tak kiedyś nie było. Jeśli więc masz witryny ASP.NET na tym samym serwerze, może to mieć wpływ. Jeśli jednak masz do tego dedykowany serwer ARR, to kara za recykling domeny jest minimalna i nadal możesz użyć dobrego takiego rozwiązania.
Scott Forsyth - MVP