2012-05-22

AppScale

개요

AppScale은 구글 앱엔진 플랫폼을 오픈 소스화하는 프로젝트이다. 아래와 같이 구글 앱엔진의 주요 모듈들을 오픈 소스 서비스들로 교체했다고 보면 정답이다.

  • big table => mysql, MongoDB, Cassandra 등 입맛대로 선택.
  • memcache => memcached
  • task queue => RabbitMQ
  • backend => not supported
  • email => sendmail
  • cron => cron

다만, 위 서비스들을 리얼 머신들에 직접 분산 설치하는 게 아니라, Ubuntu 가상 머신 이미지에 설치해둔 후 Amazon EC2 같은 가상 머신에 인스턴스들을 설치하고 역할을 지정하는 식으로 설치를 하게 된다. 가상 머신에는 그 외에도 다음과 같은 서비스들이 떠 있다.

  • ruby
  • erlang & neptune => neptune 이라는 cloud config/delpoy language
  • mongrel, mongodb
  • ndbd
  • nginix master & slave => 로드밸런싱용 웹서버

appscale tools라는 아마존 EC2 tools와 비슷한 루비로된 스크립트로 플랫폼을 관리하게 되며, 아직까지는 python 2.5 만 지원한다. 웹 기반의 간단한 관리툴도 제공한다.

구조

  • load balancer : http 분산
  • application : python
  • data management : DB. (cassandra, hbase, hypertable, mongodb, memcachedb, simpledb, mysql cluster, voldmort)

배포 모델

virtualized cluster deployment

관리자가 각 호스트에 이미지를 설치하고 부팅해서 각각 네트워킹이 되는지 체크하고 IP를 기록해서 통신토록.

  • 인스턴스 하나당 1G 메모리, 2 virtual CPU 를 권장
  • ssh & root 접근 권한 필요
  • 그냥 셧다운하면 안됨. appscale 전체를 셧다운한 후에 개별 노드를 셧다운해야 함.

cloud infrastructure deployment

아마존 EC2 에 설치하거나 Eucalyptus(아마존EC2의 오픈소스 버전) 에 배포. AppScale 이 미리 설치된 AMI(Amazon Machine Image)로 설치.

  • 클라우드 관리자는 account credential 필요
  • appscale 설치 전에 non-appscale image 가 배포되고 public/private ip 를 설치할 수 있는지 체크해야 함.
  • 이 테스트가 모두 끝나고 나서 전체 셧다운 후 배포.

배포

appscale tools 를 이용해서 자동화함.

  • 클라우드 관리 인터페이스 제공
  • 각 인스턴스들의 ssh 키와 credential 들을 동기화함
  • ips.yaml 에 각 노드 정보가 있음.

:controller: --> database master & load balancer 가 설치됨
:servers: --> application servers & database slave 가 설치됨

AppScale Tools

사용법 참조

appscale-run-instances

특정 폴더를 배포하면서 appscale 서비스를 시작함.
--file: 배포할 폴더 지정
--table: 데이터베이스 지정.

맨 처음에는 controller 노드를 시작함. servers 노드들은 비동기로 시작. 클라우드 배포시 VM 부팅을 시작함. 이미지 크기 때문에 수십분 걸림. 그다음엔 DB를 시작함.

appscale-describe-instances

각 노드 상태를 보여줌. 메모리. CPU. HDD. 역할. DB.

appscale-upload-app, appscale-remove-app

특정 앱을 업로드하거나 삭제함.

appscale-terminate-instances

전체 클라우드를 셧다운함.

배포 구성 전략

  • load balancer: 라우팅. 모든 노드들의 상태 페이지 호스팅. 여러 개 실행 가능.
  • app engine: 커스터마이즈된 gae sdk 가 실행됨
  • database
  • login: 딱 한놈만 appscale-run-instances/appscale-upload-app 역할을 담당
  • zoo keeper : db transaction 을 위한 메타 데이터 호스팅
  • shadow :

호환성 & 차이점

설치하기

가상 환경에서 guest OS로 돌아감. 가상 머신 이미지를 배포함. KVM, XEN. 근데 리눅스 Host 만 지원함. 보통 우분투를 씀.

아마존에서는 이미지 업로드 없이 public AMI 를 써서 바로 띄울 수 있음. 단 버지니아에만 이미지가 존재함.

see also deploying appscale via ec2

환경 변수 설정

AWS 키 & 크레덴셜 에서 X.509 키들을 다운받아서 pem 파일을 저장하고 환경 변수로 등록할 것.

Access Keys 를 카피해서 배치 파일에 등록한다.

see also appscale IaaS cloud deployment

euca tools 설치

아마존 접근을 위해서는 이 툴을 설치해야 된다.

euca tools 다운로드

  1. pcre 설치
  2. swig 설치

  3. euca tools src deps 에서
    3-1. boto-1.9b

python2.7 에서는 다음 패치를 해야 함.

3-2. M2Crypto-0.20.2

appscale tools 설치

debian/appscale_build_source.sh 열어서 help2man 관련 섹션 제거 후
sudo bash debian/appscale_build_source.sh 를 실행하면 /usr/local/appscale-tools 에 설치됨

아마존 서버 설치

버지니아에만 있는 appscale 1.6.1rc AMI (ami-e4a3048d) 을 이용해서 1 노드로 설치할 것. 이때 db 는 mysql

appscale-run-instances --min 1 --max 1 --file /usr/local/appscale-tools/sample_apps/python/guestbook --machine ami-e4a3048d --table mysql --iaas --force -v

인스턴스 타입은 지정하지 않으면 m1.large

가끔 키가 이미 등록되어 있다고 하는데, 그럴 때에는 --keyname XXX 로 다른 걸 사용할 것.

관련 키들은 ~/.appscale 폴더에 저장됨. pem 도 들어가 있음.

ssh 하기

ssh -i /Users/reiot/.appscale/warcloud.key root@ec2-23-22-2-204.compute-1.amazonaws.com

access key & secret

대칭형 암호화.
모든 리퀘스트마다 public key id 를 보내고 더불어 secret key의 해시코드를 보내서 서버에서 검증하는 방식. 페북 캔버스앱과 동일한 구조다.

X.509 Certificates

공개키 암호화. cert.pem 으로 암호화하면 pk.pem 으로 복호화.

  • PEM encoded X.509 certificate: cert-xxxx.pem
  • PEM encoded RSA private key: pk-xxxx.pem

key pairs

EC2 인스턴스 접근시 권한.

ssh 를 위해서 가상 서버 인스턴스에 키를 등록함.

ssh 하기

-v 옵션으로 상태를 볼 것. -i 로 cert-xxx.pem 파일을 이용. 로그인시 account@server 형식 사용.

ssh -i ~/.ec2/cert.pem root@ec2-23-22-2-204.compute-1.amazonaws.com -v

ec2 commands

  • ec2-authorize default -p NN : 특정 포트를 기본 오픈. (보통 ssh 22, 웹 80번 포트가 필요함)