none
IIS 재부팅 중 외부 접속을 차단할 수 있나요? RRS feed

  • 질문

  • 안녕하세요.
    지우개입니다.ㅋㅋ

    회사일에 집중하다보니 오랜만에 오게 되네요.

    질문이 있습니다.
    현재 웹서버로 게임서버를 구성해서 모바일 게임을 서비스 중인데
    끊임없는 서버 패치를 하고 싶어서 몇가지 구상중에 문의사항이 있어서요.
    현재 L/B 장비 밑에 각 3개의 웹서버가 존재하는데 패치를 진행할 경우
    웹서버를 전부 내렸다가 올리던가 해야 합니다.

    이렇게 되면 게임서비스가 잠시 중단되서 이걸 회피하는 방법을 찾고자 합니다.

    구상중인 방법은 빌드된 웹 컨텍스트를 바꿔치기 하고 iis 를 리셋 하는 걸 생각하고 있는데
    결국엔 iis가 재부팅 하는 동안은 접속이 불가합니다.
    또한 우리 게임이 약간 변태적으로 설계되어있어서 게임내에서 사용하는 각종 데이터 및 로직을
    공유 context로 올리다보니 (왜 이렇게 작성했는지는 아직도 모르겠네요.)

    메모리에 로딩하는 시간이 필요합니다.(그러나 실제 아무 페이지나 리셋후 한번이라도 열려야 데이터 로딩이 되네요.)

    asp의 경우 페이지 파일을 변경할 경우 자동으로 컴파일링을 진행, 끊임없는 서비스가 가능한게

    장점인데 저 데이터 컨텍스트때문에 그런 작업은 진행 할 수 없습니다.(결국 로직이 바뀔 경우엔 로딩도 새로 해야 하기 때문.)

    그렇다면 결국 위에서 이야기한 바와 같이 iis를 리셋하는 것만 답인 상황인데요.

    제 질문은 이겁니다.
    1. iis에서 리셋하는 동안 접속을 차단하는 기능이 있는가?
    2. iis에서 리셋중 필요 메모리 컨텍스트를 올릴 수 있는 기능이 있는가?(아무 페이지를 열지 않고서도..)

    3. iis에서 리셋하는 동안 이라고 알 수 있다면 이를 L/B에 알려줄 수 있는가?

    이상입니다.
    이러한 부분에 대해서 아시는 분 있으면 부탁 드리겠습니다.
    감사합니다.
    지우개 배상.
    2014년 1월 22일 수요일 오전 2:33

답변

  • IIS 리셋을 해야 한다면 L/B 차원에서 리셋되는 장비는 빼고 진행해야 합니다. 리셋하는 동안 L/B에서 장비를 자동으로 뺴고 싶다면 배포 스크립트에서 이를 만들어줘야 합니다. 즉, 배포하기 전에 L/B 측에 해당 서버를 빼는 API를 호출하고 배포 후 다시 넣어주는 API를 호출하는 식입니다. (대개의 경우, 해당 장비의 매뉴얼에 제공됩니다.)

    하지만, IIS 리셋이 아니라 w3wp.exe만 recycle 시키는 것도 고려해 볼 수 있습니다. 그런 경우 IIS는 recycle 되는 시점부터 들어오는 요청을 큐잉해놓고 있다가 새롭게 뜨는 w3wp.exe가 동작가능상태로 진입했을 때 전달해 줍니다. 사실, 명시적으로 recycle 해줄 필요도 없습니다. 코드가 바뀌어서 /bin 폴더 하위의 DLL이 변경된 경우 IIS는 이를 감지하고 recycle을 자동으로 해줍니다. (엄밀히 따져보면, 대부분의 경우에 iisreset 보다는 recycle만으로도 충분합니다.)

    그럼 1번과 3번은 답이 된 것 같고요.

    2번의 경우, 웹 요청이 없는 상태에서도 자동으로 w3wp.exe가 떠서 특정 코드를 실행하고 싶다는 것으로 이해가 되는데요. 이 기능은 IIS 7.5부터 제공되고 있습니다. 아래의 글을 참고하세요.

    IIS 7.5 부터 지원되는 웹 사이트 자동 시작 모드
    ; http://www.sysnet.pe.kr/2/0/1367 

    2014년 1월 22일 수요일 오전 7:38