웹사이트 검색

Ubuntu 14.04에서 프로덕션 준비 Mesosphere 클러스터를 구성하는 방법


소개

Mesosphere는 여러 구성 요소를 결합하여 기존 운영 체제 계층 위에 서버 클러스터링 및 고가용성 배포를 효과적으로 관리하는 시스템입니다. CoreOS와 같은 시스템과 달리 Mesosphere는 특수 운영 체제가 아니며 패키지 세트입니다.

이 가이드에서는 Mesosphere에서 고가용성 클러스터를 구성하는 방법에 대해 설명합니다. 이 구성은 예약된 작업을 처리하기 위해 슬레이브 서버 풀뿐만 아니라 마스터 노드가 다운되는 경우 장애 조치를 설정합니다.

이 가이드에서는 Ubuntu 14.04 서버를 사용합니다.

전제 조건 및 목표

이 가이드를 완료하기 전에 Mesosphere 소개를 검토하는 것이 좋습니다. 이는 시스템을 구성하는 구성 요소에 익숙해지고 각 장치가 담당하는 작업을 식별하는 데 도움이 되는 좋은 방법입니다.

이 자습서에서는 6개의 Ubuntu 서버를 사용합니다. 이는 프로덕션 환경에 대해 최소 3개의 마스터를 갖는 Apache Mesos 권장 사항을 충족합니다. 또한 작업이 클러스터로 전송될 때 작업이 할당되는 3개의 작업자 또는 슬레이브 서버 풀을 제공합니다.

우리가 사용할 6개의 서버는 zookeeper를 사용하여 마스터 서버의 현재 리더를 추적합니다. 이를 기반으로 구축된 Mesos 레이어는 분산 동기화 및 리소스 처리를 제공합니다. 클러스터 관리를 담당합니다. 클러스터의 분산 초기화 시스템인 Marathon은 작업을 예약하고 슬레이브 서버에 수작업을 수행하는 데 사용됩니다.

이 가이드에서는 머신의 구성이 다음과 같다고 가정합니다.

Hostname Function IP Address
master1 Mesos master 192.0.2.1
master2 Mesos master 192.0.2.2
master3 Mesos master 192.0.2.3
slave1 Mesos slave 192.0.2.51
slave2 Mesos slave 192.0.2.52
slave3 Mesos slave 192.0.2.53

이러한 각 시스템에는 Ubuntu 14.04가 설치되어 있어야 합니다. Ubuntu 14.04 초기 서버 설정 가이드에 나열된 기본 구성 항목을 완료해야 합니다.

위의 단계를 완료하면 이 가이드를 계속 진행하십시오.

서버에 Mesosphere 설치

클러스터를 시작하고 실행하는 첫 번째 단계는 소프트웨어를 설치하는 것입니다. 다행스럽게도 Mesosphere 프로젝트는 설치하기 쉬운 최신 패키지로 Ubuntu 리포지토리를 유지 관리합니다.

호스트에 Mesosphere 저장소 추가

모든 호스트(마스터 및 슬레이브)에서 다음 단계를 완료하십시오.

먼저 소스 목록에 Mesosphere 저장소를 추가합니다. 이 프로세스에는 Ubuntu 키 서버에서 Mesosphere 프로젝트의 키를 다운로드한 다음 Ubuntu 릴리스에 대한 올바른 URL을 만드는 작업이 포함됩니다. 이 프로젝트는 다음과 같은 편리한 방법을 제공합니다.

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

필요한 구성 요소 설치

시스템에 Mesosphere 리포지토리를 추가한 후 새 구성 요소에 대한 액세스 권한을 얻으려면 로컬 패키지 캐시를 업데이트해야 합니다.

sudo apt-get -y update

다음으로 필요한 패키지를 설치해야 합니다. 필요한 구성 요소는 호스트의 역할에 따라 다릅니다.

마스터 호스트의 경우 mesosphere 메타 패키지가 필요합니다. 여기에는 zookeeper, mesos, marathonchronos 애플리케이션이 포함됩니다.

sudo apt-get install mesosphere

슬레이브 호스트의 경우 zookeeper를 종속성으로 가져오는 mesos 패키지만 있으면 됩니다.

sudo apt-get install mesos

Mesos에 대한 Zookeeper 연결 정보 설정

가장 먼저 할 일은 zookeeper 연결 정보를 구성하는 것입니다. 이것은 모든 호스트가 올바른 마스터 서버에 연결할 수 있도록 하는 기본 계층이므로 여기에서 시작하는 것이 좋습니다.

