본문 바로가기
  • 노션에서 삽질한 내용을 정리하는 블로그
자기발전소/# Manually Install OpenStack

Openstack Swift on Centos (Rocky) 1 [Controller Node]

by iamlucia 2020. 8. 22.

 

Swift : Object Storage  Service (오브젝트 스토리지 서비스) 


1.비정형성 데이터를 저장하기에 적합 : 멀티미디어(동영상, 이미지), 디스크 이미지, ...

   단위: 오브젝트 (파일 +메타 데이터) 

2. 각 오브젝트들은 고유한 UTL(http://swift ... ) 을 가지고 API로 제어된다 : 외부 어플리케이션, 웹 등에서 직접 동시에 접근 가능

  프로토콜: HTTP(REST, SOAP)

3. Multi-tenant 로 구현 가능하며 저장공간에 제약이 없다 : 계정마다 저장공간을 할당받는 것이 아니라 모든 저장공간을 함께 사용

4. 오픈스택의 다른 컴포넌트와의 관련성이 낮아서 다른 구성요소에 종속적이지 않고, 개별환경구축이 가능하다

 

- 참고 : https://www.slideshare.net/ssuser5ad078/swift-overview -

 

 

Swift는 다음의 요소들로 구성된다 :  

  • Proxy 서버: 스토리지에 접근하기 위한 api를 제공하거나 각 서비스를 관리

  • Object 서버: 개체 관리

  • Contatiner 서버 :  컨테이너 관리

  • Account 서버: 계정 관리

  • WSGI middleware : 인증을 처리, 대체로 오픈스택 Identity

  • Swift-Client : 사용자가 CLI를 통해 REST API로 명령어를 보낼 수 있게 한다.

  • Swift-init : ring 파일 생성(building)을 초기화하는 스크립트, 파라미터명으로 daemon 이름을 사용하며 명령어를 제공한다. 

  • swift-recon : 다양한 메트릭스와 swift-recon 미들웨어에 의해 모여진 클러스터에 대한 telemetry 정보를 받는 데 사용하는 CLI 도구 

  • swift-ring-builder : 스토리지 ring을 만들고(build), 리밸런싱한다.

  Account Container Object
관리 대상 Acoount의 상태 정보
Container 리스트
Container의 상태 정보
Object의 리스트
실질적인 오브젝트 파일
ACL  다수의 사용자들이 권한(ACL))에 따라 사용을 정의 가능함  사용자 권한(ACL)에 따라
사용가능 여부가 결정되는 폴더
Container ACL에 적용되어
사용가능 여부 결정

 

=> Proxy Server가 사용자의 URL 요청을 받아서 스토리지 서버 중 한 곳을 선택한 다음, 해당 요청을 어떤 물리적 서버에서 처리해야 할지 Ring으로 결정 후 스토리지 서버로 전달 

=>  3종류의 데이터를 각각 Account, Container, Object 의 서버가 관리하며 동일한 로직으로 Ring에서 접근된다 

 

Swift의 논리적 위계관계 :

zone(데이터를 안전하게 보관하기 위한 단위; 서버)

> device (증설 혹은 제거를 위한 단위; 디스크)

> partition (복제와 균등분배를 위한 단위; 디렉토리)

> object (실제 파일과 메타데이터로 파티션에 담겨 복제됨) 

 

 


<< ⭕ 본 설치 내용은 controller 노드에서 진행 >> 

 

 Prerequisties .
pyton 및 rsync 버전 확인 

 

# python --version
# rsync --version 

 


🔨 데이터 베이스 생성 및 접근 권한 설정 

 

이전까지 모든 서비스는 컨트롤러 노드의 SQL데이터 베이스를 활용하여 설치했지만,

Swift는 SQLite데이터 베이스를 활용

 

🟢 admin credential 스크립트 실행 :

 

# source key_adminrc

 

 

🟢 Swift 서비스 Credential 생성 1  - swift 계정 생성 후 프로젝트 및 role에 추가 :

 

# openstack user create --domain default --password-prompt swift
# openstack role add --project service --user swift admin

 

 

🟢 Swift 서비스 Credential 생성 2  - swift 서비스 생성 : 

 

# openstack service create --name swift --description "OpenStack Object Storage" object-store

 

 

🟢 Object Storage API 서비스 endpoint 생성 : 

 

# openstack endpoint create --region RegionOne  object-store public http://[컨트롤러 노드 관리용 ip]:8080/v1/AUTH_%(project_id\)s
# openstack endpoint create --region RegionOne  object-store internal http://[컨트롤러 노드 관리용 ip]:8080/v1/AUTH_%(project_id\)s
# openstack endpoint create --region RegionOne  object-store admin http://[컨트롤러 노드 관리용 ip]:8080/v1

 

 

 


🔨 구성요소 설치 

프록시 서버는 컨트롤러 노드와 스토리지 노드 외의 다른 노드에 설치할 수 있고, 
또는 성능 향상을 위해 여러 개의 노드에 프록시도 설치 가능

 

🟢 관련 패키지 설치: 

 

# yum -y install openstack-swift-proxy python-swiftclient python-keystoneclient python-keystonemiddleware memcached

 

 

🟢 오브젝트 스토리지 소스 저장소로부터 프록시 서비스 환경 설정 파일을 가져오기 : 

 

# curl -o /etc/swift/proxy-server.conf https://opendev.org/openstack/swift/raw/branch/stable/rocky/etc/proxy-server.conf-sample

 

 

🟢 프록시 서비스 환경 설정 파일 수정 :

 

# vi /etc/swift/proxy-server.conf

 

더보기

[DEFAULT]
bind_port = 8080
user = swift
swift_dir = /etc/swift

[pipeline:main]

pipeline = catch_errors gatekeeper healthcheck proxy-logging cache container_sync bulk ratelimit authtoken keystoneauth container-quotas account-quotas slo dlo versioned_writes proxy-logging proxy-server

 

[app:proxy-server]
use = egg:swift#proxy
account_autocreate = True
// FALSE인 상태로 주석처리되어있었음

 

[filter:authtoken]

paste.filter_factory = keystonemiddleware.auth_token:filter_factory 
www_authenticate_uri = http://[컨트롤러 노드 관리용 ip]:5000 
auth_url = http://[컨트롤러 노드 관리용 ip]:5000 
memcached_servers = [컨트롤러 노드 관리용 ip]:11211 
auth_type = password 
project_domain_id = default 
user_domain_id = default 
project_name = service 
username = swift 
password = [swift 계정 비밀번호]
delay_auth_decision = True

 

[filter:keystoneauth]
use = egg:swift#keystoneauth 
operator_roles = admin,user //swiftoperator를 user로 수정 

 

[filter:cache]

use = egg:swift#memcache

memcache_servers = [컨트롤러 노드 관리용 ip]:11211

 

** 이때 기본 설정되어있는 모듈 순서는 바꾸면 안됨 ** 

* tempurl & tempauth 모듈 삭제  

**symlink 와 copy 모듈 삭제후 

***해당 섹션에 pipeline이 두 개 있는데 주석처리가 안되어 있는 윗부분과 주석처리가 되어 있는 하단의 pipeline이 있음

하단의 pipeline을 주석처리 해제 후 수정한다 (윗부분은 주석처리로 변경)