Cloud

클라우드 시스템 운영 비율

naleejang 2021. 6. 18. 20:21

얼마전에 클라우드 가상화 비율이라는 글을 포스팅한적이 있었다. 그때 나는 클라우드 시스템은 70%를 유지하는 것이 좋다고 포스팅을 했었다. 그런데, 많은 사람들이 왜 70%을 권장하는지를 물어봤었고, 궁금해 하는 분들이 꽤 있었다. 일반적으로 시스템을 운영할때는 70% ~ 80% 이상을 사용하지 말라고 학교에서 그리고, 많은 운영부서에서 선배들로부터 그렇게 배워왔던것 같다. 그래서, 그냥 그렇게 사용해야 되는거구나! 라고 생각을 했지 왜 70% 이상을 사용하면 안되는건지에 대해서는 사실 생각해 본적은 없는것 같다. 그런데, 사람들하고 이야기를 하다보니 그럴걸 궁금해 하는 사람들이 많이 있다는 사실을 알았다. 

그래서, 이번 포스팅에서는 클라우드 시스템의 운영 비율에 대해 알아보고자 한다. 

클라우드의 핵심 기능! 라이브 마이그레이션

클라우드 시스템에서 가장 중요한 기능! 그리고, 가장 많이 사용하는 기능은 아마도 단언컨대 마이그레이션 기능일 것이다. 오픈스택의 인스턴스이던, 쿠버네티스의 컨테이너이건(쿠버네티스에서는 이런 기능을 Drain 이라고 부른다.) 호스트에서 다른 호스트로 언제든지 이동해서 서비스를 할 수 있다는 점에서 매우 매력적인 기능이라고 볼 수 있다. 또한 시스템을 업데이트하거나 패키지를 설치해야할 경우, 또는 시스템을 재부팅하거나 장애에 의해서 해당 호스트의 가상 자원들을 다른 호스트로 이동시켜야 할 때 사용되는 기능이 바로 라이브 마이그레이션 또는 콜드 마이그레이션 기능이다. 쿠버네티스에서는 이런 기능을 Auto-healing(컨테이너에 문제가 생기면 다른 노드에서 다시 컨테이너가 생성되는 기능) 또는 Drain(시스템 업데이트 등을 위해 특정 호스트를 비울때 사용하는 기능)이라고 부른다.

오픈스택의 라이브 마이그레이션 기능

라이브 마이그레이션은 가상자원 즉 가상머신이 살아 있는 상태(전원 ON 상태)에서 특정 다른 호스트로 넘기는 기능을 라이브 마이그레이션이라고 한다. 이때 오픈스택에서 라이브 마이그레이션을 하기 위해서는 Cinder 백엔드로 공유 스토리지를 사용해야 한다. 이건 쿠버 네티스도 마찬가지다. 쿠버네티스의 컨테이너 역시 PV(Persistent Volume, 영구볼륨)로 공유 스토리지를 사용해야 한다. 다들 알다시피 공유 스토리지에는 NFS, ISCSI, FC(Fiber Channel), Ceph 스토리지 등이 있다. 

시스템 운영 비율을 결정하는 핵심 요소

왜 이렇게 앞에서 라이브 마이그레이션 이야기를 많이 한 이유는 뭘까? 그건 바로 마이그레이션이 시스템 운영 비율을 결정하는 핵심 요소이기 때문이다. 그럼, 지금부터 예를 들어 설명을 해 보도록 하겠다.

다음과 같은 하드웨어 스팩을 가지는 컴퓨트 노드가 있다고 가정하자.

  • 컴퓨트 - CPU 40 Cores, 576 GB

해당 컴퓨트 노드의 운영 비율을 퍼센트별로 나열해 보면 아래와 같다. 여기서 CPU는 40 Cores 이고, 하이퍼쓰레드를 적용해 80 vCores를 사용할 수 있다. 여기에 가상화비율을 2:1로 적용하면 160 vCores를 사용할 수 있다. 메모리는 가상화율을 적용하지 않으므로 576 GB를 사용할 수 있다. 여기에 가상화 비율을 70%, 60%, 50%, 40%를 각각 적용하여 계산하면 아래 테이블과 같은 값이 구해진다.

