Apache Mesos - Cluster Resource Management

Hyunjun Jang·2021년 7월 25일
2

Mesos란?

UC Berkeley에서 Nexus 라는 이름으로 개발이 진행되던 프로젝트가 Mesos라는 이름으로 Apache 재단에 오픈소스로 발표된 프로젝트로써, Cloud Infrastructure 및 Computing Engine들의 자원을 통합적으로 관리 할수 있도록 만든 자원관리 프로젝트이다.

Mesos는 분산 시스템 커널(distributed systems kernel)이다.

뭔가 굉장히 복잡해 보이지만, 기본 개념은 간단하다. 네트워크로 묶여 있는 여러 개의 컴퓨터의 자원 즉, CPU, 메모리, 디스크 등의 자원을 하나로 묶어서 resource pool로 만들어서 마치 하나의 컴퓨터 처럼 보이게 하겠다는 거다. 그리고 커널로서 작동하기 위한 기능인 스케쥴러와 애플리케이션 관리 기능을 더해서, 분산 커널을 만든다.

데이터센터 내의 자원을 공유/격리를 관리하는 기술 Hadoop, MPI, Hypertable, Spark과 같은 응용 프로그램을 동적 클러스터링 환경에서 리소스 공유와 분리 를 통해 자원 최적화가 가능하게된다.

Mesos는 클러스터에서 사용가능한 자원을 추적하고 사용자의 요구에 따라 할당하는 일을 한다.

Mesos를 활용하는 기업으로는 Twitter, Facebook, eBay, Riot Games가 있는데, 트위터의 경우 SNS 사용량이 급증함에 따라, 엔지니어들이 이 문제를 개선하기 위해, 트위터의 모든 서비스들을 독립적으로 실행 되도록 만들었고, 이 독립적 서비스들을 관리할 도구로 Mesos를 채택 했다고 한다.

또한, 리그오브레전드(LOL) 게임 제작사인 라이엇 게임사(Riot Games)의 경우 Mesos와 Docker, Marathon을 이용하여 웹 규모(web-scale)에서의 고가용성(HA, High Availability) 및 내결함성(fault-tolerant) 기능을 구현하여 서비스 중이고, eBay는 Docker, Mesos, Marathon, Jenkins를 활용하여 서비스 중인걸로 알고 있다.

Mesos Architecture

아키텍처를 살펴보면 Mesos Master와 장애 발생시 대체할 Standby Master, Automatic Failover를 하도록 구성된 ZooKeeper Quorum, Mesos Slave 서버들로 구성되어 있다.

Mesos는 ZooKeeper quorum을 구성해서 자신의 가용성을 확보한다. Active-Standby타입으로 구성이 되는데, 이를 위해서 Mesos master 중 하나를 leader로 선출(elect)한다.

Mesos master는 Mesos slave로 부터 자원을 보고 받아서 자원 풀을 만든다.
예를 들어 4 core, 16G를 가진 4개의 Mesos slave가 접속했다면, 16 core, 64 G의 자원을 가지는 pool을 구성한다. 스케쥴러는 이 자원 정보를 읽어서 자원을 실행할 Mesos slave를 선택한다.

Mesos slave는 leader로 선출된 Mesos master에 접속하고, 자신이 실행된 인스턴스의 자원정보를 보고(reporting)한다.
또한 Executor를 가지고 있어서, 애플리케이션을 실행하는 일을 한다.
애플리케이션이 종료되면, 이 정보를 Mesos master에 전송해서 자원을 분산 시스템 터널에 자원을 돌려준다.

  • 동작방식 예
  1. slave에 여유 리소스가 생기면, master에게 여유 정보를 통보한다.
  2. 할당정책에 따라서, 마스터는 얼마나 많은 리소스가 각 프레임워크에 할 당되었는지 결정한다.
  3. master가 제안을 보내고, 스케쥴러는 어느 제안 리소스가 받아 들여졌는지 선택한다.
  4. 프레임워크가 제안 리소를 받아 들이면, 실행할 작업 내용을 Mesos 에게 보낸다.
  5. 적합한 리소스를 실행하기위해 할당한 slave에게 master는 차례로 작업들을 보낸다.
  6. 최종적으로 프레임워크는 작업을 실행하게된다.

Marathon란?

Marathon은 Application 및 기타 Framework를 시작할 수 있는 Meta Framework다. Container Workload에 대한 확장 및 Self Healing 기능을 제공하는 Orchestration Platform 역할도 담당 할 수 있다.

Marathon은 애플리케이션 시작, 중지 및 확장을 위한 REST API를 제공한다. 마라톤은 Scala로 작성되었으며 여러 복사본을 실행하여 고가용성 모드에서 실행할 수 있다. 실행 중인 작업의 상태는 Mesos 상태 추상화에 저장된다.

Mesos + Marathon

Mesos는 Data Center에서 리소스를 동적으로 할당 하는 것을 목표로 하는 Distributed Kernel 이고, 리소스 공유 기능을 사용하는 수많은 Framework, Application Stack을 제공한다. 각 Framework는 Scheduler와 Executor로 구성된다.

Marathon은 Application 및 기타 Framework를 시작할 수 있는 Meta Framework입니다. Container Workload에 대한 확장 및 Self Healing 기능을 제공하는 Orchestration Platform 역할도 담당 할 수 있다.

Mesos와 Marathone의 구성요소는 아래와 같다.

  • Mesos Master: Container 관리를 위한 Marathon, 대규모 데이터 처리를 위한 Spark와 NoSQL 데이터 베이스를 위한 Cassandra와 같은 Framework에서 Resource 공유를 가능하게 된다.
  • Mesos Slave: 사용 가능한 Resource를 Master에게 알려주는 Agent를 실행한다.
  • Framework: Master가 Slave 노드에서 실행되는 Task를 전달 받을 수 있도록 Mesos Master에 등록된다.
  • Zookeeper: Cluster state를 Read/Write할 수 있는 가용성 높은 Naming Registry를 제공한다.
  • Marathon Scheduler: Mesos Master로 부터 오퍼를 받아 Slave Node의 사용 가능한 CPU 및 Memory list를 제공한다.
  • Docker Executor: Marathon Scheduler에서 작업을 받고 Slave Node에서 Container를 실행한다.

Reference

apache.mesos
mesos
kubernetes-vs-mesos-with-marathon1
kubernetes-vs-mesos-with-marathon2
apache-mesos-cluster-resource-management

profile
Let's grow together😊

0개의 댓글