상단

[http://nova.openstack.org/ Cloud compute(Nova)]과 Cloud Object Storage(Swift)를 제공하는 OpenStack을 정리한다.

 
 
 

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

    • *https://wiki.openstack.org/wiki/ReleaseNotes/Juno/ko

     
  • 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) -> Kilo (2015.04.30) -> Liberity (2015.10)

 
 

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 관리

 
 

http://www.openstack.or.kr/wiki/images/a/a2/Untitled1.jpg

 
출처 : [Nova 개념 및 소개](http://www.openstack.or.kr/wiki/index.php/Nova_%EA%B0%9C%EB%85%90_%EB%B0%8F_%EC%86%8C%EA%B0%9C)

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](http://swift.test.com/v1/account/container/object)
 Account   : [http://swift.test.com/v1/AUTH_474747](http://swift.test.com/v1/AUTH_474747) (474747은 token을 의미함)
 Container : [http://swift.test.com/v1/AUTH_474747/TESTCONTAINER](http://swift.test.com/v1/AUTH_474747/TESTCONTAINER)
 Object    : [http://swift.test.com/v1/AUTH_474747/TESTCONTAINER/TESTFILE.txt](http://swift.test.com/v1/AUTH_474747/TESTCONTAINER/TESTFILE.txt)
 

http://docs.openstack.org/openstack-object-storage/admin/content/figures/swift_install_arch.png

 
  • 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를 이용 한다.

 

OpenStack 설치


 

CentOS에서 OpenStack 설치

 

[OpenStack 설치 - CentOS](OpenStack 설치 - CentOS.md)

 

Ubuntu에서 OpenStack 설치

 

[OpenStack 설치 - Ubuntu](OpenStack 설치 - Ubuntu.md)

 

관리자 가이드


 

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_id":~.md),            //--- 권한을 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/](http://192.~/v2.0/)  service-create  -name=keystone  --type=identity  --description="~"
 keystone  --token  --endpoint [http://192.~/v2.0/ http://192.~/v2.0/]  endpoint-create  --region RegionOne  --service_id=~  --publicurl=[http://~:5000/v2.0 http://~:5000/v2.0]  --internalurl=[http://~:5000/v2.0 http://~:5000/v2.0]  --adminurl=[http://~:35357/v2.0](http://~:35357/v2.0)
 
  • 다른 서비스에 접속 가능한 token 생성

 
 
 keystone  -os-username=admin  --os-password=~  --os-auth-url=[http://~:35357/v2.0](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](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](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: ' [http://](http://)/container/myobject
 

Ubuntu에서 Swift 설치

 
  • System 요구 사항

    • Disk : [RAID 5 or 6](Storage.md#RAID 구성.md)

    • 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.md)
  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](DEFAULT.md)
  cert_file = /etc/swift/cert.crt
  key_file = /etc/swift/cert.key
  bind_port = 8080
  workers = 8
  user = swift
 
  [pipeline:main](pipeline:main.md)
  pipeline = healthcheck cache auth proxy-server
 
  [app:proxy-server](app:proxy-server.md)
  use = egg:swift#proxy
  allow_account_management = true
 
  [filter:auth](filter:auth.md)
  use = egg:swift#auth
  ssl = true
 
  [filter:healthcheck](filter:healthcheck.md)
  use = egg:swift#healthcheck
 
  [filter:cache](filter:cache.md)
  use = egg:swift#memcache
  memcache_servers = :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-:6002/ 100
 swift-ring-builder container.builder add z-:6001/ 100
 swift-ring-builder object.builder add z-:6000/ 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](DEFAULT.md)
  cert_file = /etc/swift/cert.crt
  key_file = /etc/swift/cert.key
  user = swift
 
  [pipeline:main](pipeline:main.md)
  pipeline = auth-server
 
  [app:auth-server](app:auth-server.md)
  use = egg:swift#auth
  default_cluster_url = [https://](https://):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 = 
 
  [account](account.md)
  max connections = 2
  path = /srv/node/
  read only = false
  lock file = /var/lock/account.lock
 
  [container](container.md)
  max connections = 2
  path = /srv/node/
  read only = false
  lock file = /var/lock/container.lock
 
  [object](object.md)
  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](DEFAULT.md)
  bind_ip = 
  workers = 2
 
  [pipeline:main](pipeline:main.md)
  pipeline = account-server
 
  [app:account-server](app:account-server.md)
  use = egg:swift#account
 
  [account-replicator](account-replicator.md)
 
  [account-auditor](account-auditor.md)
 
  [account-reaper](account-reaper.md)
 
 vi /etc/swift/container-server.conf
  [DEFAULT](DEFAULT.md)
  bind_ip = 
  workers = 2
 
  [pipeline:main](pipeline:main.md)
  pipeline = container-server
 
  [app:container-server](app:container-server.md)
  use = egg:swift#container
 
  [container-replicator](container-replicator.md)
 
  [container-updater](container-updater.md)
 
  [container-auditor](container-auditor.md)
 
 vi /etc/swift/object-server.conf
  [DEFAULT](DEFAULT.md)
  bind_ip = 
  workers = 2
 
  [pipeline:main](pipeline:main.md)
  pipeline = object-server
 
  [app:object-server](app:object-server.md)
  use = egg:swift#object
 
  [object-replicator](object-replicator.md)
 
  [object-updater](object-updater.md)
 
  [object-auditor](object-auditor.md)
 
 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://](https://):11000/v1.0
 curl -k -v -H 'X-Auth-Token: ' 
 
 st -A [https://](https://):11000/v1.0 -U system:root -K testpass stat
 st -A [https://](https://):11000/v1.0 -U system:root -K testpass upload myfiles bigfile1.tgz
 st -A [https://](https://):11000/v1.0 -U system:root -K testpass upload myfiles bigfile2.tgz
 st -A [https://](https://):11000/v1.0 -U system:root -K testpass download myfiles
 

Heat


 

참고 문헌

 
 
 

참고 문헌


 
최종 수정일: 2024-09-30 12:26:18

이전글 :
다음글 :