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 이다는 점이 가장 매력적이다.
주요 특징 요약
- Open Source
- Highly Scalable
- Shared-nothing distributed SQL
- Standard SQL을 지원
- masterless and simple to install, operate and use
- Transactional & Analytical need 를 하나의 Database 에서 처리할 수 있다.
- Web, mobile 그리고 IoT 같은 대용량을 지원하기 위해 디자인 되었다.
- Container 지원
테스트 설명
이번 테스트는 다음의 목적으로 진행했다. 또한 모든 작업은 웹 콘솔에서도 동일하게 작업할 수 있으나 설명의 편의성으로 CLI를 이용한 방법으로 정리한다.
- DB 서버의 운영을 간소화하기 위해 시스템에 직접 설치가 아닌 Docker를 이용하고 싶다.
- 시스템의 운영 환경을 관리자가 어느 정도 관리하면서 운영하고 싶다.
- 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 …