마스터 서버는 zookeeper 클러스터의 유일한 구성원이지만 모든 서버는 프로토콜을 사용하여 통신할 수 있도록 일부 구성이 필요합니다. 이를 정의하는 파일은 /etc/mesos/zk입니다.

모든 호스트에서 다음 단계를 완료하십시오. 루트 권한으로 파일을 엽니다.

sudo nano /etc/mesos/zk

내부에는 연결 URL이 기본적으로 로컬 인스턴스에 액세스하도록 설정되어 있음을 알 수 있습니다. 다음과 같이 표시됩니다.

zk://localhost:2181/mesos

세 개의 마스터 서버를 가리키도록 수정해야 합니다. 이것은 localhost를 첫 번째 Mesos 마스터 서버의 IP 주소로 교체하여 수행됩니다. 그런 다음 포트 사양 뒤에 쉼표를 추가하고 형식을 복제하여 목록에 두 번째 및 세 번째 마스터를 추가할 수 있습니다.

가이드의 경우 마스터의 IP 주소는 192.0.2.1, 192.168.2.2192.168.2.3입니다. 이 값을 사용하면 파일이 다음과 같이 표시됩니다.

zk://192.0.2.1:2181,192.0.2.2:2181,192.0.2.3:2181/mesos

줄은 zk://로 시작하고 /mesos로 끝나야 합니다. 그 사이에 마스터 서버의 IP 주소와 zookeeper 포트(기본적으로 2181)가 지정됩니다.

완료되면 파일을 저장하고 닫습니다.

각 마스터와 슬레이브에서 이 동일한 항목을 사용하십시오. 이렇게 하면 각 개별 서버가 올바른 마스터 서버에 연결하여 클러스터와 통신하는 데 도움이 됩니다.

마스터 서버의 Zookeeper 구성 구성

마스터 서버에서 몇 가지 추가 zookeeper 구성을 수행해야 합니다.

첫 번째 단계는 각 마스터 서버에 대해 1에서 255까지의 고유한 ID 번호를 정의하는 것입니다. 이것은 /etc/zookeeper/conf/myid 파일에 보관됩니다. 지금 열기:

sudo nano /etc/zookeeper/conf/myid

이 파일의 모든 정보를 삭제하고 1에서 255 사이의 단일 번호로 바꿉니다. 각 마스터 서버에는 고유한 번호가 있어야 합니다. 단순함을 위해 1부터 시작하여 점점 올라가는 것이 가장 쉽습니다. 가이드에 1, 2, 3을 사용할 것입니다.

우리의 첫 번째 서버는 파일에 다음을 포함할 것입니다.

1

완료되면 파일을 저장하고 닫습니다. 각 마스터 서버에서 이 작업을 수행하십시오.

다음으로 zookeeper 구성 파일을 수정하여 zookeeper ID를 실제 호스트에 매핑해야 합니다. 이렇게 하면 서비스가 사용하는 ID 시스템에서 각 호스트를 올바르게 확인할 수 있습니다.

지금 zookeeper 구성 파일을 엽니다.

sudo nano /etc/zookeeper/conf/zoo.cfg

이 파일 내에서 각 ID를 호스트에 매핑해야 합니다. 호스트 사양에는 두 개의 포트가 포함됩니다. 첫 번째는 리더와 통신하기 위한 포트이고 두 번째는 새 리더가 필요할 때 선택을 처리하기 위한 것입니다. zookeeper 서버는 "server\ 뒤에 점과 해당 ID 번호가 오는 방식으로 식별됩니다.

가이드에서는 각 기능에 기본 포트를 사용하고 ID는 1-3입니다. 파일은 다음과 같습니다.

server.1=192.168.2.1:2888:3888
server.2=192.168.2.2:2888:3888
server.3=192.168.2.3:2888:3888

각 마스터 서버의 구성 파일에 이와 동일한 매핑을 추가합니다. 완료되면 각 파일을 저장하고 닫습니다.

이것으로 zookeeper 구성이 완료되었습니다. Mesos와 Marathon에 집중할 수 있습니다.

마스터 서버에서 Mesos 구성

다음으로 세 개의 마스터 서버에 Mesos를 구성합니다. 이러한 단계는 각 마스터 서버에서 수행해야 합니다.

클러스터 크기를 반영하도록 쿼럼 수정

먼저 결정을 내리는 데 필요한 정족수를 조정해야 합니다. 이렇게 하면 클러스터가 작동 상태가 되기 위해 필요한 호스트 수가 결정됩니다.

정족수는 마스터 멤버의 50% 이상이 참석하여 결정을 내리도록 설정해야 합니다. 그러나 모든 마스터가 존재하지 않는 경우에도 클러스터가 계속 작동할 수 있도록 일부 내결함성을 구축하고자 합니다.

