Apache Mesos – Cluster Resource Management

Apache Mesos?

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

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_architecture

Figure 1. Mesos Architecture

 

자원 할당 예

아래 그림을 통해 Mesos가 어떻게 자원(Resource)관리와 작업(Job)을 수행하는지 살펴 보겠습니다.

architecture-example

 Figure 2. Example of resource offer

실제 구성

좀더 이해를 돕기 위해, Mesos Architecture와 동일하게 구성하고, Framework는 Marathon을 사용 해보도록 하겠습니다.
본 구성은 Ubuntu 14.04 리눅스에서 테스트 되었습니다.

구성 될 서버 IP는 아래와 같고, Master와 Slave의 공통 설정 부분은 “[email protected]:~#” 로, Master 서버들의 공통 설정 부분들은 “[email protected]:~#”, Slave 서버들의 공통 설정 부분들도 “[email protected]:~#” 형태로 표현 될 것입니다.

 

1. 공통 부분
이 부분에서는 Mesos를 소스로 빌드하기 위해 필요한 작업입니다. Mesos를 패키지 형식으로 설치를 하려면,
http://mesosphere.io/downloads/ 를 방문하여 해당 배포판에 맞는 것을 다운로드하고 설치 하여서 구축하시기 바랍니다.

– 필요 패키지 설치

 

– JDK 설치

 

– Maven 설치

 

– 환경 변수 적용

 

– Mesos 빌드

 

– Mesos 환경 변수 설정 및 적용

 

2. Master 설정
– ZooKeeper 설정

 

ZooKeeper의 sample 설정 파일을 복사 하고, 데이터로 사용 될 디렉토리를 변경 합니다.

 

동일한 standalone 형태의 ZooKeeper들을 복제 모드로 설정 합니다. (이 구성을 quorum이라 합니다.)
아래와 같이 각각의 Master 서버들의 IP를 입력 합니다.

 

ZooKeeper 서버들에게 myid 번호를 부여 합니다.
mesos-master-1의 경우 myid는 1, mesos-master-2의 경우 myid는 2, mesos-master-3의 경우 myid는 3으로 설정 합니다.

 

– ZooKeeper 실행

 

3. Mesos

Mesos 를 실행하기 앞서 주의 할점이 있는데, Master 서버에서 Mesos를 실행하고 최대 1분내에 Slave 서버가 Master 서버로 자신의 자원을 보고할 준비가 되어있지 않으면, Master의 Mesos 서버는 자살(suicide) 하게 됩니다. 그래서, slave 서버들부터 시작 후에 Master 서버들을 실행 하도록 합니다.

– Mesos Slave 실행
Master들의 ZooKeeper IP, Port, Path를 입력 후 실행 합니다.

 

실행과 동시에 cpu 및 memory가 격리(isolation)되어, Slave 서버의 자원을 수집하는 것을 알수 있습니다.

 

조금 더 기다려보면 아래와 같은 메세지가 나옵니다.
이 메세지는 Slave 서버가 Master 서버로 자신의 자원을 보고할 준비가 되었다는 의미로 볼수 있습니다.

 

– Mesos Master 실행
Mesos 실행 옵션에 대해 간략 설명 하자면 아래와 같습니다.

 

Master Mesos 서버를 실행 합니다.

 

실행 후 Slave 서버를 등록하고, 할당 정책 모듈을 호출 하는것을 알수 있습니다.

 

Slave 측에선 172.17.1.7 서버가 leader로 선출되어 정보를 가져가는걸 볼수 있고, slave의 정보를 /tmp/mesos 디렉토리로 저장하고 있는걸 볼수 있습니다.

 

Mesos Master에서는 5050 포트를 통해 Web UI를 제공합니다.

mesos-master-1

Figure 3. Mesos Master Web UI

Slave 서버들의 자원 정보를 볼수 있습니다.

mesos-master-2Figure 4. Mesos Master Web UI: Slave Status

