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

Openstack Swift on Centos (Rocky) 3 [Ring]

by iamlucia 2020. 8. 23.

 

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


🙋‍♀️ 오브젝트 스토리지 서비스를 시작하기 전에  account, container, object ring을 생성하고 초기화하는 것이 필요하다.
ring builder는 각 노드가 스토리지 아키텍처를 결정하고 배포하는 데 사용하는 구성 파일을 생성한다.

Openstack 공식 문서에서는 하나의 region과 두 개의 zone(2^10=1024, 즉 최대 1024개의 파티션[디렉토리]을 가지는), 3개의 replica를 사용하는 각 오브젝트, 파티션을 한 번 이상 움직일 때 걸리는(rebalance을 하고 나서 다음 rebalance를 할 때까지의 타임) 최소 시간을 1시간을 기준으로 ring builder를 생성한다. 

ring builder 파일에는 build version, partition count, replica count, zone count, device count 등의 내용이 요약되어 있다.

 

<< ⭕ 본 설치 내용은 controller 노드와 storage 노드에서 진행한다. >>

 


🔨 Ring 생성 @ controller node 

 

🟢 account ring 생성 : 

 

# cd /etc/swift 
# swift-ring-builder account.builder create 10 1 1 // 스토리지 노드를 1개에 디바이스 1개만 만든 상황에서 
# swift-ring-builder account.builder add --region 1 --zone 1 --ip [스토리지 노드 관리용 ip] --port 6202 --device sdb --weight 100 
Device d0r1z1-192.168.1.103:6202R192.168.1.103:6202/sdb_"" with 100.0 weight got id 0
# swift-ring-builder account.builder
# swift-ring-builder account.builder rebalance

 

 

공식문서대로 10 3 1 에 따라 레플리카 수를 3으로 지정해놓고 ring에 하나의 디바이스만 추가하는 경우 error 발생
rebalance 후 다음 rebalance 까지 대기 시간: 1시간 

🟢 container ring 생성 : 

 

# cd /etc/swift 
# swift-ring-builder container.builder create 10 1 1 // 스토리지 노드를 1개에 디바이스 1개만 만든 상황에서 
# swift-ring-builder contatiner.builder add --region 1 --zone 1 --ip [스토리지 노드 관리용 ip] --port 6201 --device sdb --weight 100 

# swift-ring-builder container.builder
# swift-ring-builder container.builder rebalance

 

 

🟢 object ring 생성 : 

 

# cd /etc/swift 
# swift-ring-builder object.builder create 10 1 1 // 스토리지 노드를 1개에 디바이스 1개만 만든 상황에서 
# swift-ring-builder object.builder add --region 1 --zone 1 --ip [스토리지 노드 관리용 ip] --port 6200 --device sdb --weight 100 

# swift-ring-builder object.builder
# swift-ring-builder object.builder rebalance

 

 

ring.gz 파일 생성 확인

 

🟢 ring 구성 파일 분배 (ring.gz 파일을 각 스토리지 노드의 /etc/swift로 복사) :

 

# scp /etc/swift/*.gz    [스토리지 노드 관리용 ip]:/etc/swift

 

 

 


🔨 설치 마무리 

🟢 swift.conf 파일 다운로드 및 내용 수정  @ controller node  :

 

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

 

더보기

[swift-hash]
swift_hash_path_suffix = HASH_PATH_SUFFIX
swift_hash_path_prefix = HASH_PATH_PREFIX


[storage-policy:0]
name = Policy-0
default = yes

 

 

aliases는 주석처리로 바꿈

 

🟢 swift.conf 파일을 스토리지 노드의 swift 디렉토리로 복사 @ controller node  :

 

# scp /etc/swift/swfit.conf   [스토리지 노드 관리용 ip]:/etc/swift

 

 

🟢 swift 디렉토리 소유권 설정 @ controller node & storage node  :

 

# chown -R root:swift /etc/swift

 

 

🟢 swift proxy 및 멤캐시 서비스 활성화 및 실행 @ controller node   :

 

# systemctl enable openstack-swift-proxy.service memcached.service 
# systemctl start openstack-swift-proxy.service memcached.service

 

 

🟢 swift 관련 서비스  @ storage node  : (각 요소마다 서비스 상이함 주의) 

 

# systemctl enable openstack-swift-account.service openstack-swift-account-auditor.service openstack-swift-account-reaper.service openstack-swift-account-replicator.service
# systemctl start openstack-swift-account.service openstack-swift-account-auditor.service openstack-swift-account-reaper.service openstack-swift-account-replicator.service

# systemctl enable openstack-swift-container.service openstack-swift-container-auditor.service openstack-swift-container-replicator.service openstack-swift-container-updater.service
# systemctl start openstack-swift-container.service openstack-swift-container-auditor.service openstack-swift-container-replicator.service openstack-swift-container-updater.service

# systemctl enable openstack-swift-object.service openstack-swift-object-auditor.service openstack-swift-object-replicator.service openstack-swift-object-updater.service
# systemctl start  openstack-swift-object.service openstack-swift-object-auditor.service openstack-swift-object-replicator.service openstack-swift-object-updater.service

 

 


📍 Verification @ controller 

 

🟢 admin credential 스크립트 실행 :

 

# source key_adminrc 

 

 

🟢 서비스 상태 확인 :

 

# swift stat 
           Account: AUTH_fe6351b7472e4ae6be56518819791600 
            Containers: 0 
               Objects: 0 
                 Bytes: 0 
       X-Put-Timestamp: 1597943683.98733 
           X-Timestamp: 1597943683.98733 
            X-Trans-Id: tx65dddc4ea0e64e888f962-005f3eaf83 
          Content-Type: text/plain; charset=utf-8 