세 명의 마스터가 있으므로 이 두 가지 요구 사항을 모두 충족하는 유일한 설정은 2개의 쿼럼입니다. 초기 구성은 단일 서버 설정을 가정하므로 현재 쿼럼은 1로 설정되어 있습니다.

쿼럼 구성 파일을 엽니다.

sudo nano /etc/mesos-master/quorum

값을 "2”로 변경합니다.

2

파일을 저장하고 닫습니다. 각 마스터 서버에서 이 작업을 반복합니다.

호스트 이름 및 IP 주소 구성

다음으로 각 마스터 서버의 호스트 이름과 IP 주소를 지정합니다. 인스턴스가 올바르게 확인하는 데 문제가 없도록 호스트 이름에 IP 주소를 사용할 것입니다.

마스터 서버의 경우 IP 주소를 다음 파일에 배치해야 합니다.

  • /etc/mesos-master/ip
  • <리>/etc/mesos-master/호스트 이름\n

먼저 /etc/mesos-master/ip 파일에 각 마스터 노드의 개별 IP 주소를 추가합니다. 적절한 값과 일치하도록 각 서버에 대해 이를 변경해야 합니다.

echo 192.168.2.1 | sudo tee /etc/mesos-master/ip

이제 이 값을 호스트 이름 파일에 복사할 수 있습니다.

sudo cp /etc/mesos-master/ip /etc/mesos-master/hostname

각 마스터 서버에서 이 작업을 수행하십시오.

마스터 서버에서 마라톤 구성

이제 Mesos가 구성되었으므로 Mesosphere의 clustered init 시스템 구현인 Marathon을 구성할 수 있습니다.

Marathon은 각 마스터 호스트에서 실행되지만 주요 마스터 서버만 실제로 작업을 예약할 수 있습니다. 다른 Marathon 인스턴스는 요청을 마스터 서버로 투명하게 프록시합니다.

먼저 각 서버의 Marathon 인스턴스에 대해 호스트 이름을 다시 설정해야 합니다. 다시 한 번 파일에 이미 있는 IP 주소를 사용합니다. 필요한 파일 위치에 복사할 수 있습니다.

그러나 필요한 Marathon 구성 디렉토리 구조는 자동으로 생성되지 않습니다. 디렉터리를 만든 다음 파일을 복사할 수 있습니다.

sudo mkdir -p /etc/marathon/conf
sudo cp /etc/mesos-master/hostname /etc/marathon/conf

다음으로 정보 및 예약을 위해 Marathon이 연결할 zookeeper 마스터 목록을 정의해야 합니다. 이것은 우리가 Mesos에 사용했던 것과 동일한 zookeeper 연결 문자열이므로 파일을 복사하면 됩니다. master라는 파일에 배치해야 합니다.

sudo cp /etc/mesos/zk /etc/marathon/conf/master

이렇게 하면 Marathon 서비스가 Mesos 클러스터에 연결할 수 있습니다. 그러나 우리는 또한 Marathon이 zookeeper에 자체 상태 정보를 저장하기를 원합니다. 이를 위해 다른 zookeeper 연결 파일을 기반으로 사용하고 끝점만 수정합니다.

먼저 파일을 Marathon 사육사 위치에 복사합니다.

sudo cp /etc/marathon/conf/master /etc/marathon/conf/zk

다음으로 편집기에서 파일을 엽니다.

sudo nano /etc/marathon/conf/zk

이 파일에서 수정해야 하는 유일한 부분은 끝점입니다. /mesos에서 /marathon으로 변경하겠습니다.

zk://192.0.2.1:2181,192.0.2.2:2181,192.0.2.3:2181/marathon

이것이 마라톤 구성에 필요한 전부입니다.

서비스 초기화 규칙 구성 및 서비스 다시 시작

다음으로 구성한 설정을 사용하기 위해 마스터 서버의 서비스를 다시 시작합니다.

먼저 마스터 서버가 슬레이브 프로세스가 아닌 Mesos 마스터 프로세스만 실행하는지 확인해야 합니다. 현재 실행 중인 모든 슬레이브 프로세스를 중지할 수 있습니다(실패할 수도 있지만 프로세스가 중지되었는지 확인하기 위한 것이므로 괜찮습니다). 또한 재정의 파일을 생성하여 부팅 시 서버가 슬레이브 프로세스를 시작하지 않도록 할 수 있습니다.

sudo stop mesos-slave
echo manual | sudo tee /etc/init/mesos-slave.override

이제 마스터 선거를 설정하는 zookeeper를 다시 시작하기만 하면 됩니다. 그런 다음 Mesos 마스터 및 마라톤 프로세스를 시작할 수 있습니다.

