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
🟢 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 구성 파일 분배 (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
🟢 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 확인 :
🟢 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 // 포트 확인
🟢 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로 수정하여 다시 재실행
참조 블로그 :
'자기발전소 > # Manually Install OpenStack' 카테고리의 다른 글
OpenStack Cinder on Centos(Rocky) 2 [Storage Node] (0) | 2020.09.25 |
---|---|
Openstack Cinder on Centos (Rocky) 1 [Controller Node] (0) | 2020.09.25 |
Openstack Swift on Centos (Rocky) 2 [Storage Node] (0) | 2020.08.23 |
Openstack Swift on Centos (Rocky) 1 [Controller Node] (0) | 2020.08.22 |
Openstack Horizon on Centos (Rocky) (0) | 2020.08.22 |