Mesos란
Mesos는 2009년 버클리 대학에서 시작된 오픈소스 클러스터 매니저 프로젝트로, 2013년부터는 아파치 Top-level 프로젝트로 승격되었습니다.
이미 Twitter와 Airbnb, Apple을 포함한 많은 기업이 실 서비스 환경에서 Mesos를 사용하고 있습니다.
여기서는 docker container의 orchestration 용도로 사용할 예정입니다.
Mesos 아키텍처
Mesos는 Master와 Master의 고가용성을 유지하기 위한 Zookeeper 클러스터, Framework, Scheduler, Slave로 구성되어 있습니다.
Mesos 동작원리
- Slave 1은 4 CPU와 4GB RAM을 사용할 수 있다고 Mesos Master에게 전달합니다. Mesos Master는 Framework 1이 tack를 실행하기 위해 리소스 오퍼를 요청한 사실을 Allocation module에 저장합니다.
- Mesos Master는 Slave 1의 리소스 오퍼를 Framework 1에 전달합니다.
- Framework의 Scheduler는 Slave 1에 2개(task1, task2)의 task를 실행하겠다는 정보를 Mesos Master에 응답으로 돌려줍니다. task1은 2 CPU, 1GB RAM, task2는 1 CPU, 2GB RAM을 사용합니다.
- 최종으로 Mesos Master는 Slave 1에 2개의 task1, task2를 전달하고, Slave 1에서 실행된다. 이제 Slave 1에 남은 자원인 1 CPU와 1GB RAM이 리소스 오퍼로 Mesos Master에 전달됩니다.
테스트 환경
- VMWare Workstatin 12
- Ubuntu 14.04
공통 패키지 설치
JAVA설치
Zookeeper cluster
를 구성하기 위해서는 JAVA가 필요합니다.
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
sudo apt-get install oracle-java8-set-default
Mesos 저장소 추가
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E56151BF
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
sudo apt-get -y update
Mesos master 설치
sudo apt-get install mesosphere
Mesos master 설정
Zookeeper 설정
myid는 중복되지 않게 1~255 사이의 정수값을 할당합니다.
sudo nano /etc/zookeeper/conf/myid
1 # master1
/etc/zookeeper/conf/zoo.cfg 에 server.{myid}.{server ip}:2888:3888
설정을 추가합니다.
sudo vi /etc/zookeeper/conf/zoo.cfg
server.1=192.168.66.11:2888:3888
server.2=192.168.66.12:2888:3888
server.3=192.168.66.13:2888:3888
Mesos 설정
‘zk://’ 형식의 Zookeeper URL을 설정합니다.
Zookeeper URL은 zk://
로 시작하고 /mesos
으로 끝나며 그 사이에 마스터 서버 IP와 포트(2181)를 입력합니다. 각각의 마스터 서버들은 콤마(,)로 구분합니다.
sudo vi /etc/mesos/zk
zk://192.168.66.11:2181,192.168.66.12:2181,192.168.66.13:2181/mesos
quorum
을 설정합니다.
quorum
은 마스터 노드 수를 2로 나눈 값보다 큰 수를 넣는다.
quorum (마스터 노드 수 (3) / 2) + 1 = 2
sudo vi /etc/mesos-master/quorum
2
mesos master의 ip와 hostname을 설정합니다.
echo 192.168.66.11 | sudo tee /etc/mesos-master/ip
sudo cp /etc/mesos-master/ip /etc/mesos-master/hostname
Marathon 설정
sudo mkdir -p /etc/marathon/conf
sudo cp /etc/mesos-master/hostname /etc/marathon/conf
sudo cp /etc/mesos/zk /etc/marathon/conf/master
sudo cp /etc/marathon/conf/master /etc/marathon/conf/zk
sudo vi /etc/marathon/conf/zk
zk://192.168.66.11:2181,192.168.66.12:2181,192.168.66.13:2181/marathon
기타 설정
Mesos slave 서비스를 비활성화합니다.
sudo stop mesos-slave
echo manual | sudo tee /etc/init/mesos-slave.override
서비스 재시작
Zookeeper, Marathon 그리고 Mesos Master 서비스를 재시작합니다.
sudo restart zookeeper
sudo restart mesos-master
sudo restart marathon
master2, master3 서버도 동일한 방법으로 설정합니다.
Mesos slave 설치
sudo apt-get install mesos
Mesos slave 설정
Mesos 설정
‘zk://’ 형식의 Zookeeper URL을 설정합니다.
Zookeeper URL은 zk://
로 시작하고 /mesos
으로 끝나며 그 사이에 마스터 서버 IP와 포트(2181)를 입력합니다. 각각의 마스터 서버들은 콤마(,)로 구분합니다.
sudo vi /etc/mesos/zk
zk://192.168.66.11:2181,192.168.66.12:2181,192.168.66.13:2181/mesos
Mesos slave의 ip와 hostname을 설정합니다.
echo 192.168.66.51 | sudo tee /etc/mesos-master/ip
sudo cp /etc/mesos-master/ip /etc/mesos-master/hostname
기타 설정
Zookeeper를 비활성화합니다.
sudo stop zookeeper
echo manual | sudo tee /etc/init/zookeeper.override
Mesos master를 비활성화합니다.
echo manual | sudo tee /etc/init/mesos-master.override
sudo stop mesos-master
서비스 재시작
sudo restart mesos-slave
테스트
Mesos master 에 접속합니다.
http://192.168.66.11:5050