클라우드/인프라 기본 용어

인프라 자원을 재구성하는 가상화

Bordercolli 2023. 7. 18. 13:00
728x90

가상화의 정의? 

물리 장치의 리소스를 분할하거나 통합해서 추상화된 논리적인 리소스로 가상화장치를 만들고, 사용자는 가상화장치를 물리 장치처럼 사용하는 것으로 이때 가상화 장치가 그대로 완전한 하나의 하드웨어처럼 수행될 수 있도록 물리적 특성을 그대로 재현하거나 새로 부여한다.

 

* 가상화 기술을 통해서 그 서버의 관리자가 아닌 이상 가상화서버인지 물리 서버인지 차이를 느낄 수 없게 만든다. 

 

서버 가상화란? 서버 한 대를 여러 작은 서버로 나누어 사용하는 것 

 

그렇다면 서버만 가상화를 하는가?

서버뿐만 아니라 물리적으로 존재하는 cpu, 메모리, nic, 스토리지 등 거의 모든 하드웨어 리소스를 가상화할 수 있다.

 

가상화장치와 물리장치 차이

물리장치: 물리적으로 존재하는 hw

가상화장치: 물리장치를 논리적으로 연결하거나 분할, 통합해서 새로운 장치로 만들어 낸 것 

ex) 고시원

고시원은 건물 내에 수 많은 가벽을 세워서 작은 방을 만들어내고 많은 사람들을 수용한다. 이때 나누기 전의 방을 물리 메모리라고 하고, 나눈 방을 가상화 메모리라고 생각하면 된다.

그 안에 사는 사람들은 데이터

 

cpu가상화

ex) 고시원 화장실

아침에 여러 명이 동시에 화장실을 사용할 때 화장실 개수만큼의 사람만 사용하고 나머지 사람들은 자신의 차례를 기다린다. 그리고 이용하던 사람들이 볼일을 마치고 나오는 순간 다음 사람들이 들어가서 볼일을 보는데, 이때 기다리는 사람들을 가상cpu라고 하고, 실제 화장실을 물리 cpu라고 생각하면 된다. 

즉, 가상화 서버에서 요청한 연산처리(볼일)를 가상 cpu(사람)이 담았다가 물리cpu(화장실)가 비워지는 것을 기다렸다가 순차적으로 처리하는 것을 상상

 

가상화기술 시초

1960년 부터 쓰였으며, 그 당시는 시분할 기법과 함께 제시되었다. 시분할 기법은 물리장치가 일을 하는 시간을 매우 짧은 단위 시간으로 분할하여 여러 app들이 나눠쓰면서 동시 처리가 가능하도록 하는 기술

 

가상화 기술을 선호하는 이유?

왜 가상화 기술이 발전했는지를 생각해보면 이해 가능하다.

vmware의 매튜 포트노이는 프로세서(cpu)가 빨라지고 메모리가 커지면서 it관리자들이 운용하기 편한 윈도우 서버에서도 메인프레임이나 유닉스 등에서 실행하던 강력한 app들을 운영할 수 있게 되었다. 그러나 윈도우는 원래 single user interface 운영체제라서 2개 이상의 프로그램을 한 서버에 실행시키면 심한 자원 경합이 생기고, 심지어 장애가 발생하는 경우도 있다. 이러한 현상 때문에 많은 설계자, 개발자, it전문가, 벤더들이 모두 하나의 윈도우 서버에 하나의 app만 매치하여 관리하게 된다. 그 당시 윈도우 서버를 통해 1개의 app만 수행하는데 반해서 서버 1대의 성능도 급격히 증가하면서 남는 자원의 활용에 대해 필요성이 강해지고, 이러한 요구를 만족 시키기 위해서 가상화 기술이 대중화가 이루어짐.

ex) 고시원을 만들듯이 큰 방을 가상화하여 사용한다면 비용 절감이 가능해진다.

 

+ 정보보호 관점에서도 가상화 기술이 유용하다. 자금 정보 시스템, 인사 정보 시스템, 지식 재산권 보호 시스템 등은 단일 시스템의 규모는 크지 않지만, 정보의 가치가 매우 높기 떄문에 접근을 완벽하게 통제하고 싶을 떄도 분산 시스템을 구성하게 되는데 이때 가장 효율적인 기술이 가상화 기술입니다. (한 서버에 다 담을 수 있는 것들을 분산해서 담으면 되니까)

 

