본문 바로가기

Machine Learning

Mesos를 Standalone으로 돌리기

Mesos에 익숙하지 않은 사람은 Apache Mesos 프로젝트 사이트를 읽어보세요.. 개략적으로 설명드리면 Mesos는 클러스터 관리 플랫폼으로 여러대의 서버를 하나의 공유 Pool로 합치는 역할을 합니다. 여기서 Hadoop, 젠틴스, 카산드라, ElasticSearch 같은 어플리케이션이나 프레임워크를 돌릴 수 있습니다. Mesos는 아주 효과적으로 부하를 분산하고 배치 작업이나 long-running 서비스에게 독립적인 리소스를 제공합니다. Mesos용으로 빌드된 어플리케이션이나 프레임워크는 Mesos site에서 확인하세요.

추가적으로 Mesosphere Marathon과 ZooKeeper가 설치되어야합니다. Marathon은 long-running 서비스를 위한 프레임워크입니다. long-running서비스의 대표적인 예는 웹 어플리케이션이있죠. 더 자세한 건 Mesosphere Marathon site에 들어가보세요. Zookeeper 는 configuration 정보를 관리하고 분산 시스템에 동기화하는 서비스인데 더 자세한 내용은 Apache Zookeeper  사이트에 들어가 보세요.

모든 건 Ubuntu 14.04.1 서버를 기준으로 작성되었습니다.

Mesosphere Repository

Mesos, Marathon와 Zookeeper 모두 소스를 빌드해서 사용할 수 있지만 여기서는 간단하게 Mesosphere에서 제공하는 바이너리를 사용할 겁니다. 먼저 Mesosphere Repository 를 추가합니다..

  1. Mesosphere Archive Automatic Signing Key를 추가하세요:
  2. $ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E56151BF
  3. 그리고 Mesosphere Ubuntu 14.04 Repo 를 추가합니다:

    $ DISTRO=$(lsb_release -is | tr '[:upper:]' '[:lower:]')
    $ CODENAME=$(lsb_release -cs)
    $ echo "deb http://repos.mesosphere.io/${DISTRO} ${CODENAME} main" | \
    sudo tee /etc/apt/sources.list.d/mesosphere.list
  4. package 정보를 업데이트하세요:

    $ sudo apt-get -y update

Mesos and Marathon

Mesos 클러스터는 적어도 Master 하나와 Slave 하나가 필요합니다. Mesos Master는 job들이 돌아갈 Mesos Slave들을 조정하고 Task를 분배하는 일을 하는데 운영 환경이라면 High Availability (HA)를 위해 적어도 3대 이상의 Mesos Master를 운영하고 수많은 Mesos Slave들이 있을 겁니다. 여기서는 한대 씩만 설치합니다.

  1. Mesos, Marathon 그리고 Zookeper 를 설치합시다:

    $ sudo apt-get -y install mesos marathon
  2. 시스템을 리부트해주세요:

    $ sudo reboot

Mesos와 Marathon과 관련된 모든 패키지들이 설치되고 single node에서 사용하기 위한 startup 스크립트가 모두 준비되었습니다. Apache ZooKeeper도요.

Mesos and Marathon Web Consoles

이제 Mesos 웹 인터페이스에 5050 포트로 Marathon에 8080 포트로 접속할 수 있게 되었습니다. 예를들어 여러분 IP 주소가 10.1.100.118이라면 웹 브라우저에 http://10.1.100.118:5050/를 입력하면 Mesos 웹 UI이 보입니다. Marathon 웹 UI는 http://10.1.100.118:8080/ 입니다. Mesos master 웹 콘솔에서 active slaves가 1 로 보일 겁니다.

Mesos 0.20 web user interface

mesos-execute로 Task 실행하기

Mesos Master 와 Slave가 잘 작동하는 지 간단한 task를 실행해 보겠습니다. Mesos가 제공하는 mesos-exec 를 사용해 간단한 job을 실행해 봅시다. 이 task는 master에 의해서 스케쥴되고 slave에서 실행될 겁니다.

$ mesos-execute --master="localhost:5050" --name="test-exec" --command="sleep 10"

Mesos Master 웹 콘솔의 completed tasks에서 결과를 확인해 볼 수 있습니다. Framework 메뉴를 선택하고 "Terminated Frameworks”에서 task id를 클릭해보세요.

주의: 아래와 같은 에러가 발생할 수 있습니다:

Ignoring framework registered message because it was sent from 'master@127.0.1.1:5050' instead of the leading master 'master@127.0.0.1:5050'

이런 경우 커맨드를 아래와 같이 변경하세요:

$ mesos-execute --master="127.0.1.1:5050" --name="test-exec" --command="sleep 10"

Marathon으로 Application 시작하기

Marathon 웹 콘솔로 Application을 디플로이할 수있습니다. Marathon을 이용하면 Application이 일회성으로 실행되는게 아니라 지속적으로 실행되도록 등록됩니다.

  1. Marathon 웹 콘솔에 들어가세요.
  2. 우측 상단에 “New App” 버튼을 클릭하세요.
  3. ID 와 Command 필드만 입력해 보겠습니다. ID는 클러스터에서 유일한 값이어야 합니다.
  4. 여기선 ID로 “sleep-exec”, 그리고 Command에는 “sleep 10”를 입력해 보겠습니다.
  5. 이젠 “Create” 버튼을 눌러서 등록합니다.

Marathon 웹 콘솔에 방금 등록한 Application이 보일 겁니다. task가 돌아가는 동안 Instance count 는 1/1로 보일 거고 task가 끝나면 0/1로 보일 겁니다. Marathon는 task가 돌지 않는다면 master에게 다시 스케쥴하라고 요청합니다. 그러면 master는 task를 실행할 slave를 찾아서 slave에게 task를 돌리도록 요청하게 됩니다.

Marathon running example task

Applicatoin을 크릭하면 관련된 task들과 설정들을 확인해 볼 수 있습니다. 마약 “Suspend” 버튼을 누리게되면 Instance count가 0으로 즉각 떨어지게되고 “Scale” 버튼을 누리면 1보다 더 큰 값으로 증가시킬 수 있습니다.

Mesos 웹 콘솔에 들어가 봅시다. Frameworks 메뉴에 들어가보면 Marathon이 활성화된 framework로 보일 겁니다. Marathon framework ID를 클릭하면 Active와 Completed task들의 목록이 보일겁니다. 30초 이상이 자나면 이미 완료된 sleep task들도 보일겁니다.

Marathon App Running on Mesos

 

Marahton은 REST API도 제공하는데 자세한 내용은 Marathon Docs site 를 확인해보세요.

요약

단일 우분투 서버에 Apache Mesos, Apache Zookeeper 와 Mesosphere Marathon을 설치해보았습니다.  집에서 간단하게 테스트 할 수 있는 정도지만 고가용성의 운영 환경에서는 여러개의 Zookeeper와 Master, Slave 서버가 필요합니다.

'Machine Learning' 카테고리의 다른 글

Hadoop 사용 Port  (1) 2016.04.23
Spark 빌드하기  (0) 2016.04.16
Ubuntu에 Hadoop Single Node로 설치하기  (1) 2016.04.16