Guest Cluster를 구현 하는 방법은 Shared Storage 구현 방식에 따라 3가지로 나뉠 수 있습니다. 1. iSCSI SAN 이용 제가 생각하는 Check List는 다음과 같습니다. - vFC SAN 구성에 대한 권장 가이드는 아래 문서를 참고 하시면 됩니다. 주요 주의 사항은 다음과 같습니다. 주의 : 잘못 설정하면 NPIV 포트 고갈로 인해 VM이 시작되지 않을 수 있습니다. - NPIV는 HBA와 SAN 모두 활성화 해야 합니다. - Zone을 잡으실때는 WWPN으로 잡으셔야 합니다. 1. Guest OS가 Shared VHDX를 지원 하는 경우 즉 Windows Server 2012 이상의 경우에는 관리적인 측면에서 Shared VHDX를 선호 합니다. 2. SCVMM을 이용하여 Cluster Member 간에 Antiaffinity 설정이 가능 합니다. (강력 권고) 3. 일부의 아주 가끔 발생하는 이슈인데 Guest Clustering 구현이 실패하는 경우가 있습니다. 참고: |
기본적으로 Storage Space를 사용하게 되면 Disk에 대해서는 이미 RAID (n-way mirror 및 페러티) 를 통해 FT(Fault Tolerance)을 제공 하고 있습니다. 즉 전방위적으로 고가용성 및 Fault Tolerance를 제공하고 있는 것이죠. 1. 적어도 3개 이상의 JBOD Enclosure로 구성하여야 합니다. (2 Way Mirror 구성인 경우) 짦은 Tip 이였습니다. |
기존 Out bound A/A Team 구현 방식의 한계 - 구현 방식은 TCP Port / IP Address / Mac Address Hash 방식이 제공되었습니다 반면 현재의 Dynamic Teaming의 경우 동일한 Port일지라도 Flowlet에 따라 부하 분산이 가능하나 기존의 구현 방식은 Port 수준까지만의 부하 분산만 지원 하였습니다. 왜? TCP Port 수준 밑단까지는 부산 분산을 구현 할 수 없었을까? - 만약 TCP Stream 상의 패킷들이 동시에 NIC를 통해 외부로 전송된다고 생각해 보자. 이렇게 전달된 패킷들은 실제의 Stream 순서대로 목적지로 전송되지 않을 확률이 큽니다. 일반적으로 이러한 경우을 Out-of-order라고 부르고 있으며 이 경우 목적지에서는 이에 대한 Packet Re-ordering을 진행하게 됩니다. 자 다시 말해 바로 하나의 스트림에 해당하는 데이터가 동시에 Team을 이루고 있는 NIC로 전송됨으로써 당연히 Out-of-order의 발생이 필연적이 되게 되는 이는 수신측의 Re-ordering 연산으로 인한 성능 저하로 이어지게 됩니다. 정말 이런 Re-ordering 이 성능에 영향을 주나요? - 내 아래 문서를 참조하세요. (http://kb.pert.geant.net/PERTKB/PacketReordering) 그렇다면 동일 TCP Stream는 여러 팀 Member 중 하나만 사용하게 되나요? - 내 맞습니다. 문제는 TCP Stream을 과연 Team 드라이버가 인식할 수 있냐는 부분입니다. R2의 Dynamic 부하 분산 모드는 동일한 Port를 사용하더라도 TCP Stream이 다른 경우 부하 분산을 제공해 줍니다. 이는 TCP Stream을 이해 할 수 있는 알고리즘인 Flowlet 이 적용되어 있기 때문입니다. 잠깐 Flowlet은 어떻게 구현 되어 있나요? - 수많은 TEST를 거쳐서 동일 Port를 이용하는 Traffic에 대해서 연속 스트립 여부를 확인할 수 있게 되었습니다. 결론은 시간차이인데요. 동일 스트림일때와 단일 스트림에서 다른 스트림으로 바뀔때는 약간의 시간차가 있습니다. 그리고 그 시간차를 확인하여 동일 스트림이 아닌 경우 다른 NIC 즉 다른 팀 멤버를 사용하도록 디자인 한거죠. - 실은 자연 과학도 마찮가지지만 관찰과 직관은 꽤 멋진 결과물을 내곤 합니다. 제가 소계해 드리는 Flowlet 알고리즘 역시 그 관찰과 직관의 결과물이죠. 그 외에 다른 장점은 없나요? - VM에서 외부로 나가는 Traffic 역시도 Dynamic 모드를 통해 Team을 이루고 있는 멤버들 모두를 이용한 부하 분산 모드를 제공하고 있습니다. PS. 아차… 혹시 이거 쓰는데 네트워크 성능이 더 떨어진다 싶으면 스위치에 라우터 가드 기능을 끄시는게… :) 꼭 궁합이 않맞는 장비가 일부 있는거 같더라구요. |
Disk IOPS의 QoS 설정 시 Minimum은 실제 최소한 확보해야 하는 QoS 수치가 아니라 Warning이 발생함 |
Storage Space에서는 과반수의 디스크가 접근이 되어야 한다. 인증된 JBOD가 왜 좋을까? |
안녕하세요. 1.1 Virtual Processor VS Logical Processor 이미 말씀드린 바와 같이 Hyper-v의 가장 중요한 역활은 바로 Scheduling 입니다. 그리고 오늘은 우리가 직접 설정할 수 있는 Scheduling Policy 이야기 이전에 그 이면에 무슨 일들이 일어나고 있는지에 대해 이야기 하고자 합니다. 가장 먼저 우리는 VM에 할당될 Virtual Processor의 갯수를 조정할 수 있습니다. 하지만 아래와 같이 Windows Server 2003의 경우 최대 할당 가능한 Processor의 갯수가 2개로 명시되어 있습니다. 이를 이해하기 위해서는 조금 재미 있는 이야기를 해야 하는데요. “어~ 그러고 보니 이 VM의 VP는 8개 인데 지금 2개만 100%구 다른 녀석들은 다 노네…” 내 맞습니다. VP에 대한 Scheduling을 좀더 스마트 하게 하는 방법이 없을까 고민하게 된겁니다. 다시 말해 Active 즉 Workload을 실행하는 Virtual Processor에만 Logical Processor을 제공하는 겁니다. 그래서 아예 OS 커널을 수정했습니다. 어떻게? 바로 Hyper-v를 인식하고 Hyper-v가 적절하게 스케줄링 할 수 있도록 스케줄링 정보를 전달하도록 말이죠… Enlihtenment의 예에는 위의 Active Virtual Processor에 대한 인식에 관한 사항 외에도 만약 VM의 특정 VP (Virtual Processor)가 Spinlock에 걸린 경우 해당 Lock이 풀릴 때까지 기다릴 수 있도록 정보를 제공하기도 합니다. 자 그리고 이렇게 Partition과 Hyper-v와의 통신을 위해서는 바로 Hypercall이 사용되게 되죠. 자 그 외에는 다른 어떤 사항들을 고려하게 될까요? Affinity 분명히 Virtual Processor 역시 Processor 입니다. Hyperthreading 다음으로 Hyperthreading 입니다. 문제는 이런 CPU가 매우 비싸다는 점입니다. “아! 데이터의 흐름 즉 Pipeline을 여러 개 만들자!” 그렇게 되면 당연히 첫 번째 데이터가 처리 또는 반환 하는 동안 다른 데이터가 읽어 질 수 있을 테니깐요. 하지만 여기에도 문제가 존재했습니다. 바로 Intel Processor가 “CISC” 기반이였다는 거죠. 실은 “CISC”는 매우 초기에 나온 Processor Type으로 이때는 메모리가 비쌌습니다. 그래서 처리하는 데이터의 길이가 최대한 메모리를 아껴쓰도록 매우 가변적 이였죠. 문제는 이런 가변적인 데이터 길이 였습니다. “아 스케줄링 하기 너무 힘들어” 맞습니다. CISC Processor 의 경우 공간 사용량은 매우 최적화 되어있지만 데이터의 길이가 가변적이여서 스케줄링이 쉽지가 않았습니다. 그러다보니 멀티 프로세싱은 물론 Hyperthreading에서도 때로는 극악의 성능을 보이게 된거죠. 그로인해 초기의 Intel Processor의 Hyperthreading 기능은 잠시 선을 보였다 들어가 버린거죠. 실은 Intel은 이러한 CISC의 단점을 보완 하기 위해 1995년 Micro-Operation 기반의 프로세서를 시장에 선보인 이래로 개선에 개선을 거듭했습니다. 그리고 지금의 Intel Processor는 가변적인 명령어들은 다시 한번 Micro-Operation으로 가공하여 가변성으로 인한 멀티 프로세싱의 단점을 완전히 날려 버리게 되었죠. 자 그래서 지금은 어떻냐구요? 연산의 종류에 따라 다르지만 Hyperthreading을 활성화 하게 되면 약 30% 정도의 성능 향상 효과가 있다는게 일반적인 의견이구요. 기본적으로는 성능에 문제가 발생하지 않는 이상 비활성화 하지 말라는게 제 개인적인 권고 입니다. 게다가 Hyper-v는 이렇게 Hyperthreading된 LP에는 2개의 VP 동시에 할당하여 Scheduling 처리를 합니다. 즉 Scheduling에 가해지는 부하도 줄어 들게 되겠죠. 그리고 아주 효과는 약하겠지만 전반적인 성능 향상 효과와는 별개로 Hyper-v의 Scheduling 부하도 낮춰 주는 효과가 있습니다. 물론 LP와 VP의 비율이 낮다면 단일 VM 입장에서는 할당된 Virtual Processor가 고정되어 있다는 가정하에 Hyperthreading이 비활성화 되어 있는 것이 더 좋을 수 도 있겠죠. 하지만 LP 대 VP의 비율이 높다는 당연히 Hyperthreading을 활성화 하는것이 Hyper-v 전반의 성능을 위해 좋은 효과를 발휘하겠죠. 이상으로 Scheduling의 근간이 되는 개념 몇 가지를 알아봤습니다. 긴 글 읽어 주셔서 감사합니다. 참고 : http://en.wikipedia.org/wiki/RISC, http://maystyle.tistory.com/559 |