Running CRATE with Docker on Google Cloud Platform (1)

Running CRATE with Docker on Google Cloud Platform (1)

  • CRATE 란 ?
        – 주요 특징 요약
        – 테스트 설명
  • STEP 1. GCP 에서 방화벽 룰 추가
  • STEP 2. 인스턴스에서 사용할 추가 디스크 생성
  • STEP 3. 인스턴스 3개 생성

CRATE 란 ?

Homepage: CRATE.io

CRATE(크레이트) 는 오픈 소스이고, 확장성이 뛰어난 비공유 분산 SQL 데이터베이스입니다.
CRATE 는 표준 SQL 의 강력함을 가진 최신 No-SQL 데이터베이스로서 높은 확장성과 성능을 제공합니다.

CRATE 를 테스트하면서 DBMS가 이렇게 가볍게 동작할 수도 있구나라는 생각을 할 수 있었는데, JAVA로 만들어졌음에도 불구하고 가볍고 쉽게 작동 시킬 수 있었다.
물론 장시간에 걸쳐 서비스에 적용해보거나 하지는 않았기에 CRATE를 실제 상용 서비스에 적용하여 운영할 때에는 어떤 이슈가 생길수 있을지 알 수가 없다.
오랜시간 DBA로 일을 해오고 있는 사람들은 실제 DB서버의 운영에 많은 노하우들이 필요하다는 것을 알고 있을 것이다.
이 때문에 한 번 선택한 DB는 쉽게 바꾸지 못한다.

하지만 CRATE는 No-SQL이다. 전에 사용해봤던 Riak, Cassandra, MongoDB에 비하면 설정이 매우 쉽다.
거의 모든 운영체제를 지원하고, Docker를 사용할 수도 있고, 여러 클라우드 서비스에서도 사용할 수 있다. (설치 참조)
그리고 무엇보다 표준 SQL을 지원하는 No-SQL이다. DBA든 개발자든 표준 SQL만 알면 바로 사용할 수 있는 No-SQL 이다는 점이 가장 매력적이다.

주요 특징 요약

  1. Open Source
  2. Highly Scalable
  3. Shared-nothing distributed SQL
  4. Standard SQL을 지원
  5. masterless and simple to install, operate and use
  6. Transactional & Analytical need 를 하나의 Database 에서 처리할 수 있다.
  7. Web, mobile 그리고 IoT 같은 대용량을 지원하기 위해 디자인 되었다.
  8. Container 지원

테스트 설명

이번 테스트는 다음의 목적으로 진행했다. 또한 모든 작업은 웹 콘솔에서도 동일하게 작업할 수 있으나 설명의 편의성으로 CLI를 이용한 방법으로 정리한다.

  1. DB 서버의 운영을 간소화하기 위해 시스템에 직접 설치가 아닌 Docker를 이용하고 싶다.
  2. 시스템의 운영 환경을 관리자가 어느 정도 관리하면서 운영하고 싶다.
  3. Kubernetes와 같은 자동화 툴에서 DB는 운영하고 싶지 않다.

시스템 환경

  • Cloud Service : Google Cloud Platform 의 Compute Engine 을 사용
  • Instance Type : n1-standard-4 (4 vCPUs, 15 GB) * 3대
  • Disk : SSD Type, 100GB 용량의 추가 디스크 서버당 2개씩
  • 운영체계 : Debian 8 (Jessie), Debian 3.16.7-ckt25-2+deb8u3 (2016-07-02) x86_64 GNU/Linux

STEP 1. GCP 에서 방화벽 룰 추가

CRATE는 4200번 포트를 통해 admin 화면에 접속 할 수 있다. 나중에 admin 화면에 접속해보면 알 수 있지만 할 수 있는 일은 많지 않다.
그냥 모니터링을 위한 화면으로 생각하면 될 거 같다.

gcloud compute --project "" firewall-rules create "default-crate-allow" --allow tcp:4200 --network "default" --source-ranges "0.0.0.0/0" --target-tags "crate-admin"

STEP 2. 인스턴스에서 사용할 추가 디스크 생성

PROJECT_NAME=""

gcloud compute --project "${PROJECT_NAME}" disks create "crate-1-sjyun-disk-1" --size "100" --zone "us-central1-f" --type "pd-ssd"
gcloud compute --project "${PROJECT_NAME}" disks create "crate-1-sjyun-disk-2" --size "100" --zone "us-central1-f" --type "pd-ssd"

gcloud compute --project "${PROJECT_NAME}" disks create "crate-2-sjyun-disk-1" --size "100" --zone "us-central1-f" --type "pd-ssd"
gcloud compute --project "${PROJECT_NAME}" disks create "crate-2-sjyun-disk-2" --size "100" --zone "us-central1-f" --type "pd-ssd"

gcloud compute --project "${PROJECT_NAME}" disks create "crate-2-sjyun-disk-1" --size "100" --zone "us-central1-f" --type "pd-ssd"
gcloud compute --project "${PROJECT_NAME}" disks create "crate-2-sjyun-disk-2" --size "100" --zone "us-central1-f" --type "pd-ssd"

STEP 3. 인스턴스 3개 생성

클러스터로 동작하기 위해서 필요한 최소 노드 수는 3대이기에 다음 명령어로 생성해준다.

PROJECT_NAME=""

