Running CRATE with Docker on Google Cloud Platform (2)

Running CRATE with Docker on Google Cloud Platform (2)

  • STEP 4. 환경 설정을 위한 startup 스크립트
  • STEP 5. CRATE 실행
  • STEP 6. CRATE Cluster 에 접속하기

STEP 4. 환경 설정을 위한 startup 스크립트

인스턴스에 접속하여 실행해준다.
정상적으로 잘 실행이 된다면 crate 도커 최신버전이 설치되었을 것이다.

startup.sh

#!/bin/bash
# Update the instances:
#yum update
apt-get -y update
# Crate the filesystems for Crate's data storage
mkfs.ext4 /dev/sdb
mkfs.ext4 /dev/sdc
# Make the directories to mount the drives
mkdir /data
mkdir /data/data{1,2}
# Mount the drives to the data directories
mount /dev/sdb /data/data1
mount /dev/sdc /data/data2
# Add a crate user and give it ownership of the data directories
useradd -s /sbin/nologin crate
chown -R crate.crate /data
# Install and start Docker
#yum install -y docker
apt-get purge "docker.io*"
apt-get install apt-transport-https ca-certificates
apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
echo "deb https://apt.dockerproject.org/repo debian-jessie main" > /etc/apt/sources.list.d/docker.list
apt-get update
apt-get install docker-engine
service docker start
# Get the latest Crate container for Docker
docker pull crate:latest

STEP 5. CRATE 실행

이 스크립트를 실행하면 crate 라는 이름으로 container 가 생성되고 실행된다.

crate-start.sh

#!/bin/bash

# 인스턴스에 할당된 내부 IP 정보를 PRIVATE_IP 변수에 저장한다.
PRIVATE_IP=$(curl "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip" -H "Metadata-Flavor: Google")
echo "PRIVATE_IP = "$PRIVATE_IP

docker run -d -p 4200:4200 -p 4300:4300 \
--name crate \
--volume /data:/data \
--env CRATE_HEAP_SIZE=8g \
crate crate \
-Des.cluster.name="my_cluster" \
-Des.path.data="/data/data1,/data/data2" \
-Des.discovery.zen.minimum_master_nodes=2 \
-Des.gateway.expected_nodes=3 \
-Des.gateway.recover_after_nodes=3 \
-Des.discovery.zen.ping.multicast.enabled=false \
-Des.network.publish_host=$PRIVATE_IP \
-Des.discovery.zen.ping.unicast.hosts=crate-1-sjyun:4300 \
-Des.discovery.zen.ping.unicast.hosts=crate-2-sjyun:4300 \
-Des.discovery.zen.ping.unicast.hosts=crate-3-sjyun:4300

sleep 5
docker ps

Google Compute Engine 의 생성된 인스턴스들은 http://metadata.google.internal/computeMetadata/v1/ 을 통해 Metadata 정보를 얻을 수 있다.
자세한 내용은 [GCP Tip] Metadata of Instance 를 보라.

  • docker run <옵션> <이미지 이름> <실행할 파일> 형식으로 도커를 실행합니다.
