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 로 접속해보자.
SERVER_IP 는 당연하겠지만 Cluster 노드들 중에서 External IP 주소이다.
Cluster 가 정상적으로 동작한다면 그림1 과 같은 화면을 볼 수 있을 것이다.
현재 클러스터의 전반적인 상태를 보여주고 있다. 주의해서 볼 부분은 당연히 녹색으로 표시되어 있는 “HEALTH” 이다.
문제가 발생한다면 녹색이 빨간색으로 변하고 그에 대한 내용을 화면에 보여준다.
< 그림1. Overview > [ 출처: Flickr, gongjak1 ]
두 번째 메뉴는 “GET STARTED” 이다. 여기에서 Twitter 로 부터 실제 데이터를 import 하여 Sample Data 로 저장하고 테스트해볼 수 있다.
< 그림2. GET STARTED > [ 출처: Flickr, gongjak1 ]
다음 메뉴는 “CONSOLE” 로서 직접 Query 를 날려서 결과를 확인할 수 있다.
< 그림3. CONSOLE > [ 출처: Flickr, gongjak1 ]
“TABLE” 메뉴 에서는 현재 DB 의 TABLE 들과 그에 대한 정보를 보여주고 있다. 테이블을 클릭하면 Schema 정보도 나온다.
< 그림4. TABLE > [ 출처: Flickr, gongjak1 ]
마지막 “CLUSTER” 에서는 현재 노드들의 정보를 보여준다. 여기에서 보여주는 Name 은 Node.name 으로 지정하지 않으면 임의의 값을 생성한다. Hostname 은 Docker 로 실행했기 때문에 CONTAINER ID 를 보여주고 있다.
< 그림5. CLUSTER > [ 출처: Flickr, gongjak1 ]
모든 화면의 오른쪽 하단에는 하늘색 원에 ‘?’ 가 들어가 있는 아이콘이 있는데, 클릭하면 Crate.IO Team 과 대화를 할 수도 있다. 팀원이 근무중일 때에는 실시간으로 대화도 가능하고, 메일 주소를 남겨놓으면 채팅 내용이 메일로도 전달 된다.
사용하다 궁금한 점이 있으면 그냥 메시지를 남겨 놓자.
To be continue …