OpenStack
둘러보기로 가기
검색하러 가기
Cloud compute(Nova)과 Cloud Object Storage(Swift)를 제공하는 OpenStack을 정리한다.
- 홈페이지 : http://www.openstack.org/, stephen.spector(골뱅이)openstack.org
- 매뉴얼 : http://docs.openstack.org/
- Openstack Blog
- OpenStack 한국 커뮤니티, 2010.12.28 한국 커뮤니티 사이트 오픈
- 한국 커뮤니티 위키
- Korea OpenStack Community
- 다운로드 :
- 라이선스 : Apache 2.0
- 플랫폼 : python
목차
OpenStack 개요
OpenStack Architecture
History
OpenStack은 Rackspace에서 Cloud Files과 Cloud Server 기술을 기증하고 NASA에서 Nebula를 기증하여 2010년 7월부터 시작된 오픈소스로 기업의 데이터와 애플리케이션을 하나의 클라우드에서 다른 클라우드로 더 쉽게 이전할 수 있도록 하는 것을 목표로 하고 있다. OpenStack은 Xen, KVM, QEMU 등을 지원하고 있다.
- OpenStack History
- 2010.03 : Rackspace가 자사의 클라우드 스토리지를 오픈소스화 (IaaS 분야 2위 사업자)
- 2010.05 : NASA가 Nebula 플랫폼을 오픈소스화 (Nebula. 서버 가상화 플랫폼)
- 2010.06 : Rackspace와 NASA가 OpenStack 설립
- 2010.10 : Austin release
- 2011.02 : Bexar release, 35 이상의 파트너
- 2011.02 : OpenStack 한국 커뮤니티 구축 <- KT (OpenStack 공식 파트너) 지원
- 2011.04 : Cactus release
- KT : 2011.3 ~ 2011.6, OpenStack Object Storage 기반 크라우드 스토리지 서비스 상용화 (ucloud SS)
- 2011.07 : Diablo release
- 2014.10.16 : Juno release
- OpenStack 버전 : Essex (2012.4.5) -> Folsom (2012.9.27) -> Grizzly (2013.4.4) -> Havana (2013.10.17) -> IceHouse (2014.4.17, 9번째 release) -> Juno (2014.10.16)
Nova 개요
Nova는 Cloud Computing에서 서버상의 가상 머신을 운용, 관리하기 위한 소프트웨어로 호스트 머신의 가상화 메카니즘을 구동하기 위한 드라이버를 정의하고 웹을 통해 서비스를 제공 한다.
- Nova : OpenStack Compute
- REST-based API 제공
- Amazon EC2 호환 API 및 자체 API 제공
- 지원하는 가상 머신
- KVM, Xen, XenServer, UML, Hyper-V, QEMU
- Ubuntu 10.04, Python 2.6 / MySQL, PostgreSQL, SQLite
- 소스 : https://launchpad.net/nova
- Nova Software 구조
- API Server : 명령/제어 요청을 받음, HTTP
- Scheduler Node : 요청된 리소스를 제공할 노드 선택 및 VM 관리 지시 (Round-Robin, Random 방식 지원)
- Object Storage Server : 이미지나 템플릿 저장을 위한 스토리지 제공
- Compute Node : VM 관리
- Network Node : Network 관리 (Flat, Flat DHCP, VLAN 모드 지원)
- Flat : VM에 고정 IP 할당
- Flat DHCP : VM에 DHCP에서 제공된 IP 할당
- VLAN DHCP : Default, 각 프로젝트의 VM에 VPN (OpenVPN) 제공
- Volume Node : Disk 관리
- 출처 : Nova 개념 및 소개
Swift 개요
대표적인 클라우드 스토리지 서비스 업체인 Rackspace의 핵심 기술을 오픈소스화하여 Amazon의 S3 서비스와 유사한 오브젝트 스토리지 서비스를 제공한다.
- Swift : OpenStack Object Storage
- Highly available, distributed, eventually consistent object/blob-store
- REST-based API 제공
- Authentication API
- Storage Account/Container/Object API
- GET, PUT, DELETE, COPY 등의 서비스 제공
- Swift 구조
- Auth middle : 사용자 생성 및 로그인, 인증 토큰을 생성하고 관리
- Proxy Server : 사용자의 요청에 따라 알맞은 서버에 연결하여 서비스 제공
- Account Server : 사용자 계정 관리 및 계정별 컨테이너 조회
- Container Server : 사용자 계정의 컨테이너를 관리, 컨테이너가 가진 오브젝트를 조회
- Object Server : 컨테이너 내의 오프젝트(Blob)를 관리
사용 문법 : http://swift.test.com/v1/account/container/object Account : http://swift.test.com/v1/AUTH_474747 (474747은 token을 의미함) Container : http://swift.test.com/v1/AUTH_474747/TESTCONTAINER Object : http://swift.test.com/v1/AUTH_474747/TESTCONTAINER/TESTFILE.txt
- Ring : 데이터의 논리적 위치와 물리적 위치간의 매핑 정보 제공
- Proxy server에서만 접근
- 종류 : Account ring, Container ring, Object ring
- ID, Zone number, IP, Port, Device Name, Weight, Meta
- Replication : Zone을 사용하여 replication 처리 가능
- Updaters : 실패한 작업(update)를 저장하고 다시 실행
- Auditors : account, container, object의 무결성을 검사하고 이상 발생시 replication으로 대체
Glance 개요
- Glance : OpenStack Imaging Service
Virtual machine 이미지를 관리하는 서비스로 저장소로 Open Stack Object Store 또는 Amazon S3를 이용 한다.
CentOS에서 OpenStack 설치
Ubuntu에서 OpenStack 설치
관리자 가이드
keystone 관리자 가이드
- Keystone 설정 스크립트 샘플
- 주요 concepts
- Users, Tenants, Roles
- Services, Endpoints
- Folder
- /etc/keystone/
- keystone.conf, policy.json, default_catalog.templates, logging.conf
- /var/lib/keystone/
- /var/log/keystone/keystone.log
- /usr/bin/keystone, keystone-manage, keystone-all
- User 생성
keystone user-create --name=alice --pass=~ --email=~ keystone user-list
- Tenant 생성
keystone tenant-create --name=~ keystone tenant-list
- Role 생성
keystone role-create --name=~ keystone role-list
- vi /etc/keystone/policy.json
- vi /etc/nova/policy.json
{ "권한" : [["role:~"], ["user_id":~]], //--- 권한을 role과 user에 할당 }
- vi /etc/glance/policy.json
- User를 tenant와 role에 할당
keystone user-role-add --user-id=~ --role-id=~ --tenant-id=~
- /etc/$serviceCodeName/policy.json 파일에 퍼미션 설정 저장
- vi /etc/keystone/policy.json
- vi /etc/glance/policy.json
- keystone 서비스 생성
keystone --token --endpoint http://192.~/v2.0/ service-create -name=keystone --type=identity --description="~" keystone --token --endpoint http://192.~/v2.0/ endpoint-create --region RegionOne --service_id=~ --publicurl=http://~:5000/v2.0 --internalurl=http://~:5000/v2.0 --adminurl=http://~:35357/v2.0
- 다른 서비스에 접속 가능한 token 생성
keystone -os-username=admin --os-password=~ --os-auth-url=http://~:35357/v2.0 token-get
- openstack-db
glance 관리자 가이드
- Folder
- /etc/glance
- /var/lib/glance
- /var/log/glance/api.log, registry.log
- /usr/bin/glance, glance-api, glance-registry, glance-manage, ...
- 이미지 업로드
- format : aki (커널), ari (램디스크), ami (이미지)
glance --os_username=adminUser --os_password=~ --os_tenant=~ --os_auth_url=http://~:50000/v2.0 add name="aName" disk_format=aki container_format=aki < fileName glance --os_username=adminUser --os_password=~ os_tenant=~ --os_auth_url=http://~:50000/v2.0 index
Swift 구성 요소 및 설치
Swift 구성 요소
- Account -> Container -> Object
- Container
- Storage compartment
- "/"가 포함되지 않은 문자열로 URLEncoding 후 256 bytes 이하
- Object
- Basic storage entity
- Object name : URLEncoding 후 1024 bytes 이하
- key/value : 90개 이내, 총 4096 bytes 이하
- Storage object : 0 byte ~ 5 GB
- Segmented Objects : 몇개의 Object를 하나의 Object 처럼 처리 (5GB 이상 다운로드 가능)
- Open API
- Rest web service API
- Python 2.4+
- PHP 5.x /w cURL, FileInfo, mbstring
- Java 1.5+
- Ruby 1.8+
- C#/.NET /w .NET Framework 3.5
curl -H 'X-Auth-Token: <token>' http://<storage_url>/container/myobject
Ubuntu에서 Swift 설치
- System 요구 사항
- Disk : RAID 5 or 6
- Ubuntu Server 10.04 LTS, 1GB Network, SQLite
- Swift 설치
apt-get install python-software-properties add-apt-repository ppa:swift-core/ppa apt-get update apt-get install swift openssh-server mkdir -p /etc/swift chown -R swift:swift /etc/swift/ vi /etc/swift/swift.conf [swift-hash] swift_hash_path_suffix = Swift_서버_ID //--- 절대 변하지 않을 임의의 문자열로 아이디 지정
- Swift Proxy Node 설치
apt-get install swift-proxy memcached vi /etc/memcached.conf -l 127.0.0.1 //--- 이 부분을 아래와 같이 변경 -l PROXY_LOCAL_NET_IP //--- 사설 IP 설정 service memcached restart cd /etc/swift openssl req -new -x509 -nodes -out cert.crt -keyout cert.key vi /etc/swift/proxy-server.conf [DEFAULT] cert_file = /etc/swift/cert.crt key_file = /etc/swift/cert.key bind_port = 8080 workers = 8 user = swift [pipeline:main] pipeline = healthcheck cache auth proxy-server [app:proxy-server] use = egg:swift#proxy allow_account_management = true [filter:auth] use = egg:swift#auth ssl = true [filter:healthcheck] use = egg:swift#healthcheck [filter:cache] use = egg:swift#memcache memcache_servers = <PROXY_LOCAL_NET_IP>:11211 ###--- 10.1.2.3:11211,10.1.2.4:11211 cd /etc/swift swift-ring-builder account.builder create 18 3 1 swift-ring-builder container.builder create 18 3 1 swift-ring-builder object.builder create 18 3 1 swift-ring-builder account.builder add z<ZONE>-<STORAGE_LOCAL_NET_IP>:6002/<DEVICE> 100 swift-ring-builder container.builder add z<ZONE>-<STORAGE_LOCAL_NET_IP_1>:6001/<DEVICE> 100 swift-ring-builder object.builder add z<ZONE>-<STORAGE_LOCAL_NET_IP_1>:6000/<DEVICE> 100 swift-ring-builder account.builder swift-ring-builder container.builder swift-ring-builder object.builder swift-ring-builder account.builder rebalance swift-ring-builder container.builder rebalance swift-ring-builder object.builder rebalance //--- account.ring.gz, container.ring.gz, and object.ring.gz을 /etc/swift/에 있는 Proxy and Storage nodes로 복사 chown -R swift:swift /etc/swift swift-init proxy start
- Swift Auth Node 설치
apt-get install swift-auth vi /etc/swift/auth-server.conf [DEFAULT] cert_file = /etc/swift/cert.crt key_file = /etc/swift/cert.key user = swift [pipeline:main] pipeline = auth-server [app:auth-server] use = egg:swift#auth default_cluster_url = https://<PROXY_HOSTNAME>:8080/v1 super_admin_key = devauth //--- devauth는 다른 것으로 변경할 것 swift-init auth start chown swift:swift /etc/swift/auth.db swift-init auth restart
- Swift Storage Node 설치
apt-get install swift-account swift-container swift-object xfsprogs fdisk /dev/sdb (set up a single partition) mkfs.xfs -i size=1024 /dev/sdb1 echo "/dev/sdb1 /srv/node/sdb1 xfs noatime,nodiratime,nobarrier,logbufs=8 0 0" >> /etc/fstab mkdir -p /srv/node/sdb1 mount /srv/node/sdb1 chown -R swift:swift /srv/node vi /etc/rsyncd.conf uid = swift gid = swift log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid address = <STORAGE_LOCAL_NET_IP> [account] max connections = 2 path = /srv/node/ read only = false lock file = /var/lock/account.lock [container] max connections = 2 path = /srv/node/ read only = false lock file = /var/lock/container.lock [object] max connections = 2 path = /srv/node/ read only = false lock file = /var/lock/object.lock vi /etc/default/rsync RSYNC_ENABLE = true service rsync start vi /etc/swift/account-server.conf [DEFAULT] bind_ip = <STORAGE_LOCAL_NET_IP> workers = 2 [pipeline:main] pipeline = account-server [app:account-server] use = egg:swift#account [account-replicator] [account-auditor] [account-reaper] vi /etc/swift/container-server.conf [DEFAULT] bind_ip = <STORAGE_LOCAL_NET_IP> workers = 2 [pipeline:main] pipeline = container-server [app:container-server] use = egg:swift#container [container-replicator] [container-updater] [container-auditor] vi /etc/swift/object-server.conf [DEFAULT] bind_ip = <STORAGE_LOCAL_NET_IP> workers = 2 [pipeline:main] pipeline = object-server [app:object-server] use = egg:swift#object [object-replicator] [object-updater] [object-auditor] swift-init object-server start swift-init object-replicator start swift-init object-updater start swift-init object-auditor start swift-init container-server start swift-init container-replicator start swift-init container-updater start swift-init container-auditor start swift-init account-server start swift-init account-replicator start swift-init account-auditor start
- 관리자 계정 생성
swift-auth-add-user -K devauth -a system root testpass curl -k -v -H 'X-Storage-User: system:root' -H 'X-Storage-Pass: testpass' https://<AUTH_HOSTNAME>:11000/v1.0 curl -k -v -H 'X-Auth-Token: <token-from-x-auth-token-above>' <url-from-x-storage-url-above> st -A https://<AUTH_HOSTNAME>:11000/v1.0 -U system:root -K testpass stat st -A https://<AUTH_HOSTNAME>:11000/v1.0 -U system:root -K testpass upload myfiles bigfile1.tgz st -A https://<AUTH_HOSTNAME>:11000/v1.0 -U system:root -K testpass upload myfiles bigfile2.tgz st -A https://<AUTH_HOSTNAME>:11000/v1.0 -U system:root -K testpass download myfiles
참고 문헌
- Getting Started
- Installing OpenStack
- Running OpenStack
- Developing OpenStack
- Command Line Interface(CLI)
- API
- Glossary
- OpenStack Operations Guide
- OpenStack Manuals : API Documentation
- OpenStack Manuals : Developer Documentation
- OpenStack 한국 커뮤니티
- OpenStack Wiki
- OpenStack 한글 Wiki
- OpenStack 설치 참고 문헌
- CentOS 6.x에 OpenStack 설치하기, 2012.10
- OpenStack Install and Deploy Manual - Red Hat, 2012.11
- OpenStack Compute Starter Guide, 2012.05
- http://en.m.wikipedia.org/wiki/OpenStack?wasRedirected=true
- KT에서 Swift 상용 서비스 추진중
- 마이크로소프트, 하이퍼-V와 오픈스택 호환성 작업 참여
- 블로터닷넷