가상화 기술 종류

공유 가상화(shared) 1. 대표적인 가상화 방식
2. 다수의 가상 자원을 하나의 물리적 자원과 연결시켜서 시간 분할 기법으로 물리적 자원을 공유하여 사용하게 하는 방법
3. ex) TDMA(time-devision multiple access) 시분할 다중접속: 여러 명의 이동통신 가입자가 하나의 주파수를 시간을 분할하여 공유해서 사용하는 통신 방식
집합 가상화(aggregation) 1. 여러 개의 자원을 하나로 묶어서 물리적인 용량과 성능을 향상시키고, 하나의 논리 장치로 관리할 수 있도록 만들어주는 것 
2. ex) MLGA: 네트워크 스위치 간에 2개 이상의 링크를 먼저 연결한다. 한 서버에 2개의 스위치에 링크를 각각 연결한다. 서버는 통신할때 LACP(link aggregation control protocol)라는 프로토콜로 하나의 스위치와 하나의 인터페이스로 통신하는 것처럼 인식 
3. 물리적으로는 2개의 스위치로 연결된 2개의 링크, but 2배의 대역폭을 이용하면서 가용성까지 보장해주는 매우 좋은 가상화 기술 
에뮬레이션(emulation) 1. 가상 시스템에 인식된 스토리지는 거의 모든 os에서 사용가능한 스토리지로 인식
2. 물리 장치가 갖고 있는 특수한 기능이라든지 벤더에 특화된 기능 등은 사용할 수 없게 된다. (단점)
자원절연(Resource insulation) 1. 물리 장치의 상태가 비정상인 상태에서도 논리 장치의 고가용성 보장 → 물리장치에 장애가 발생하여도 논리 장치를 이용하는 가상 시스템에서는 느끼지 못한다.
2. RAID가 대표적인 기술 → RAID0을 제외한 나머지 RAID들은 모든 데이터 유실을 방지하고 고가용성을 보장하기 위한 방법
3. RAID를 사용하게 되면 구성하고 있는 디스크 중에서 한 개가 고장나더라도 사용자는 전혀 느끼지 못한 채 계속 서비스를 한다.
4. EX) 멀티패스 기능
① 스토리지에서 서버까지 여러 갈래의 연결 경로를 구성하고 나서 경로마다 LUN을 중복해서 할당
② OS에서는 이 중복된 LUN들을 하나의 가상 스토리지 장치인 멀티패스 장치로 묶는다.
③ APP이나 LVM(logical volume manager)에서는 멀티패스 장치만을 사용한다. 

 

* 스토리지 영역에서의 집합 가상화 기술(LUN)???

스토리지의 특정 디스크를 의미하는 것 X, 실제로 수십 개에서 수 백 개의 디스크에서 자원을 조금씩 할당 받아서 만든 논리적인 디스크라서 딱 필요한 만큼의 용량으로 만들 수 있다. 심지어 동시에 수 십개에서 수 백개의 디스크에서 데이터를 찾을 수 있어서 성능도 매우 좋아진다. 이러한 기술을 와이드 프로비저닝 또는 와이드 스트라이핑이라고한다.

 

하이퍼바이저(VMM, Virtual machine monitor)의 구조와 역할

호스트 운영체제와 하이퍼 파이저의 차이

호스트 운영체제 하이퍼바이저
여러 개의 APP이 동시에 수행되도록 하는 환경 여러 개의 가상머신이 동시에 수행되도록하는 환경을 제공
형태에 따른 하이퍼바이저
1. 운영체제와 합쳐져 있는 형태 (타입1 하이퍼바이저)
2. 운영체제와 분리된 형태 (타입2 하이퍼바이저)

하이퍼바이저 기능

여러 개의 가상머신이 한정되어 있는 HW자원을 나눠쓸 수 있도록 해주는 것

타입1하이퍼바이저(운영체제와 하이퍼바이저가 결합) 타입2하이퍼바이저(운영체제와 하이퍼바이저가 분리)
1. 하드웨어에 하이퍼바이저 기능이 있는 OS만 설치하는 형태로 더 안정적이고 빠르다. 
2. 운영체제 자체에서 하이퍼바이저 기능이 담겨있다
1. OS에 많은 기능을 의존하여 HW자원 분배
2. HW에 OS를 설치하고 그 위에 별도의 하이퍼바이저를 설치

TYPE1 과 TYPE2에 관한 설명