4. Framework
Framework로 Marathon을 사용해서 “자원 할당 예”와 같이 Framework가 지시한 작업을 수행할수 있는지 확인 해보겠습니다.

– JDK 설치

 

– Scala 설치

 

– sbt 설치

 

– Marathon 설치

 

– Marathon 실행
Master의 ZooKeeper IP, Port, Path를 지정하여 실행 합니다.

 

Marathon의 Web UI를 통해 작업(Job)을 만들어 보겠습니다.

 “yongbok-ping-test-1″이라는 Application ID와 1CPU, 16MB의 메모리, 인스턴스 2개에서 “ping localhost”라는 명령어를 실행 하도록 만들겠습니다.

marathon-0

Figure 5.Marathon Framework

만들어진 모습입니다.

marathon-1

Figure 6.Marathon Framework 2

해당 ID를 열어 보면 2개의 인스턴스에서 해당 명령어들이 수행되고 있는걸 볼수 있습니다.

marathon-2Figure 7.Marathon Framework 3

그럼, 위에서 생성한 Application이 만들어지고 나서 Master와 Slave 서버에서는 어떤일이 벌어지는지 메세지를 통해 확인 해보겠습니다.

– Master
할당 된 작업이 있다는 메세지를 받아, 해당 작업을 수행할수 있는 Slave 서버들을 선별하여, 선별 된 Slave 서버에 해당 작업을 수행토록 지시 합니다.

 

– Slave
Master 서버로 부터 받은 지시 작업을 수행 합니다.

 

자동 장애 복구

실제 동작중인 리더 Master 서버가 장애가 발생하여 더이상 서비스를 할수 없을때 어떻게 자동으로 리더를 선별하고, 복구하는지 알아 보겠습니다.

– 장애 발생전
모든 것들이 정상 입니다.

mesos-automatic_failover-1

Figure 8. Mesos Automatic Failover 1

– 장애 발생

Master-1이 알수 없는 이유로 장애가 발생 하였고, 이 사실을 ZooKeeper가 Standby 서버에 알립니다.

 

mesos-automatic_failover-2

Figure 9. Mesos Automatic Failover 2

– 장애 복구

장애 사실을 알게된 Standby 서버들은 새로운 리더를 선출, 등록 하여 정상 작동 되도록 합니다.

장애가 났던 서버는 정상적으로 복구 되면 자동으로 Standby 서버로 등록 됩니다.

 

mesos-automatic_failover-3

Figure 10. Mesos Automatic Failover 3

결론

Slave: Master님 제 자원 정보를 드리겠습니다.

Master : Framework님 Slave 자원 정보가 이렇습니다.

Framework : Slave 일해!

Slave: 네 ㅠ.ㅠ

참고

– Apache Mesos
http://mesos.apache.org/gettingstarted/

– Introduction to Apache Mesos
http://www.slideshare.net/tomasbart/introduction-to-apache-mesos

– Cloud Computing: past, Present, and Future
http://www.slideshare.net/butest/cloud-computing-3859651

– Apache Mesos at Twitter (Texas LinuxFest 2014)
http://www.slideshare.net/caniszczyk/apache-mesos-at-twitter-texas-linuxfest-2014

– Datacenter Computing with Apache Mesos – BigData DC
http://www.slideshare.net/pacoid/datacenter-computing-with-apache-mesos

– YouTube
Twitter: Building Distributed Frameworks on Mesos
https://www.youtube.com/watch?v=n5GT7OFSh58

Riot Games: Building Webscale Apps with Marathon, Docker and Mesos
https://www.youtube.com/watch?v=6y86sw7wj_A

eBay: Delivering eBay’s CI solution with Apache Mesos & Docker – Dockercon
https://www.youtube.com/watch?v=VZPbLUJnR68

Loading Disqus Comments ...
Loading Facebook Comments ...

No Trackbacks.