
저는 IIS가 설치된 두 개의 VM에서 NLB를 사용하여 트래픽과 공유 구성/ssl의 균형을 유지하면서 Server2016을 실행하고 있습니다. 내 업로드 속도는 256KB/s(2Mb)로 제한되어 있는 것 같습니다. 내 인터넷 연결은 기가비트 광섬유입니다.
문제를 파악하기 위해 몇 가지 테스트를 실행했습니다. 업로드 및 제출 버튼이 있는 간단한 .net 웹 앱을 만들고 28MB 파일을 업로드했습니다.
IIS 상자에 앱을 넣을 때https://domain.tld/upload, Chrome 개발자 도구에 따르면 1.9분이 걸렸으며 이는 대략 256KB입니다.
Visual Studio를 사용하여 만들었기 때문에 IIS Express를 통해 데스크탑 Win 10 시스템에서 앱을 실행하고 라우터를 통해 임의의 포트를 열었으며 업로드에 761ms가 걸렸습니다. 이는 대략 ~37MB/s입니다.
나는 그 테스트를 몇 번 반복했고 거의 같은 결과를 얻었습니다. 동일한 상자에서 업로드하고 다운로드한다는 점을 고려하면 실제로 ~74MB/s-ish, 즉 이론적 기가비트 업로드 및 다운로드의 30%를 사용하고 있습니다. 그래서 ISP 문제는 아닌 것 같습니다.
또한 NLB 클러스터를 중단하고 모든 트래픽을 하나의 상자로 라우팅하려고 시도했지만 결과는 동일했습니다.
IIS가 왜 그렇게 느린지에 대한 아이디어가 있습니까?
답변1
다른 사람이 궁금해할 경우를 대비해 게시합니다.... 문제는 NLB였습니다.
아웃바운드 트래픽의 경우 큰 문제는 아니지만 "제대로" 작동하려면 네트워크를 약간 조정해야 합니다.
- 유니캐스트: 두 노드 모두 MAC이 동일한 '클러스터' MAC 주소로 대체되었기 때문에 네트워크 스위치가 라우팅 테이블을 제대로 업데이트할 수 없고 모든 포트를 플러딩할 수 없게 되어 너트가 작동하게 됩니다. 해결책은 허브를 사용하거나 별도의 VLAN을 사용하는 것입니다.
- 멀티캐스트: 각 노드는 자신의 MAC 주소를 유지하고 추가 멀티캐스트 MAC을 얻습니다. 스위치는 물리적 NIC에 연결되어 있지 않기 때문에 MAC을 '학습'할 수 없으므로 패킷을 삭제하거나 유니캐스트처럼 플러딩됩니다. 해결책은 네트워크에 정적 ARP 및 MAC 항목을 추가하는 것입니다.
- 멀티캐스트 IGMP: 멀티캐스트와 동일하지만 대신 멀티캐스팅 작동 방식을 '학습'할 수 있도록 IGMP 가능 스위치가 필요합니다. 따라서 해결책이 없습니다. 작동하거나 작동하지 않을 것입니다.
추가 테스트를 통해 IIS 클러스터에 대용량 파일을 업로드할 때 동일한 스위치에 있는 다른 시스템/VM에서 끔찍한 네트워크 성능을 볼 수 있으므로 이는 플러딩 문제를 확인하는 것으로 보입니다.
내 작업 환경의 특별한 상황에서 네트워크는 IGMP 활성화를 포함한 모든 네트워크 인프라 변경에 대해 "아니요"라고 말했습니다.
우리는 고가용성을 위해 두 대의 서버를 원했기 때문에 대신 감시용 공유 디스크와 IIS 공유 구성 및 중앙 집중식 SSL용 공유 디스크가 있는 2개 노드 장애 조치 클러스터를 만들기로 결정했습니다. Active-Active는 아니지만 패치하는 동안 가동 시간을 유지할 수 있습니다. IIS에서 클러스터를 수행하는 것이 권장되지 않는다는 것을 알고 있지만 하드웨어 부하 분산 장치나 적절하게 구성할 수 있는 네트워크가 없는 경우 이렇게 해야 합니다. :)