IIS에서 다운 타임 업로드 / 롤백 없음


17

이것이이 질문을하는 올바른 방법인지 확실하지 않지만 기본적으로 내가하고 싶은 일이 있습니다.

1.) IIS의 사이트로 변경 세트를 푸시하십시오.
2.) 사용자를 방해하지 마십시오.
3.) 쉽게 롤백 할 수 있어야합니다.

따라서 내가 알아야 할 몇 가지 사항이 있습니다.

1.) Out of Proc 세션-처리
2.) Out-Proc 캐시-처리

따라서 남아있는 질문 :
1.) 어떻게 사용자를 방해하지 못하게합니까? 파일을 휴지통에 업로드하면 앱이 재활용되고 온라인으로 돌아 오는 데 10 초 이상 걸립니다
. 2) 어떻게 쉽게 롤백 할 수 있습니까?

가능한 해결책은 IIS에 두 개의 사이트 (공용 사이트와 개인 사이트)를 설치하는 것입니다. 업로드는 비공개로 이동하여 예열됩니다. 예열 후 사이트가 교체됩니다. 롤백에는 업로드없이 개인용으로 만 스와핑하는 것이 수반됩니다.

이론적으로는 들리는 것처럼 보이지만 역학을 잘 모르겠습니다. 어떤 아이디어?


@NickatUship : 웹 사이트가 호스팅되는 서버가 1 대뿐입니까? 그렇지 않다면 두 번째를 추가 할 가능성이 있습니까?
MattB

@NickatUship : 또한 어떤 IIS 버전을 사용하고 있습니까?
MattB

우리는 잠재적으로로드 밸런서 로이 문제를 해결할 수 있습니다. 서버 자체에서 무언가를 할 수 있기를 바랐습니다. 흐름에 더 효과적이었습니다. 우리는 IIS 7에 있습니다.
ChickenMilkBomb

다운 타임 제로 배포에 글로벌 URL 다시 쓰기 규칙을 사용할 수 있는지 궁금합니다. 1) * .domain.com을 IIS의 응용 프로그램 인 * .arbitrarysiteA.com으로 다시 작성하십시오. 위로 4.) * .siteB.com으로 다시 쓰기 전환
ChickenMilkBomb 22:53에

답변:


29

여기에 내가이 문제에 접근하는 방법이 있습니다-전에 이것을하지 않았다는 것을 명심하십시오. 개발 환경에서 약간 테스트 한 개념 일뿐입니다. 선택한 언어로이 스크립트와 일부 스크립팅을 사용하여 매우 강력한 프레임 워크를 설정할 수 있어야합니다. 기본적으로 빈 공간로드 밸런싱 환경을 설정하고이를 사용하여 새 사이트와 이전 사이트 사이를 전환합니다.

설정하려면 다음이 필요합니다.

시작할 ARR을 설치하십시오.

IIS에서 3 개의 웹 사이트를 설정하십시오.

  • 웹 사이트 1은 사용자가 실제로 연결하는 사이트 http://192.168.1.1/입니다. 이것은 또한 ARR 사이트입니다. 이것을 가리 키기 위해 빈 디렉토리를 설정하고 자체 앱 풀에 넣으십시오. 이 지침 에 따라 앱 풀이 시간 초과되지 않도록 설정하십시오 .
  • 웹 사이트 2와 3은 실제로 콘텐츠를 호스팅하는 사이트입니다. 이러한 필요가 자신의 IP를에하고 ARR 웹 사이트 1보다 다른 포트에서의 작동 방식에 의한 것은 그들이 말할 수 있습니다합니다 http://192.168.1.2:8080http://192.168.1.3:8080. 또한 자체 응용 프로그램 풀에 있어야하며 파일 시스템의 다른 디렉토리를 가리켜 야합니다 (그러나 두 디렉토리는 일반적으로 동일한 내용을 가짐)

ARR을 설치하면 IIS 관리자에 "서버 팜"이라는 새 범주가 생깁니다. 마우스 오른쪽 단추를 클릭하고 새 팜을 만듭니다.

  • 당신에게 의미있는 이름을 줘
  • 웹 서버 2 및 웹 서버 3을 서버로 추가- "고급 설정"단추를 클릭하고 "applicationRequestRouting"범주를 열고 각 서버에 대해 httpPort를 8080으로 변경하십시오
  • 마법사를 마칩니다-URL 다시 쓰기 규칙을 작성할 것인지 묻는 메시지가 표시됩니다. 예를 클릭하십시오.
  • 이제 서버 팜이 있습니다. 구성을 마치려면 팜으로 이동하여 프록시 구성 버튼을 클릭하십시오. "응답 헤더에서 호스트 다시 쓰기 호스트"를 켜고 변경 사항을 적용하십시오.
  • IIS 관리자에서 루트 수준 서버 범주로 이동하여 URL 다시 쓰기 단추를 클릭하면 팜에 대해 만들어진 규칙이 있습니다.
    • 규칙을 두 번 클릭하여 설정으로 이동
    • 조건 상자를 엽니 다
    • {SERVER_PORT}8080과 일치하지 않는 새 조건을 추가하십시오.
    • 변경 사항을 적용하십시오

이 시점에서 귀하의 요청을 수행하는 데 필요한 기본 사항이 있습니다. 당신이 가면 http://192.168.1.1/웹 사이트 1 또는 웹 사이트 2에서 웹 사이트를 얻을 수 있지만 다른 사이트가 있다는 것은 완벽합니다.

