2. Index
• What is Swift?
• Swift Components
• Install and Configuration
• Using Swift
• Manage Account, Container, Object
• CLI commands and Rest API
3. What is Swift?
openstack object storage
!
• 비정형성 데이터를 저장하기에 적합
• 멀티미디어(동영상,이미지), 디스크이미지, …
!
• 각각의 오브젝트들은 고유한 URL을 갖고 API로 제어
• 외부 어플리케이션, 웹 등에서 직접 동시에 접근 가
능
!
• 멀티 테넌트로 구현가능하며 저장공간에 제약이 없음
• 계정마다 저장공간을 할당받는 것이 아닌 모든 저장
공간을 같이 씀
A
B
C
A
B
C
file://xxx… http://swift…
4. What is Swift?
File vs Block vs Object Storage
File
Storage
Block
Storage
Object
Storage
단위 파일 블록
오브젝트
(파일+메타데이터)
프로토콜 NFS,CIFS,… SCSI,SATA,…
HTTP
(REST,SOAP)
장점 간편한 사용 고성능 확장성
단점
데이터 센터간
확장에 취약
데이터 센터간
확장에 취약
자주 변경되는
데이터 관리에 취약
적합한 분야 파일 공유
정형 데이터 관리
(ex. 데이터베이스)
비정형 데이터 관리
5. What is Swift?
strength of swift
!
• 확장성
• 페타규모의 클러스터로 확장가능하며 확장시에도 downtime이 없이 간단하게 확장가능
• 내구성
• 복제본은 격리된 환경(Zone)으로 관리하여 안전하게 보관
• 가용성
• 비공유 구조(shared-nothing)로 단일 장애점(single point of failure)이 없기 때문에 높은 가용성 보유
• 저비용
• 하드웨어 선택에 특정한 벤더 lock-in이 되지 않았으며 opensource를 사용하여 적은 비용에 구축가능
6. Swift Components
service architecture
request capacity
request capacity
storage capacity
storage capacity
storage capacity
storage capacity
storage capacity
Internet
ZONE #1
ZONE #2
ZONE #3
ZONE #4
ZONE #5
Account, Container, Object Servers
Account, Container, Object Servers
Account, Container, Object Servers
Account, Container, Object Servers
Account, Container, Object Servers
Proxy Servers
7. Swift Components
proxy server
!
• 사용자의 URL Request를 받아서 Account, Container, Object Server(줄여서 Storage Server)중 한 곳을 선택
• account request의 url: http://…/account
• container request의 url: http://…/account/container
• object request의 url: http://…/account/container/object
• 이 후 해당 Request가 어떤 물리적인 서버에서 처리해야 할지
Ring을 이용해서 결정 후 Storage Server로 request
Internet
ZONE #1
ZONE #2
ZONE #3
ZONE #4
ZONE #5
Account, Container, Object Servers
Account, Container, Object Servers
Account, Container, Object Servers
Account, Container, Object Servers
Account, Container, Object Servers
Proxy Servers
ring
8. Swift Components
storage server
• 3종류의 데이터를 각각(Account, Container, Object)의 서버가 관리하며
동일한 로직으로 Ring에서 접근됨 (아래의 데이터는 모두 파일임)
• Account 데이터(File Database)
• Account의 상태정보
• Container의 리스트
• Container 데이터(File Database)
• Container의 상태정보
• Object의 리스트
• Object 데이터(File)
• 실질적인 오브젝트 파일
Internet
ZONE #1
ZONE #2
ZONE #3
ZONE #4
ZONE #5
Account, Container, Object Servers
Account, Container, Object Servers
Account, Container, Object Servers
Account, Container, Object Servers
Account, Container, Object Servers
Proxy Servers
ring
9. Swift Components
logical view
• Account
• 사용자의 계정으로 다수의 사용자들이 권한(ACL)에
따라 사용을 정의가능 함
• Account의 상태 정보를 저장
• Container의 리스트를 관리
• Container
• 사용자들의 권한(ACL)에 따라 사용가능이 결정되는
폴더와 같은 단위
• Container의 상태 정보를 저장
• Object의 리스트를 관리
• Object
• 실질적으로 관리되는 파일(+메타데이터)
• Container의 ACL에 적용되어 사용 가능 여부 결정
C
A
B
Account
Container Container
C
A
B
사용가능 사용가능
Object Object Object Object
FILE
META
FILE
META
FILE
META
FILE
META
10. Swift Components
daemon
• replicator
• 데이터(File Database, File)를 복제해주기 위한 데몬
• 데이터 잘못되었을 경우 혹은 Ring의 변경으로 인한 이동시 수행
• updater
• object가 추가,삭제시 이를 container list에서 변경될 수 있도록 처리 해야 하나 만약 문제시 이를 나중에 다시 처리
해줌(eventually consistency)
• object가 추가된 것에 따라 전체 account가 가진 file size total값을 갱신해 줌
• auditor
• 파일의 무결성을 검사
• object-expirer
• object가 특정 시간 이후 삭제시 이를 돕기 위한 데몬
• 그 외도 많은 daemon들 …
11. Swift Components
logical hierarchy
• object
• 실제 파일과 메타데이터로서 파티션에 담겨서 복제 됨
• partition
• partition은 복제와 균등분배를 위한 단위
• partition은 수십만,수천만 생성해야 함으로 디렉토리가 적합
• device
• device는 증설 혹은 제거를 위한 단위
• device는 증설/제거를 위한 단위로 생각했을때 디스크가 적
합
• zone
• zone은 데이터를 안전하게 보관하기 위한 단위(같은 데이터
의 복제본는 다른 zone에 저장되어야 함)
• zone은 랙(스위치 단위), 서버가 적합 ZONE
DEVICE
PARTITION
OBJECT TEXT
HTML
IMAGE
MOVIE
AUDIO
12. Internet
ZONE #2
ZONE #3
ZONE #4
ZONE #5
Account, Container, Object Servers
Account, Container, Object Servers
Account, Container, Object Servers
Account, Container, Object
Acc
Proxy Servers
ring
ZONE
DEVICE
PARTITION
OBJECT
HTML
ring
ring
Partition index: 3
Zone
:
#1
Server :
A
Disk
:
B
1
2 3 4
2^n
. .
.
.
.
.
Swift Components
ring
• swift의 분산의 핵심
• static한 파일 데이터로 모든 서버에서 동일한 파일을 사용
• Account, Container, Object 마다 따로 다른 ring으로 관리
(Account, Container Database도 File Database이기 때
문에 Object와 비슷하게 File로 관리되어 모든 메카니즘이 비슷
하게 작동)
• 모든 Account, Container, Object는 다른 URL을 가지고 있
기 때문에 해당 고유한 URL을 Hash 하여 그 값을 이용
(분산 해쉬 테이블 DHT)
• 자세한 설명은 아래 링크를 참조
• http://leoh0.blogspot.kr/2014/04/ring-swift.html
Zone #1
Server A
A
B
3
Disk B
Partition 3
URL Hash
URL Hash & mod
-> partition Index
13. Install and Configuration
• 정식 swift all in one 버전 설치 가이드
• http://docs.openstack.org/developer/swift/
development_saio.html
• 해당 내용을 기본적인 기능만 작동할 수 있도록 정리한 스크립트
(ubuntu 14.04에서 테스트)
• https://gist.github.com/leoh0/893ab4de7f4c05940cc2
23. Using Swift with CLI commands
Account API
• 계정 정보 조회
• CLI commands:
• swift stat
• REST API:
• curl -i http://127.0.0.1:8080/v1/AUTH_test -X HEAD -H "X-Auth-
Token:<TOKEN>"
• 컨테이너 리스트 조회
• CLI commands:
• swift list
• REST API:
• curl -i http://127.0.0.1:8080/v1/AUTH_test -X GET -H "X-Auth-Token: <TOKEN>"
24. Using Swift with CLI commands
Container API
• 컨테이너 생성
• CLI commands:
• swift post <container>
• REST API:
• curl -i http://127.0.0.1:8080/v1/AUTH_test/container -X PUT -H "Content-Length: 0"
-H "X-Auth-Token:<TOKEN>"
• 컨테이너 상세 조회
• CLI commands:
• swift stat <container>
• REST API:
• curl -i http://127.0.0.1:8080/v1/AUTH_test/container -X HEAD -H "X-Auth-Token:
<TOKEN>"
25. Using Swift with CLI commands
Container API
• 오브젝트 리스트 보기
• CLI commands:
• swift list <container>
• REST API:
• curl -i http://127.0.0.1:8080/v1/AUTH_test/container -X GET -H "X-Auth-
Token:<TOKEN>"
• 컨테이너 삭제
• CLI commands:
• swift delete <container>
• REST API:
• curl -i http://127.0.0.1:8080/v1/AUTH_test/container -X DELETE -H "X-Auth-
Token:<TOKEN>"
26. Using Swift with CLI commands
Container API
• 컨테이너 메타데이터 업데이트
• CLI commands:
• swift post <container> -m <meta>
• REST API:
• curl -i http://127.0.0.1:8080/v1/AUTH_test/container -X POST -H "X-Auth-
Token:<TOKEN>" -H "<META>"
27. Using Swift with CLI commands
Object API
• 오브젝트 업로드
• CLI commands:
• swift upload <container> <object>
• REST API:
• curl -i http://127.0.0.1:8080/v1/AUTH_test/container/object -X PUT -H "X-Auth-
Token:<TOKEN>"
• 오브젝트 상세 보기
• CLI commands:
• swift stat <container> <object>
• REST API:
• curl -i http://127.0.0.1:8080/v1/AUTH_test/container/object -X HEAD -H "X-Auth-
Token:<TOKEN>"
28. Using Swift with CLI commands
Object API
• 오브젝트 다운로드
• CLI commands:
• swift download <container> <object>
• REST API:
• curl -i http://127.0.0.1:8080/v1/AUTH_test/container/object -X GET -H "X-Auth-
Token:<TOKEN>"
• 오브젝트 삭제
• CLI commands:
• swift delete <container> <object>
• REST API:
• curl -i http://127.0.0.1:8080/v1/AUTH_test/container/object -X DELETE -H "X-Auth-
Token:<TOKEN>"
29. Using Swift with CLI commands
Object API
• 오브젝트 메타데이터 업데이트
• CLI commands:
• swift post <container> <object> -m <meta>
• REST API:
• curl -i http://127.0.0.1:8080/v1/AUTH_test/container/object -X POST -H "X-Auth-
Token:<TOKEN>" -H "<META>"