* VM == HW / 호스트 운영체제 == 운영체제

* VM은 한 가지 운영체제만 설치가 가능하다. 

 

하이퍼바이저 타입별 제품

OS를 별도로 설치하는가?(타입2) OS설치 없이 가상화 솔루션만 설치?(타입1)
Virtual Box, KVM: 윈도우나 리눅스를 설치하고 그 위에 이것들을 설치 ( 사전에 별도의 OS를 설치한 뒤 설치가 가능 ) VMware의 vSphereESXi제품: 운영체제 설치 없이 하이퍼바이저만 베어메탈 서버에 설치(타입1)

* 베어메탈 서버(Bare-metal server): SW가 설치되지 않은 HW, 일반적으로는 운영체제도 설치되지 않은 상태의 HW를 의미하긴 하나 경우에 따라서는 서버 벤더의 서버 관리 SW도 설치되지 않은 상태의 서버를 의미(그냥 썡 하드웨어)

 

역할 범위에 따른 하이퍼바이저

전가상화(Full virtualization) 반가상화(Para virtualizaion)
1. 하이퍼바이저가 대다수의 역할을 한다.
2. 즉, 하이퍼바이저가 호스트 OS에서 모든 일을 처리
3. VMware의 vSphereESXi: 모든 하이퍼콜을 하이퍼바이저가 처리
4. HW-assisted  virtualization : 전가상화에서 많이 사용되는 보조 기술, 전가상화 제품에서는 바이너리 변환 기술을 통하여 guestOS의 hw접근을 가능하게 한다. 바이너리 변환 기술 자체가 개발이 매우 어렵기 때문에 cpu벤더가 제공하는 가상화 기술을 많이 사용한다. 
ex) 인털, amd의 VT-x, VMD-V
(단점: CPU자체 기능 + VM + 하이퍼바이저 모두 관리해서 CPU부하에 의한 오버헤드가 있다. )
1. 일부 역할을 VM의 도움을 받아서 처리
2. Xen가상화제품: Demo0이라는 guestOS가 하이퍼콜 일부를 넘겨받아 처리하는 구조
특징
1. 하이퍼바이저를 통해서 hw에 직접 접근하기 때문에 guestOS를 baremetal server에 설치하는 운영체제와 같은 버전으로 사용
→ 해당 장점을 유지하기 위해서 모든 장치에 대한 드라이버 에뮬레이션 가상화 기법으로 제공하고 바이너리 변환 기법을 통해 hw에 대한 커널 수준 접근 가능
특징
1. xen하이퍼바이저에는 VM(guest domain) + 특수VM(control domain, domain0)이 존재
2. VM이 요청한 CPU, 메모리, 타이머 등에 대한 하이퍼콜은 파이퍼바이저에서 처리
3. 네트워크, 스토리지I/O를 발생시키는 하이퍼콜은 컨트롤 도메인이 HW에 요청
※ 이처럼 guestOS가 완전하게 독립적인 수행환경을 보장받는 것이 아니기 때문에 반가상화 하이퍼바이저를 사용하면 guestOS가 반가상화에 맞도록 개선

* 바이너리 변환 기법: VM이 하이퍼콜을 통해서 하이퍼바이저에게 명령을 내리면 간단한 바이너리(2진법) 연산을 통해 HW가 이해할 수 있는 명령어로 변환하여 전달하는 기법! 속도가 매우 빠르다는 장점이 있지만, 개발이 어려움

* 커널 수준 접근: 리눅스 운영체제는 커널만이 HW를 직접 제어할 수 있는데, 커널과 같은 수준의 권한으로 HW에 접근하는 것을 의미한다.

 

+ 갑자기 궁금해져서 적음

쉘에서 커널로 명령어를 전달할 때는 어떤 방식으로 전달해???????????

1. 시스템콜(system call): 쉘은 사용자 공간에서 커널 공간으로 접근하여 os의 기능을 사용할 수 있게 한다.

2. 프로세스 생성: 사용자에게 명령어를 받으면 쉘은 프로세스를 생성하는데...프로세스가 바이너리로 해석된다는 것을 어디서 본적이 ..있는거 같은데 어디서 들었는지는 모르겠다. 쉘이 fork()시스템 콜을 사용하여 자신과 동일한 상태의 자식 프로세스를 생성, exec()시스템 콜을 사용하여 새로운 프로세스에 명령어를 실행