OpenStack

오픈소스 비즈니스 컨설팅
이동: 둘러보기, 검색

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

Untitled1.jpg

출처 : 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

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

CentOS에서 OpenStack 설치

OpenStack 설치 - CentOS

Ubuntu에서 OpenStack 설치

OpenStack 설치 - Ubuntu

관리자 가이드

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:// http://]<storage_url>/container/myobject

Ubuntu에서 Swift 설치

  • System 요구 사항
  • 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:// 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:// 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:// https://]<AUTH_HOSTNAME>:11000/v1.0 -U system:root -K testpass stat
st -A [https:// https://]<AUTH_HOSTNAME>:11000/v1.0 -U system:root -K testpass upload myfiles bigfile1.tgz
st -A [https:// https://]<AUTH_HOSTNAME>:11000/v1.0 -U system:root -K testpass upload myfiles bigfile2.tgz
st -A [https:// https://]<AUTH_HOSTNAME>:11000/v1.0 -U system:root -K testpass download myfiles

Heat

참고 문헌

참고 문헌

  • Getting Started
  • Installing OpenStack
  • Running OpenStack
  • Developing OpenStack
  • Command Line Interface(CLI)
  • API
  • Glossary
  • OpenStack Operations Guide
  • OpenStack 설치 참고 문헌
  • 블로터닷넷