Connecting
IT 인프라 6편 가상화 본문
인프라의 기본 가상화
가상화의 정의는 물리 장치의 리소스를 분할하거나 통합해서 추상화된 논리적인 가상화 장치를 만들고 이때 가상화 장치를 물리 장치처럼 사용하여, 완전한 하나의 하드웨어처럼 수행될 수 있도록 물리적 특성을 그대로 재현하거나 새로 부여합니다.
가상화의 역사와 발전
가상화라는 용어는 1960년대에서도 사용되었을 만큼 오래된 기술입니다. 당시 시분할 기법을 통해서 물리 장치가 일을 시간을 매우 짧은 단위 시간으로 분할하여 여러 애플리케이션이 나눠 쓰면서 동시처리가 가능하게 되었습니다.
초기에 가상화 기술이 적용된 시스템은 영국 대학연합의 아틀라스 컴퓨터와 IBM의 메인프레인 초기 모델이 있었습니다. 다만, 리소스에 대한 가상화 기술이 적용되었으며, 스토리지나 네트워크와 같은 다른 인프라 환경에서는 가상화 개념은 없었습니다.
50여 년 정도의 시간 동안 급격하게 기술 성숙이 이루어지면서 인프라 모든 영역에서 가상화 개념이 사용되게 되었으며, 인프라 벤더 입장에서도 기술 장벽이 매우 낮아졌습니다.
VMware의 책임 연구원 메튜 포트노이는 <가상화 세상속으로> 책에서 윈도우 서버 기반 인프라 때문에 가상화 기술이 발전했다고 주장하고 있습니다.
윈도우는 Single-user Interface OS 이기 때문에 2개 이상의 프로그램을 한 서버에서 실행하면 심한 자원 경합이 생겨 장애가 발생하는 경우가 있었습니다.
이러한 문제로 윈도우 서버 하나의 한 개의 애플리케이션만 배치하여 관리하다보니 남는 자원의 활동에 대한 필요성이 강해지고, 이러한 요구를 만족하기 위해서 가상화 기술이 대중화되는 시발점이 되었다고 합니다.
가상화의 핵심 기술 VT-d & VT-x
가상화 서버를 운영하면 VT-d와 VT-x와 같은 용어를 많이 접하게 됩니다.
본 기술은 가상화 서버를 운영하는데 있어서 핵심 기술로써 용어를 정리하고 넘어가도록 하겠습니다.
VT는 Virtuailzation Technology의 약자로서 복수 OS의 병렬동작을 보다 효율적으로 해주는 자원 기술입니다.
VT-x는 AMD-V와 대응되는 기술이며 VT-d는 IOMMU와 대응되는 기술입니다.
단, AMD 제품과 인텔간에는 호환성이 없습니다. 이름은 달라도 개념은 비슷하기 때문에 인텔 기술을 중심으로 서술하도록 하겠습니다.
VT-d (Intel Virtualization Technology for Directed I/O)
호스트 OS 기반이던 하이퍼바이저 기반이던 각각의 디바이스들은 vmm을 통해서 각각의 VM들과 연결 되며, vmm을 통해서 디바이스를 가상으로 에뮬레이션하여 자원을 할당받기 때문에 효율성 문제와 병목현상이 발생합니다.
따라서 각각 VM에서 직접적으로 디바이스를 엑세스 할 수 있게 해주는 기술이 VT-d로서, 위의 그림과 같이 접근할 수 있도록 합니다. 단, 이 기술이 사용되기 위해서는 DMA Remapping이라는 기술이 필요합니다.
DMA Remapping 이름에서 확인할 수 있듯이 디바이스의 고유 메모리 주소를 VM에서 "직접" 엑세스할 수 있도록 DMA 주소값을 변환/관리 하는 기술로 각각의 디바이스들과 시스템이 직접적으로 연결되는 노스브릿지 사이의 VT-d 기능이 위치하게 됩니다.
이로 인해 칩셋에 따라 VT-d 적용여부가 달라지게 됩니다. (단, 메모리 컨트롤러가 CPU에 내장되며, 노스브릿지/사우스브릿지가 통합 되었기 때문에 다른 이유로 인해서 제약조건이 달라질 수 있습니다.)
DMA Remapping이 직접적으로 연결된다는 사실 이외에 각각의 디바이스들은 독립적인 I/O 버퍼를 활용할 수 있기 때문에 병목현상을 줄일 수 있으며, 도메인간 버퍼를 공유하지 않기 때문에 데이터의 보안성을 높일 수 있다는 장점이 있습니다.
또한 최신 NIC에서 사용하는 SR-IOV, 멀티 패킷, GPU 가속과 같은 가상화 신기술들은 VT-d 기반의 하위 기능이기 때문에 VT-d를 활성화 하지 않으면 모든 기능이 정상 동작하지 않기 때문에 구형 하드웨어를 사용하는 것과 다르지 않습니다.
VT-x (Intel Virtualization Technology Extension), VMX(Virtual Machine Extension)
VT-x는 전가상화 환경에서 특권 명령을 수행하는데 발생하는 오버헤드를 감소할 수 있는 기술입니다.
이를 이해하기 위해서는 CPU의 동작 레벨에 대해서 이해할 필요가 있습니다.
OS에서 구동되는 소프트웨어는 보안을 위해 권한과 보호 수준에 따라 링(RING)등급으로 나뉘어져 있습니다.
Ring 0를 특권모드라고 부르며, 시스템 자원을 관리하는 OS 커널이 동작합니다.
Ring 1,2는 예약된 상태이고, 우리가 보통 사용하는 응용프로그램은 Ring 3에서 동작합니다.
X86 이전에 등장한 기존의 가상화에서는 게스트 OS의 실행을 감시하고 있다가 특권 명령이 방생하면 VMM에서 이를 Trap하여 하이퍼바이저에서 처리하고(Emulate) 결과값을 게스트 OS에 전달하는 'Trap and Emulate'라는 방식으로 처리하였습니다.
이 방법은 리소스 소모가 크고 속도가 느리지만 호환성을 확실하게 보장할 수 있는 방식이었습니다.
단, X86 시스템에서는 아키텍쳐 상의 특정 명령어가 특권 모드와 비 특권 모드에서의 동작이 다르게 짜여져 있기 때문에 Ring 3에서 동작하는 게스트 OS에서 Trap이 발생하는지 따질 수 없었기 때문에 'Trap and Emulate' 방식을 사용할 수 없었습니다.
이러한 문제에 대해서 VMware와 Xen은 2가지의 다른 방식으로 처리하는 방안을 제안했습니다.
VMware - 이진(바이너리) 변환
특권 명령이 들어왔을 때 하이퍼바이저가 '적절하게' 처리한다.
즉, VM이 Hypercall을 통해 하이퍼바이저에게 명령을 내리면 간단한 바이너리 연산을 통해서 하드웨어가 인식할 수 있는 명령어로 전달하는 기법으로서 개발하기가 상당히 까다롭다는 단점이 있습니다.
Xen - Hypercall
게스트 OS 커널을 수정하여, 특권 명령이 들어왔을 때 Hypercall을 호출하여 하이퍼바이저가 실행한다.
Hypercall이 호출되면 Ring 0에서 명령이 실행됨을 의미하고, 시스템 애플리케이션이 명령을 실행하면 Ring 3에서 동작을 하게 됩니다.
위에서 살펴볼 수 있듯이 Xen의 Hypercall 방식이 이진 변환에 비해 성능이 좋았으며, 전가상화에 대비되는 반가상화라는 명칭을 가지게 된 계기가 되었습니다.
X86-X64 가상화가 점점 확산되면서 CPU 제조사에는 이것을 하드웨어적으로 처리하고자 하는 방법을 고안하게 되었고 VT-x, AMD-V 기술이 탄생하게 되었습니다.
VT-x, AMD-V가 활성화 되면 Ring 0가 Root/non-Root 모드로 나누어져 실행되며, 그위에 Ring 3 등급이 실행됩니다.
이를 통해서 게스트 OS는 독립된 환경을 가질 수 있게 됩니다.
단, non-Root에서는 Ring 0 등급이라 할 지라도 몇 가지 명령어가 제한되나, 명령어가 커널에서 실행되는 것인지, 사용자 애플리케이션인지 명확하게 알 수 있기 때문에 명령어를 변환하거나 OS 커널을 수정할 필요가 없습니다.
특권 명령이 발생하면 하이퍼바이저로 제어권을 넘겨서 처리하며, 덕분에 성능상의 많은 이득을 볼 수 있으며, 많은 하이퍼바이저들이 하드웨어 가상화를 사용하고 있습니다.
가상화 기술을 나누는 방식
공유
대표적인 가상화 기법으로 다수의 가상 자원을 하나의 물리 자원과 연결하여 시간 분할 기법으로 물리적인 자원을 공유하여 사용하는 방식입니다.
집합
여러 개의 자원을 하나로 묶어서 물리적인 용량과 성능을 향상시키고, 하나의 논리 장치로 관리할 수 있도록 만들어 주는 것 입니다.
지난 네트워크 시간에 언급했던 MLAG 기술이 대표적인 가상화 방식입니다.
서버는 통신할 때 LACP(Link Aggreagation Control Protocol)를 사용하여 하나의 스위치와 인터페이스로 통신하는 것처럼 인식하나 물리적으로는 2개의 링크와 2배의 대역폭을 사용하며, 가용성까지 보장하는 기술입니다.
에뮬레이션
가상 시스템에 인식된 스토리지는 물리적으로 연결되어 있는 스토리지와 모델명이 다릅니다. 가상 시스템에 어떤 OS 설치하더라도 사용할 수 있는 범용적인 모델로 인식이 되나, 벤더에 특화된 기능은 사용할 수 없다는 단점이 있습니다.
자원 절연(Resource Insulation)
물리 장치의 상태가 비정상인 상태에서도 논리 장치의 고가용성을 보장됨을 의미합니다.
RAID 0를 제외한 나머지 RAID들은 모두 데이터 유실을 방지하고 고가용성을 보장하기 위한 방법입니다.
멀티패스(Multipath)
1대의 서버가 복수의 패스(경로)를 통해서 스토리지 장치에 접속하는 방법으로서 중복된 LUN(Logical Unit Number)을 하나의 가상 스토리지 장치로 묶습니다.
이를 통해 애플리케이션이나 LVM(Logical Volume Manager)에서는 멀티패스 장치만 사용합니다.
하나의 스토리지 연결 경로의 장애가 발생하더라도 사용자는 장애를 전혀 느끼지 못하고 사용할 수 있습니다.
LUN : 수십 수백 개의 디스크에서 자원을 조금씩 할당받아서 만든 논리적인 디스크로써, 딱 필요한 만큼의 용량으로 만들 수 있다는 장점이 있습니다. 또한 수십 수백 개의 디스크에서 데이터를 찾을 수 있기 때문에 성능이 매우 좋아진다는 특징이 있습니다. 이를 와이드 프로비저닝 혹은 와이드 스트라이핑이라고 합니다.
LVM : 저장장치들을 좀더 효율적이고 유연하게 관리할 수 있는 커널의 부분과 프로그램을 말합니다. LVM 을 이해하려면 먼저 Software RAID (Redundant Array of Inexpensive Drives)를 언급해야 하는데, 이 둘은 비슷하면서도 큰 차이가 있습니다. 비슷한 점은 여러 물리적인 디스크들을 하나의 논리적인 디스크처럼 다룰 수 있게 함으로서 조합방법에 따라 고용량, 고속, 데이터의 무결성을 실현하는 점입니다. 하지만 분명하게 다른 점이 있는데. lvm은 raid보다 관리 및 확장이 비교적 쉬운 반면, raid에는 lvm에는 없는 disk mirroring(RAID level 1), Parity Stripe (RAID level 4,5) 등의 방식이 있어서 속도 또는 데이터의 무결성을 보장 받을 수 있습니다.
하이퍼바이저의 이해
하이퍼바이저는 여러 개의 VM이 한정된 하드웨어 자원을 나눠 쓸 수 있도록 합니다.
운영체제와 합쳐진 형태를 Type 1 하이퍼바이저, 분리된 형태를 Type 2 하이퍼바이저라고 합니다.
전가상화 반가상화라고 부르는 이러한 방법은 하이퍼바이저의 역할 범위에 따라 구분한 것으로 전가상화는 하이퍼바이저가 호스트 운영체제에서 모든 일을 처리하는 것이며, 반가상화는 일부 역할을 VM의 도움을 받아서 처리하는 개념입니다.
VMware vSphere ESXi의 경우 모든 하이퍼콜(Hypercall)을 하이퍼바이저가 처리하는 반면 Xen의 경우 Dom 0라는 게스트 운영체제가 하이퍼콜의 일부를 넘겨받아 처리하는 구조로 되어있습니다.
전가상화는 하이퍼바이저를 통해 하드웨어에 직접 접근하기 때문에 OS 커널의 수정없이 사용할 수 있다는 장점이 있으나 이러한 장점을 유지하기 위해서 모든 장치에 드라이버를 에뮬레이션 가상화 기법으로 제공하고 바이너리 변환 기법을 통해 하드웨어에 대한 커널 수준 접근을 가능하게 합니다.
Xen과 같이 반가상화의 경우 하이퍼바이저의 게스트 도메인이라고 불리는 VM뿐만 아니라 컨트롤 도메인(Control Domain, Domain 0)이라는 아주 가벼운 리눅스환경의 VM이 존재합니다. 게스트 도메인이 요청한 CPU, 메모리, 타이머 등에 대한 하이퍼콜은 하이퍼바이저에서 처리해주고 스토리지나 네트워크와 같이 I/O를 발생하는 하이퍼콜은 컨트롤 도메인이 하드웨어에 요청하는 구조입니다.
이와같이 게스트 OS가 완전하게 독립적인 수행환경을 보장받지 않기 때문에 게스트 OS는 반드시 가상화 환경에 맞게 개선되야 합니다.
Hardware-assisted Virtualization
위에서 언급한 기술로 전가상화에서 많이 사용되는 보조 기술입니다.
바이너리 변환 기술이 개발하기가 상당히 어렵기 때문에 CPU 벤더가 제공하는 가상화 기술을 사용합니다.
다만, CPU 자체 기능으로 VM과 하이퍼바이저를 모두 관리하기 때문에 CPU 부하에 의한 오버헤드가 있다는 단점이 있습니다.
컨테이너
컨테이너(container)는 VM이 없으며 게스트 OS도 없습니다. 따라서 더 강력한 가상화 기술이며, PaaS가 대중화 되면서 주목받고 있습니다.
호스트 OS입장에서 보면 컨테이너는 하나의 프로세스로 기동하기 때문에 하드웨어를 초기화 하는 작업이 필요하지 않습니다. 따라서 가상 환경을 실행하고 종료하는데 시간이 매우 빠르며, 오버헤드도 거의 존재하지 않습니다.
다른 가상화 환경 제공방식과 동일하게 프로세스를 수행하는 독립적인 공간을 제공하여, 보안적인 측면도 우수하며, 밀도 높은 설계가 가능하고 하드웨어 자원 수준이 낮다는 장점이 있습니다.
단, 호스트 OS인 리눅스 이외의 다른 OS에서는 동작하지 않으며, 리눅스 계열이 아닌 다른 OS를 설치할 수 없습니다.
이론적으로는 컨테이너의 리눅스의 모든 배포판을 설치하는 것이 가능하지만, 해당 라이브러리를 사용하는 것일 뿐, 리눅스 커널에서 실행되기 때문에 태생적인 한계도 가지고 있습니다.
또한 PaaS와 밀접한 이유는 독립적인 애플리케이션 수행 환경을 서비스 형태로 제공하는데 있어서 핵심 기능을 제공하고, 오버헤드가 가장 적기 때문에 가장 많이 사용되고 있는 추세입니다.
기업에서 사용할 때 고려해야 하는 점은 컨테이너들이 하드웨어의 리소스를 공유할 수 밖에 없기 때문에 발생하는 자원경합을 해결하는 것이 가장 중요한 과제입니다.
자원 경합 방지 기술 중에서 인텔 아이태니엄에만 포함되어 있다가 x86 CPU 중에서 인텔 하스웰 E7 CPU에 처음 탑재된 기능으로 TSX(Transactional Synchronoud eXtension) 기능이 있습니다.
이 기술은 여러 번의 연산을 컨텍스트 스위칭 없이 한 번에 처리해 줍니다.
컨텍스트 스위칭 : CPU 위에서 실행 중인 프로세스가 대기 중인 프로세스에게 양보하기 위해, 종료되지 않은 상태로 레지스터에 있던 데이터를 RAM으로 저장하고 대기 중이던 프로세스의 데이터를 레지스터로 복사하는 작업
서버 가상화 할당 방법
가상 시스템을 구축하기 위해서는 물리 서버로 시스템을 구성할 때와 거의 유사한 패턴으로 진행하게 됩니다.
먼저, 시스템에서 수행될 애플리케이션의 워크로드 패턴을 분석해야 하며 이후 비기능 요구사항(NFR) 수집과 시스템 용량 분석을 진행하고, 논리 설계와 물리 설계를 진행합니다.
워크로드 패턴 : 시스템에서 애플리케이션을 수행하는 동안 소모하는 인프라 자원에 대한 사용 형태 및 사용량
비기능 요구사항(Non-Fuctional Requirement, NFR) : 비즈니스 또는 업무 기능과 무관한 시스템 자체에 대한 조건
CPU 할당 방법
베어메탈 서버로 TA(Technical Architecture)를 설계할 때, 서버 가상화 기술로 설계할 경우 호스트 서버 한 대에 게스트 OS를 분리하여 애플리케이션 별로 최대한 고립시켜 주는 것이 유리합니다. 이는 분리된 애플리케이션들은 각각의 게스트 OS 내에서 인프라 자원을 할당 받기 위한 경합을 회피할 수 있으며, OS를 각 애플리케이션에 맞도록 최적화하여 운영할 수 있기 때문입니다.
가상 시스템별로 CPU를 할당해야 하는 경우 애플리케이션의 다중 스레드를 요구하는지 단일 스레드를 요구하는지 확인해야 합니다. 이러한 활동을 워크로드 분석이라고 하며, 이렇게 조사한 결과를 기준으로 CPU 자원을 할당해야 합니다.
오버커밋(overcommit) : 물리적인 용량 한계를 넘어서 할당하는 개념으로, 오버커밋 비율이 높으면 자원경합에 의한 성능 지연 현상이 발생합니다.
메모리 가상화
메모리도 CPU 처럼 오버커밋이 있으나 메모리는 공간을 차지하는 개념이기 때문에 먼저 메모리 공간을 차지한 VM이 메모리를 해제하거나 재기동 하기 전에는 메모리 공간을 차지한 VM이 메모리를 할당 받지 못하고 기다리는 현상이 발생함으로 보수적으로 처리해야 합니다.
따라서 메모리는 오버커밋하여 사용하지 않습니다. 메모리가 부족하면 SWAP이 발생하고, 메모리가 부족한 모든 VM에 성능 하락이 발생하게 됩니다.
서버 가상화 기술이 발전하면서 물리 메모리의 한계를 넘어서기 위한 기술도 존재합니다.
씬 프로비저닝
VM에서 실제로 메모리를 사용할 때 물리 메모리를 조금씩 할당해 주는 방식으로 메모리 사용률에서는 효율적이지만 메모리 단편화가 발생하는 단점이 있습니다.
벌룬 드라이버(balloon driver)
메모리 오버커밋 상태에서 게스트 OS 메모리 사용량이 하이퍼바이저 메모리 크기를 초과하면 하이퍼바이저 디스크를 사용하며, 게스트 OS의 메모리 사용량이 줄어들면 하이퍼바이저 디스크에 저장된 데이터를 하이퍼바이저 메모리로 이동하는 기술
이외에도 COW(Copy on Write)와 같이 VM을 복제하여 사용하는 경우 메모리를 동일하게 복제하면 2배의 메모리 공간이 필요함으로, 복제하지 않고 2개의 VM이 동일한 메모리 영역을 참조하다가 데이터가 변경되는 시점에서 새로운 메모리를 할당하는 방법이 있습니다.
또한 압축 캐시라고 하여 VM에서 메모리를 사용할 때 VM과 물리 메모리 사이에 별도의 캐시 메모리를 두고, 그 캐시에 데이터를 임시 저장 후 압축해서 실제 물리 메모리에 저장하는 기능입니다. 벌룬 드라이버보다는 빠르다는 장점이 있으나 데이터의 형태에 따라서 압축률이 다르고, 데이터를 압축 및 해제하기 위해서 지속적으로 CPU 연산이 필요하다는 단점이 있습니다.
스토리지 가상화
가용성 확보를 위하여 서버 가상화 환경을 구성할 때는 SAN 방식의 공유 스토리지를 많이 선택합니다.
NAS 방식의 스토리지에서도 사용이 가능합니다. 단, FC나 iSCSI를 사용하는 것이 호스트에서 스토리지 성능 지연 현상이 드물게 발생합니다.
VM의 경우 애플리케이션 데이터까지 모두 스토리지에 저장되기 때문에 공유 스토리지를 구성하면 스토리지를 공유하고 있는 하이퍼바이저 간의 VM을 이동시키면서 가용성을 확보할 수 있습니다.
티어드 스토리지 서비스(Tiered Storage Service)는 골드, 실버, 브론즈 등의 서비스 레벨을 만들고 사용자 요구사항과 비용에 맞는 스토리지를 할당하는 방법으로서 퍼블릭 클라우드에서 많이 사용되고 프라이빗 클라우드에서는 거의 쓰의지 않습니다.
단, 국내에서는 퍼블릭 클라우드에 데이터를 저장하는 것을 법적으로 제재하는 산업이 많기 때문에 거의 사용되지 않습니다.
네트워크 가상화 기술과 VM 복제 기술
서버 가상화 환경을 설계 할 때, 선택 가능한 네트워크 구성 방식은 크게 2가지 입니다.
외부와 통신 가능한 네트워크
하이퍼바이저 밖의 네트워크에 연결하기 위해서 사용되는 방식
외부와 통신이 불가능한 네트워크
서버 가상화 환경 내의 서버들 간의 통신 환경을 제공하기 위해 사용
네트워크 연결방식에 따라 브릿지 네트워크, NAT 방식으로 구성할 수도 있습니다.
브릿지 네트워크 : 호스트 서버는 동일한 외부 네트워크와 동일한 수준에서 통신하는 방식
NAT : 외부 네트워크와 분리된 내부 네트워크 주소를 할당받고 호스트 서버와 별도의 네트워크를 구성합니다. 따라서 외부와 통신할 때는 호스트 서버 IP 주소로 변환하여 통신하거나 외부 네트워크로부터 별도의 IP를 할당 받아 주소를 변환하며 통신합니다.
일반적인 네트워크 기술을 사용하나, 서버 가상화 환경이 구축되면 네트워크의 복잡도가 올라가기 때문에 장애 원인 분석이나 악의적인 공격에 대한 패킷 포렌식이나 공격 차단을 위한 네트워크 자원 제어가 가능하도록 설계가 되어있어야 합니다.
기타
VM 템플릿
하드웨어 구성부터 애플리케이션까지 데이터로 저장되기 때문에 템플릿을 만들어서 필요할 때마자 배포하는 방식의 구성이 가능합니다.
복제와 스냅샷
'인프라' 카테고리의 다른 글
Gluster FS 설치 및 셋팅 방법 (0) | 2020.05.25 |
---|---|
Ubuntu Bionic Netplan 설정 방법 (0) | 2018.12.30 |
IT 인프라 5편 네트워크 (0) | 2018.10.05 |
IT 인프라 4편 - 백업 스토리지 (0) | 2018.10.05 |
IT 인프라 3편 스토리지 (2) | 2018.08.05 |