X-Openstack-Request-Id: tx65dddc4ea0e64e888f962-005f3eaf83

 

 

🟢 container 생성 및 컨테이너에 테스트용 파일 (예: test.txt) 업로드 :

 

# opestack container create container1  
# touch test.txt 
# openstack object create container1 test.txt
# openstack object list container1
# openstack object save container1 test.txt  

 

<< 스토리지 노드의 디렉토리 분석 >>
/srv/node/sdb/accouts , containers , objects 디렉토리가 생성되어 있다

accounts / 258 / bb1 / 40b3kdkaeighlairbkbb1 (해쉬값같은 디렉토리명) / 40b3kdkaeighlairbkbb1.db, 40b3kdkaeighlairbkbb1.db.pending 파일 (db 파일 내용에는 'SQLite Format'으로 적혀있음)
= containers의 구조와 동일

objects / 614 / bd0 / 40b3kdkaeighlairbkbb1 (해쉬값같은 이름의 디렉토리) / 932058174920.89453.data 파일(아무 내용 없음) 

 

🟢 openstack dashboard 확인 : 

 

생성한 container 와 object 확인 

 

🟢 File Explorer 동작 확인 :  (MSP360™ Explorer Freeware for OpenStack 다운로드 필요

 


 

🔫 Trouble Shooting  1. swift stat 오류: swift-proxy 서비스 실행 불가

🔴 ERROR : swift stat 오류 

 

🟠해당 서비스 8080포트 listen하는지 확인했더니 포트 열려있지 않음

=> 포트는 서비스가 실행되면서 자동으로 열려야 하는데,서비스가 실행되는 것에 있어서 문제가 생긴걸까? 

=> 확인 결과, openstack-swift-proxy.service 실행 failed  (이래서 항상 서비스 실행 후 서비스 상태 확인까지 해야 한다.) 

# netstat -tlnp // 포트 확인

 

포트 8080이 열려 있지 않다

🟢 Trouble shooting : 서비스 중지 - > proxy-server 설정 파일 재확인 ->   서비스 재실행 

 

# systemctl stop openstack-swift-proxy.service 
# vi /etc/swift/proxy-server.conf  //pipeline:main 섹션 부분에서 삭제된 모듈에 대한 옵션부분 모두 주석처리
# systemctl start openstack-swift-proxy.service // 중지 후 재실행하자 정상 작동 

 

Aug 21 00:15:56 control proxy-server[33800]: Adding required filter listing_formats to pipeline at position 5
Aug 21 00:15:56 control proxy-server[33800]: Pipeline was modified. New pipeline is "catch_errors gatekeeper healthcheck proxy-logging cache listing_formats container_sync bulk ratelimit authtoken keystoneauth copy container-quotas account-quotas slo dlo versioned_writes proxy-logging proxy-server".
Aug 21 00:15:56 control proxy-server[33801]: Adding required filter copy to pipeline at position 10
Aug 21 00:15:56 control proxy-server[33801]: Adding required filter listing_formats to pipeline at position 5
Aug 21 00:15:56 control proxy-server[33801]: Pipeline was modified. New pipeline is "catch_errors gatekeeper healthcheck proxy-logging cache listing_formats container_sync bulk ratelimit authtoken keystoneauth copy container-quotas account-quotas slo dlo versioned_writes proxy-logging proxy-server".
Aug 21 00:15:56 control proxy-server[33800]: Starting Keystone auth_token middleware
Aug 21 00:15:56 control proxy-server[33801]: Starting Keystone auth_token middleware
Aug 21 00:15:56 control proxy-server[33800]: AuthToken middleware is set with keystone_authtoken.service_token_roles_required set to False. This is backwards compatible but deprecated behaviour. Please set this to True.
Aug 21 00:15:56 control proxy-server[33801]: AuthToken middleware is set with keystone_authtoken.service_token_roles_required set to False. This is backwards compatible but deprecated behaviour. Please set this to True.

 


🔫 Trouble Shooting  2. swift stat 오류: Account HEAD failed 503 error 

🔴 ERROR : swift proxy서비스는 실행되었으나  또 다시 swift stat 오류 발생 

 

🟠 설치 가이드를 되짚어보며 확인 중 ring builder 내용이 사라져있어서 다시 삭제 후 생성하여 스토리지 노드에 배분 => 여전히 오류 


🟠 503 오류 :  auth 관련 오류임, proxy-server conf 파일 내용 bind_port 포함하여 double check ! 

[root@control ~]# swift stat
Account HEAD failed: http://192.168.1.100:8080/v1/AUTH_fe6351b7472e4ae6be56518819791600 503 Service Unavailable
Failed Transaction ID: tx6c1275af9ef448f38a169-005f3e959c

 

🟢 Trouble shooting : proxy-server 설정 파일 중 project_domain_name 과 user_domain_name 을 default로 수정하여 다시 재실행

 

 

 

참조 블로그 :

https://ryusstory.tistory.com/entry/%EC%98%A4%ED%94%88%EC%8A%A4%ED%83%9D-%EC%8A%A4%EC%9C%84%ED%94%84%ED%8A%B8-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EA%B8%B0%EB%B3%B8-%ED%85%8C%EC%8A%A4%ED%8A%B8#controller_:_%EC%98%A4%ED%94%88%EC%8A%A4%ED%83%9D_%EC%84%A4%EC%B9%98_%EB%B0%8F_Swift-proxy_%EC%84%A4%EC%B9%98