이제 새 버전의 응용 프로그램을 배포하려는 경우 수행 할 수있는 작업은 다음과 같습니다.

  • 팜에있는 서버의 drainstop 1 (서버 팜 도구에서 "모니터링 및 관리"로 이동하여 서버를 선택한 후 "서버를 정상적으로 사용할 수 없음"선택)
  • 새 버전의 사이트를 오프라인 인 시스템에 배포
  • 대체 IP / 포트를 사용하여 오프라인 상태 인 사이트 예열
  • 팜에서 사이트를 다시 사용할 수 있도록 설정
  • 다른 서버에 대해 프로세스를 반복하십시오

웹 배포 도구는이 모든 것을 스크립팅하려는 것에 대해 이야기 할 때 작동합니다. 응용 프로그램 용 패키지를 작성하고 명령 줄에서 배포하기가 매우 쉽습니다. 문제가있는 경우 해당 패키지를 쉽게 롤백 할 수도 있습니다. ARR은Microsoft.Web.Administration dll을 사용하여 스크립트 가능 합니다 .

또 다른 한 가지-실제로 Windows 2008 R2 (IIS 7.5)를 사용하는 경우 응용 프로그램 예열 모듈을 살펴보십시오 . 예열 부분도 더 편해집니다.


굉장합니다-고마워요. 이 모든 것을 내려 놓기 만해도 +1입니다. 조사하고 보드로 돌아갑니다.
ChickenMilkBomb

완벽 .. 바보 증거는 아니지만 .. 조사 작업
Vivek Kumbhar

1
이것은 IIS 응용 프로그램의 다운 타임 제로 배포에 대한 해답입니다. 이 작업을 수행하고 PowerShell을 자동화하는 방법에 대한 심층 자습서를 작성했습니다.
kavun

10

MattB가 물에서 떨어졌습니다. +1 더 자세한 내용으로 답장을 보내지 만 그의 요점은 밝히지 않겠습니다. 그가 한 말을 덧붙이겠습니다.

나는 그가 설명한 것과 비슷한 설정을 가지고 있으며 훌륭하게 작동합니다. 단일 서버에서도 ARR을 사용할 수 있습니다.

그러나 몇 가지 추가 할 것입니다.

Matt가 권장하는대로 2 개의 사이트를 작성하십시오. yoursite.com01 및 yoursite.com02와 같은 것을 호출하십시오.

2 개의 URL 재 작성 규칙을 작성하십시오. 하나는 www.yourdomain.com을위한 것이고 다른 하나는 staging.yourdomain.com을위한 것입니다. 프로덕션에는 {^ www.yourdomain.com $) | (yourIP) 값으로 {HTTP_HOST}를 사용하십시오. (또는 원하는 바인딩) 스테이징에는 {^ _staging.yourdomain.com $) 값으로 {HTTP_HOST}를 사용하십시오. yoursite.com 및 staging.yoursite.com 규칙을 호출하십시오.

Rule = yoursite.com을 site = yoursite.com01에 바인딩하고 rule = staging.yoursite.com을 site = yoursite.com02에 바인딩하십시오.

staging.yoursite.com에서 FTP를 설정하십시오.

프로덕션 트래픽은 이제 Rule = staging.yoursite.com 및 Site = yoursite.com01로 이동합니다. 반대쪽에 막힘.

언제든지 스테이징에 배포, 테스트, 사전 스핀 업, 다른 사람에게 테스트 등을 할 수 있습니다. 낮에는 수행해도 상관 없습니다. 매번 동일한 FTP 계정에 배포하십시오. 빌드 서버와 잘 작동합니다.

그런 다음 라이브로 전환 할 준비가되면 다음과 같이 3 가지만 변경하십시오.-FTP 바인딩을 yoursite.com02에서 yoursite.com01로 이동-URL 다시 쓰기 규칙 yoursite.com이 yoursite.com02를 가리 키도록 변경-URL 다시 쓰기 규칙 준비 변경 yoursite.com이 yoursite.com01을 가리 키도록

이제 즉각적인 롤백 기능으로 다운 타임없이 즉각적으로 전환 할 수 있습니다!

유일하게 고려해야 할 것은 프로세스가 아닌 세션 상태입니다. 스왑 중에 세션 상태를 잃지 않도록 상태 서버가 두 사이트 ID를 모두 허용하는지 확인하십시오.

또한 이것은 웹 전용이며 데이터베이스는 아닙니다.

스크립팅의 경우 구성 편집기를 사용하십시오. 원하는대로 변경 한 다음 "스크립트 생성"을 클릭하십시오. C #, appcmd 또는 AHAdmin 코드를 제공합니다.

인스턴스를 교체하기 위해 웹 페이지 프런트 엔드를 사용하여 몇 개월 동안이 위치를 유지했으며 결코 뒤돌아 보지 않았습니다. 기존 배포에 비해 배포가 매우 상쾌합니다.


@Scott-후속 조치에 감사드립니다. 내가 게시 한 내용을 아는 것은 좋은 적이 없었기 때문에 일반적인 열풍이 아닙니다.
MattB

가동 중지 시간없이 URL 다시 쓰기 규칙을 변경하지 못했습니다. 대부분의 경우 : 트래픽이 많은 서버에서 URL 다시 쓰기 규칙을 변경하면 5-10 초 동안 CPU가 100 %로 급등하여 시간 초과가 발생하고 사용자가 느려질 수 있습니다.
kavun

1
@kavun 그렇습니다. 진실이 있습니다. 지난 몇 년 동안 일부 버전 업데이트에서 글로벌 수준의 URL 다시 쓰기 규칙으로 인해 모든 사이트에서 appdomain이 재활용되었습니다. 그것은 사실이 아니었다. 따라서 동일한 서버에 ASP.NET 사이트가 있으면 영향을 줄 수 있습니다. 그러나이를 위해 전용 ARR 서버가있는 경우 appdomain 재활용에 대한 페널티가 최소화되며 여전히 이와 같은 좋은 솔루션을 사용할 수 있습니다.
Scott Forsyth-MVP
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.