여기서, 컴퓨트 노드가 2대, 3대, 4대일 경우 1대의 컴퓨트 노드 자원을 다른 컴퓨트 노드로 분산하여 라이브 마이그레이션을 한다고 가정해 보자. 컴퓨트 노드가 2대일 경우에는 평소에 45% 정도의 자원을 사용해야 다른 한대로 모든 자원을 마이그레이션할 수 있다. 컴퓨트 노드가 3대일 경우에는 60% 정도의 자원을 사용해야 1대의 가상 자원을 다른 2대로 마이그레이션이 가능하다. 그럼 4대일 경우에는 어떨까? 4대일 경우에는 70% 자원을 사용해야 호스트 1대의 가상 자원을 다른 3대로 나누어 마이그레이션이 가능하다는 결론이 나온다. 

나는 사실 숫자를 별로 좋아하지 않아서 위와 같이 그래프를 직접 그려 자원을 이동시키는 시뮬레이션을 해 봤다. 나처럼 숫자를 별로 좋아하지 않는 사람이라면 이 방법이 꽤 괜찮은거 같다. 다만, 그림을 그리는데 시간이 좀 들기는 한다.

클라우드 시스템 운영비율 구하기

그래서, 누구나 계산하기 쉬운 방법은 없을까를 고민하다가 아래와 같은 공식을 도출해 냈다. 이 방법은 그림을 직접 그려 시뮬레이션 한 결과와 거의 동일했다. 따라서, 해당 공식을 여기에 포스팅하고 설명하고자 한다. 

공식은 다음과 같은 호스트의 전체 자원 100%에서 클라우드 시스템의 컴퓨트 노드 또는 워커 노드를 마이그레이션을 하여 비우고자 하는 호스트 대수로 나누고 여기에 운영체제가 사용할 자원 5%를 더해 빼면 호스트별 운영 비율을 구할 수 있다. 

Cloud Resource Rate = 100% - ((Compute Count / Migration Host Count) + 5%)

아래 테이블은 위 공식을 적용하여 컴퓨트 노드 대수별로 마이그레이션할 호스트 대수를 적용하여 계산해 보면 아래와 같은 값이 도출된다. 컴퓨트 노드가 2대일 경우에는 45%를 유지해야 문제가 발생했을때 다른 한대로 자원을 마이그레이션할 수 있다. 이렇게 되면 한 노드에 90%의 자원이 찬다. 이런 경우는 매우 특수한 경우이므로, 90% 자원 사용은 그리 문제가 되지 않는다. 컴퓨트 노드가 3대일 경우에는 62%를 유지하는 것이 좋다. 4대일 경우 1대의 자원을 마이그레이션할 경우 70%를 유지하는 것이 좋다. 나머지 역시 마찬가지이다.

영문으로 된 공식은 거북할 수 있으니 한글로 공식을 바꾸면 아래와 같다.

클라우드 시스템 운영 비율 = 100% - ((컴퓨트 노드 대수/비워질 컴퓨트 노드 대수) + 운영체제용 자원 5%)

결론

이렇게 해서 클라우드 시스템의 운영 비율을 구하는 방법에 대해 정리를 해 보았다. 나는 어디에서 클라우드 시스템은 몇 %의 자원을 써야 한다는 기준을 본 적은 없다. 다만, 문제가 발생했을때 또는 시스템 업그레이드를 해야 할 경우 몇대까지 컴퓨트 노드나 워커 노드를 비울것인지를 정하고, 클라우드 시스템에 올라갈 서비스의 중요도에 따라 자원을 사용하는 것이 가장 효율적인 방법이 아닐까? 아무튼 이 글이 많은 사람들에게 도움이 되었으면 좋겠다.