옵션 설명
run Run a command in a new container
-d Run container in background and print container ID
-p Publish a container’s port(s) to the host
–name string Assign a name to the container
–volume value Bind mount a volume
–env value Set environment variables
-Des.cluster.name CRATE 클러스터의 이름을 정한다.
-Des.path.data data를 저장할 위치를 지정한다.
-Des.discovery.zen.minimum_master_nodes=2 3 노드 클러스터 에 그들이 마스터 를 선출 하도록 허용 하기 전에 적어도 2 노드가 서로 를 볼 필요가 있음을 의미한다.
-Des.gateway.expected_nodes=3 클러스터의 상태가 즉시 복구 될 때까지 기다려야 하는 노드 수를 정의한다. 모든 노드가 시작된 후 클러스터 상태를 복구하고 싶어하기 때문에 이 값은 클러스터의 노드 수와 같아야 한다.
-Des.gateway.recover_after_nodes=3 모든 클러스터 상태 복구가 시작 되기 전에 시작 해야하는 노드의 수를 정의한다. 모든 노드가 시작될 때 한번에 복구되어지는 클러스터의 상태를 원하기 때문에 이상적으로 이 값은 모든 클러스터 노드의 수와 일치해야만 한다.
-Des.discovery.zen.ping.multicast.enabled=false Multicast를 지원하지 않는 일부 환경(Amazon EC2, Google Compute Engine or Docker 등)에서 클러스터를 배포 할 경우 multicast 를 사용하지 않도록 하고 대신 unicast 를 사용해야 한다.
-Des.network.publish_host=$PRIVATE_IP 특정 경우에 CRATE를 실행하는 노드의 주소가 다른 노드가 접속하는 주소와 다를 수가 있다. CRATE가 Docker 내에서 실행될 결우가 이러한 예이다. 따라서 CRATE는 이를 위한 호스트와 포트를 지정할 수 있다. 이 설정은 실제 호스트의 주소와 다를 수 있다.
-Des.discovery.zen.ping.unicast.hosts=crate-1-sjyun:4300 클러스터 노드를 지정한다.

STEP 6. CRATE Cluster 에 접속하기

CRATE Cluster 에 접속 할 수 있는 방법은 3가지 이다.

Docker 로 실행된 CRATE Cluster 는 CLI tool 을 사용할 수 없다. 때문에 나머지 2가지 방법을 이용해야만 한다.
개발자가 아니라면 REST API 는 사용하기가 좀 번잡하다.
때문에 일반적으로 보기 쉬운 Admin UI 로 접속해보자.

http://SERVER_IP:4200/admin

SERVER_IP 는 당연하겠지만 Cluster 노드들 중에서 External IP 주소이다.

Cluster 가 정상적으로 동작한다면 그림1 과 같은 화면을 볼 수 있을 것이다.
현재 클러스터의 전반적인 상태를 보여주고 있다. 주의해서 볼 부분은 당연히 녹색으로 표시되어 있는 “HEALTH” 이다.
문제가 발생한다면 녹색이 빨간색으로 변하고 그에 대한 내용을 화면에 보여준다.

Overview
< 그림1. Overview > [ 출처: Flickr, gongjak1 ]

두 번째 메뉴는 “GET STARTED” 이다. 여기에서 Twitter 로 부터 실제 데이터를 import 하여 Sample Data 로 저장하고 테스트해볼 수 있다.

GET STARTED
< 그림2. GET STARTED > [ 출처: Flickr, gongjak1 ]

다음 메뉴는 “CONSOLE” 로서 직접 Query 를 날려서 결과를 확인할 수 있다.

CONSOLE
< 그림3. CONSOLE > [ 출처: Flickr, gongjak1 ]

“TABLE” 메뉴 에서는 현재 DB 의 TABLE 들과 그에 대한 정보를 보여주고 있다. 테이블을 클릭하면 Schema 정보도 나온다.

TABLE
< 그림4. TABLE > [ 출처: Flickr, gongjak1 ]

마지막 “CLUSTER” 에서는 현재 노드들의 정보를 보여준다. 여기에서 보여주는 Name 은 Node.name 으로 지정하지 않으면 임의의 값을 생성한다. Hostname 은 Docker 로 실행했기 때문에 CONTAINER ID 를 보여주고 있다.

CLUSTER
< 그림5. CLUSTER > [ 출처: Flickr, gongjak1 ]

모든 화면의 오른쪽 하단에는 하늘색 원에 ‘?’ 가 들어가 있는 아이콘이 있는데, 클릭하면 Crate.IO Team 과 대화를 할 수도 있다. 팀원이 근무중일 때에는 실시간으로 대화도 가능하고, 메일 주소를 남겨놓으면 채팅 내용이 메일로도 전달 된다.
사용하다 궁금한 점이 있으면 그냥 메시지를 남겨 놓자.


To be continue …

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중