2019. 5. 21. 15:34ㆍIT-공부하자
엄청난 내공이 느껴진다~ ㅠㅠ
퍼다 놓는다.
https://glqdlt.tistory.com/244
VMware 와 Vsphere 에 대한 단상
업무용 PC에서는 VMWARE를 쓰고, 서버 인프라는 Vsphere를 구축해서 쓰고 있다.
두 개의 차이를 모르고, 같은 개념으로 알고 있는 데.. 차이점을 알고자 기록한다.
먼저 가상화(Virtualization)란 무엇일까?
가상화는 쉽게 얘기하면, 물리적인 컴퓨팅 자원의 한계를 극복, 최대한 효율적으로 쓰기 위해 행해지는 일종의 트릭을 뜻한다.
이게 무엇이냐면, 왜 가상화가 생겨났는지에 대한 어원을 보면 알 수 있다.
서버실에는 다수의 서버들로 가득차있고, 물리적으로 서버실이라는 공간안에 서버렉에 정렬하여 운영, 통제하고 있다.
그런데 서버 컴퓨팅 자원이 필요하여 서버를 한대 더 추가할 경우, 물리적인 공간을 확보해야하고-
전기 콘센트와 케이블이 또 필요하며 여러가지 부수적인 자원이 필요하게 된다.
특히나, 대규모의 서버컴퓨팅의 경우 이러한 물리적인 공간제약 외에도 구입과 관리에서의 비용도 만만치 않다보니
이를 해결고자 나온 개념이 가상화 개념이다 (1960년부터 됬다 카더라)
즉, 여러대의 컴퓨터를 쓰지 말고- 여러대의 컴퓨터의 효율을 낼 수 있는 컴퓨터를 한 대만 서버실에 들이고
그 컴퓨터에서 다수의 컴퓨터를 운영하는 듯한 트릭으로 운영하자는 내용이다.
좀 더 쉽게 얘기하면, 리눅스 서버 PC 4대가 있던 환경을 리눅스 서버 4대가 운영될 수 있는 서버 PC 1대를 쓰자는 얘기이다.
자세한 얘기는 아래의 효성 ITX 클라우드사업부의 주창오 께서 잘 정리 된 내용을 읽어보자.
(http://itxcloud.tistory.com/127)
서버 가상화를 도입하는 이유?
서버 가상화에 대한 투자가 이루어지는 데는 많은 이유가 있다. 일부는 비용 절감의 일환으로 진행되는가 하면, 순수하게 기술적인 이유로 진행되는 경우도 있다.
- 서버 가상화는 통합을 통하여 공간을 줄일 수 있다. 하나의 서버는 하나의 애플리케이션을 구동하는 형태가 일반적인데, 상당수의 애플리케이션들은 적은 양의 처리능력만을 사용한다. 따라서 네트워크 관리자는 이러한 서버들을 하나의 서버로 통합하여, 다수의 가상 환경을 구동시킴으로써, 물리 서버 및 공간을 절감할 수 있다. 수백 또는 수천 대의 서버를 운영하는 기업에게 있어서 가상화의 적용을 통해 물리적 공간을 현저히 줄일 수 있다.
- 서버 가상화는 추가적인 물리 서버 구매 없이도 리던던시(Redundancy)를 확보할 수 있게 한다. 리던던시는 여러 개의 하드웨어에 동일한 애플리케이션을 구동함으로써, 하나의 서버가 오동작을 하더라도 다른 서버에서 동일 애플리케이션을 구동하므로 중요한 안전장치가 된다. 이러한 리던던시는 서비스 중단을 최소화한다. 하나의 애플리케이션을 구동하는 두 개의 가상서버가 하나의 물리 서버에 구축되는 경우, 물리 서버의 다운은 가상 서버의 즉각적인 중단을 유발하므로, 대부분의 네트워크 관리자들은 리던던시 가상 서버를 다른 물리 서버에 구축하는 것이 일반적이다.
- 가상 서버는 프로그래머의 독립성을 보장해준다. 즉 독립된 시스템에서 신규 애플리케이션을 테스트하거나 운영할 수 있도록 한다. 네트워크 관리자는 전용 물리 서버를 구매하지 않고도 신규 가상 서버를 즉시 생성하여 할당할 수 있다.
- 서버 하드웨어가 노후화되는 경우, 하나의 시스템에서 다른 시스템으로 전환하는 것은 매우 어려운 작업일 수 있다. 노후화 된 시스템(종종 레가시 시스템으로 부른다)에서 제공되는 서비스의 연속성을 위해, 네트워크 관리자는 최신 물리 서버에 가상 서버를 생성할 수 있다. 애플리케이션 운영상 볼 때 바뀌는 것은 없으며, 프로그램은 마치 과거의 하드웨어에서 구동되는 것처럼 운영된다. 이는 새로운 프로세스로의 전환 시, 하드웨어 오동작에 대한 우려를 덜어주며, 특히 레가시 하드웨어 공급업체가 없어져서 더 이상의 유지보수가 불가능한 경우에는 더욱 유효하다.
- 마이그레이션은 하나의 서버 환경을 이전(또는 이동)시키는 것을 의미하는데, 하드웨어와 소프트웨어가 동일할 경우, 네트워크 상 하나의 물리 서버 상의 가상 서버를 다른 물리 서버로 이동하는 것이 가능하다. 과거에는 동일 하드웨어, 동일 운영 체제, 동일 프로세서 환경에서만 가능하였으나, 현재는 프로세서가 달라도 동일한 제조사일 경우라면, 마이그레이션이 가능하다.
서버 가상화의 종류
가상 서버를 생성하는 데는 세가지 방식이 있다. 전가상화(full virtualization), 반가상화(para-virtualization), OS레벨 가상화(OS-level virtualization). 물리 서버는 호스트(host)라고 하며, 가상 서버는 (guest)라 한다. 가상 서버는 마치 물리 서버처럼 동작하는데, 각각의 시스템은 물리 서버의 자원을 가상 서버에 할당해 주는 접근 방식에 있어서 그 차이가 있다.
전가상화는 하이퍼바이저(hypervisor)라고 하는 특수한 소프트웨어를 사용한다. 하이퍼바이저는 물리 서버의 CPU와 디스크에 직접 상호작용을 하며, 가상 서버의 운영체제를 위한 플랫폼 역할을 한다. 하이퍼바이저는 각각의 가상 서버들을 완전히 독립적으로 운용토록 한다. 각각의 게스트 서버는 자체 OS에서 운영되기 때문에, 리눅스 기반 게스트와 윈도우즈 기반 게스트를 동시에 운용할 수도 있다.
하이퍼바이저는 물리 서버의 자원을 모니터링하여, 가상 서버에서 애플리케이션이 구동될 때, 물리 서버의 자원을 적절한 가상 서버에 할당해 준다. 물론 하이퍼바이저 자체 구동을 위해서도 처리능력 등의 리소스를 필요로 하기 때문에, 하이퍼바이저의 리소스 사용량은 전체 서버 퍼포먼스와 애플리케이션 구동속도에 영향을 줄 수 있다.
반가상화는 전가상화와는 달리, 게스트 서버 간의 독립성 없이 상호작용한다. 반가상화 하이퍼바이저는 게스트 운영체제를 관리하기 위해 필요한 자원(처리능력)이 상대적으로 적게 든다. 이는 각각의 OS가 동일한 물리 서버에서 운영되는 다른 운영체제에서 필요로 하는 자원을 이미 인지하고 있으며, 이들 시스템은 마치 하나처럼 동작하게 된다.
OS레벨 가상화는 하이퍼바이저를 사용하지 않는 대신, 가상화 기능이 호스트 OS에 포함되어 있다. 호스트 OS의 가상화에는 전가상화의 하이퍼바이저의 모든 기능들이 포함된다. 다만 게스트 서버는 반드시 동일한 OS를 구동해야 한다는 한계가 존재한다. 각각의 가상 서버는 독립적이지만, 다른 종류의 OS를 복합적으로 사용할 수 없으므로 이러한 환경을 균일 환경(homogeneous environment)이라 한다.
어떠한 방식이 최선인지는 네트워크 관리자의 요구사항에 달려있다. 관리자의 물리 서버가 동일한 OS를 요하는 경우, OS레벨 접근이 최선일 것이며, 다양한 OS를 사용할 경우에는 반가상화가 최선일 것이다. 반가상화의 문제점은 비교적 최신 기술이라 이를 공급하는 기업이 매우 적다는 것이다. 대부분의 공급자는 전가상화만을 제공하고 있으며, 반가상화에 대한 기술 축적과 솔루션 확대를 진행하고 있는 중이다.
서버 가상화의 한계
서버 가상화가 주는 혜택은 너무도 매력적이어서, 모든 기술에는 한계가 있다는 사실을 종종 잊어버리게 한다. 서버 가상화는 도입 전 반드시 자체 네트워크 아키텍쳐와 필요 사항, 도입 예정인 서버 가상화 기술을 면밀히 검토하여야 한다.
CPU 점유율이 높은 애플리케이션의 전용 서버에 있어서 가상화는 큰 도움이 되지 않을 수도있다. 가상화는 본질적으로 물리 서버의 처리능력을 여러 개의 가상 서버에 나누어 사용하기 때문에, 애플리케이션의 요구환경에 미달할 경우, 문제가 발생할 수 있다. 최악의 경우 서버의 처리능력을 넘어서게 되면, 시스템이 다운될 가능성도 있다. 따라서 네트워크 관리자는 사전에 CPU 사용량을 자세히 검토해야 한다.
하나의 물리 서버에 지나치게 많은 가상 서버들을 생성하여 서버의 CPU에 과부하를 일으키는 것은 그다지 현명한 일이 아니다. 하나의 물리 서버에서 구동하는 가상 서버가 많아지면 많아질수록, 각각의 가상 서버가 사용할 수 있는 처리 능력은 줄어들게 되며, 물리 서버의 디스크 사용량 또한 동일한 문제를 일으킬 수 있다.
또 다른 문제는 마이그레이션인데, 현재는 하나의 물리 서버에서 구동되는 가상 서버를 마이그레이션할 수 있는 전제조건은 동일한 제조사의 프로세서를 사용해야 한다는 것이다. 만일 동일한 네트워크 상에 있는 인텔 프로세서를 사용하는 서버에서 AMP 프로세서를 사용하는 서버로 가상 서버를 포팅하고자 한다면, 이는 불가능하다.
가상 서버의 마이그레이션이 왜 필요할까? 만일 하나의 물리 서버에 대한 유지보수가 필요할 경우, 다른 물리 서버로 가상 서버를 포팅하는 것이 애플리케이션 다운타임을 최소화 할 수 있기 때문이다. 마이그레이션은 선택사항이 아니다. 하나의 물리서버에서 구동되는 가상 서버의 모든 애플리케이션들은, 유지보수 시에는 서비스가 불가하게 될 것이다.
이러한 제약사항에도 불구하고 많은 기업들은 서버 가상화에 대한 투자를 지속하고 있다. 서버 가상화 기술이 발전하게 되면, 대규모 데이터센터가 필요하지 않는 상황이 발생할 수도 있다. 서버의 전력 소비량과 열 발생량 또한 감소하게 되면, 자원 활용에 대한 효율성 뿐만 아니라, 그린 IT에 대한 니즈 또한 충족시킬 수 있다.
(레퍼런스 : Jonathan Strickland, computer.howstuffworks.com)
하이퍼바이저(Hypervisor)의 어원
- 가상화
운영체제가 process 에 대해서 기본 resources 에 대한 접근을 가상화(Virtualization) 해 놓았듯이 하이퍼바이저도 여러 guest OS 에 대해서 기본 resources 에 대한 접근을 가상화 해 놓은 것이다.(Ref. 2)
- 하이퍼바이저 hypervisor
이 가상화를 지원하는 소프트웨어가 바로 하이퍼바이져 hypervisor 이다. (logical platform 이 더욱 맞는 표현이라고 생각되지만, 여기서는 이해를 쉽게 하기 위해 그냥 software 라고 하자.) 이 가상화를 지원하는 hypervior 는 guest os 가 어느 단계에서 돌아가는가를 기준으로 type을 나눌 수 있다.
Vmware workstations (Virtual box) 과 Vmware Vsphere 의 차이점?
위에서 기본적인 배경지식에 대해 설명해보았다. 그렇다면 여기서 VMware는 Vsphere는 어디에 해당하는 내용인지 정리를 하려한다.
하이퍼바이저 가상화는 2가지의 형태로 나눌 수 있다.
하드웨어에 직접적인 가상화를 하느냐 안하느냐의 차이다.
1) 하드웨어 직접 가상화 (플랫폼 가상화) - Native (bare-metal) 방식
Vsphere가 ( 이 외에도, 마소의 Hyper-V, Xen server 등 ) 이 경우에 해당한다.
이 방식은 보통 하드웨어는 OS에 의해 제어가 된다는 개념을 알텐데, 하이퍼바이저가 OS의 개념으로 온 보드에 바로 올려진다.
자기가 직접 OS의 역활을 하며 각 VM (Guest 이미지) 들을 제한 없이 제어가 가능하기에, 그래픽카드의 성능 분배라던지,
여러가지가 가능하다. (이게 무슨 말이냐면, Native 방식으로 구성하면 원격으로 GUEST VM에 윈도우기반 똥태블릿으로도 최신 3D게임을 인터넷 속도만 빠르다면 미러캐스트 플레이가 가능해진다는 거다.. 경험담이다 -_-; )
퍼포먼스 또한 일반적인 PC 환경 (OS만 깔아서 쓸 때) 에 비해 90% 정도 나온다.. 단점이 있다면 일반적인 컴퓨팅과 개념이 멀어서 일반인이 쓰기엔 어렵고 하이퍼바이저 자체에는 우리가 생각하는 컴퓨팅을 할 수 있는 개념이 아니어서 컴퓨팅을 하려면 Guest 이미지가 꼭 필요하다는 차이랄까..
2) 소프트웨어 간접 가상화 (리소스 가상화) - Hosted 방식
Vmware나 Virtualbox가 이쪽에 해당한다.
이쪽은 일반인들도 고전게임 하려고 VM을 접하는 사람이 많기에.. (또는 맥북.. 부트캠프 같은) 많이들 쓰는 방식이다. 말그대로 OS 위에 하이퍼 바이저가 올라가는 형태이다. 솔루션 마다 다르지만 기능적인 차이가 크게 없지만 UX 기능 관점으로 조금씩 차이가 있다.
그리고 전가상화와 반가상화가 있다.
이게 무엇이냐고 하니 단어 뜻 그대로 모두다 가상화를 하냐? 반만 하냐 이 뜻이다.
차이점은-
전가상화(Full Virtualization)
하드웨어를 모두 가상화 한 것으로 Guest OS에서 직접적인 디바이스(하드웨어) 호출을 할 수 있다.
이쪽이 VT-X 를 써야할 필요가 있다.
이쪽이 vmware, virutalbox 와 같은 솔루션이 들어가고.
반가상화(Para Virtualization)
하드웨어를 모두 가상화한 것은 아니다. 이렇다보니, 기능적으로 한계가 있고, 이를 수행하기 위해서는 하이퍼바이저의 도움이 필요하다. 아이러니 한건 결국 하이퍼바이저에 모든 걸 의존, 의뢰 하는 형태이다보니 (모든 걸 제어하다 보니)보안적인 측면이나 퍼포먼스가 전가상화에 비해 훨씬 좋 다. 또한 VT-X가 굳이 필요하지 않다.
이쪽이 vsphere 나 zen 같은 개념이다.
VT-X는 뭘까
KVM은 Xen과 다른 관점에서 가상화를 제공한다. KVM은 가상화를 제공하는 하이퍼바이저를 메모리 관리자나 파일 시스템등과 같은 커널의 '서브 모듈'로 취급한다. 개인적으로는 가상화 기능이 운영체제의 기본이 되어가는 시점이므로 KVM과 같은 접근 방식이 옳다는 생각이다. KVM에서 가상화를 제공하기 위해서는 한 가지 전제 조건이 붙는데, 사용하는 CPU에서 HVM(Hardware Virtual Machine) 기능을 제공해야 한다는 점이다. 과거 가상 메모리(Virtual Memory)를 지원하기 위해 CPU에서 페이징(Paging) 기능을 하드웨어 차원에서 제공했던 것과 같이, 최근 가상화 기능이 많이 사용되므로 CPU에서 가상화 기능을 하드웨어 차원에서 제공해주는 것이다. x86 아키텍처의 HVM으로는 Intel의 VT-x와 AMD의 SVM가 있다. 같은 x86 아키텍처이라고 할지라도 가상화 기능은 벤더마다 다르므로 벤더별로 구현해야 하는 단점이 있다. 최근에는 임베디드 시스템에서 주로 사용되는 ARM 아키텍처도 Cortex-A15 이후로 가상화 확장(Virtualization Extension) 기능이 추가되어 HVM을 제공한다.
전가상화 vs 반가상화
구분은 이렇게 해놓았지만, 이론적으로는 이렇다는 이야기고, 현재 출시되어있는 반가상화/전가상화 솔루션들도 실제로는 성능상의 문제로 전가상화와 반가상화를 넘나들며 구현되고 있다고 본다. 윈도를 포함한 대부분의 운영체제는 가상화 소프트웨어에 GuestOS로 들어가기 위해 이미 수정되어있으며, 부족한 부분은 Guest OS에 하이퍼바이저와 연동할 드라이버를 설치해 해결하고 있다. 필자는 전가상화, 반가상화 구분이 모호해진 이유가 VT-X, AMD-V 에서 제시한 Ring -1 때문이라고 본다. Ring -1 이 나온 이유중 하나가 Ring 0 에서 실행하는 운영체제를 운영체제 수정 없이 반 가상화로 실행하기 위함이다.
가상화 지원을 위한 하드웨어 기술
[전가상화]와 [반가상화]를 사용할 때 하드웨어에서 성능 향상에 필요한 기능을 지원해주면 좀 더 빠르게 작동할 수 있다. 주로 리매핑 기술과 관련되어있다. 하드웨어 가상화 기술이 지원되는 장비와 하이퍼바이저와 게스트OS를 사용해, 가상화로 인한 성능 저하 비율을 1% 이하로 가져가는게 목표다. 필자가 생각에는 현재 가상화 기술로도 비용 절감을 실현할 수 있다고 생각한다. 아래는 현재 상용화된 가상화를 위한 하드웨어 기술들이다.
AMD-V, VT-x
CPU에서 지원하는 가상화 성능 향상 기술이다. AMD는 AMD-V, Intel은 VT-x이라 명명했다. 개발 당시 인텔에서는 Vanderpool이라고도 불렸다. 커널은 Ring 0에서 작동해 장치를 제어하게 되는데, 유저 어플인 GuestOS는 Ring 3에서 작동하기 때문에 Ring 0가 필요한경우 복잡한 과정을 거쳐야 했다. 이에 Ring -1에 해당하는 모드를 추가해(VT-x의 경우 10개의 VM* 명령셋을 추가) 하이퍼바이저를 만들어 성능을 높일 수 있도록 했다.
Nested Page
2세대 AMD-V, VT-x 라고도 불리는 Nested Page는 MMU(Memory Management Unit)를 가상 머신에 최적화시키는 CPU의 기능이다. 메모리를 많이 참조하는 어플의 경우 2배 이상의 성능향상이 있다. 인텔의 경우 EPT(Extended Page Table)로 명명했고, AMD의 경우 RVI(Rapid Virtualization Indexing)로 명명했다. AMD의 경우 페넘II 부터, 인텔의 경우 i3, i5, i7 이상의 제품군에서 사용할 수 있는데, 인텔은 CPU마다 지원사항이 다르다. 인텔 CPU의 지원여부는 About Intel® Virtualization Technology을 읽어보자. Ivy Bridge기반 i3, i5, i7은 현재 모두 EPT를 지원한다.
IOMMU
IOMMU(Input/Output Memory Management Unit)는 Intel 칩셋의 VT-d, AMD의 AMD-Vi(IOMMU), SUN의 Device Virtual Memory Access등을 지원하는 마더보드를 사용하면 (정확히는 칩셋에서 지원해야 한다) 성능을 더 향상시킬 수 있다. IOMMU는 GPU에서 사용되던 GART(Graphics Address Remapping Table)와 비슷한 기술로 메모리및 DMA 리매핑 기술이다. 이 글을 쓰는 시점에서 IOMMU 는 890FX, Q35, Q45, Q57, X58, Q67, B75, Q77, 5x00, 3450 칩셋을 채용한 마더보드의 일부에서 지원된다. 인텔 마더보드의 경우 Compatibility with Intel® Virtualization Technology (Intel® VT)에서 지원되는 마더보드를 확인해볼 수 있다.
VT-c
인텔의 이더넷 가상화 기술이다. 가상 이더넷 장치를 추가할 때 하드웨어적인 가속을 해준다.
하이퍼바이저
하이퍼바이저(Hypervisor)는 호스트컴퓨터와 게스트 OS를 연결해주는 가상화 플랫폼이다. 크게 Type 1과 Type 2로 나뉜다.
Type 1: 하이퍼바이저가 하드웨어에서 바로 실행된다. (따라서 Type 1 하이퍼바이저는 부팅이 가능하다) 보통 Type 1은 반 가상화를 지원할 수 있다.
Type 2: 하이퍼바이저는 OS상에서 실행된다. Type 2는 전 가상화를 지원한다.
Type 1 하이퍼바이저는 부팅 가능하다는 것에서 OS와 비슷하지만 OS는 아니다. OS의 필수기능중 몇가지가 빠져있기 때문이다. 어플리케이션을 실행할 수 없다. (좀 더 복잡한 바이오스 정도로 보는것이 좋을지도 모르겠다)
그럼 Docker 는 어디쪽일까?
docker 가 요즘 많이 핫 한데, 이녀석은 최신기술보다는 그냥 있던 기술(LXC)을 트랜드에 맞게 쓰기 쉽게 한 개념이다.
반가상화의 개념을 좀 더 경량화 한 개념으로, Docker는 반가상화보다 좀더 경량화된 방식이다.
LXC 라 하여 '리눅스컨테이너' 라는 방식이어서 게스트 OS를 설치하지 않는다. Docker 이미지에 서버 운영을 위한 프로그램과 라이브러리만 격리해서 설치할 수 있고, OS 자원(시스템 콜)은 호스트와 공유합니다. 이렇게 되면서 이미지 용량이 크게 줄어든다.
Docker는 하드웨어를 가상화하는 계층이 없기 때문에 메모리 접근, 파일시스템, 네트워크 속도가 가상 머신에 비해 월등히 빠르다. 수치상으로 호스트와 Docker 컨테이너 사이의 성능차이는 호스트와 거의 동일한 속도라 할 수 있다고 한다.
출처: https://glqdlt.tistory.com/244 [Freesia]
출처 : https://www.server-world.info/en/note?os=CentOS_7&p=kvm&f=10
출처 : https://www.solanara.net/solanara/virtualization#head_virtualization_summ
https://www.virtualbox.org/manual/ch09.html#pcipassthrough
'IT-공부하자' 카테고리의 다른 글
[가상화] passthrough (0) | 2019.05.21 |
---|