sudo restart zookeeper
sudo start mesos-master
sudo start marathon

방금 설정한 내용을 확인하려면 포트 5050에서 웹 브라우저의 마스터 서버 중 하나를 방문하십시오.

http://192.168.2.1:5050

메인 Mesos 인터페이스가 보일 것입니다. 선택한 리더에 연결했는지 여부에 따라 활성 마스터로 리디렉션된다는 메시지가 표시될 수 있습니다. 어느 쪽이든 화면은 다음과 유사하게 표시됩니다.

이것은 현재 클러스터의 보기입니다. 사용 가능한 슬레이브 노드가 없고 시작된 작업이 없기 때문에 볼 것이 많지 않습니다.

Mesosphere의 장기 실행 태스크 컨트롤러인 Marathon도 구성했습니다. 이는 모든 마스터의 포트 8080에서 사용할 수 있습니다.

슬레이브를 설정한 후 이러한 인터페이스를 사용하는 방법에 대해 간단히 살펴보겠습니다.

슬레이브 서버 구성

이제 마스터 서버를 구성했으므로 슬레이브 서버 구성을 시작할 수 있습니다.

우리는 이미 마스터 서버의 zookeeper 연결 정보로 슬레이브를 구성했습니다. 슬레이브 자체는 자체 zookeeper 인스턴스를 실행하지 않습니다.

슬레이브 노드에서 현재 실행 중인 zookeeper 프로세스를 중지하고 오버라이드 파일을 생성하여 서버가 재부팅될 때 자동으로 시작되지 않도록 할 수 있습니다.

sudo stop zookeeper
echo manual | sudo tee /etc/init/zookeeper.override

다음으로 Mesos 마스터 프로세스가 슬레이브 서버에서 시작되지 않도록 다른 재정의 파일을 생성하려고 합니다. 또한 현재 중지되었는지 확인합니다(프로세스가 이미 중지된 경우 이 명령이 실패할 수 있습니다. 문제가 되지 않음).

echo manual | sudo tee /etc/init/mesos-master.override
sudo stop mesos-master

다음으로 마스터 서버에서 했던 것처럼 IP 주소와 호스트 이름을 설정해야 합니다. 여기에는 각 노드의 IP 주소를 /etc/mesos-slave 디렉토리 아래의 파일에 넣는 작업이 포함됩니다. 웹 인터페이스를 통해 서비스에 쉽게 액세스할 수 있도록 호스트 이름으로도 사용합니다.

echo 192.168.2.51 | sudo tee /etc/mesos-slave/ip
sudo cp /etc/mesos-slave/ip /etc/mesos-slave/hostname

다시 말하지만 첫 번째 명령에는 각 슬레이브 서버의 개별 IP 주소를 사용하십시오. 이렇게 하면 올바른 인터페이스에 바인딩되고 있는지 확인할 수 있습니다.

이제 Mesos 슬레이브를 시작하기 위한 모든 조각이 준비되었습니다. 서비스를 켜기만 하면 됩니다.

sudo start mesos-slave

각 슬레이브 머신에서 이 작업을 수행하십시오.

슬레이브가 클러스터에 성공적으로 등록되었는지 확인하려면 포트 5050에서 마스터 서버 중 하나로 돌아갑니다.

http://192.168.2.1:5050

이제 인터페이스의 "3\에서 활성 슬레이브 수가 표시되어야 합니다.

또한 슬레이브 머신의 풀링된 리소스를 반영하도록 인터페이스에서 사용 가능한 리소스가 업데이트되었음을 확인할 수 있습니다.

각 슬레이브 시스템에 대한 추가 정보를 얻으려면 인터페이스 상단에 있는 "슬레이브\ 링크를 클릭하면 됩니다. 그러면 각 시스템의 리소스 기여에 대한 개요와 각 슬레이브에 대한 페이지 링크가 제공됩니다. :

Mesos 및 Marathon 서비스 시작

Marathon은 장기 실행 작업을 예약하기 위한 Mesosphere의 유틸리티입니다. Marathon을 Mesosphere 클러스터의 초기 시스템으로 생각하기 쉽습니다. 왜냐하면 Marathon은 서비스 시작 및 중지, 작업 예약, 애플리케이션이 다운된 경우 다시 작동하는지 확인하는 일을 처리하기 때문입니다.

몇 가지 다른 방법으로 Marathon에 서비스와 작업을 추가할 수 있습니다. 기본적인 서비스만 다룰 예정입니다. Docker 컨테이너는 향후 가이드에서 다룰 예정입니다.

