OpenStack

오픈소스 비즈니스 컨설팅
Pnuskgh (토론 | 기여)님의 2014년 12월 14일 (일) 10:55 판
둘러보기로 가기 검색하러 가기

Cloud compute(Nova)Cloud Object Storage(Swift)를 제공하는 OpenStack을 정리한다.

  • 다운로드 :
  • 라이선스 : 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
  • 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://<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://<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 설치 참고 문헌
  • 블로터닷넷