# instance #1
gcloud compute --project "${PROJECT_NAME}" instances create "crate-1-sjyun" --zone "us-central1-f" \
--machine-type "n1-standard-4" --network "default" --maintenance-policy "MIGRATE" \
--scopes default="https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring.write","https://www.googleapis.com/auth/servicecontrol","https://www.googleapis.com/auth/service.management.readonly" \
--tags "crate-admin" \
--disk "name=crate-1-sjyun-disk-1,device-name=crate-1-sjyun-disk-1,mode=rw,boot=no" \
--disk "name=crate-1-sjyun-disk-2,device-name=crate-1-sjyun-disk-2,mode=rw,boot=no" \
--image "/debian-cloud/debian-8-jessie-v20160803" \
--boot-disk-size "10" --boot-disk-type "pd-standard" \
--boot-disk-device-name "crate-1-sjyun"

# instance #2
gcloud compute --project "${PROJECT_NAME}" instances create "crate-2-sjyun" --zone "us-central1-f" \
--machine-type "n1-standard-4" --network "default" --maintenance-policy "MIGRATE" \
--scopes default="https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring.write","https://www.googleapis.com/auth/servicecontrol","https://www.googleapis.com/auth/service.management.readonly" \
--tags "crate-admin" \
--disk "name=crate-2-sjyun-disk-1,device-name=crate-2-sjyun-disk-1,mode=rw,boot=no" \
--disk "name=crate-2-sjyun-disk-2,device-name=crate-2-sjyun-disk-2,mode=rw,boot=no" \
--image "/debian-cloud/debian-8-jessie-v20160803" \
--boot-disk-size "10" --boot-disk-type "pd-standard" \
--boot-disk-device-name "crate-2-sjyun"

# instance #3
gcloud compute --project "${PROJECT_NAME}" instances create "crate-3-sjyun" --zone "us-central1-f" \
--machine-type "n1-standard-4" --network "default" --maintenance-policy "MIGRATE" \
--scopes default="https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring.write","https://www.googleapis.com/auth/servicecontrol","https://www.googleapis.com/auth/service.management.readonly" \
--tags "crate-admin" \
--disk "name=crate-3-sjyun-disk-1,device-name=crate-3-sjyun-disk-1,mode=rw,boot=no" \
--disk "name=crate-3-sjyun-disk-2,device-name=crate-3-sjyun-disk-2,mode=rw,boot=no" \
--image "/debian-cloud/debian-8-jessie-v20160803" \
--boot-disk-size "10" --boot-disk-type "pd-standard" \
--boot-disk-device-name "crate-3-sjyun"

서버를 하나씩 모두 생성하지 않고, 한 대만 생성하여 셋팅을 완료하고 이를 이용하여 나머지 서버를 만들수도 있다.
여러 대의 서버를 생성하고자 할 때에는 이 방법이 훨씬 수월하다.

우선 1번 서버만 만들고 설정을 완료한 후 boot 디스크의 snapshot 을 생성한다. (snapshot 이름 : crate-1-snapshot-sjyun)
아래 명령어를 이용하여 하나씩 서버를 생성하면 된다.

PROJECT_NAME=""

# instance #2
gcloud compute --project "${PROJECT_NAME}" disks create "crate-2-sjyun-disk-1" --size "100" --zone "us-central1-f" --type "pd-ssd"
gcloud compute --project "${PROJECT_NAME}" disks create "crate-2-sjyun-disk-2" --size "100" --zone "us-central1-f" --type "pd-ssd"

gcloud compute --project "${PROJECT_NAME}" disks create "crate-2-sjyun" --size "10" --zone "us-central1-f" --source-snapshot "crate-1-snapshot-sjyun" --type "pd-standard"

gcloud compute --project "${PROJECT_NAME}" instances create "crate-2-sjyun" --zone "us-central1-f" \
--machine-type "n1-standard-4" \
--network "default" --maintenance-policy "MIGRATE" \
--scopes default="https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring.write","https://www.googleapis.com/auth/servicecontrol","https://www.googleapis.com/auth/service.management.readonly" \
--tags "crate-admin" \
--disk "name=crate-2-sjyun,device-name=crate-2-sjyun,mode=rw,boot=yes,auto-delete=yes" \
--disk "name=crate-2-sjyun-disk-1,device-name=crate-2-sjyun-disk-1,mode=rw,boot=no" \
--disk "name=crate-2-sjyun-disk-2,device-name=crate-2-sjyun-disk-2,mode=rw,boot=no"

# instance #3
gcloud compute --project "${PROJECT_NAME}" disks create "crate-3-sjyun-disk-1" --size "100" --zone "us-central1-f" --type "pd-ssd"
gcloud compute --project "${PROJECT_NAME}" disks create "crate-3-sjyun-disk-2" --size "100" --zone "us-central1-f" --type "pd-ssd"

gcloud compute --project "${PROJECT_NAME}" disks create "crate-3-sjyun" --size "10" --zone "us-central1-f" --source-snapshot "crate-1-snapshot-sjyun" --type "pd-standard"

gcloud compute --project "${PROJECT_NAME}" instances create "crate-2-sjyun" --zone "us-central1-f" \
--machine-type "n1-standard-4" \
--network "default" --maintenance-policy "MIGRATE" \
--scopes default="https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring.write","https://www.googleapis.com/auth/servicecontrol","https://www.googleapis.com/auth/service.management.readonly" \
--tags "crate-admin" \
--disk "name=crate-3-sjyun,device-name=crate-3-sjyun,mode=rw,boot=yes,auto-delete=yes" \
--disk "name=crate-3-sjyun-disk-1,device-name=crate-3-sjyun-disk-1,mode=rw,boot=no" \
--disk "name=crate-3-sjyun-disk-2,device-name=crate-3-sjyun-disk-2,mode=rw,boot=no"

To be continue …

답글 남기기

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

WordPress.com 로고

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

Twitter 사진

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

Facebook 사진

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

Google+ photo

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

%s에 연결하는 중