웹 인터페이스를 통해 서비스 시작

클러스터에서 서비스를 빠르게 실행하는 가장 직접적인 방법은 Marathon 웹 인터페이스를 통해 애플리케이션을 추가하는 것입니다.

먼저 마스터 서버 중 하나에서 Marathon 웹 인터페이스를 방문하십시오. Marathon 인터페이스는 포트 8080에 있음을 기억하십시오.

http://192.168.2.1:8080

여기에서 오른쪽 상단 모서리에 있는 "새 앱\ 버튼을 클릭할 수 있습니다. 그러면 새 응용 프로그램에 대한 정보를 추가할 수 있는 오버레이 팝업이 나타납니다.

앱에 대한 요구 사항으로 필드를 채우십시오. 필수 필드는 다음과 같습니다.

  • ID: 프로세스를 식별하기 위해 사용자가 선택한 고유 ID입니다. 원하는 대로 지정할 수 있지만 고유해야 합니다.
  • Command: 이것은 Marathon에서 실행할 실제 명령입니다. 이는 모니터링되고 실패할 경우 다시 시작되는 프로세스입니다.

이 정보를 사용하여 "hello\를 인쇄하고 10초 동안 대기하는 간단한 서비스를 설정할 수 있습니다. 이를 "hello\라고 합니다.

인터페이스로 돌아가면 서비스가 "배포 중\에서 "실행 중\으로 전환됩니다.

약 10초마다 "Tasks/Instances\ 판독값이 "1/1\에서 "0/1\로 바뀌고 수면 시간이 지나면서 서비스가 중지됩니다. 그런 다음 Marathon이 자동으로 작업을 다시 시작합니다. 우리는 할 수 있습니다. 포트 5050의 Mesos 웹 인터페이스에서 이 프로세스를 보다 명확하게 확인하십시오.

http://192.168.2.1:5050

여기에서 프로세스가 완료되고 다시 시작되는 것을 볼 수 있습니다.

작업 중 "Sandbox\를 클릭한 다음 "stdout\을 클릭하면 생성되는 "hello\ 출력을 볼 수 있습니다.

API를 통해 서비스 시작

Marathon의 API를 통해 서비스를 제출할 수도 있습니다. 여기에는 오버레이에 포함된 모든 필드가 포함된 JSON 개체를 전달하는 작업이 포함됩니다.

이것은 비교적 간단한 과정입니다. 다시 말하지만 유일한 필수 필드는 프로세스 식별자의 id와 실행할 실제 명령을 포함하는 cmd입니다.

따라서 다음 정보를 사용하여 hello.json이라는 JSON 파일을 만들 수 있습니다.

nano hello.json

내부의 최소 사양은 다음과 같습니다.

{
    "id": "hello2",
    "cmd": "echo hello; sleep 10"
}

이 서비스는 잘 작동합니다. 그러나 웹 UI에서 만든 서비스를 진정으로 에뮬레이션하려면 몇 가지 추가 필드를 추가해야 합니다. 이는 웹 UI에서 기본 설정되었으며 여기에서 복제할 수 있습니다.

{
    "id": "hello2",
    "cmd": "echo hello; sleep 10",
    "mem": 16,
    "cpus": 0.1,
    "instances": 1,
    "disk": 0.0,
    "ports": [0]
}

완료되면 JSON 파일을 저장하고 닫습니다.

다음으로 Marathon API를 사용하여 제출할 수 있습니다. 대상은 포트 8080에 있는 마스터의 마라톤 서비스 중 하나이고 끝점은 /v2/apps입니다. 데이터 페이로드는 파일을 나타내는 @ 플래그와 함께 -d 플래그를 사용하여 curl로 읽을 수 있는 JSON 파일입니다.

제출 명령은 다음과 같습니다.

curl -i -H 'Content-Type: application/json' -d@hello2.json 192.168.2.1:8080/v2/apps

Marathon 인터페이스를 보면 성공적으로 추가된 것을 확인할 수 있습니다. 첫 번째 서비스와 정확히 동일한 속성을 가지고 있는 것 같습니다.

새 서비스는 첫 번째 서비스와 똑같은 방식으로 모니터링하고 액세스할 수 있습니다.

결론

이 시점에서 생산 준비가 된 Mesosphere 클러스터가 실행 중이어야 합니다. 이 시점에서는 기본 구성만 다루었지만 Mesosphere 시스템을 활용할 수 있는 가능성을 볼 수 있어야 합니다.

향후 가이드에서는 클러스터에 Docker 컨테이너를 배포하는 방법과 일부 도구를 보다 깊이 있게 사용하는 방법을 다룰 것입니다.