오브젝트 게이트웨이 구성 및 관리 가이드

Red Hat Ceph Storage 4

Ceph Storage 오브젝트 게이트웨이 구성 및 관리

초록

이 문서에서는 Ceph Storage 오브젝트 게이트웨이를 구성하고 관리하는 방법을 설명합니다.
Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지에서 참조하십시오.

1장. 개요

Ceph 개체 게이트웨이(RGW(RADOS Gateway)라고도 함)는 Ceph 스토리지 클러스터에 대한 RESTful 게이트웨이를 애플리케이션에 제공하기 위해 librados 상단에 빌드된 오브젝트 스토리지 인터페이스입니다. Ceph 개체 게이트웨이는 다음 두 개의 인터페이스를 지원합니다.

  1. S3 호환 : Amazon S3 RESTful API의 큰 하위 집합과 호환되는 인터페이스가 포함된 오브젝트 스토리지 기능을 제공합니다.
  2. Swift 호환: OpenStack Swift API의 대규모 하위 집합과 호환되는 인터페이스가 포함된 오브젝트 스토리지 기능을 제공합니다.

Ceph 개체 게이트웨이는 Ceph 스토리지 클러스터와 상호 작용하는 서버입니다. OpenStack Swift 및 Amazon S3와 호환되는 인터페이스를 제공하므로 Ceph 개체 게이트웨이에 고유한 사용자 관리가 있습니다. Ceph 개체 게이트웨이는 Ceph 블록 장치 클라이언트의 데이터를 저장하는 데 사용되는 동일한 Ceph 스토리지 클러스터에 데이터를 저장할 수 있지만 별도의 풀과 다른 CRUSH 계층 구조가 필요합니다. S3 및 Swift API는 공통 네임스페이스를 공유하므로 하나의 API로 데이터를 작성하고 다른 API와 검색할 수 있습니다.

gateway
주의

RGW에서 사용하는 풀에서 RADOS 스냅샷을 사용하지 마십시오. 이렇게 하면 바람직하지 않은 데이터 불일치가 발생할 수 있습니다.

2장. 설정

2.1. Beast 및 CivetWeb 프런트 엔드 웹 서버

Ceph 개체 게이트웨이는 Beast 및 CivetWeb을 프런트 엔드로 제공하며 둘 다 C/C++ 임베디드 웹 서버입니다.

Beast

Red Hat Ceph Storage 4부터 Beast는 기본 프런트 엔드 웹 서버입니다. Red Hat Ceph Storage 3에서 업그레이드할 때 rgw_frontends 매개변수는 자동으로 Beast로 변경됩니다. beast는 Boost.Beast C++ 라이브러리를 사용하여 HTTP를 구문 분석하고 Boost.Asio 는 비동기 네트워크 I/O를 수행합니다.

CivetWeb

Red Hat Ceph Storage 3에서 CivetWeb은 기본 프런트엔드이지만, Beast는 rgw_frontends 옵션을 적절하게 설정하여 사용할 수도 있습니다. CivetWeb은 Mongoose 프로젝트의 포크인 HTTP 라이브러리입니다.

2.2. Beast 프론트 엔드 사용

Ceph 개체 게이트웨이는 CivetWeb 및 Beast 포함된 HTTP 서버를 프런트 엔드로 제공합니다. Beast 프론트엔드는 HTTP 구문 분석에 Boost.Beast 라이브러리를 사용하고 비동기 네트워크 I/O에 Boost.Asio 라이브러리를 사용합니다. Red Hat Ceph Storage 버전 3.x에서 CivetWeb은 기본 프런트엔드였습니다. Beast 프론트엔드를 Red Hat Ceph Storage 구성 파일의 rgw_frontends 로 지정해야 했습니다. Red Hat Ceph Storage 버전 4.0에서 Beast 프런트 엔드는 기본이며 Red Hat Ceph Storage 3.x에서 업그레이드하면 rgw_frontends 매개변수가 Beast로 자동으로 변경됩니다.

추가 리소스

2.3. Beast 구성 옵션

다음 Beast 구성 옵션은 RADOS 게이트웨이의 Ceph 구성 파일의 포함된 웹 서버에 전달할 수 있습니다. 각 옵션에는 기본값이 있습니다. 값을 지정하지 않으면 기본값이 비어 있습니다.

옵션설명Default

엔드포인트ssl_endpoint

주소가 점으로 지정된 10진수 형식의 IPv4 주소 문자열인 address[:port] 양식에서 수신 대기 주소를 설정하거나 대괄호로 묶은 16진수 표기법의 IPv6 주소를 설정합니다. 선택적 포트는 엔드포인트 의 경우 8080 이고 ssl_endpoint 의 경우 443 입니다. endpoint=[::1] endpoint=192.168.0.100:에서 여러 번 지정할 수 있습니다.

비어있습니다

ssl_certificate

SSL 지원 엔드포인트에 사용되는 SSL 인증서 파일의 경로입니다. 파일이 두 개 이상의 항목이 포함된 PEM 파일인 경우 순서가 중요합니다. 파일은 RGW 서버 키, 그 다음에는 중간 인증서, 마지막으로 CA 인증서로 시작해야 합니다.

비어있습니다

ssl_private_key

SSL 지원 엔드포인트에 사용되는 개인 키 파일의 선택적 경로입니다. ssl_certificate 에서 지정한 파일을 개인 키로 지정하지 않으면 해당 파일이 개인 키로 사용됩니다.

비어있습니다

tcp_nodelay

일부 환경에서 성능 최적화.

비어있습니다

request_timeout_ms

Beast 프런트 엔드에 대한 명시적 요청 타임아웃을 설정합니다. 더 큰 요청 시간 제한을 설정하면 게이트웨이가 느린 클라이언트(예: 대기 시간이 긴 네트워크를 통해 연결된 클라이언트)를 더 엄격하게 수행할 수 있습니다.

65

SSL을 사용하여 Beast 옵션이 있는 /etc/ceph/ceph.conf 파일의 예:

...

[client.rgw.node1]
rgw frontends = beast ssl_endpoint=192.168.0.100:443 ssl_certificate=<path to SSL certificate>

참고

기본적으로 Beast 프론트엔드는 서버가 처리하는 모든 요청을 RADOS 게이트웨이 로그 파일에 기록하는 액세스 로그 행을 작성합니다.

추가 리소스

2.4. CivetWeb 포트 변경

Ansible을 사용하여 Ceph Object Gateway를 설치하는 경우 포트 8080 에서 실행되도록 CivetWeb을 구성합니다. Ansible은 Ceph 구성 파일에서 다음과 유사한 행을 추가하여 이 작업을 수행합니다.

rgw frontends = civetweb port=192.168.122.199:8080 num_threads=100
중요

Ceph 구성 파일에 rgw frontends = civetweb 행이 포함되지 않은 경우 Ceph Object Gateway는 포트 7480 에서 수신 대기합니다. rgw_frontends = civetweb 행이 포함되지만 포트가 지정되지 않은 경우 Ceph Object Gateway는 포트 80 에서 수신 대기합니다.

중요

Ansible은 포트 8080 에서 수신 대기하도록 Ceph Object Gateway를 구성하고 Red Hat Ceph Storage 4를 설치하는 지원되는 방법은 ceph-ansible 을 사용하므로 포트 8080 은 Red Hat Ceph Storage 4 설명서의 기본 포트로 간주됩니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 4.1 클러스터.
  • Ceph Object Gateway 노드.

절차

  1. 게이트웨이 노드에서 /etc/ceph/ 디렉터리에서 Ceph 구성 파일을 엽니다.
  2. 예제와 유사한 Ceph 개체 게이트웨이(RGW) 클라이언트 섹션을 찾습니다.

    [client.rgw.gateway-node1]
    host = gateway-node1
    keyring = /var/lib/ceph/radosgw/ceph-rgw.gateway-node1/keyring
    log file = /var/log/ceph/ceph-rgw-gateway-node1.log
    rgw frontends = civetweb port=192.168.122.199:8080 num_threads=100

    [client.rgw.gateway-node1] 제목은 Ceph 구성 파일의 이 부분을 클라이언트 유형이 rgw 로 식별된 Ceph Object Gateway인 Ceph Storage Cluster 클라이언트를 구성하고, 노드 이름은 gateway-node1 입니다.

  3. Ansible 구성 포트 808080 으로 변경하려면 rgw frontends 행을 편집합니다.

    rgw frontends = civetweb port=192.168.122.199:80 num_threads=100

    rgw_frontends 키/값 쌍에 port= port-number 사이에 공백이 없는지 확인합니다.

    포트를 변경할 다른 게이트웨이 노드에서 이 단계를 반복합니다.

  4. 각 게이트웨이 노드에서 Ceph Object Gateway 서비스를 다시 시작하여 새 포트 설정이 적용되도록 합니다.

    # systemctl restart ceph-radosgw.target
  5. 각 게이트웨이 노드의 방화벽에서 구성된 포트가 열려 있는지 확인합니다.

    # firewall-cmd --list-all
  6. 포트가 열리지 않으면 포트를 추가하고 방화벽 구성을 다시 로드합니다.

    # firewall-cmd --zone=public --add-port 80/tcp --permanent
    # firewall-cmd --reload

2.5. Civetweb에서 SSL 사용

Red Hat Ceph Storage 1에서 Ceph Object Gateway에 대한 Civetweb SSL은 HAProxy 및 keepalived에 의존합니다. Red Hat Ceph Storage 2 이상 릴리스에서는 Civetweb에서 OpenSSL 라이브러리를 사용하여 TLS(Transport Layer Security)를 제공할 수 있습니다.

중요

프로덕션 배포에서는 HAProxy 를 사용하고 keepalived를 사용하여 HAProxy에서 SSL 연결을 종료해야 합니다. 소규모 규모의 테스트 및 사전 프로덕션 배포에서는 Civetweb과 SSL을 사용하는 것이 좋습니다.

Civetweb에서 SSL을 사용하려면 게이트웨이 노드의 호스트 이름과 일치하는 CA(인증 기관)에서 인증서를 가져옵니다. Red Hat은 S3 스타일 하위 도메인에 사용할 대상 대체 이름 필드와 와일드카드가 있는 CA에서 인증서를 가져오는 것이 좋습니다.

Civetweb에는 하나의. pem 파일에 키, 서버 인증서 및 기타 인증 기관 또는 중간 인증서가 필요합니다.

중요

.pem 파일에는 비밀 키가 포함되어 있습니다. .pem 파일을 무단 액세스로부터 보호합니다.

SSL의 포트를 구성하려면 포트 번호를 rgw_frontends 에 추가하고 s 를 포트 번호에 추가하여 보안 포트임을 나타냅니다. 또한. pem 파일의 경로와 함께 ssl_certificate 를 추가합니다. 예를 들면 다음과 같습니다.

[client.rgw.{hostname}]
rgw_frontends = "civetweb port=443s ssl_certificate=/etc/ceph/private/server.pem"

2.6. Civetweb 구성 옵션

다음 Civetweb 구성 옵션은 RADOS 게이트웨이의 Ceph 구성 파일에 있는 포함된 웹 서버에 전달할 수 있습니다. 각 옵션에 기본값이 있으며 값이 지정되지 않은 경우 기본값은 비어 있습니다.

옵션설명Default

access_log_file

액세스 로그 파일의 경로입니다. 전체 경로 또는 현재 작업 디렉터리를 기준으로 합니다. absent(기본값)가 없으면 액세스가 기록되지 않습니다.

비어있습니다

error_log_file

오류 로그 파일의 경로입니다. 전체 경로 또는 현재 작업 디렉터리를 기준으로 합니다. 값이 없으면(기본값) 오류가 기록되지 않습니다.

비어있습니다

num_threads

작업자 스레드 수입니다. Civetweb은 들어오는 각 연결을 별도의 스레드에서 처리합니다. 따라서 이 옵션의 값은 Civetweb에서 처리할 수 있는 동시 HTTP 연결 수입니다.

50

request_timeout_ms

네트워크 읽기 및 네트워크 쓰기 작업에 대한 시간 초과(밀리초). 클라이언트가 장기 실행 연결을 유지하려는 경우 이 값을 늘리거나 (더 나은) keep-alive 메시지를 사용합니다.

30000

다음은 이러한 옵션이 설정된 /etc/ceph/ceph.conf 파일의 예입니다.

...

[client.rgw.node1]
rgw frontends = civetweb request_timeout_ms=30000 error_log_file=/var/log/radosgw/civetweb.error.log access_log_file=/var/log/radosgw/civetweb.access.log

CivetWeb 및 Beast 프론트엔드 모두 서버가 처리하는 모든 요청에 대한 액세스 로그 라인 기록을 RADOS 게이트웨이 로그 파일에 기록합니다.

2.7. DNS에 와일드카드 추가

S3 스타일 하위 도메인과 함께 Ceph를 사용하려면(예: bucket-name.domain-name.com ) 데몬 에서 도메인 이름을 확인하는 데 사용하는 DNS 서버의 DNS 레코드에 와일드카드를 추가합니다.

dnsmasq 의 경우 호스트 이름에 앞에 점(.)을 사용하여 다음 주소 설정을 추가합니다.

address=/.{hostname-or-fqdn}/{host-ip-address}

예를 들면 다음과 같습니다.

address=/.gateway-node1/192.168.122.75

바인드 하려면 DNS 레코드에 와일드카드를 추가합니다. 예를 들면 다음과 같습니다.

$TTL    604800
@       IN      SOA     gateway-node1. root.gateway-node1. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      gateway-node1.
@       IN      A       192.168.122.113
*       IN      CNAME   @

DNS 서버를 다시 시작하고 하위 도메인으로 서버를 ping하여 ceph-radosgw 데몬이 하위 도메인 요청을 처리할 수 있는지 확인합니다.

ping mybucket.{hostname}

예를 들면 다음과 같습니다.

ping mybucket.gateway-node1

DNS 서버가 로컬 시스템에 있는 경우 로컬 시스템의 nameserver 항목을 추가하여 /etc/resolv.conf 를 수정해야 할 수도 있습니다.

마지막으로 rgw_dns_name = {hostname} 설정을 사용하여 Ceph 구성 파일의 적절한 [client.rgw.{instance}] 섹션에서 DNS 서버의 호스트 이름 또는 주소를 지정합니다. 예를 들면 다음과 같습니다.

[client.rgw.rgw1.rgw0]
...
rgw_dns_name = {hostname}
참고

모범 사례로 관리 노드 또는 ceph-anible 과 같은 중앙 집중식 위치에서 Ceph 구성 파일을 변경하고 필요에 따라 구성 파일을 재배포하여 클러스터 전체의 일관성을 보장합니다.

마지막으로 DNS 설정이 적용되도록 Ceph 개체 게이트웨이를 다시 시작합니다.

2.8. 로깅 및 디버깅 출력 조정

설정 절차를 완료한 후 로깅 출력을 확인하여 요구 사항을 충족하는지 확인합니다. 구성에 문제가 발생하면 Ceph 구성 파일의 [global] 섹션에서 로깅 및 디버깅 메시지를 늘리고 게이트웨이를 다시 시작하여 구성 문제를 해결할 수 있습니다. 예를 들면 다음과 같습니다.

[global]
#append the following in the global section.
debug ms = 1
debug civetweb = 20

RGW 디버그 로그의 경우 Ceph 구성 파일의 [client.rgw.{instance}] 섹션에 다음 매개변수를 추가합니다.

[client.rgw.rgw1.rgw0]
...
debug rgw = 20

이러한 설정을 런타임에 수정할 수도 있습니다. 예를 들면 다음과 같습니다.

# ceph tell osd.0 injectargs --debug_civetweb 10/20

Ceph 로그 파일은 기본적으로 /var/log/ceph 에 있습니다.

로깅 및 디버깅에 대한 일반적인 내용은 Red Hat Ceph Storage 구성 가이드의 Ceph 디버깅 및 로깅 구성 섹션을 참조하십시오.

2.9. S3 서버 측 암호화

Ceph Object Gateway는 S3 API(애플리케이션 프로그래밍 인터페이스)에 대해 업로드된 오브젝트의 서버 측 암호화를 지원합니다. 서버 측 암호화는 S3 클라이언트가 HTTP를 통해 암호화되지 않은 형태로 데이터를 보내고 Ceph Object Gateway는 해당 데이터를 Red Hat Ceph Storage 클러스터에 암호화된 형식으로 저장함을 의미합니다.

참고

Red Hat은 SLO(Static Large Object) 또는 DLO(Dynamic Large Object)의 S3 객체 암호화를 지원하지 않습니다.

중요

암호화를 사용하려면 클라이언트 요청에서 SSL 연결을 통해 요청을 보내야 합니다. Red Hat은 Ceph Object Gateway에서 SSL을 사용하지 않는 한 클라이언트에서 S3 암호화를 지원하지 않습니다. 그러나 테스트 목적으로 관리자는 런타임 시 rgw_crypt_require_ssl 구성 설정을 false로 설정하고, Ceph 구성 파일에서 false 설정하고 게이트웨이 인스턴스를 다시 시작하거나, Ansible 구성 파일에서 false로 설정하여 Ceph Object Gateway에 대한 Ansible 플레이북을 재생하여 테스트 중에 SSL을 비활성화할 수 있습니다.

프로덕션 환경에서는 암호화된 요청을 SSL을 통해 보낼 수 없습니다. 이러한 경우 HTTP를 서버 측 암호화와 함께 사용하여 요청을 보냅니다.

서버 측 암호화를 사용하여 HTTP를 구성하는 방법에 대한 자세한 내용은 아래 추가 리소스 섹션을 참조하십시오.

암호화 키 관리에 대한 두 가지 옵션이 있습니다.

고객 제공 키

고객 제공 키를 사용하는 경우 S3 클라이언트는 암호화된 데이터를 읽거나 쓰기 위한 각 요청과 함께 암호화 키를 전달합니다. 이러한 키를 관리하는 것은 고객의 책임입니다. 고객은 각 오브젝트를 암호화하는 데 사용되는 Ceph 개체 게이트웨이를 기억해야 합니다.

Ceph Object Gateway는 Amazon SSE-C 사양에 따라 S3 API에서 고객 제공 키 동작을 구현합니다.

고객이 키 관리를 처리하고 S3 클라이언트는 Ceph Object Gateway에 키를 전달하므로 Ceph Object Gateway에는 이 암호화 모드를 지원하는 특별한 구성이 필요하지 않습니다.

키 관리 서비스

키 관리 서비스를 사용하는 경우 보안 키 관리 서비스는 키를 저장하고 Ceph Object Gateway는 필요에 따라 데이터를 암호화하거나 암호 해독하기 위한 요청을 제공합니다.

Ceph Object Gateway는 Amazon SSE-KMS 사양에 따라 S3 API에서 키 관리 서비스 동작을 구현합니다.

중요

현재 테스트된 유일한 키 관리 구현은 H¢Corp Vault와 OpenStack Barbican입니다. 그러나 OpenStack Barbican은 기술 프리뷰이며 프로덕션 시스템에서 사용할 수 없습니다.

2.10. 서버 측 암호화 요청

프로덕션 환경에서 클라이언트는 프록시를 통해 Ceph 개체 게이트웨이에 연결하는 경우가 많습니다. 이 프록시는 여러 Ceph Object Gateway에 연결되므로 로드 밸런서라고 합니다. 클라이언트가 Ceph Object Gateway에 요청을 보내면 로드 밸런서에서 이러한 요청을 여러 Ceph Object Gateway에 라우팅하여 워크로드를 배포합니다.

이 유형의 구성에서는 로드 밸런서 및 여러 Ceph 개체 게이트웨이 간에 SSL 종료가 발생할 수 있습니다. HTTP만 사용하는 통신이 발생합니다. 서버 측 암호화 요청을 수락하도록 Ceph Object Gateways를 설정하려면 서버 측 암호화 구성을 참조하십시오.

2.11. 서버 측 암호화 구성

스토리지 관리자는 HTTP를 사용하여 암호화된 요청을 SSL을 통해 보낼 수 없는 경우 HTTP를 사용하여 Ceph Object Gateway에 요청을 보내도록 서버 측 암호화를 설정할 수 있습니다.

이 절차에서는 HAProxy를 프록시 및 로드 밸런서로 사용합니다.

사전 요구 사항

  • 스토리지 클러스터의 모든 노드에 대한 루트 수준 액세스.
  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • Ceph Object Gateway가 설치되어 있습니다.
  • HAProxy가 설치되어 있어야 합니다.

절차

  1. haproxy.cfg 파일을 편집합니다.

    예제

    frontend http_web
        bind *:80
        mode http
        default_backend rgw
    
    frontend rgw­-https
      bind *:443 ssl crt /etc/ssl/private/example.com.pem
      default_backend rgw
    
    backend rgw
        balance roundrobin
        mode http
        server  rgw1 10.0.0.71:8080 check
        server  rgw2 10.0.0.80:8080 check

  2. http 프런트엔드에 대한 액세스를 허용하는 행을 주석 처리하고 대신 https 프런트엔드를 사용하도록 HAProxy에 지시하는 지침을 추가합니다.

    예제

    #     frontend http_web
    #     bind *:80
    #     mode http
    #     default_backend rgw
    
    frontend rgw­-https
      bind *:443 ssl crt /etc/ssl/private/example.com.pem
      http-request set-header X-Forwarded-Proto https if { ssl_fc }
      http-request set-header X-Forwarded-Proto https
    # here we set the incoming HTTPS port on the load balancer (eg : 443)
      http-request set-header X-Forwarded-Port 443
      default_backend rgw
    
    backend rgw
        balance roundrobin
        mode http
        server  rgw1 10.0.0.71:8080 check
        server  rgw2 10.0.0.80:8080 check

  3. 클러스터의 모든 노드에서 다음 매개변수를 Ceph 구성 파일의 [global] 섹션에 추가합니다.

      rgw_trust_forwarded_https=true
  4. HAProxy를 활성화하고 시작합니다.

    [root@haproxy]# systemctl enable haproxy
    [root@haproxy]# systemctl start haproxy
  5. Ansible이 실행될 때 rgw_trust_forwarded_https=true 가 Ceph 구성 파일에서 제거되지 않도록 ceph-ansible all.yml 파일을 편집하고 ceph_conf _overrides / global 섹션의 rgw_trust_forwarded_ httpstrue 로 설정합니다.

    ceph_conf_overrides:
       global:
         rgw_trust_forwarded_https: true
  6. 변경이 완료되면 ceph-ansible 플레이북을 실행하여 모든 Ceph 노드에서 구성을 업데이트합니다.

2.12. H¢Corp Vault

스토리지 관리자는 Ceph Object Gateway와 함께 사용할 수 있도록 키, 암호 및 인증서를 HseaCorp Vault에 안전하게 저장할 수 있습니다. H¢Corp Vault는 Ceph 개체 게이트웨이에서 사용하는 서버 측 암호화에 대해 안전한 키 관리 서비스를 제공합니다.

Ceph Vault 통합 다이어그램

기본 워크플로우:

  1. 클라이언트는 오브젝트의 키 ID를 기반으로 Vault에서 비밀 키 생성을 요청합니다.
  2. 클라이언트는 오브젝트의 키 ID가 있는 오브젝트를 Ceph Object Gateway에 업로드합니다.
  3. 그러면 Ceph Object Gateway에서 Vault에서 새로 생성된 비밀 키를 요청합니다.
  4. Vault는 비밀 키를 Ceph 개체 게이트웨이에 반환하여 요청에 응답합니다.
  5. 이제 Ceph Object Gateway에서 새 비밀 키를 사용하여 오브젝트를 암호화할 수 있습니다.
  6. 암호화가 완료되면 오브젝트가 Ceph OSD에 저장됩니다.
중요

Red Hat은 기술 파트너와 협력하여 이 문서를 고객에게 서비스로 제공하고 있습니다. 그러나 Red Hat은 이 제품에 대한 지원을 제공하지 않습니다. 이 제품에 대한 기술 지원이 필요한 경우 H¢corp에 문의하십시오.

2.12.1. 사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • Ceph Object Gateway 소프트웨어 설치.
  • HCorp Vault 소프트웨어 설치.

2.12.2. Vault 용 비밀 엔진

HseaCorp Vault는 데이터를 생성, 저장 또는 암호화할 수 있는 여러 가지 비밀 엔진을 제공합니다. API(애플리케이션 프로그래밍 인터페이스)는 해당 데이터에 대한 작업을 요청하는 시크릿 엔진에 데이터 호출을 전송하고 시크릿 엔진은 해당 작업 요청의 결과를 반환합니다.

Ceph Object Gateway는 H¢Corp Vault 비밀 엔진을 2개 지원합니다.

  • 키/값 버전 2
  • 전환

키/값 버전 2

키/값 시크릿 엔진은 Vault 내에 디스크의 임의 시크릿을 저장합니다. kv 엔진 버전 2를 사용하면 키에 구성 가능한 개수의 버전이 있을 수 있습니다. 기본 버전 수는 10입니다. 버전을 삭제하면 기본 데이터가 삭제되지 않지만 데이터가 삭제된 것으로 표시되므로 삭제된 버전을 삭제하지 않을 수 있습니다. 키 이름은 문자열이어야 하며, 명령줄 인터페이스를 사용할 때 엔진은 문자열이 아닌 값을 문자열로 변환합니다. 문자열이 아닌 값을 보존하려면 JSON 파일을 제공하거나 HTTP API(애플리케이션 프로그래밍 인터페이스)를 사용합니다.

참고

ACL(액세스 제어 목록) 정책의 경우 Key/Value secret 엔진은 생성과 업데이트 기능 간의 차이점을 인식합니다.

전환

Transit 비밀 엔진은 전송 중인 데이터에서 암호화 기능을 수행합니다. Transit 비밀 엔진은 해시를 생성할 수 있으며 임의 바이트의 소스일 수 있으며 데이터를 서명하고 확인할 수도 있습니다. Vault는 Transit 비밀 엔진을 사용할 때 데이터를 저장하지 않습니다. Transit 비밀 엔진은 동일한 키를 여러 용도로 사용할 수 있도록 함으로써 키 파생을 지원합니다. 또한 전송 비밀 엔진은 키 버전 지정을 지원합니다. Transit 비밀 엔진은 다음과 같은 주요 유형을 지원합니다.

aes128-gcm96
128비트 AES 키와 96비트 nonce를 사용하는 AES-GCM; 암호화, 암호 해독, 키 파생 및 통합 암호화 지원
aes256-gcm96
256비트 AES 키와 96비트 nonce를 사용하는 AES-GCM; 암호화, 암호 해독, 키 파생 및 통합 암호화(기본값) 지원
chacha20-poly1305
256비트 키가 있는 ChaCha20-Poly1305, 암호화, 암호 해독, 키 파생 및 통합된 암호화 지원
ed25519
Ed25519; 서명, 서명 확인 및 키 파생 지원
ecdsa-p256
곡선 P-256을 사용하는 ECDSA; 서명 및 서명 확인 지원
ecdsa-p384
곡선 P-384를 사용하는 ECDSA; 서명 및 서명 확인 지원
ecdsa-p521
곡선 P-521을 사용하는 ECDSA, 서명 및 서명 확인 지원
rsa-2048
2048비트 RSA 키. 암호화, 암호 해독, 서명 및 서명 확인 지원
rsa-3072
3072비트 RSA 키; 암호화, 암호 해독, 서명 및 서명 확인 지원
rsa-4096
4096비트 RSA 키; 암호화, 암호 해독, 서명 및 서명 확인 지원

추가 리소스

  • 자세한 내용은 Vault의 프로젝트 사이트에 대한 KV Secrets Engine 설명서를 참조하십시오.
  • 자세한 내용은 Vault의 프로젝트 사이트에 대한 Transit Secrets Engine 설명서를 참조하십시오.

2.12.3. Vault를 위한 인증

H¢Corp Vault는 여러 유형의 인증 메커니즘을 지원합니다. Ceph Object Gateway는 현재 Vault 에이전트 및 토큰 인증 방법을 지원합니다. Ceph Object Gateway는 rgw_crypt_vault_authrgw_crypt_vault_addr 옵션을 사용하여 H¢Corp Vault 사용을 구성합니다.

토큰

토큰 인증 방법을 사용하면 사용자가 토큰을 사용하여 인증할 수 있습니다. 새 토큰을 생성하고, 토큰으로 시크릿을 취소하고, 다른 많은 토큰 작업을 수행할 수 있습니다. 토큰 저장소를 사용하여 다른 인증 방법을 바이패스할 수 있습니다. 토큰 인증 방법을 사용하는 경우 rgw_crypt_vault_token_file 옵션도 사용해야 합니다. 토큰 파일은 Ceph Object Gateway에서만 읽을 수 있습니다. 또한 특정 경로에서 인증 키를 가져올 수 있는 제한된 정책이 있는 Vault 토큰을 사용해야 합니다.

주의

프로덕션 환경에서는 토큰 인증을 사용하지 않는 것이 좋습니다.

Vault 에이전트

Vault 에이전트는 클라이언트 노드에서 실행되고 토큰 갱신과 함께 클라이언트 측 캐싱을 제공하는 데몬입니다. Vault 에이전트는 일반적으로 Ceph Object Gateway 노드에서 실행됩니다.

추가 리소스

2.12.4. Vault용 네임 스페이스

H¢Corp Vault를 엔터프라이즈 서비스로 사용하면 조직 내에서 팀에서 사용할 수 있는 격리된 네임스페이스에 대한 중앙 집중식 관리가 제공됩니다. 이러한 분리된 네임스페이스 환경을 테넌트 라고 하며, 조직 내 팀은 이러한 테넌트 를 활용하여 정책, 비밀 및 ID를 다른 팀으로부터 격리할 수 있습니다. Vault의 네임스페이스 기능은 단일 인프라 내에서 보안 멀티 테넌시를 지원하는 데 도움이 됩니다.

추가 리소스

2.12.5. Vault를 사용하도록 Ceph Object Gateway 구성

H¢Corp Vault를 사용하도록 Ceph Object Gateway를 구성하려면 암호화 키 저장소로 설정해야 합니다. 현재 Ceph Object Gateway는 두 가지 비밀 엔진과 두 가지 다른 인증 방법을 지원합니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • Ceph Object Gateway 소프트웨어 설치.
  • Ceph Object Gateway 노드에 대한 루트 수준 액세스.

절차

  1. Ceph 구성 파일을 편집하기 위해 기본적으로 /etc/ceph/ceph.conf 를 열고 암호화 키 저장소로 Vault를 활성화합니다.

    rgw_crypt_s3_kms_backend = vault
  2. [client.radosgw.INSTANCE_NAME] 섹션에서 Vault 인증 방법인 Token 또는 Vault 에이전트를 선택합니다.

    1. Token 을 사용하는 경우 다음 행을 추가합니다.

      rgw_crypt_vault_auth = token
      rgw_crypt_vault_token_file = /etc/ceph/vault.token
      rgw_crypt_vault_addr = http://VAULT_SERVER:8200
    2. Vault 에이전트를 사용하는 경우 다음 행을 추가합니다.

      rgw_crypt_vault_auth = agent
      rgw_crypt_vault_addr = http://VAULT_SERVER:8100
  3. [client.radosgw.INSTANCE_NAME] 섹션에서 Vault 시크릿 엔진(키/값 또는 전송)을 선택합니다.

    1. Key/Value 를 사용하는 경우 다음 행을 추가합니다.

      rgw_crypt_vault_secret_engine = kv
    2. Transit 을 사용하는 경우 다음 행을 추가합니다.

      rgw_crypt_vault_secret_engine = transit
  4. 선택적으로 [client.radosgw.INSTANCE_NAME] 섹션에서 암호화 키를 검색할 Vault 네임스페이스를 설정할 수 있습니다.

    rgw_crypt_vault_namespace = NAME_OF_THE_NAMESPACE
  5. 경로 접두사를 설정하여 Ceph Object Gateway에서 Vault에서 암호화 키를 검색하는 위치를 제한합니다.

    예제

    rgw_crypt_vault_prefix = /v1/secret/data

    1. 내보낼 수 있는 전송 키의 경우 다음과 같이 접두사 경로를 설정합니다.

      rgw_crypt_vault_prefix = /v1/transit/export/encryption-key

      Vault 서버의 도메인 이름이 vault-server 라고 가정하면 Ceph Object Gateway는 다음 URL에서 암호화된 전송 키를 가져옵니다.

      예제

      http://vault-server:8200/v1/transit/export/encryption-key

  6. Ceph 구성 파일에 변경 사항을 저장합니다.

추가 리소스

  • 자세한 내용은 Red Hat Ceph Storage Object Gateway Configuration and Administration GuideVault용 Secret Engine 섹션을 참조하십시오.
  • 자세한 내용은 Red Hat Ceph Storage Object Gateway Configuration and Administration GuideVault에 대한 인증 섹션을 참조하십시오.

2.12.6. kv 엔진을 사용하여 키 생성

Ceph Object Gateway에서 사용할 키를 만들 수 있도록 HCorp Vault Key/Value Secret Engine(kv)을 구성합니다. 시크릿은 kv 시크릿 엔진에 키-값 쌍으로 저장됩니다.

중요

서버 측 암호화 키는 256비트이고 base64 를 사용하여 인코딩되어야 합니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • HCorp Vault 소프트웨어 설치.
  • HseaCorp Vault 노드에 대한 루트 수준 액세스.

절차

  1. 키/값 버전 2 시크릿 엔진을 활성화합니다.

    [root@vault ~]# vault secrets enable kv-v2
  2. 새 키를 생성합니다.

    구문

    vault kv put secret/PROJECT_NAME/BUCKET_NAME key=$(openssl rand -base64 32)

    예제

    [root@vault ~]# vault kv put secret/myproject/mybucketkey key=$(openssl rand -base64 32)
    
    ====== Metadata ======
    Key              Value
    ---              -----
    created_time     2020-02-21T17:01:09.095824999Z
    deletion_time    n/a
    destroyed        false
    version          1

2.12.7. 전송 엔진을 사용하여 키 만들기

Ceph Object Gateway에서 사용할 키를 만들 수 있도록 HCorp Vault Transit 비밀 엔진(전송)을 구성합니다. Ceph Object Gateway로 서버 측 암호화에 사용하려면 Transit 시크릿 엔진을 사용하여 키를 생성할 수 있어야 합니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • HCorp Vault 소프트웨어 설치.
  • HseaCorp Vault 노드에 대한 루트 수준 액세스.

절차

  1. Transit 비밀 엔진을 활성화합니다.

    [root@vault ~]# vault secrets enable transit
  2. 내보내기 가능한 새 키를 생성합니다.

    구문

    vault write -f transit/keys/BUCKET_NAME exportable=true

    예제

    [root@vault ~]# vault write -f transit/keys/mybucketkey exportable=true

    참고

    기본적으로 위의 명령은 aes256-gcm96 유형 키를 생성합니다.

  3. 키 생성을 확인합니다.

    구문

    vault read transit/export/encryption-key/BUCKET_NAME/VERSION_NUMBER

    예제

    [root@vault ~]# vault read transit/export/encryption-key/mybucketkey/1
    
    Key     Value
    ---     -----
    keys    map[1:-gbTI9lNpqv/V/2lDcmH2Nq1xKn6FPDWarCmFM2aNsQ=]
    name    mybucketkey
    type    aes256-gcm96

    참고

    키 버전을 포함한 전체 키 경로를 제공해야 합니다.

2.12.8. AWS 및 Vault를 사용하여 오브젝트 업로드

Ceph Object Gateway에 오브젝트를 업로드할 때 Ceph Object Gateway는 Vault에서 키를 가져온 다음 오브젝트를 암호화하여 버킷에 저장합니다. 오브젝트 다운로드를 요청하면 Ceph Object Gateway에서 Vault에서 해당 키를 자동으로 검색하고 개체의 암호를 해독합니다.

참고

URL은 rgw_crypt_vault_addr 옵션으로 설정된 기본 주소 및 rgw_ crypt_vault_prefix 옵션으로 설정된 경로 접두사를 사용하여 구성됩니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • Ceph Object Gateway 소프트웨어 설치.
  • HCorp Vault 소프트웨어 설치.
  • Ceph Object Gateway 클라이언트 노드에 액세스합니다.
  • AWS(Amazon Web Services) 액세스.

절차

  1. AWS 명령줄 클라이언트를 사용하여 오브젝트를 업로드합니다.

    예제

    [user@client ~]$ aws --endpoint=http://radosgw:8000 s3 cp plaintext.txt s3://mybucket/encrypted.txt --sse=aws:kms --sse-kms-key-id myproject/mybucketkey

    참고

    예에서 사용된 URL을 가져오는 키는 다음과 같습니다. http://vault-server:8200/v1/secret/data/myproject/mybucketkey

2.12.9. 추가 리소스

2.13. 게이트웨이 테스트

REST 인터페이스를 사용하려면 먼저 S3 인터페이스에 대한 초기 Ceph Object Gateway 사용자를 만듭니다. 그런 다음 Swift 인터페이스에 대한 하위 사용자를 만듭니다. 그런 다음 생성된 사용자가 게이트웨이에 액세스할 수 있는지 확인해야 합니다.

2.13.1. S3 사용자 만들기

게이트웨이를 테스트하려면 S3 사용자를 만들고 사용자에게 액세스 권한을 부여합니다. man radosgw-admin 명령은 추가 명령 옵션에 대한 정보를 제공합니다.

참고

다중 사이트 배포에서 master 영역 그룹의 마스터 영역에 항상 호스트에 사용자를 생성합니다.

사전 요구 사항

  • root 또는 sudo 액세스
  • Ceph Object Gateway 설치

절차

  1. S3 사용자를 생성합니다.

    radosgw-admin user create --uid=name --display-name="First User"

    name 을 S3 사용자의 이름으로 바꿉니다. 예를 들면 다음과 같습니다.

    [root@master-zone]# radosgw-admin user create --uid="testuser" --display-name="First User"
    {
        "user_id": "testuser",
        "display_name": "First User",
        "email": "",
        "suspended": 0,
        "max_buckets": 1000,
        "auid": 0,
        "subusers": [],
        "keys": [
            {
                "user": "testuser",
                "access_key": "CEP28KDIQXBKU4M15PDC",
                "secret_key": "MARoio8HFc8JxhEilES3dKFVj8tV3NOOYymihTLO"
            }
        ],
        "swift_keys": [],
        "caps": [],
        "op_mask": "read, write, delete",
        "default_placement": "",
        "placement_tags": [],
        "bucket_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "user_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "temp_url_keys": [],
        "type": "rgw"
    }
  2. 출력을 확인하여 access_key 및 secret_key 값에 JSON 이스케이프 문자(\)가 포함되지 않도록합니다. 이러한 값은 액세스 검증에 필요하지만 값에 JSON 이스케이프 문자가 포함된 경우 특정 클라이언트는 처리할 수 없습니다. 이 문제를 해결하려면 다음 작업 중 하나를 수행하십시오.

    • JSON 이스케이프 문자를 제거합니다.
    • 문자열을 따옴표로 캡슐화합니다.
    • 키를 다시 생성하고 에 JSON 이스케이프 문자가 포함되지 않도록 합니다.
    • 키와 시크릿을 수동으로 지정합니다.

    유효한 문자이므로 슬래시 / 를 제거하지 마십시오.

2.13.2. Swift 사용자 만들기

Swift 인터페이스를 테스트하려면 Swift 하위 사용자를 만듭니다. Swift 사용자를 만드는 작업은 두 단계로 이루어진 프로세스입니다. 첫 번째 단계는 사용자를 만드는 것입니다. 두 번째 단계는 비밀 키를 생성하는 것입니다.

참고

다중 사이트 배포에서 master 영역 그룹의 마스터 영역에 항상 호스트에 사용자를 생성합니다.

사전 요구 사항

  • Ceph 개체 게이트웨이 설치.
  • Ceph Object Gateway 노드에 대한 루트 수준 액세스.

절차

  1. Swift 사용자를 만듭니다.

    구문

    radosgw-admin subuser create --uid=NAME --subuser=NAME:swift --access=full

    NAME 을 Swift 사용자 이름으로 바꿉니다. 예를 들면 다음과 같습니다.

    예제

    [root@rgw]# radosgw-admin subuser create --uid=testuser --subuser=testuser:swift --access=full
    {
        "user_id": "testuser",
        "display_name": "First User",
        "email": "",
        "suspended": 0,
        "max_buckets": 1000,
        "auid": 0,
        "subusers": [
            {
                "id": "testuser:swift",
                "permissions": "full-control"
            }
        ],
        "keys": [
            {
                "user": "testuser",
                "access_key": "O8JDE41XMI74O185EHKD",
                "secret_key": "i4Au2yxG5wtr1JK01mI8kjJPM93HNAoVWOSTdJd6"
            }
        ],
        "swift_keys": [
            {
                "user": "testuser:swift",
                "secret_key": "13TLtdEW7bCqgttQgPzxFxziu0AgabtOc6vM8DLA"
            }
        ],
        "caps": [],
        "op_mask": "read, write, delete",
        "default_placement": "",
        "placement_tags": [],
        "bucket_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "user_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "temp_url_keys": [],
        "type": "rgw"
    }

  2. 시크릿 키를 생성합니다.

    구문

    radosgw-admin key create --subuser=NAME:swift --key-type=swift --gen-secret

    NAME 을 Swift 사용자 이름으로 바꿉니다. 예를 들면 다음과 같습니다.

    예제

    [root@rgw]# radosgw-admin key create --subuser=testuser:swift --key-type=swift --gen-secret
    {
        "user_id": "testuser",
        "display_name": "First User",
        "email": "",
        "suspended": 0,
        "max_buckets": 1000,
        "auid": 0,
        "subusers": [
            {
                "id": "testuser:swift",
                "permissions": "full-control"
            }
        ],
        "keys": [
            {
                "user": "testuser",
                "access_key": "O8JDE41XMI74O185EHKD",
                "secret_key": "i4Au2yxG5wtr1JK01mI8kjJPM93HNAoVWOSTdJd6"
            }
        ],
        "swift_keys": [
            {
                "user": "testuser:swift",
                "secret_key": "a4ioT4jEP653CDcdU8p4OuhruwABBRZmyNUbnSSt"
            }
        ],
        "caps": [],
        "op_mask": "read, write, delete",
        "default_placement": "",
        "placement_tags": [],
        "bucket_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "user_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "temp_url_keys": [],
        "type": "rgw"
    }

2.13.3. S3 액세스 테스트

S3 액세스를 확인하기 위해 Python 테스트 스크립트를 작성하고 실행해야 합니다. S3 액세스 테스트 스크립트는 radosgw 에 연결하고 새 버킷을 생성하고 모든 버킷을 나열합니다. aws_access_key_idaws_secret_access_key 의 값은 radosgw _admin 명령에서 반환한 access _key 및 secret _ key 값에서 가져옵니다.

참고

출력에 메타데이터를 유지 관리하기 위한 추가 json 필드가 포함되어 있으므로 시스템 사용자에게는 전체 영역에 대한 root 권한이 있어야 합니다.

사전 요구 사항

  • root 또는 sudo 액세스.
  • Ceph 개체 게이트웨이가 설치되어 있어야 합니다.
  • S3 사용자가 생성되었습니다.

절차

  1. Red Hat Enterprise Linux 7용 공통 리포지토리 및 Red Hat Enterprise Linux 8용 High Availability 리포지토리를 활성화합니다.

    Red Hat Enterprise Linux 7

    # subscription-manager repos --enable=rhel-7-server-rh-common-rpms

    Red Hat Enterprise Linux 8

    # subscription-manager repos --enable=rhel-8-for-x86_64-highavailability-rpms

  2. python-boto 패키지를 설치합니다.

    Red Hat Enterprise Linux 7

    # yum install python-boto

    Red Hat Enterprise Linux 8

    # dnf install python3-boto3

  3. Python 스크립트를 생성합니다.

    vi s3test.py
  4. 파일에 다음 내용을 추가합니다.

    Red Hat Enterprise Linux 7

    import boto
    import boto.s3.connection
    
    access_key = 'ACCESS'
    secret_key = 'SECRET'
    
    boto.config.add_section('s3')
    
    conn = boto.connect_s3(
            aws_access_key_id = access_key,
            aws_secret_access_key = secret_key,
            host = 's3.ZONE.hostname',
            port = PORT,
            is_secure=False,
            calling_format = boto.s3.connection.OrdinaryCallingFormat(),
            )
    
    bucket = conn.create_bucket('my-new-bucket')
    for bucket in conn.get_all_buckets():
    	print "{name}\t{created}".format(
    		name = bucket.name,
    		created = bucket.creation_date,
    )

    Red Hat Enterprise Linux 8

    import boto3
    
    endpoint = "" # enter the endpoint URL along with the port "http://URL:_PORT_"
    
    access_key = 'ACCESS'
    secret_key = 'SECRET'
    
    s3 = boto3.client(
            's3',
            endpoint_url=endpoint,
            aws_access_key_id=access_key,
            aws_secret_access_key=secret_key
            )
    
    s3.create_bucket(Bucket='my-new-bucket')
    
    response = s3.list_buckets()
    for bucket in response['Buckets']:
        print("{name}\t{created}".format(
    		name = bucket['Name'],
    		created = bucket['CreationDate']
    ))

    1. ZONE 을 게이트웨이 서비스를 구성한 호스트의 영역 이름으로 바꿉니다. 즉 게이트웨이 호스트입니다. host'setting이 DNS로 확인되는지 확인합니다. PORT 을 게이트웨이의 포트 번호로 바꿉니다.
    2. ACCESSSECRETRed Hat Ceph Storage 개체 게이트웨이 구성 및 관리 가이드의 S3 사용자 만들기 섹션의 access _key secret_key 값으로 바꿉니다.
  5. 스크립트를 실행합니다.

    Red Hat Enterprise Linux 7

    python s3test.py

    Red Hat Enterprise Linux 8

    python3 s3test.py

    출력 예:

    my-new-bucket 2021-08-16T17:09:10.000Z

2.13.4. Swift 액세스 테스트

Swift 액세스는 swift 명령줄 클라이언트를 통해 확인할 수 있습니다. man swift 명령은 사용 가능한 명령줄 옵션에 대한 자세한 정보를 제공합니다.

swift 클라이언트를 설치하려면 다음을 실행합니다.

sudo yum install python-setuptools
sudo easy_install pip
sudo pip install --upgrade setuptools
sudo pip install --upgrade python-swiftclient

swift 액세스를 테스트하려면 다음을 실행합니다.

swift -A http://{IP ADDRESS}:{port}/auth/1.0 -U testuser:swift -K '{swift_secret_key}' list

{IP ADDRESS} 를 게이트웨이 서버의 공용 IP 주소로 바꾸고 {swift_secret_key}swift 사용자에 대해 실행되는 radosgw-admin key create 명령의 값으로 바꿉니다. {port}를 Civetweb으로 사용 중인 포트 번호로 바꿉니다(예: 기본값 8080 ). 포트를 교체하지 않으면 기본값은 포트 80 입니다.

예를 들면 다음과 같습니다.

swift -A http://10.19.143.116:8080/auth/1.0 -U testuser:swift -K '244+fz2gSqoHwR3lYtSbIyomyPHf3i7rgSJrF/IA' list

출력은 다음과 같아야 합니다.

my-new-bucket

2.14. HAProxy/keepalived 구성

Ceph 개체 게이트웨이를 사용하면 부하 증가(즉, 동일한 영역 그룹 및 영역)를 확장할 수 있도록 개체 게이트웨이의 많은 인스턴스를 단일 영역에 할당할 수 있지만 HAProxy/keepalived 를 사용하기 위해 연결된 아키텍처는 필요하지 않습니다. 각 Ceph Object Gateway 인스턴스에는 자체 IP 주소가 있으므로 HAProxy와 keepalived 를 사용하여 Ceph Object Gateway 서버 간 부하를 분산할 수 있습니다.

HAProxy 및 keepalived 의 또 다른 사용 사례는 HAProxy 서버에서 HTTPS를 종료하는 것입니다. HAProxy 서버를 사용하여 HAProxy 서버에서 HTTPS를 종료하고 HAProxy 서버와 Civetweb 게이트웨이 인스턴스 간에 HTTP를 사용할 수 있습니다.

참고

이 섹션에서는 Red Hat Enterprise Linux 7의 HAProxy 및 keepalived 구성에 대해 설명합니다.

Red Hat Enterprise Linux 8의 경우 keepalivedhaproxy 패키지를 설치하여 로드 밸런서를 설치합니다. Red Hat Enterprise Linux 8에서 부하 분산에 대한 추가 서브스크립션이 필요합니까? 자세한 내용은 기술 자료 문서.

2.14.1. HAProxy/keepalived 사전 요구 사항

Ceph Object Gateway를 사용하여 HA 프록시를 설정하려면 다음을 수행해야 합니다.

  • 실행 중인 Ceph 클러스터
  • 포트 80 에서 실행하도록 구성된 동일한 영역 내의 두 개 이상의 Ceph Object Gateway 서버. 간단한 설치 절차를 따르는 경우 게이트웨이 인스턴스가 기본적으로 동일한 영역 그룹 및 영역에 있습니다. 연결된 아키텍처를 사용하는 경우 인스턴스가 동일한 영역 그룹 및 영역에 있는지 확인합니다.
  • HAProxy 및 keepalived 용 서버 2대 이상.
참고

이 섹션에서는 두 개 이상의 Ceph Object Gateway 서버가 실행 중이고 포트 80 을 통해 테스트 스크립트를 실행할 때 각 서버에서 유효한 응답을 얻을 수 있다고 가정합니다.

HAProxy 및 keepalived 에 대한 자세한 내용은 부하 분산 관리를 참조하십시오.

2.14.2. HAProxy 노드 준비

다음 설정에서는 haproxy 및 haproxy 2 라는 두 개의 HAProxy 노드와 rgw1 및 rgw 2 라는 Ceph Object Gateway 서버가 있다고 가정합니다. 원하는 모든 이름 지정 규칙을 사용할 수 있습니다. 두 개 이상의 HAProxy 노드에서 다음 절차를 수행합니다.

  1. Red Hat Enterprise Linux 7 설치.
  2. 노드를 등록합니다.

    [root@haproxy]# subscription-manager register
  3. RHEL 서버 리포지토리를 활성화합니다.

    [root@haproxy]# subscription-manager repos --enable=rhel-7-server-rpms
  4. 서버를 업데이트합니다.

    [root@haproxy]# yum update -y
  5. 필요에 따라 관리 도구(예: wget,vim 등)를 설치합니다.
  6. 포트 80 을 엽니다.

    [root@haproxy]# firewall-cmd --zone=public --add-port 80/tcp --permanent
    [root@haproxy]# firewall-cmd --reload
  7. HTTPS의 경우 포트 443 을 엽니다.

    [root@haproxy]# firewall-cmd --zone=public --add-port 443/tcp --permanent
    [root@haproxy]# firewall-cmd --reload
  8. 필수 포트에 연결합니다.

    [root@haproxy]# semanage port -m -t http_cache_port_t -p tcp 8081

2.14.3. keepalived 설치 및 구성

두 개 이상의 HAProxy 노드에서 다음 절차를 수행합니다.

사전 요구 사항

  • 최소 2개의 HAProxy 노드.
  • 최소 두 개의 Object Gateway 노드.

절차

  1. keepalived 설치 :

    [root@haproxy]# yum install -y keepalived
  2. 두 HAProxy 노드 모두에서 keepalived 를 구성합니다.

    [root@haproxy]# vim /etc/keepalived/keepalived.conf

    구성 파일에는 haproxy 프로세스를 확인하는 스크립트가 있습니다.

    vrrp_script chk_haproxy {
      script "killall -0 haproxy" # check the haproxy process
      interval 2 # every 2 seconds
      weight 2 # add 2 points if OK
    }

    다음으로 마스터 및 백업 로드 밸런서의 인스턴스에서 eno1 을 네트워크 인터페이스로 사용합니다. 또한 가상 IP 주소 즉, 192.168.1.20 을 할당합니다.

    마스터 로드 밸런서 노드

    vrrp_instance RGW {
        state MASTER # might not be necessary. This is on the Master LB node.
        @main interface eno1
        priority 100
        advert_int 1
        interface eno1
        virtual_router_id 50
        @main unicast_src_ip 10.8.128.43 80
        unicast_peer {
               10.8.128.53
               }
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.1.20
        }
        track_script {
          chk_haproxy
        }
    }
    virtual_server 192.168.1.20 80 eno1 { #populate correct interface
        delay_loop 6
        lb_algo wlc
        lb_kind dr
        persistence_timeout 600
        protocol TCP
        real_server 10.8.128.43 80 { # ip address of rgw2 on physical interface, haproxy listens here, rgw listens to localhost:8080 or similar
            weight 100
            TCP_CHECK { # perhaps change these to a HTTP/SSL GET?
                connect_timeout 3
            }
        }
        real_server 10.8.128.53 80 { # ip address of rgw3 on physical interface, haproxy listens here, rgw listens to localhost:8080 or similar
            weight 100
            TCP_CHECK { # perhaps change these to a HTTP/SSL GET?
                connect_timeout 3
            }
        }
    }

    백업 로드 밸런서 노드

    vrrp_instance RGW {
        state BACKUP # might not be necessary?
        priority 99
        advert_int 1
        interface eno1
        virtual_router_id 50
        unicast_src_ip 10.8.128.53 80
        unicast_peer {
               10.8.128.43
               }
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.1.20
        }
        track_script {
          chk_haproxy
        }
    }
    virtual_server 192.168.1.20 80 eno1 { #populate correct interface
        delay_loop 6
        lb_algo wlc
        lb_kind dr
        persistence_timeout 600
        protocol TCP
        real_server 10.8.128.43 80 { # ip address of rgw2 on physical interface, haproxy listens here, rgw listens to localhost:8080 or similar
            weight 100
            TCP_CHECK { # perhaps change these to a HTTP/SSL GET?
                connect_timeout 3
            }
        }
        real_server 10.8.128.53 80 { # ip address of rgw3 on physical interface, haproxy listens here, rgw listens to localhost:8080 or similar
            weight 100
            TCP_CHECK { # perhaps change these to a HTTP/SSL GET?
                connect_timeout 3
            }
        }
    }

  3. keepalived 서비스를 활성화하고 시작합니다.

    [root@haproxy]# systemctl enable keepalived
    [root@haproxy]# systemctl start keepalived

추가 리소스

2.14.4. HAProxy 설치 및 구성

두 개 이상의 HAProxy 노드에서 다음 절차를 수행합니다.

  1. haproxy 를 설치합니다.

    [root@haproxy]# yum install haproxy
  2. SELinux 및 HTTP에 대해 haproxy 를 구성합니다.

    [root@haproxy]# vim /etc/firewalld/services/haproxy-http.xml

    다음 행을 추가합니다.

    <?xml version="1.0" encoding="utf-8"?>
    <service>
    <short>HAProxy-HTTP</short>
    <description>HAProxy load-balancer</description>
    <port protocol="tcp" port="80"/>
    </service>

    root 로 올바른 SELinux 컨텍스트 및 파일 권한을 haproxy-http.xml 파일에 할당합니다.

    [root@haproxy]# cd /etc/firewalld/services
    [root@haproxy]# restorecon haproxy-http.xml
    [root@haproxy]# chmod 640 haproxy-http.xml
  3. HTTPS를 사용하려는 경우 SELinux 및 HTTPS에 대해 haproxy 를 구성합니다.

    [root@haproxy]# vim /etc/firewalld/services/haproxy-https.xml

    다음 행을 추가합니다.

    <?xml version="1.0" encoding="utf-8"?>
    <service>
    <short>HAProxy-HTTPS</short>
    <description>HAProxy load-balancer</description>
    <port protocol="tcp" port="443"/>
    </service>

    root 로 올바른 SELinux 컨텍스트 및 파일 권한을 haproxy-https.xml 파일에 할당합니다.

    # cd /etc/firewalld/services
    # restorecon haproxy-https.xml
    # chmod 640 haproxy-https.xml
  4. HTTPS를 사용하려는 경우 SSL에 대한 키를 생성합니다. 인증서가 없는 경우 자체 서명된 인증서를 사용할 수 있습니다. 키를 생성하려면 Red Hat Enterprise Linux 7 시스템 관리자 가이드의 새 키 및 인증서 생성을 참조하십시오.

    마지막으로 인증서와 키를 PEM 파일에 넣습니다.

    [root@haproxy]# cat example.com.crt example.com.key > example.com.pem
    [root@haproxy]# cp example.com.pem /etc/ssl/private/
  5. haproxy 구성.

    [root@haproxy]# vim /etc/haproxy/haproxy.cfg

    globaldefaults 는 변경되지 않은 상태로 유지될 수 있습니다. defaults 섹션을 마치면 frontendbackend 섹션을 구성해야 합니다. 예를 들면 다음과 같습니다.

    frontend http_web
        bind *:80
        mode http
        default_backend rgw
    
    frontend rgw­-https
      bind *:443 ssl crt /etc/ssl/private/example.com.pem
      default_backend rgw
    
    backend rgw
        balance roundrobin
        mode http
        server  rgw1 10.0.0.71:80 check
        server  rgw2 10.0.0.80:80 check

    HAProxy 구성에 대한 자세한 내용은 HAProxy 구성을 참조하십시오.

  6. haproxy활성화/시작

    [root@haproxy]# systemctl enable haproxy
    [root@haproxy]# systemctl start haproxy

2.14.5. HAProxy 구성 테스트

HAProxy 노드에서 keepalived 구성의 가상 IP 주소가 표시되는지 확인합니다.

[root@haproxy]# ip addr show

calamari 노드에서 로드 밸런서 구성을 통해 게이트웨이 노드에 연결할 수 있는지 확인합니다. 예를 들면 다음과 같습니다.

[root@haproxy]# wget haproxy

다음과 동일한 결과가 반환되어야 합니다.

[root@haproxy]# wget rgw1

다음 내용이 포함된 index.html 파일을 반환하는 경우:

<?xml version="1.0" encoding="UTF-8"?>
	<ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
		<Owner>
			<ID>anonymous</ID>
			<DisplayName></DisplayName>
		</Owner>
		<Buckets>
		</Buckets>
	</ListAllMyBucketsResult>

그런 다음 구성이 제대로 작동합니다.

2.15. 정적 웹 호스팅의 게이트웨이 구성

기존의 웹 호스팅에는 콘텐츠가 동적으로 변경되지 않을 때 비효율적으로 리소스를 사용할 수 있는 각 웹 사이트에 대한 웹 서버를 설정하는 작업이 포함됩니다. Ceph Object Gateway는 S3 버킷에서 정적 웹 사이트를 호스팅할 수 있습니다.즉, PHP, 서블릿, 데이터베이스, nodejs 등과 같은 서버 측 서비스를 사용하지 않는 사이트입니다. 이 접근 방식은 각 사이트에 대해 웹 서버를 사용하여 VM을 설정하는 것보다 훨씬 더 경제적입니다.

2.15.1. 정적 웹 호스팅 가정

정적 웹 호스팅에는 Ceph Storage Cluster가 하나 이상 실행되고 정적 웹 사이트에는 Ceph Object Gateway 인스턴스가 2개 이상 필요합니다. Red Hat은 각 영역에 HAProxy/keepalived에 의해 여러 게이트웨이 인스턴스의 부하 분산이 있다고 가정합니다.

HAProxy/keepalived 에 대한 자세한 내용은 HAProxy/keepalived 구성을 참조하십시오.

참고

Red Hat 은 Ceph Object Gateway 인스턴스를 사용하여 표준 S3/Swift API와 정적 웹 호스팅을 동시에 배포하는 것을 지원하지 않습니다.

2.15.2. 정적 웹 호스팅 요구 사항

정적 웹 호스팅 기능은 자체 API를 사용하므로 S3 버킷에서 정적 웹 사이트를 사용하도록 게이트웨이를 구성하려면 다음이 필요합니다.

  1. S3 정적 웹 호스팅에서는 표준 S3/Swift API 사용 사례에 사용되는 인스턴스와 별도의 Ceph Object Gateway 인스턴스를 사용합니다.
  2. S3 정적 웹 사이트를 호스팅하는 게이트웨이 인스턴스에는 표준 S3/Swift API 게이트웨이 인스턴스와 중복되지 않은 별도의 도메인 이름이 있어야 합니다.
  3. S3 정적 웹 사이트를 호스팅하는 게이트웨이 인스턴스는 표준 S3/Swift API 게이트웨이 인스턴스에서 별도의 공용 방향 IP 주소를 사용해야 합니다.
  4. S3 정적 웹 사이트 부하 분산을 호스팅하는 게이트웨이 인스턴스와 필요한 경우 HAProxy/keepalived를 사용하여 SSL을 종료합니다.

2.15.3. 정적 웹 호스팅 게이트웨이 설정

정적 웹 호스팅의 게이트웨이를 활성화하려면 Ceph 구성 파일을 편집하고 다음 설정을 추가합니다.

[client.rgw.<STATIC-SITE-HOSTNAME>]
...
rgw_enable_static_website = true
rgw_enable_apis = s3, s3website
rgw_dns_name = objects-zonegroup.domain.com
rgw_dns_s3website_name = objects-website-zonegroup.domain.com
rgw_resolve_cname = true
...

rgw_enable_static_website 설정은 true 여야 합니다. rgw_enable_apis 설정은 s3website API를 활성화해야 합니다. rgw_dns_namergw_dns_s3website_name 설정은 정규화된 도메인을 제공해야 합니다. 사이트에서 정식 이름 확장을 사용하는 경우 rgw_resolve_cnametrue로 설정합니다.

중요

rgw_dns_name 및 rgw_dns _s3website_name 의 FQDN은 중복 되지 않아야 합니다.

2.15.4. 정적 웹 호스팅 DNS 구성

다음은 가정 DNS 설정의 예입니다. 여기서 처음 두 줄은 표준 S3 인터페이스를 사용하여 게이트웨이 인스턴스의 도메인을 지정하고 각각 IPv4 및 IPv6 주소를 가리킵니다. 세 번째 줄에서는 정식 이름 확장을 사용하여 S3 버킷에 대한 와일드카드 CNAME 설정을 제공합니다. 네 번째 및 다섯 번째 행은 S3 웹사이트 인터페이스를 사용하여 게이트웨이 인스턴스의 도메인을 지정하고 해당 IPv4 및 IPv6 주소를 각각 가리킵니다.

objects-zonegroup.domain.com. IN    A 192.0.2.10
objects-zonegroup.domain.com. IN AAAA 2001:DB8::192:0:2:10
*.objects-zonegroup.domain.com. IN CNAME objects-zonegroup.domain.com.
objects-website-zonegroup.domain.com. IN    A 192.0.2.20
objects-website-zonegroup.domain.com. IN AAAA 2001:DB8::192:0:2:20
참고

처음 두 행의 IP 주소는 네 번째 및 다섯 번째 행의 IP 주소와 다릅니다.

다중 사이트 구성에서 Ceph Object Gateway를 사용하는 경우 라우팅 솔루션을 사용하여 클라이언트와 가장 가까운 게이트웨이로 트래픽을 라우팅하는 것이 좋습니다.

AWS(Amazon Web Service)에는 호스트 이름과 일치하도록 정적 웹 호스트 버킷이 필요합니다. Ceph는 DNS를 구성하는 몇 가지 다른 방법을 제공하며 프록시에 일치하는 인증서가 있는 경우 HTTPS가 작동합니다.

하위 도메인의 버킷에 대한 호스트 이름

AWS 스타일 S3 하위 도메인을 사용하려면 DNS 항목에서 와일드카드를 사용하고 요청을 버킷으로 리디렉션할 수 있습니다. DNS 항목은 다음과 같을 수 있습니다.

*.objects-website-zonegroup.domain.com. IN CNAME objects-website-zonegroup.domain.com.

다음 방식으로 버킷 이름에 액세스합니다.

http://bucket1.objects-website-zonegroup.domain.com

여기서 버킷 이름은 bucket1 입니다.

호스트 이름을 비일치 버킷으로

Ceph에서는 요청에 버킷 이름을 포함하지 않고 Ceph Object Gateway에 고유한 도메인 이름을 버킷에 매핑할 수 있습니다. 도메인 이름을 사용하여 버킷에 액세스하려면 도메인 이름을 버킷 이름에 매핑합니다. DNS 항목은 다음과 같을 수 있습니다.

www.example.com. IN CNAME bucket2.objects-website-zonegroup.domain.com.

버킷 이름이 bucket2인 위치입니다.

다음 방식으로 버킷에 액세스합니다.

http://www.example.com

CNAME을 사용하여 긴 버킷으로 호스트 이름

AWS에는 일반적으로 버킷 이름이 도메인 이름과 일치해야 합니다. CNAME을 사용하여 정적 웹 호스팅을 위해 DNS를 구성하려면 DNS 항목이 다음과 같을 수 있습니다.

www.example.com. IN CNAME www.example.com.objects-website-zonegroup.domain.com.

다음 방식으로 버킷에 액세스합니다.

http://www.example.com

CNAME없이 긴 버킷으로 호스트 이름

DNS 이름에 SOA,NS,MX 또는 TXT 와 같은 CNAME 이외의 다른 레코드가 포함된 경우 DNS 레코드는 도메인 이름을 IP 주소에 직접 매핑해야 합니다. 예를 들면 다음과 같습니다.

www.example.com. IN A 192.0.2.20
www.example.com. IN AAAA 2001:DB8::192:0:2:20

다음 방식으로 버킷에 액세스합니다.

http://www.example.com

2.15.5. 정적 웹 호스팅 사이트 생성

정적 웹 사이트를 생성하려면 다음 단계를 수행합니다.

  1. S3 버킷을 생성합니다. 버킷 이름은 웹사이트의 도메인 이름과 같습니다. 예를 들어 mysite.com 에는 mysite.com의 버킷 이름이 있을 수 있습니다. 이는 AWS에 필요하지만 Ceph에는 필요하지 않습니다. 자세한 내용은 DNS 설정을 참조하십시오.
  2. 정적 웹사이트 콘텐츠를 버킷에 업로드합니다. 콘텐츠에는 HTML, CSS, 클라이언트측 JavaScript, 이미지, 오디오/비디오 콘텐츠 및 기타 다운로드 가능한 파일이 포함될 수 있습니다. 웹 사이트에는 index.html 파일이 있고 MAY에는 error.html 파일이 있어야 합니다.
  3. 웹 사이트의 콘텐츠를 확인합니다. 이때 버킷 생성자만 컨텐츠에 액세스할 수 있습니다.
  4. 공개적으로 읽을 수 있도록 파일에 대한 권한을 설정합니다.

2.16. 네임스페이스를 NFS-Ganesha로 내보내기

Red Hat Ceph Storage 3 이상에서는 Ceph Object Gateway에서 프로덕션 시스템에 NFS 버전 3 및 NFS 버전 4.1을 사용하여 S3 개체 네임스페이스를 내보낼 수 있는 기능을 제공합니다.

참고

NFS Ganesha 기능은 일반 용도가 아니라 S3 클라우드로만 마이그레이션하는 데만 사용됩니다.

참고

Red Hat Ceph Storage는 NFS 내보내기 버전의 버킷을 지원하지 않습니다.

구현은 UNIX 스타일의 경로 이름을 S3 버킷 및 개체에 매핑하는 AWS(Amazon Web Services) 계층적 네임스페이스 규칙을 준수합니다. NFSv4 의사 루트에 종속되는 연결된 네임스페이스의 최상위 수준은 Ceph Object Gateway S3 버킷으로 구성됩니다. 이 버킷은 NFS 디렉터리로 표시됩니다. 버킷 내의 오브젝트는 S3 규칙에 따라 NFS 파일 및 디렉토리 계층 구조로 제공됩니다. 파일과 디렉토리를 생성하는 작업이 지원됩니다.

참고

하드 또는 소프트 링크 생성 또는 삭제는 지원되지 않습니다. 버킷 또는 디렉토리에서 이름 변경 작업을 수행하는 작업은 NFS를 통해 지원되지 않지만 디렉토리 내에서 또는 파일 시스템과 NFS 마운트 간에 파일 이름 변경이 지원됩니다. NFS를 통해 수행할 때 파일 이름 변경 작업은 대상 디렉터리를 변경하고 일반적으로 전체 readdir 을 새로 고치도록 강제 적용하므로 비용이 더 많이 듭니다.

참고

NFS 마운트를 통해 파일 편집은 지원되지 않습니다.

참고

Ceph 개체 게이트웨이를 사용하려면 애플리케이션이 파일 끝에 0을 순차적으로 기록해야 합니다. 순서가 잘못되면 업로드 작업이 실패합니다. 이 문제를 해결하려면 NFS 공간으로 파일을 복사할 때 cp,cat 또는 rsync 와 같은 유틸리티를 사용하십시오. 항상 동기화 옵션을 사용하여 마운트합니다.

NFS가 포함된 Ceph Object Gateway는 NFS-Ganesha NFS 서버의 프로세스 내 라이브러리 패키징과 NFS-Ganesha NFS 서버의 파일 시스템 추상화 계층(FSAL) 네임스페이스 드라이버를 기반으로 합니다. 런타임 시 NFS가 포함된 Ceph Object Gateway 데몬의 인스턴스는 Civetweb HTTP 서비스가 없는 경우에도 전체 Ceph Object Gateway 데몬을 단일 프로세스로 NFS-Ganesha 인스턴스와 결합합니다. 이 기능을 사용하려면 NFS-Ganesha 버전 2.3.2 이상을 배포합니다.

NFS-Ganesha(nfs-ganesha-rgw ) 인스턴스를 포함할 호스트에서 NFS-Ganesha 인스턴스 시작하기 및 구성의 단계를 수행합니다.

여러 NFS 게이트웨이 실행

각 NFS-Ganesha 인스턴스는 전체 게이트웨이 엔드포인트 역할을 하며, 현재 NFS-Ganesha 인스턴스를 HTTP 서비스를 내보내도록 구성할 수 없는 제한 사항이 있습니다. 일반 게이트웨이 인스턴스와 마찬가지로 여러 NFS-Ganesha 인스턴스를 시작하여 클러스터에서 동일하거나 다른 리소스를 내보낼 수 있습니다. 이렇게 하면 NFS-Ganesha 인스턴스의 클러스터링이 가능합니다. 그러나 고가용성을 의미하는 것은 아닙니다.

일반 게이트웨이 인스턴스와 NFS-Ganesha 인스턴스가 동일한 데이터 리소스가 겹치면 표준 S3 API와 내보낸 NFS-Ganesha 인스턴스를 통해 액세스할 수 있습니다. 동일한 호스트에 Ceph Object Gateway 인스턴스를 사용하여 NFS-Ganesha 인스턴스를 공동 배치할 수 있습니다.

시작하기 전

  1. NFS-Ganesha 실행을 시도하기 전에 NFS-Ganesha를 실행할 모든 호스트에서 실행 중인 커널 NFS 서비스 인스턴스를 비활성화합니다. 다른 NFS 인스턴스가 실행 중인 경우 NFS-Ganesha가 시작되지 않습니다.
  2. root 로 Red Hat Ceph Storage Tools 리포지토리를 활성화합니다.

    Red Hat Enterprise Linux 7

    # subscription-manager repos --enable=rhel-7-server-rhceph-4-tools-rpms

    Red Hat Enterprise Linux 8

    # subscription-manager repos --enable=rhceph-4-tools-for-rhel-8-x86_64-rpms

  3. rpcbind 서비스가 실행 중인지 확인합니다.

    # systemctl start rpcbind
    참고

    rpcbind 를 제공하는 rpcbind 패키지는 일반적으로 기본적으로 설치됩니다. 그렇지 않은 경우 패키지를 먼저 설치합니다.

    NFS에서 rpcbind 를 사용하는 방법에 대한 자세한 내용은 Red Hat Enterprise Linux 7용 스토리지 관리 가이드의 필수 서비스 섹션을 참조하십시오.

  4. nfs-service 서비스가 실행 중인 경우 이를 중지하고 비활성화합니다.

    # systemctl stop nfs-server.service
    # systemctl disable nfs-server.service

NFS-Ganesha 인스턴스 구성

  1. nfs-ganesha-rgw 패키지를 설치합니다.

    # yum install nfs-ganesha-rgw
  2. Ceph Monitor 노드에서 NFS-Ganesha 호스트의 /etc/ceph/ 디렉터리에 있는 Ceph 구성 파일을 복사하고 필요에 따라 편집합니다.

    # scp <mon-host>:/etc/ceph/ceph.conf <nfs-ganesha-rgw-host>:/etc/ceph
    참고

    Ceph 구성 파일에는 유효한 [client.rgw.{instance-name}] 섹션과 rgw _data,keyring 또는 rgw_ frontends 와 같은 다양한 필수 게이트웨이 구성 변수에 대한 해당 매개 변수가 포함되어야 합니다. 유효한 S3 버킷 명명 요구 사항을 준수하지 않는 Swift 컨테이너를 내보내는 경우 Ceph 구성 파일의 [client.rg w] 섹션에 rgw _relaxed_s3_bucket_namestrue 로 설정합니다. 예를 들어 Swift 컨테이너 이름에 밑줄이 포함된 경우 유효한 S3 버킷 이름이 아니며 rgw_relaxed_s3_bucket_namestrue 로 설정되지 않는 한 동기화되지 않습니다. NFS 외부에 개체 및 버킷을 추가하면 해당 오브젝트가 rgw_nfs_namespace_expire_secs 로 설정된 시간에 NFS 네임스페이스에 표시됩니다. 이 시간은 기본적으로 약 5분입니다. Ceph 구성 파일에서 rgw_nfs_namespace_expire_secs 의 기본값을 재정의하여 새로 고침 속도를 변경합니다.

  3. NFS-Ganesha 구성 파일을 엽니다.

    # vim /etc/ganesha/ganesha.conf
  4. FSAL (File System Abstraction Layer) 블록을 사용하여 EXPORT 섹션을 구성합니다. ID, S3 사용자 ID, S3 액세스 키 및 시크릿을 제공합니다. NFSv4의 경우 다음과 같이 표시됩니다.

    EXPORT
    {
            Export_ID={numeric-id};
            Path = "/";
            Pseudo = "/";
            Access_Type = RW;
            SecType = "sys";
            NFS_Protocols = 4;
            Transport_Protocols = TCP;
            Squash = No_Root_Squash;
    
            FSAL {
                    Name = RGW;
                    User_Id = {s3-user-id};
                    Access_Key_Id ="{s3-access-key}";
                    Secret_Access_Key = "{s3-secret}";
            }
    }

    Path(경로 ) 옵션은 Ganesha에 내보내기를 찾을 위치를 지시합니다. VFS FSAL의 경우 서버 네임스페이스 내의 위치입니다. 다른 FSAL의 경우 해당 FSAL 네임스페이스에서 관리하는 파일 시스템 내의 위치일 수 있습니다. 예를 들어 Ceph FSAL을 사용하여 전체 CephFS 볼륨을 내보내는 경우 Path/ 입니다.

    Pseudo 옵션은 NFS v4의 의사 파일 시스템 네임스페이스에 내보내기를 배치할 위치를 Ganesha에 지시합니다. NFS v4는 서버가 내보내기의 실제 위치에 일치하지 않을 수 있는 의사 네임스페이스를 구성하고 해당 의사 파일 시스템의 일부는 NFS 서버 영역 내에만 존재할 수 있으며 실제 디렉터리에 해당하지 않을 수 있음을 지정합니다. 또한 NFS v4 서버는 모든 내보내기를 단일 네임스페이스에 배치합니다. 단일 내보내기를 의사 파일 시스템 루트로 내보낼 수 있지만, 의사 파일 시스템에 여러 개의 공유디렉토리를 배치하는 것이 훨씬 일반적입니다. 기존 VFS에서는 종종 Pseudo 위치가 경로 위치와 동일합니다. /Path (경로)로 사용하고, 여러 공유디렉토리가 필요한 경우 내보내기에는 Pseudo 옵션과 같은 CephFS 내보내기 예제로 돌아갑니다. 예를 들면 /ceph 입니다.

    NFSv3를 지원해야 하는 모든 EXPORT 블록에는 NFS_Protocols 설정에 버전 3이 포함되어야 합니다. 또한 NFSv3는 UDP 전송을 지원하는 마지막 주요 버전입니다. 초기 버전의 표준에는 UDP가 포함되어 있지만 RFC 7530은 사용을 금지합니다. UDP를 활성화하려면 Transport_Protocols 설정에 포함합니다. 예를 들면 다음과 같습니다.

    EXPORT {
    ...
        NFS_Protocols = 3,4;
        Transport_Protocols = UDP,TCP;
    ...
    }

    SecType = sys; 를 설정하면 Kerberos 인증 없이 클라이언트를 연결할 수 있습니다.

    Squash = No_Root_Squash; 를 설정하면 사용자가 NFS 마운트에서 디렉터리 소유권을 변경할 수 있습니다.

    기존 OS 네이티브 NFS 4.1 클라이언트를 사용하는 NFS 클라이언트는 일반적으로 대상 서버의 pseudofs 루트에서 정의한 내보낸 파일 시스템의 연결된 네임스페이스를 확인합니다. Ceph Object Gateway 내보내기가 있을 수 있습니다.

    각 공유디렉토리에는 이름,User_Id,Access_KeySecret_Access_Key 라는 자체 표시가 있으며 지정된 사용자에게 표시되는 오브젝트 네임스페이스의 프록시를 생성합니다.

    내보내기 in ganesha.conf 에는 NFSV4 블록도 포함할 수 있습니다. Red Hat Ceph Storage는 idmapper 프로그램을 설정하는 대신 Allow_Numeric _Owners 및 Only_Numberic_Owners 매개변수를 지원합니다.

    NFSV4 {
        Allow_Numeric_Owners = true;
        Only_Numeric_Owners = true;
    }
  5. NFS_CORE_PARAM 블록 구성.

    NFS_CORE_PARAM{
        mount_path_pseudo = true;
    }

    mount_path_pseudo 구성 설정이 true 로 설정되면 NFS v3 및 NFS v4.x 마운트에서 동일한 서버 측 경로를 사용하여 내보내기에 도달하게 됩니다. 예를 들면 다음과 같습니다.

        mount -o vers=3 <IP ADDRESS>:/export /mnt
        mount -o vers=4 <IP ADDRESS>:/export /mnt
    Path            Pseudo          Tag     Mechanism   Mount
    /export/test1   /export/test1   test1   v3 Pseudo   mount -o vers=3 server:/export/test1
    /export/test1   /export/test1   test1   v3 Tag      mount -o vers=3 server:test1
    /export/test1   /export/test1   test1   v4 Pseudo   mount -o vers=4 server:/export/test1
    /               /export/ceph1   ceph1   v3 Pseudo   mount -o vers=3 server:/export/ceph1
    /               /export/ceph1   ceph1   v3 Tag      mount -o vers=3 server:ceph1
    /               /export/ceph1   ceph1   v4 Pseudo   mount -o vers=4 server:/export/ceph1
    /               /export/ceph2   ceph2   v3 Pseudo   mount -o vers=3 server:/export/ceph2
    /               /export/ceph2   ceph2   v3 Tag      mount -o vers=3 server:ceph2
    /               /export/ceph2   ceph2   v4 Pseudo   mount -o vers=4

    mount_path_pseudo 구성 설정이 false 로 설정되면 NFS v3 마운트는 Path 옵션을 사용하고 NFS v4.x 마운트는 Pseudo 옵션을 사용합니다.

    Path            Pseudo          Tag     Mechanism   Mount
    /export/test1   /export/test1   test1   v3 Path     mount -o vers=3 server:/export/test1
    /export/test1   /export/test1   test1   v3 Tag      mount -o vers=3 server:test1
    /export/test1   /export/test1   test1   v4 Pseudo   mount -o vers=4 server:/export/test1
    /               /export/ceph1   ceph1   v3 Path     mount -o vers=3 server:/
    /               /export/ceph1   ceph1   v3 Tag      mount -o vers=3 server:ceph1
    /               /export/ceph1   ceph1   v4 Pseudo   mount -o vers=4 server:/export/ceph1
    /               /export/ceph2   ceph2   v3 Path     not accessible
    /               /export/ceph2   ceph2   v3 Tag      mount -o vers=3 server:ceph2
    /               /export/ceph2   ceph2   v4 Pseudo   mount -o vers=4 server:/export/ceph2
  6. RGW 섹션을 구성합니다. 인스턴스 이름을 지정하고, Ceph 구성 파일의 경로를 제공하고, 초기화 인수를 지정합니다.

    RGW {
        name = "client.rgw.{instance-name}";
        ceph_conf = "/etc/ceph/ceph.conf";
        init_args = "--{arg}={arg-value}";
    }
  7. /etc/ganesha/ganesha.conf 구성 파일을 저장합니다.
  8. nfs-ganesha 서비스를 활성화하고 시작합니다.

    # systemctl enable nfs-ganesha
    # systemctl start nfs-ganesha
  9. 매우 큰 의사 디렉터리의 경우 ceph.conf 파일에서 구성 가능한 매개변수 rgw_nfs_s3_fast_attrstrue 로 설정하여 네임스페이스를 변경 불가능하고 가속화합니다.

    rgw_nfs_s3_fast_attrs= true
  10. 각 게이트웨이 노드에서 Ceph Object Gateway 서비스를 다시 시작합니다.

    # systemctl restart ceph-radosgw.target

NFSv4 클라이언트 구성

네임스페이스에 액세스하려면 구성된 NFS-Ganesha 내보내기를 로컬 POSIX 네임스페이스의 원하는 위치에 마운트합니다. 앞에서 설명했듯이 이 구현에는 다음과 같은 몇 가지 제한 사항이 있습니다.

  • NFS 4.1 이상 프로토콜 플레이버만 지원됩니다.
  • 쓰기 순서를 적용하려면 sync 마운트 옵션을 사용합니다.

NFS-Ganesha 내보내기를 마운트하려면 클라이언트 호스트의 /etc/fstab 파일에 다음 항목을 추가합니다.

<ganesha-host-name>:/ <mount-point> nfs noauto,soft,nfsvers=4.1,sync,proto=tcp 0 0

NFS-Ganesha 호스트 이름과 클라이언트의 마운트 지점의 경로를 지정합니다.

참고

NFS-Ganesha 내보내기를 성공적으로 마운트하려면 클라이언트에 /sbin/mount.nfs 파일이 있어야 합니다. nfs-tools 패키지는 이 파일을 제공합니다. 대부분의 경우 패키지는 기본적으로 설치됩니다. 그러나 nfs-tools 패키지가 클라이언트에 설치되어 있는지 확인하고 그렇지 않은 경우 설치합니다.

NFS에 대한 자세한 내용은 Red Hat Enterprise Linux 7용 스토리지 관리 가이드의 NFS(Network File System) 장을 참조하십시오.

NFSv3 클라이언트 구성

NFSvers =3noacl 을 마운트 옵션으로 제공하여 NFSv3로 마운트하도록 Linux 클라이언트를 구성할 수 있습니다. UDP를 전송으로 사용하려면 proto=udp 를 마운트 옵션에 추가합니다. 그러나 TCP는 기본 프로토콜입니다.

<ganesha-host-name>:/ <mount-point> nfs noauto,noacl,soft,nfsvers=3,sync,proto=tcp 0 0
참고

마운트가 UDP에서 버전 3을 사용하는 경우 버전 3과 UDP를 사용하여 Transports 설정을 사용하여 NFS Ganesha EXPORT 블록 프로토콜 설정을 구성합니다.

NFSv3에서는 클라이언트 OPEN 및 CLOSE 작업을 파일 서버에 통신하지 않으므로 RGW NFS는 이러한 작업을 사용하여 파일 업로드 트랜잭션의 시작과 끝을 표시할 수 없습니다. 대신 RGW NFS는 첫 번째 쓰기가 오프셋 0의 파일로 전송될 때 새 업로드를 시작하려고 시도하고 일정 기간 동안 파일에 대한 새 쓰기가 표시되지 않은 경우 업로드를 완료합니다.기본적으로 10초. 이 값을 변경하려면 Ceph 구성 파일의 RGW 섹션에서 rgw_nfs_write_completion_interval_s 값을 설정합니다.

3장. 관리

관리자는 radosgw-admin 명령줄 인터페이스를 사용하여 Ceph 개체 게이트웨이를 관리할 수 있습니다.

3.1. 관리 데이터 스토리지

Ceph 개체 게이트웨이는 인스턴스의 영역 구성에 정의된 일련의 풀에 관리 데이터를 저장합니다. 예를 들어 이후 섹션에서 설명하는 버킷, 사용자, 사용자 할당량 및 사용 통계는 Ceph Storage 클러스터의 풀에 저장됩니다. 기본적으로 Ceph Object Gateway는 다음 풀을 만들어 기본 영역에 매핑합니다.

  • .rgw.root
  • .default.rgw.control
  • .default.rgw.meta
  • .default.rgw.log
  • .default.rgw.buckets.index
  • .default.rgw.buckets.data
  • .default.rgw.buckets.non-ec

CRUSH 규칙 세트와 배치 그룹 수를 설정할 수 있도록 이러한 풀을 수동으로 생성해야 합니다. 일반적인 구성에서는 Ceph Object Gateway의 관리 데이터를 저장하는 풀에서 동일한 CRUSH 규칙 세트를 사용하는 경우가 많으며 관리 데이터에 대한 풀 10개가 있으므로 배치 그룹의 수가 줄어듭니다. 자세한 내용은 Red Hat Ceph Storage 4에 대한 Pools 및 Storage Strategies 가이드를 참조하십시오.

배치 그룹 계산에 대한 자세한 내용은 풀 계산기당 Ceph 배치 그룹(PG) 을 참조하십시오. mon_pg_warn_max_per_osd 설정은 풀에 너무 많은 배치 그룹을 할당하는 경우 경고합니다(기본값은 300개). 요구 사항 및 하드웨어 기능에 맞게 값을 조정할 수 있습니다. 여기서 n 은 OSD당 최대 PG 수입니다.

mon_pg_warn_max_per_osd = n

3.2. 스토리지 정책 생성

Ceph 개체 게이트웨이는 배치 대상을 식별하고 배치 대상과 연결된 풀에 버킷과 오브젝트를 저장하여 클라이언트 버킷 및 개체 데이터를 저장합니다. 배치 대상을 구성하지 않고 인스턴스의 영역 구성의 풀에 매핑하지 않으면 Ceph Object Gateway는 기본 대상 및 풀(예: default_placement )을 사용합니다.

스토리지 정책을 사용하면 Ceph Object Gateway 클라이언트에 스토리지 전략(예: SSD, SAS 드라이브, SATA 드라이브)을 대상으로 하는 스토리지 전략에 액세스할 수 있습니다. 지속성, 복제, 삭제 코딩 등을 보장하는 특정 방법. 자세한 내용은 Red Hat Ceph Storage 4에 대한 스토리지 전략 가이드를 참조하십시오.

스토리지 정책을 생성하려면 다음 절차를 따르십시오.

  1. 원하는 스토리지 전략을 사용하여 새 pool .rgw.buckets.special 을 생성합니다. 예를 들어, 삭제 코딩, 특정 CRUSH 규칙 세트, 복제본 수, pg_num 및 pgp_num 개수로 사용자 지정된 풀입니다.
  2. 영역 그룹 구성을 가져와 파일에 저장합니다(예: zonegroup.json ):

    구문

    [root@master-zone]# radosgw-admin zonegroup --rgw-zonegroup=<zonegroup_name> get > zonegroup.json

    예제

    [root@master-zone]# radosgw-admin zonegroup --rgw-zonegroup=default get > zonegroup.json

  3. zonegroup.json 파일의 placement_target 아래에 special-placement 항목을 추가합니다.

    {
    	"name": "default",
    	"api_name": "",
    	"is_master": "true",
    	"endpoints": [],
    	"hostnames": [],
    	"master_zone": "",
    	"zones": [{
    		"name": "default",
    		"endpoints": [],
    		"log_meta": "false",
    		"log_data": "false",
    		"bucket_index_max_shards": 11
    	}],
    	"placement_targets": [{
    		"name": "default-placement",
    		"tags": []
    	}, {
    		"name": "special-placement",
    		"tags": []
    	}],
    	"default_placement": "default-placement"
    }
  4. 수정된 zonegroup.json 파일로 영역 그룹을 설정합니다.

    [root@master-zone]# radosgw-admin zonegroup set < zonegroup.json
  5. 영역 구성을 가져와 파일에 저장합니다(예: zone.json ):

    [root@master-zone]# radosgw-admin zone get > zone.json
  6. 영역 파일을 편집하고 placement_pool 아래에 새 배치 정책 키를 추가합니다.

    {
    	"domain_root": ".rgw",
    	"control_pool": ".rgw.control",
    	"gc_pool": ".rgw.gc",
    	"log_pool": ".log",
    	"intent_log_pool": ".intent-log",
    	"usage_log_pool": ".usage",
    	"user_keys_pool": ".users",
    	"user_email_pool": ".users.email",
    	"user_swift_pool": ".users.swift",
    	"user_uid_pool": ".users.uid",
    	"system_key": {
    		"access_key": "",
    		"secret_key": ""
    	},
    	"placement_pools": [{
    		"key": "default-placement",
    		"val": {
    			"index_pool": ".rgw.buckets.index",
    			"data_pool": ".rgw.buckets",
    			"data_extra_pool": ".rgw.buckets.extra"
    		}
    	}, {
    		"key": "special-placement",
    		"val": {
    			"index_pool": ".rgw.buckets.index",
    			"data_pool": ".rgw.buckets.special",
    			"data_extra_pool": ".rgw.buckets.extra"
    		}
    	}]
    }
  7. 새 영역 구성을 설정합니다.

    [root@master-zone]# radosgw-admin zone set < zone.json
  8. 영역 그룹 맵을 업데이트합니다.

    [root@master-zone]# radosgw-admin period update --commit

    특수 위치 항목은 placement_target 으로 나열됩니다.

요청 시 스토리지 정책을 지정하려면 다음을 수행합니다.

예제:

$ curl -i http://10.0.0.1/swift/v1/TestContainer/file.txt -X PUT -H "X-Storage-Policy: special-placement" -H "X-Auth-Token: AUTH_rgwtxxxxxx"

3.3. 인덱스 없는 버킷 생성

생성된 버킷을 사용하여 개체 인덱스(즉, 인덱스 없는 버킷)를 저장하는 데 버킷 인덱스를 사용하지 않는 배치 대상을 구성할 수 있습니다. 데이터 복제 또는 목록을 사용하지 않는 배치 대상은 인덱스 없는 버킷을 구현할 수 있습니다. 인덱스리스 버킷은 배치 대상이 특정 버킷의 개체를 추적하지 않는 메커니즘을 제공합니다. 이렇게 하면 오브젝트 쓰기가 발생할 때마다 발생하는 리소스 경합이 제거되고 Ceph Object Gateway가 Ceph 스토리지 클러스터에 생성하는 데 필요한 왕복 횟수를 줄입니다. 이는 동시 작업 및 소규모 오브젝트 쓰기 성능에 긍정적인 영향을 줄 수 있습니다.

주의

인덱싱되지 않은 배치 정책이 있는 버킷에서 작업을 수행할 때 Ceph Object Gateway 데몬이 충돌한다는 것을 확인할 수 있습니다. 따라서 Red Hat은 이 배치 정책을 지정하지 않는 것이 좋습니다.

중요

버킷 인덱스는 버킷의 올바른 상태를 반영하지 않으며 이러한 버킷을 나열하면 해당 오브젝트 목록이 올바르게 반환되지 않습니다. 이는 여러 기능에 영향을 미칩니다. 특히 버킷 인덱스는 변경 정보를 저장하는 데 사용되지 않으므로 이러한 버킷은 다중 영역 환경에서 동기화되지 않습니다. 버킷 인덱스가 이 기능에 필요하므로 S3 개체 버전 관리를 인덱스리스 버킷에 사용하지 않는 것이 좋습니다.

참고

인덱스리스 버킷을 사용하면 단일 버킷에 있는 최대 오브젝트 수 제한이 제거됩니다.

참고

인덱스 없는 버킷의 개체는 NFS에서 나열할 수 없습니다.

사전 요구 사항

  • 실행 중이고 정상 상태인 Red Hat Ceph Storage 클러스터.
  • Ceph Object Gateway 소프트웨어 설치.
  • Ceph Object Gateway 노드에 대한 루트 수준 액세스.

절차

  1. 새 배치 대상을 zonegroup에 추가합니다.

    예제

    [root@rgw ~]# radosgw-admin zonegroup placement add --rgw-zonegroup="default" \
      --placement-id="indexless-placement"

  2. 새 배치 대상을 영역에 추가합니다.

    예제

    [root@rgw ~]# radosgw-admin zone placement add --rgw-zone="default" \
       --placement-id="indexless-placement" \
       --data-pool="default.rgw.buckets.data" \
       --index-pool="default.rgw.buckets.index" \
       --data_extra_pool="default.rgw.buckets.non-ec" \
       --placement-index-type="indexless"

  3. zonegroup의 기본 배치를 indexless-placement 로 설정합니다.

    예제

    [root@rgw ~]# radosgw-admin zonegroup placement default --placement-id "indexless-placement"

    이 예에서 indexless-placement 대상에서 생성된 버킷은 인덱스리스 버킷이 됩니다.

  4. 클러스터가 다중 사이트 구성에 있는 경우 기간을 업데이트하고 커밋합니다.

    예제

    [root@rgw ~]# radosgw-admin period update --commit

  5. 변경 사항을 적용하려면 Ceph Object Gateway 데몬을 다시 시작합니다.

    예제

    [root@rgw ~]# systemctl restart ceph-radosgw.target

3.4. 버킷 분할 구성

Ceph 개체 게이트웨이는 버킷 인덱스 데이터를 인덱스 풀(index_pool)에 저장합니다. 기본값은 .rgw.buckets.index 입니다. 클라이언트가 여러 객체를 배치할 때수십만 ~ 수천 개의 객체-버킷당 최대 오브젝트 수에 대한 할당량을 설정하지 않고도 단일 버킷에서 인덱스 풀에 상당한 성능 저하가 발생할 수 있습니다.

버킷 인덱스 분할은 버킷당 많은 객체 수를 허용할 때 성능 병목 현상을 방지하는 데 도움이 됩니다. Red Hat Ceph Storage 4.1부터 기본 버킷 인덱스 shard, bucket_index_max_shards 가 1에서 11로 변경되었습니다. 이러한 변경으로 작은 버킷의 쓰기 처리량이 증가되고 동적 재하이딩이 지연됩니다. 이 변경은 새 버킷과 배포에만 영향을 미칩니다.

Red Hat은 shard 수를 계산된 shard 수에 가장 가까운 정수로 사용할 것을 권장합니다. 소수의 버킷 인덱스 shard는 shard에 버킷 인덱스 항목을 균등하게 분산하는 데 더 효과적입니다. 예를 들어, 이전이 기본이므로 7001 버킷 인덱스 shard가 7000보다 좋습니다.

버킷 인덱스 분할을 구성하려면 다음을 수행합니다.

버킷을 재하드하려면 다음을 수행합니다.

3.4.1. 버킷 분할 제한

중요

다음 제한 사항을 주의하여 사용하십시오. 하드웨어 선택과 관련된 영향이 있으므로 Red Hat 계정 팀과 항상 이러한 요구 사항을 논의해야 합니다.

분할이 필요하기 전에 하나의 버킷에 있는 최대 오브젝트 수

Red Hat은 버킷 인덱스 shard당 최대 102,400개의 오브젝트를 권장합니다. 분할을 최대한 활용하기 위해 Ceph Object Gateway 버킷 인덱스 풀에 충분한 OSD를 제공하여 최대 병렬 처리를 확보합니다.

참고

Ceph OSD는 현재 인덱싱된 스토리지의 키 범위가 200,000을 초과하는 경우 경고합니다. 결과적으로 shard당 200,000개의 객체 수에 접근하면 이러한 경고를 받게 됩니다. 일부 설정에서는 값이 클 수 있으며 조정 가능합니다.

분할을 사용할 때 최대 오브젝트 수

동적 버킷 재하드를 위한 기본 버킷 인덱스 shard 수는 1999입니다. 이 값은 최대 65521 shard로 변경할 수 있습니다. 1999 버킷 인덱스 shard의 값은 버킷에 204697600 개의 총 개체를 제공하며 65521 샤드 값은 6709350400 개체를 제공합니다.

참고

이전 테스트를 기반으로 현재 지원되는 버킷 인덱스 shard의 최대 수는 65521입니다. Red Hat 품질 보증은 버킷 샤딩에서 전체 확장성 테스트를 수행하지 않았습니다.

중요

버킷 인덱스 shard 수가 1999를 초과하면 일반 S3 클라이언트가 버킷 콘텐츠를 나열하지 못할 수 있습니다. 사용자 정의 클라이언트는 순서가 지정되지 않은 목록을 요청할 수 있습니다. 이 목록은 shard 수로 스케일링됩니다.

3.4.2. 버킷 라이프사이클 병렬 스레드 처리

Red Hat Ceph Storage 4.1의 새로운 기능으로 버킷 라이프사이클의 병렬 스레드 처리를 지원합니다. 이러한 병렬화는 Ceph Object Gateway 인스턴스 수로 확장되며 순서 내 인덱스 shard 열거를 숫자 시퀀스로 대체합니다. 기본 잠금 시간 제한이 60초에서 90초로 연장되었습니다. 각 Ceph Object Gateway 인스턴스에 대해 병렬로 실행되도록 라이프사이클 작업자 스레드를 조정하기 위해 새로운 튜닝 가능 옵션이 추가되었습니다.

rgw_lc_max_worker

이 옵션은 동시에 실행할 라이프사이클 작업자 스레드 수를 지정하므로 버킷과 인덱스 shard를 동시에 처리합니다. rgw_lc_max_worker 옵션의 기본값은 3 입니다.

rgw_lc_max_wp_worker

이 옵션은 각 라이프사이클 작업자의 작업 풀에서 스레드 수를 지정합니다. 이 옵션은 각 버킷을 신속하게 처리하는 데 도움이 될 수 있습니다. rgw_lc_max_wp_worker 옵션의 기본값은 3 입니다.

추가 리소스

3.4.3. 간단한 구성에서 버킷 인덱스 공유 구성

모든 새 버킷에서 버킷 인덱스 분할을 활성화하고 구성하려면 rgw_override_bucket_index_max_shards 매개변수를 사용합니다. 매개변수를 다음과 같이 설정합니다.

  • 버킷 인덱스 분할을 비활성화하려면 0 입니다. 이는 기본값입니다.
  • 버킷 샤딩을 활성화하고 최대 shard 수를 설정하는 0 보다 큰 값입니다.

절차

  1. 권장 shard 수를 계산합니다. 이렇게 하려면 다음 공식을 사용하십시오.

    number of objects expected in a bucket / 100,000

    최대 shard 수는 65521입니다.

  2. rgw_override_bucket_index_max_shards 를 Ceph 구성 파일에 추가합니다.

    rgw_override_bucket_index_max_shards = value

    값을 이전 단계에서 계산한 권장 shard 수로 바꿉니다. 예를 들면 다음과 같습니다.

    rgw_override_bucket_index_max_shards = 12
    • Ceph Object Gateway의 모든 인스턴스에 대한 버킷 인덱스 분할을 구성하려면 [global] 섹션에 rgw_override_bucket_index_max_shards 를 추가합니다.
    • Ceph Object Gateway의 특정 인스턴스에 대해서만 버킷 인덱스 분할을 구성하려면 인스턴스에 rgw_override_bucket_index_max_shards 를 추가합니다.
  3. Ceph Object Gateway를 다시 시작합니다.

    # systemctl restart ceph-radosgw.target

3.4.4. 다중 사이트 구성에서 버킷 인덱스 분할 구성

다중 사이트 구성에서 각 영역에 다른 index_pool 설정이 있어 장애 조치(failover)를 관리할 수 있습니다. 하나의 영역 그룹에서 영역에 대한 일관된 shard 수를 구성하려면 해당 영역 그룹의 구성에서 bucket_index_max_shards 설정을 설정합니다. 매개변수를 다음과 같이 설정합니다.

매개변수를 다음과 같이 설정합니다.

  • 0 버킷 인덱스 샤딩을 비활성화하려면 기본값 bucket_index_max_shards11 입니다.
  • 버킷 샤딩을 활성화하고 최대 shard 수를 설정하는 0 보다 큰 값입니다.
참고

인덱스 풀(해당되는 경우)을 SSD 기반 OSD의 CRUSH 규칙 세트에 매핑하면 버킷 인덱스 성능도 도움이 될 수 있습니다.

절차

  1. 권장 shard 수를 계산합니다. 이렇게 하려면 다음 공식을 사용하십시오.

    number of objects expected in a bucket / 100,000

    최대 shard 수는 65521입니다.

  2. 영역 그룹 구성을 zonegroup.json 파일로 추출합니다.

    $ radosgw-admin zonegroup get > zonegroup.json
  3. zonegroup.json 파일에서 명명된 각 영역에 대해 bucket_index_max_shards 설정을 설정합니다.

    bucket_index_max_shards = VALUE

    값을 이전 단계에서 계산한 권장 shard 수로 바꿉니다. 예를 들면 다음과 같습니다.

    bucket_index_max_shards = 12
  4. 영역 그룹을 재설정합니다.

    $ radosgw-admin zonegroup set < zonegroup.json
  5. 기간을 업데이트합니다.

    $ radosgw-admin period update --commit

3.4.5. 동적 버킷 인덱스 복구

동적 버킷 재하드 프로세스에서는 모든 Ceph Object Gateway 버킷을 정기적으로 확인하고 재하이드가 필요한 버킷을 탐지합니다. rgw_max_objs_per_shard 매개변수에 지정된 값보다 버킷이 커지면 Ceph Object Gateway에서 버킷을 백그라운드에서 동적으로 다시 작성합니다. rgw_max_objs_per_shard 의 기본값은 shard당 100k 오브젝트입니다.

참고

기본값은 회전 디스크에 저장된 버킷 인덱스 경험을 기반으로 합니다. 플래시 미디어에서 버킷 인덱스를 사용하는 최신 설정에서 버킷 인덱스 shard당 최대 개체의 값이 높을 수 있습니다.

참고

동적 버킷 인덱스가 업그레이드된 단일 사이트 구성에서 영역 또는 영역 그룹을 변경하지 않고 예상대로 작동합니다. 단일 사이트 구성 요소는 다음 중 하나일 수 있습니다.

  • 영역이 없는 기본 영역 구성입니다.
  • 하나 이상의 영역이 있는 기본이 아닌 구성입니다.
  • 다중 실제 단일 사이트 구성.

절차

  • 동적 버킷 인덱스 재하드를 활성화하려면 다음을 수행합니다.

    1. Ceph 구성 파일의 rgw_dynamic_resharding 설정을 기본값인 true 로 설정합니다.
    2. 선택사항입니다. 필요한 경우 Ceph 구성 파일에서 다음 매개변수를 변경합니다.

      • rgw_reshard_num_logs: 재하드 로그의 shard 수입니다. 기본값은 16 입니다.
      • rgw_reshard_bucket_lock_duration: 재하드 중에 버킷의 잠금 기간입니다. 기본값은 360 초입니다.
      • rgw_dynamic_resharding: 동적 재하드를 활성화 또는 비활성화합니다. 기본값은 true입니다.
      • rgw_max_objs_per_shard: shard당 최대 오브젝트 수입니다. 기본값은 shard당 100000 개 오브젝트입니다.
      • rgw_reshard_thread_interval: reshard 스레드 처리 사이의 최대 시간. 기본값은 600 초입니다.
  • resharding 큐에 버킷을 추가하려면 다음을 수행합니다.

    radosgw-admin reshard add --bucket bucket --num-shards number

    교체:

    • 하드 할 버킷의 이름이 있는 버킷
    • shard 수가 있는 숫자

    예를 들면 다음과 같습니다.

    $ radosgw-admin reshard add --bucket data --num-shards 10
  • resharding 큐를 나열하려면 다음을 수행합니다.

    $ radosgw-admin reshard list
  • 버킷 재하드 상태를 확인하려면 다음을 수행합니다.

    radosgw-admin reshard status --bucket bucket

    교체:

    • 하드 할 버킷의 이름이 있는 버킷

    예를 들면 다음과 같습니다.

    $ radosgw-admin reshard status --bucket data
  • Resharding queue에서 즉시 항목을 처리하려면 다음을 수행합니다.

    $ radosgw-admin reshard process
  • 보류 중인 버킷 재하드를 취소하려면 다음을 수행합니다.

    radosgw-admin reshard cancel --bucket bucket

    교체:

    • 보류 중인 버킷 의 이름으로 버킷

    예를 들면 다음과 같습니다.

    $ radosgw-admin reshard cancel --bucket data
    중요

    보류 중인 재하드 작업만 취소할 수 있습니다. 진행 중인 재하드 작업을 취소하지 마십시오.

  • Red Hat Ceph Storage 3.1 및 이전 버전을 사용하는 경우 Re sharding(기존 인스턴스 정리) 섹션에 설명된 대로 오래된 버킷 항목을 제거합니다.

3.4.6. 수동 버킷 인덱스 복구

버킷이 초기 구성보다 커진 경우 radosgw-admin 버킷 reshard 명령을 사용하여 버킷 인덱스 풀을 다시 작성합니다. 이 명령은 다음과 같습니다.

  • 지정된 버킷에 대한 새 버킷 인덱스 오브젝트 세트를 생성합니다.
  • 이러한 버킷 인덱스 오브젝트에 오브젝트 항목을 배포합니다.
  • 새 버킷 인스턴스를 만듭니다.
  • 모든 새 인덱스 작업이 새 버킷 인덱스를 통과하도록 새 버킷 인스턴스를 버킷에 연결합니다.
  • 이전 및 새 버킷 ID를 명령 출력에 출력합니다.
중요

이 절차는 간단한 구성에서만 사용하십시오. 다중 사이트 구성에서 버킷을 재하드하려면 멀티사이트 를 사용하여 버킷 수동 복구를 참조하십시오.

절차

  1. 원래 버킷 인덱스를 백업합니다.

    radosgw-admin bi list --bucket=bucket > bucket.list.backup

    교체:

    • 하드 할 버킷의 이름이 있는 버킷

    예를 들어 data 라는 버킷의 경우 다음을 입력합니다.

    $ radosgw-admin bi list --bucket=data > data.list.backup
  2. 버킷 인덱스를 다시 작성합니다.

    radosgw-admin bucket reshard --bucket=bucket
    --num-shards=number

    교체:

    • 하드 할 버킷의 이름이 있는 버킷
    • shard 수가 있는 숫자

    예를 들어 data 라는 버킷과 필요한 shard 수가 100인 경우 다음을 입력합니다.

    $ radosgw-admin bucket reshard --bucket=data
    --num-shards=100
  3. Red Hat Ceph Storage 3.1 및 이전 버전을 사용하는 경우 Re sharding(기존 인스턴스 정리) 섹션에 설명된 대로 오래된 버킷 항목을 제거합니다.

3.4.7. 복구 후 오래된 인스턴스 정리

Red Hat Ceph Storage 3.1 및 이전 버전에서는 resharding 프로세스가 오래된 버킷 항목 인스턴스를 자동으로 정리하지 않습니다. 이러한 오래된 인스턴스는 수동으로 정리되지 않은 경우 클러스터의 성능에 영향을 줄 수 있습니다.

중요

다중 사이트 클러스터에서는 이 절차를 단순한 구성에서만 사용하십시오.

사전 요구 사항

  • Ceph 개체 게이트웨이가 설치되어 있어야 합니다.

절차

  1. 오래된 인스턴스를 나열합니다.

    $ radosgw-admin reshard stale-instances list
  2. 오래된 인스턴스를 정리합니다.

    $ radosgw-admin reshard stale-instances rm

3.5. 압축 활성화

Ceph Object Gateway는 Ceph의 압축 플러그인을 사용하여 업로드된 오브젝트의 서버 측 압축을 지원합니다. 여기에는 다음이 포함됩니다.

  • zlib: 지원됨.
  • snappy: 기술 프리뷰.
  • zstd: 기술 프리뷰.
참고

snappyzstd 압축 플러그인은 기술 프리뷰 기능이므로 Red Hat은 아직 품질 보증 테스트를 완료하지 않았기 때문에 완벽하게 지원되지 않습니다.

설정

영역의 배치 대상에서 압축을 활성화하려면 radosgw-admin 영역 배치 수정 명령에 --compression=<type> 옵션을 제공합니다. 압축 유형은 새 오브젝트 데이터를 작성할 때 사용할 압축 플러그인의 이름을 나타냅니다.

각 압축 오브젝트는 압축 유형을 저장합니다. 설정을 변경해도 기존 압축 오브젝트의 압축을 해제하는 기능도 저하되지 않으며, Ceph Object Gateway에서 기존 개체의 압축을 다시 풉니다.

이 압축 설정은 이 배치 대상을 사용하여 버킷에 업로드된 모든 새 개체에 적용됩니다.

영역의 배치 대상에서 압축을 비활성화하려면 radosgw-admin 영역 배치 수정 명령에 --compression=<type> 옵션을 제공하고 빈 문자열 또는 none 을 지정합니다.

예를 들면 다음과 같습니다.

$ radosgw-admin zone placement modify --rgw-zone=default --placement-id=default-placement --compression=zlib
{
...
    "placement_pools": [
        {
            "key": "default-placement",
            "val": {
                "index_pool": "default.rgw.buckets.index",
                "data_pool": "default.rgw.buckets.data",
                "data_extra_pool": "default.rgw.buckets.non-ec",
                "index_type": 0,
                "compression": "zlib"
            }
        }
    ],
...
}

압축을 활성화하거나 비활성화한 후 Ceph Object Gateway 인스턴스를 다시 시작하여 변경 사항이 적용됩니다.

참고

Ceph Object Gateway는 기본 영역과 풀 세트를 만듭니다. 프로덕션 배포의 경우 프로덕션 용 Ceph Object Gateway 가이드, 보다 구체적으로는 Realm 생성 섹션을 참조하십시오. 다중 사이트 도 참조하십시오.

통계

모든 기존 명령 및 API는 압축되지 않은 데이터를 기반으로 개체 및 버킷 크기를 계속 보고하지만 radosgw-admin 버킷 stats 명령에는 지정된 버킷에 대한 압축 통계가 포함됩니다.

$ radosgw-admin bucket stats --bucket=<name>
{
...
    "usage": {
        "rgw.main": {
            "size": 1075028,
            "size_actual": 1331200,
            "size_utilized": 592035,
            "size_kb": 1050,
            "size_kb_actual": 1300,
            "size_kb_utilized": 579,
            "num_objects": 104
        }
    },
...
}

size_utilizedsize_kb_utilized 필드는 각각 바이트와 킬로바이트 단위로 압축 데이터의 총 크기를 나타냅니다.

3.6. 사용자 관리

Ceph Object Storage 사용자 관리는 Ceph Storage 클러스터의 클라이언트 애플리케이션으로 Ceph Object Gateway가 아닌 Ceph Object Storage 서비스의 클라이언트 애플리케이션인 사용자를 나타냅니다. 클라이언트 애플리케이션이 Ceph Object Gateway 서비스와 상호 작용할 수 있도록 사용자를 생성하고 키 및 시크릿에 액세스해야 합니다.

다음 두 가지 사용자 유형이 있습니다.

  • 사용자: 'user'라는 용어는 S3 인터페이스의 사용자를 반영합니다.
  • 하위 사용자: 'subuser'라는 용어는 Swift 인터페이스의 사용자를 반영합니다. 하위 사용자는 사용자와 연결됩니다.

사용자와 하위 사용자를 생성, 수정, 보기, 일시 중단 및 제거할 수 있습니다.

중요

다중 사이트 배포에서 사용자를 관리하는 경우 ALWAYS는 사용자가 master 영역 그룹의 마스터 영역 내의 Ceph Object Gateway 노드에서 radosgw-admin 명령을 실행하여 사용자가 다중 사이트 클러스터 전체에서 동기화되도록 합니다. 보조 영역 또는 보조 영역 그룹에서 다중 사이트 클러스터에서 사용자를 생성, 수정 또는 삭제하지 마십시오. 이 문서에서는 [root@master-zone]# 을 마스터 영역 그룹의 마스터 영역에 있는 호스트에 대한 명령줄 규칙으로 사용합니다.

사용자 및 하위 사용자 ID를 만드는 것 외에도 사용자의 표시 이름과 이메일 주소를 추가할 수 있습니다. 키와 시크릿을 지정하거나 키와 시크릿을 자동으로 생성할 수 있습니다. 키를 생성하거나 지정할 때 사용자 ID는 S3 키 유형에 해당하고 하위 사용자 ID는 swift 키 유형에 해당합니다. Swift 키에는 읽기,쓰기, 읽기, 전체 의 액세스 수준도 있습니다.

사용자 관리 명령줄 구문은 일반적으로 user <command> <user-id> 패턴을 따릅니다. 여기서 <user-id>--uid= 옵션 다음에 사용자 ID(S3) 또는 --subuser= 옵션 뒤에 사용자 이름(Swift)이 옵니다. 예를 들면 다음과 같습니다.

[root@master-zone]# radosgw-admin user <create|modify|info|rm|suspend|enable|check|stats> <--uid={id}|--subuser={name}> [other-options]

실행하는 명령에 따라 추가 옵션이 필요할 수도 있습니다.

3.6.1. 멀티 테넌시

Red Hat Ceph Storage 2 이상에서 Ceph Object Gateway는 S3 및 Swift API 모두에 대해 멀티 테넌시를 지원합니다. 여기서 각 사용자 및 버킷은 "테넌트"에 있습니다. 멀티 테넌시는 여러 테넌트가 "테스트", "main" 등과 같은 일반적인 버킷 이름을 사용할 때 네임스페이스 충돌을 방지합니다.

각 사용자 및 버킷은 테넌트 아래에 있습니다. 이전 버전과의 호환성을 위해 이름이 비어 있는 "기존" 테넌트가 추가됩니다. 특히 테넌트를 지정하지 않고 버킷을 참조할 때마다 Swift API는 "기존" 테넌트를 가정합니다. 기존 사용자는 또한 레거시 테넌트 아래에 저장되므로 이전 릴리스와 동일한 방식으로 버킷 및 개체에 액세스합니다.

따라서 테넌트에는 어떤 작업도 없습니다. 사용자를 관리할 때 필요에 따라 표시 및 사라집니다. 명시적 테넌트가 있는 사용자를 생성, 수정 및 제거하려면 추가 옵션 --tenant 이 제공되거나 radosgw-admin 명령의 매개 변수에 "<tenant>$<user>" 구문을 사용합니다.

S3에 대한 testx$tester 사용자를 만들려면 다음을 실행합니다.

[root@master-zone]# radosgw-admin --tenant testx --uid tester \
                    --display-name "Test User" --access_key TESTER \
                    --secret test123 user create

Swift에 대한 testx$tester 사용자를 만들려면 다음 중 하나를 실행합니다.

[root@master-zone]# radosgw-admin --tenant testx --uid tester \
                    --display-name "Test User" --subuser tester:swift \
                    --key-type swift --access full subuser create

[root@master-zone]# radosgw-admin key create --subuser 'testx$tester:swift' \
                    --key-type swift --secret test123
참고

명시적 테넌트가 있는 하위 사용자를 쉘에 따옴표로 묶어야 합니다.

3.6.2. 사용자 만들기

user create 명령을 사용하여 S3-interface 사용자를 생성합니다. 사용자 ID와 표시 이름을 지정해야 합니다. 이메일 주소도 지정할 수 있습니다. 키 또는 시크릿을 지정하지 않으면 radosgw-admin 이 자동으로 생성됩니다. 그러나 생성된 키/시크릿 쌍을 사용하지 않으려면 키 및/또는 시크릿을 지정할 수 있습니다.

[root@master-zone]# radosgw-admin user create --uid=<id> \
[--key-type=<type>] [--gen-access-key|--access-key=<key>]\
[--gen-secret | --secret=<key>] \
[--email=<email>] --display-name=<name>

예를 들면 다음과 같습니다.

[root@master-zone]# radosgw-admin user create --uid=janedoe --display-name="Jane Doe" --email=jane@example.com
{ "user_id": "janedoe",
  "display_name": "Jane Doe",
  "email": "jane@example.com",
  "suspended": 0,
  "max_buckets": 1000,
  "auid": 0,
  "subusers": [],
  "keys": [
        { "user": "janedoe",
          "access_key": "11BS02LGFB6AL6H1ADMW",
          "secret_key": "vzCEkuryfn060dfee4fgQPqFrncKEIkh3ZcdOANY"}],
  "swift_keys": [],
  "caps": [],
  "op_mask": "read, write, delete",
  "default_placement": "",
  "placement_tags": [],
  "bucket_quota": { "enabled": false,
      "max_size_kb": -1,
      "max_objects": -1},
  "user_quota": { "enabled": false,
      "max_size_kb": -1,
      "max_objects": -1},
  "temp_url_keys": []}
중요

키 출력을 확인합니다. 경우에 따라 radosgw-admin 이 JSON 이스케이프(\)문자를생성하며 일부 클라이언트는 JSON 이스케이프 문자를 처리하는 방법을 모르는 경우가 있습니다. 해결 방법에는 JSON 이스케이프 문자(\)를 제거하고 문자열을 따옴표로 캡슐화하여 키를 다시 생성하고 JSON 이스케이프 문자가 없는지 확인하거나 키와 시크릿을 수동으로 지정하는 작업이 포함됩니다.

3.6.3. 하위 사용자 만들기

하위 사용자(Swift 인터페이스)를 만들려면 사용자 ID(--uid={username}), 하위 사용자 ID 및 하위 사용자의 액세스 수준을 지정해야 합니다. 키 또는 시크릿을 지정하지 않으면 radosgw-admin 이 자동으로 생성됩니다. 그러나 생성된 키/시크릿 쌍을 사용하지 않으려면 키 및/또는 시크릿을 지정할 수 있습니다.

참고

full 에도 액세스 제어 정책이 포함되어 있으므로 full는 읽기 가 아닙니다.

[root@master-zone]# radosgw-admin subuser create --uid={uid} --subuser={uid} --access=[ read | write | readwrite | full ]

예를 들면 다음과 같습니다.

[root@master-zone]# radosgw-admin subuser create --uid=janedoe --subuser=janedoe:swift --access=full
{ "user_id": "janedoe",
  "display_name": "Jane Doe",
  "email": "jane@example.com",
  "suspended": 0,
  "max_buckets": 1000,
  "auid": 0,
  "subusers": [
        { "id": "janedoe:swift",
          "permissions": "full-control"}],
  "keys": [
        { "user": "janedoe",
          "access_key": "11BS02LGFB6AL6H1ADMW",
          "secret_key": "vzCEkuryfn060dfee4fgQPqFrncKEIkh3ZcdOANY"}],
  "swift_keys": [],
  "caps": [],
  "op_mask": "read, write, delete",
  "default_placement": "",
  "placement_tags": [],
  "bucket_quota": { "enabled": false,
      "max_size_kb": -1,
      "max_objects": -1},
  "user_quota": { "enabled": false,
      "max_size_kb": -1,
      "max_objects": -1},
  "temp_url_keys": []}

3.6.4. 사용자 정보 가져오기

사용자에 대한 정보를 얻으려면 사용자 정보와 사용자 ID(--uid={username})를 지정합니다.

[root@master-zone]# radosgw-admin user info --uid=janedoe

테넌트된 사용자에 대한 정보를 얻으려면 사용자 ID와 테넌트의 이름을 둘 다 지정합니다.

[root@master-zone]# radosgw-admin user info --uid=janedoe --tenant=test

3.6.5. 사용자 정보 수정

사용자에 대한 정보를 수정하려면 사용자 ID(--uid={username})와 수정할 속성을 지정해야 합니다. 일반적인 수정 사항은 키와 시크릿, 이메일 주소, 표시 이름 및 액세스 수준입니다. 예를 들면 다음과 같습니다.

[root@master-zone]# radosgw-admin user modify --uid=janedoe --display-name="Jane E. Doe"

하위 사용자 값을 수정하려면 하위 사용자 수정 및 하위 사용자 ID를 지정합니다. 예를 들면 다음과 같습니다.

[root@master-zone]# radosgw-admin subuser modify --subuser=janedoe:swift --access=full

3.6.6. 사용자 활성화 및 일시 중지

사용자를 생성하면 기본적으로 사용자가 활성화됩니다. 그러나 사용자 권한을 중지하고 나중에 다시 활성화할 수 있습니다. 사용자를 일시 중단하려면 사용자 일시 중지 및 사용자 ID를 지정합니다.

[root@master-zone]# radosgw-admin user suspend --uid=johndoe

일시 중단된 사용자를 다시 활성화하려면 user enable 및 user ID를 지정합니다. :

[root@master-zone]# radosgw-admin user enable --uid=johndoe
참고

사용자를 비활성화하면 하위 사용자가 비활성화됩니다.

3.6.7. 사용자 제거

사용자를 제거하면 사용자와 하위 사용자가 시스템에서 제거됩니다. 그러나 원하는 경우 하위 사용자만 제거할 수 있습니다. 사용자(및 하위 사용자)를 제거하려면 사용자 rm 과 사용자 ID를 지정합니다.

[root@master-zone]# radosgw-admin user rm --uid=<uid> [--purge-keys] [--purge-data]

예를 들면 다음과 같습니다.

[root@master-zone]# radosgw-admin user rm --uid=johndoe --purge-data

하위 사용자만 제거하려면 subuser rm 및 subuser 이름을 지정합니다.

[root@master-zone]# radosgw-admin subuser rm --subuser=johndoe:swift --purge-keys

옵션은 다음과 같습니다.

  • 데이터 삭제: purge -data 옵션은 UID와 연결된 모든 데이터를 삭제합니다.
  • 키 삭제: purge -keys 옵션은 UID와 연결된 모든 키를 제거합니다.

3.6.8. 하위 사용자 제거

하위 사용자를 제거하면 Swift 인터페이스에 대한 액세스를 제거합니다. 사용자는 시스템에 남아 있게 됩니다. Ceph Object Gateway(오브젝트 게이트웨이) 하위 사용자를 제거하려면 subuser rm 및 subuser ID를 지정합니다.

[root@master-zone]# radosgw-admin subuser rm --subuser=johndoe:test

옵션은 다음과 같습니다.

  • 키 삭제: purge -keys 옵션은 UID와 연결된 모든 키를 제거합니다.

3.6.9. 사용자 이름 변경

사용자의 이름을 변경하려면 radosgw-admin 사용자 rename 명령을 사용합니다. 이 명령이 사용하는 시간은 사용자가 보유한 버킷 및 오브젝트 수에 따라 다릅니다. 숫자가 크면 screen 패키지에서 제공하는 Screen 유틸리티에서 명령을 사용하는 것이 좋습니다.

사전 요구 사항

  • 작동 중인 Ceph 클러스터
  • root 또는 sudo 액세스
  • 설치된 Ceph Object Gateway

절차

  1. 사용자 이름을 변경합니다.

    radosgw-admin user rename --uid=current-user-name --new-uid=new-user-name

    예를 들어 user1의 이름을 user 2 로 변경하려면 다음을 수행합니다.

    # radosgw-admin user rename --uid=user1 --new-uid=user2
    
    {
        "user_id": "user2",
        "display_name": "user 2",
        "email": "",
        "suspended": 0,
        "max_buckets": 1000,
        "auid": 0,
        "subusers": [],
        "keys": [
            {
                "user": "user2",
                "access_key": "59EKHI6AI9F8WOW8JQZJ",
                "secret_key": "XH0uY3rKCUcuL73X0ftjXbZqUbk0cavD11rD8MsA"
            }
        ],
        "swift_keys": [],
        "caps": [],
        "op_mask": "read, write, delete",
        "default_placement": "",
        "placement_tags": [],
        "bucket_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "user_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "temp_url_keys": [],
        "type": "rgw"
    }

    사용자가 테넌트 내에 있는 경우 사용자 이름과 테넌트를 둘 다 지정합니다.

    구문

    radosgw-admin user rename --uid user-name --new-uid new-user-name --tenant tenant

    예를 들어 테스트 테넌트 내에서 user1 의 이름을 user2 로 변경하려면 다음을 수행합니다.

    예제

    # radosgw-admin user rename --uid=test$user1 --new-uid=test$user2 --tenant test
    
    1000 objects processed in tvtester1. Next marker 80_tVtester1_99
    2000 objects processed in tvtester1. Next marker 64_tVtester1_44
    3000 objects processed in tvtester1. Next marker 48_tVtester1_28
    4000 objects processed in tvtester1. Next marker 2_tVtester1_74
    5000 objects processed in tvtester1. Next marker 14_tVtester1_53
    6000 objects processed in tvtester1. Next marker 87_tVtester1_61
    7000 objects processed in tvtester1. Next marker 6_tVtester1_57
    8000 objects processed in tvtester1. Next marker 52_tVtester1_91
    9000 objects processed in tvtester1. Next marker 34_tVtester1_74
    9900 objects processed in tvtester1. Next marker 9_tVtester1_95
    1000 objects processed in tvtester2. Next marker 82_tVtester2_93
    2000 objects processed in tvtester2. Next marker 64_tVtester2_9
    3000 objects processed in tvtester2. Next marker 48_tVtester2_22
    4000 objects processed in tvtester2. Next marker 32_tVtester2_42
    5000 objects processed in tvtester2. Next marker 16_tVtester2_36
    6000 objects processed in tvtester2. Next marker 89_tVtester2_46
    7000 objects processed in tvtester2. Next marker 70_tVtester2_78
    8000 objects processed in tvtester2. Next marker 51_tVtester2_41
    9000 objects processed in tvtester2. Next marker 33_tVtester2_32
    9900 objects processed in tvtester2. Next marker 9_tVtester2_83
    {
        "user_id": "test$user2",
        "display_name": "User 2",
        "email": "",
        "suspended": 0,
        "max_buckets": 1000,
        "auid": 0,
        "subusers": [],
        "keys": [
            {
                "user": "test$user2",
                "access_key": "user2",
                "secret_key": "123456789"
            }
        ],
        "swift_keys": [],
        "caps": [],
        "op_mask": "read, write, delete",
        "default_placement": "",
        "placement_tags": [],
        "bucket_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "user_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "temp_url_keys": [],
        "type": "rgw"
    }

  2. 사용자의 이름이 성공적으로 변경되었는지 확인합니다.

    구문

    radosgw-admin user info --uid=new-user-name

    예를 들면 다음과 같습니다.

    예제

    # radosgw-admin user info --uid=user2

    사용자가 테넌트 내에 있는 경우 테넌트$사용자 이름 형식을 사용하십시오.

    radosgw-admin user info --uid=tenant$new-user-name
    # radosgw-admin user info --uid=test$user2

추가 리소스

  • screen(1) 매뉴얼 페이지

3.6.10. 키 만들기

사용자에 대한 키를 생성하려면 키 생성을 지정해야 합니다. 사용자의 경우 사용자 ID 및 s3 키 유형을 지정합니다. 하위 사용자에 대한 키를 만들려면 하위 사용자 ID와 swift 키 유형을 지정해야 합니다. 예를 들면 다음과 같습니다.

[root@master-zone]# radosgw-admin key create --subuser=johndoe:swift --key-type=swift --gen-secret
{ "user_id": "johndoe",
  "rados_uid": 0,
  "display_name": "John Doe",
  "email": "john@example.com",
  "suspended": 0,
  "subusers": [
     { "id": "johndoe:swift",
       "permissions": "full-control"}],
  "keys": [
    { "user": "johndoe",
      "access_key": "QFAMEDSJP5DEKJO0DDXY",
      "secret_key": "iaSFLDVvDdQt6lkNzHyW4fPLZugBAI1g17LO0+87"}],
  "swift_keys": [
    { "user": "johndoe:swift",
      "secret_key": "E9T2rUZNu2gxUjcwUBO8n\/Ev4KX6\/GprEuH4qhu1"}]}

3.6.11. 액세스 키 추가 및 제거

사용자 및 하위 사용자는 S3 및 Swift 인터페이스를 사용하려면 액세스 키가 있어야 합니다. 사용자 또는 하위 사용자를 생성하고 액세스 키와 시크릿을 지정하지 않으면 키와 시크릿이 자동으로 생성됩니다. 키를 생성하고 액세스 키 및/또는 시크릿을 지정하거나 생성할 수 있습니다. 액세스 키와 시크릿을 제거할 수도 있습니다. 옵션은 다음과 같습니다.

  • --secret=<key> 는 비밀 키를 지정합니다(예: 수동으로 생성).
  • --Gen-access-key 는 임의 액세스 키를 생성합니다(기본적으로 S3 사용자의 경우).
  • --Gen-secret 은 임의 비밀 키를 생성합니다.
  • --key-type=<type> 은 키 유형을 지정합니다. 옵션은 swift, s3입니다.

키를 추가하려면 사용자를 지정합니다.

[root@master-zone]# radosgw-admin key create --uid=johndoe --key-type=s3 --gen-access-key --gen-secret

키와 시크릿을 지정할 수도 있습니다.

액세스 키를 제거하려면 사용자와 키를 지정해야 합니다.

  1. 특정 사용자에 대한 액세스 키를 찾습니다.

    [root@master-zone]# radosgw-admin user info --uid=<testid>

    액세스 키는 출력의 "access_key" 값입니다. 예를 들면 다음과 같습니다.

    $ radosgw-admin user info --uid=johndoe
    {
        "user_id": "johndoe",
        ...
        "keys": [
            {
                "user": "johndoe",
                "access_key": "0555b35654ad1656d804",
                "secret_key": "h7GhxuBLTrlhVUyxSPUKUV8r/2EI4ngqJxD7iBdBYLhwluN30JaT3Q=="
            }
        ],
        ...
    }
  2. 액세스 키를 제거하려면 사용자 ID와 이전 단계의 액세스 키를 지정합니다.

    [root@master-zone]# radosgw-admin key rm --uid=<user_id> --access-key <access_key>

    예를 들면 다음과 같습니다.

    [root@master-zone]# radosgw-admin key rm --uid=johndoe --access-key 0555b35654ad1656d804

3.6.12. 관리 기능 추가 및 제거

Ceph Storage 클러스터는 사용자가 REST API를 통해 관리 기능을 실행할 수 있는 관리 API를 제공합니다. 기본적으로 사용자는 이 API에 액세스할 수 없습니다. 사용자가 관리 기능을 수행할 수 있도록 하려면 사용자에게 관리 기능을 제공합니다.

사용자에게 관리 기능을 추가하려면 다음을 실행합니다.

[root@master-zone]# radosgw-admin caps add --uid={uid} --caps={caps}

사용자, 버킷, 메타데이터 및 사용(utilization)에 읽기, 쓰기 또는 모든 기능을 추가할 수 있습니다. 예를 들면 다음과 같습니다.

--caps="[users|buckets|metadata|usage|zone]=[*|read|write|read, write]"

예를 들면 다음과 같습니다.

[root@master-zone]# radosgw-admin caps add --uid=johndoe --caps="users=*"

사용자의 관리 기능을 제거하려면 다음을 실행합니다.

[root@master-zone]# radosgw-admin caps remove --uid=johndoe --caps={caps}

3.7. 할당량 관리

Ceph 개체 게이트웨이를 사용하면 사용자가 소유한 사용자와 버킷에 할당량을 설정할 수 있습니다. 쿼터에는 버킷의 최대 오브젝트 수와 최대 스토리지 크기(MB)가 포함됩니다.

  • 버킷: bucket 옵션을 사용하면 사용자가 소유한 버킷의 할당량을 지정할 수 있습니다.
  • 최대 객체: max -objects 설정을 사용하면 최대 오브젝트 수를 지정할 수 있습니다. 음수 값은 이 설정을 비활성화합니다.
  • 최대 크기: max -size 옵션을 사용하면 최대 바이트 수에 대한 할당량을 지정할 수 있습니다. 음수 값은 이 설정을 비활성화합니다.
  • 할당량 범위: quota-scope 옵션은 할당량의 범위를 설정합니다. 옵션은 버킷사용자입니다. 버킷 할당량은 사용자가 소유한 버킷에 적용됩니다. 사용자 할당량은 사용자에게 적용됩니다.
중요

오브젝트 수가 많은 버킷으로 인해 심각한 성능 문제가 발생할 수 있습니다. 하나의 버킷에서 권장되는 최대 오브젝트 수는 100,000개입니다. 이 수를 늘리려면 버킷 인덱스 분할을 구성합니다. 자세한 내용은 3.4절. “버킷 분할 구성” 을 참조하십시오.

3.7.1. 사용자 할당량 설정

할당량을 활성화하기 전에 먼저 할당량 매개 변수를 설정해야 합니다. 예를 들면 다음과 같습니다.

[root@master-zone]# radosgw-admin quota set --quota-scope=user --uid=<uid> [--max-objects=<num objects>] [--max-size=<max size>]

예를 들면 다음과 같습니다.

radosgw-admin quota set --quota-scope=user --uid=johndoe --max-objects=1024 --max-size=1024

num 오브젝트 및 / 또는 max 크기의 음수 값은 특정 할당량 특성 확인이 비활성화되었음을 나타냅니다.

3.7.2. 사용자 할당량 활성화 및 비활성화

사용자 할당량을 설정하고 나면 활성화할 수 있습니다. 예를 들면 다음과 같습니다.

[root@master-zone]# radosgw-admin quota enable --quota-scope=user --uid=<uid>

활성화된 사용자 할당량을 비활성화할 수 있습니다. 예를 들면 다음과 같습니다.

[root@master-zone]# radosgw-admin quota disable --quota-scope=user --uid=<uid>

3.7.3. 버킷 할당량 설정

버킷 할당량은 지정된 uid 가 소유한 버킷에 적용됩니다. 해당 사용자는 사용자와 독립적입니다.

구문

radosgw-admin quota set --uid=USER_ID --quota-scope=bucket --bucket=BUCKET_NAME [--max-objects=NUMBER_OF_OBJECTS] [--max-size=MAXIMUM_SIZE_IN_BYTES]

NUMBER_OF_OBJECTS,MAXIMUM_SIZE_IN_BYTES 의 음수 값 또는 두 가지 모두 특정 할당량 특성 확인이 비활성화되어 있음을 나타냅니다.

3.7.4. 버킷 할당량 활성화 및 비활성화

버킷 할당량을 설정하고 나면 활성화할 수 있습니다. 예를 들면 다음과 같습니다.

[root@master-zone]# radosgw-admin quota enable --quota-scope=bucket --uid=<uid>

활성화된 버킷 할당량을 비활성화할 수 있습니다. 예를 들면 다음과 같습니다.

[root@master-zone]# radosgw-admin quota disable --quota-scope=bucket --uid=<uid>

3.7.5. 할당량 설정 가져오기

사용자 정보 API를 통해 각 사용자의 할당량 설정에 액세스할 수 있습니다. CLI 인터페이스를 사용하여 사용자 할당량 설정 정보를 읽으려면 다음을 실행합니다.

# radosgw-admin user info --uid=<uid>

테넌트된 사용자의 할당량 설정을 가져오려면 사용자 ID와 테넌트 이름을 지정합니다.

+ radosgw-admin user info --uid=_user-id_ --tenant=_tenant_

3.7.6. 할당량 통계 업데이트

할당량 통계가 비동기적으로 업데이트됩니다. 모든 사용자와 모든 버킷에 대한 할당량 통계를 수동으로 업데이트하여 최신 할당량 통계를 검색할 수 있습니다.

[root@master-zone]# radosgw-admin user stats --uid=<uid> --sync-stats

3.7.7. 사용자 할당량 사용 통계 가져오기

사용자가 사용한 할당량의 양을 보려면 다음을 실행합니다.

# radosgw-admin user stats --uid=<uid>
참고

최신 데이터를 받으려면 --sync -stats 옵션을 사용하여 radosgw- admin 사용자 통계를 실행해야 합니다.

3.7.8. 할당량 캐시

할당량 통계는 각 Ceph 게이트웨이 인스턴스에 대해 캐시됩니다. 여러 인스턴스가 있는 경우 각 인스턴스에 할당량에 대한 다른 보기가 있으므로 캐시에서 할당량이 완전히 적용되지 않도록 유지할 수 있습니다. 이를 제어하는 옵션은 rgw 버킷 할당량 ttl,rgw 사용자 할당량 동기화 간격rgw 사용자 할당량 동기화 간격입니다. 이러한 값이 클수록 할당량 작업이 더 효율적이지만 동기화되지 않는 여러 인스턴스는 가 됩니다. 이 값이 낮을수록 여러 인스턴스를 완벽하게 적용할 수 있습니다. 세 개 모두 0이면 할당량 캐싱이 효과적으로 비활성화되고 여러 인스턴스에 완벽한 할당량 적용이 가능합니다. 이러한 옵션에 대한 자세한 내용은 4장. 설정 참조 을 참조하십시오.

3.7.9. 글로벌 할당량 읽기 및 작성

영역 그룹 맵에서 할당량 설정을 읽고 쓸 수 있습니다. 영역 그룹 맵을 가져오려면 다음을 수행합니다.

[root@master-zone]# radosgw-admin global quota get

할당량 세트, 할당량활성화할당량 비활성화 명령의 전역 할당량 설정을 사용하여 글로벌 할당량 설정을 조작할 수 있습니다.

[root@master-zone]# radosgw-admin global quota set --quota-scope bucket --max-objects 1024
[root@master-zone]# radosgw-admin global quota enable --quota-scope bucket
참고

영역 및 기간이 있는 다중 사이트 구성에서는 period update --commit 를 사용하여 글로벌 할당량에 대한 변경 사항을 커밋해야 합니다. 기간이 없는 경우 변경 사항을 적용하려면 Ceph 개체 게이트웨이를 다시 시작해야 합니다.

3.8. 사용법

Ceph Object Gateway는 각 사용자의 사용량을 기록합니다. 날짜 범위 내에서 사용자 사용량도 추적할 수 있습니다.

옵션은 다음과 같습니다.

  • 시작 날짜: start -date 옵션을 사용하면 특정 시작 날짜(형식: yyyy-mm-dd[HH:MM:SS] )에서 사용 통계를 필터링할 수 있습니다.
  • 종료 날짜: end-date 옵션을 사용하면 특정 날짜까지 사용량을 필터링할 수 있습니다(형식: y yy-mm-dd[HH:MM:SS]).
  • 로그 항목: show-log-entries 옵션을 사용하면 사용 통계를 사용하여 로그 항목을 포함할지 여부를 지정할 수 있습니다(옵션: true | false옵션).
참고

몇 분 및 초로 시간을 지정할 수 있지만 1시간 해상도로 저장됩니다.

3.8.1. 사용량 표시

사용량 통계를 표시하려면 사용량을 show 로 지정합니다. 특정 사용자의 사용량을 표시하려면 사용자 ID를 지정해야 합니다. 시작 날짜, 종료 날짜 및 로그 항목을 표시할지 여부를 지정할 수도 있습니다.

# radosgw-admin usage show \
                --uid=johndoe --start-date=2012-03-01 \
                --end-date=2012-04-01

사용자 ID를 생략하여 모든 사용자에 대한 사용 정보에 대한 요약을 표시할 수도 있습니다.

# radosgw-admin usage show --show-log-entries=false

3.8.2. Trim 사용

사용량 로그가 과도하게 사용되면서 스토리지 공간 확보가 시작될 수 있습니다. 모든 사용자와 특정 사용자의 사용 로그를 트리밍할 수 있습니다. 트리밍 작업에 대한 날짜 범위를 지정할 수도 있습니다.

[root@master-zone]# radosgw-admin usage trim --start-date=2010-01-01 \
                    --end-date=2010-12-31

[root@master-zone]# radosgw-admin usage trim --uid=johndoe
[root@master-zone]# radosgw-admin usage trim --uid=johndoe --end-date=2013-12-31

3.9. 버킷 관리

스토리지 관리자는 Ceph Object Gateway를 사용할 때 사용자 간에 이동하고 이름을 변경하여 버킷을 관리할 수 있습니다. 또한 스토리지 클러스터의 수명 동안 발생할 수 있는 Ceph Object Gateway 내에서 고아 또는 누수 개체를 찾을 수 있습니다.

3.9.1. 버킷 이동

radosgw-admin 버킷 유틸리티는 사용자 간에 버킷을 이동하는 기능을 제공합니다. 이를 수행하려면 버킷을 새 사용자에게 연결하고 버킷의 소유권을 새 사용자에게 변경합니다.

버킷을 이동할 수 있습니다.

3.9.1.1. 사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터
  • Ceph Object Gateway가 설치되어 있습니다.
  • 버킷
  • 테넌트 및 비 테넌트 사용자

3.9.1.2. 테넌트가 아닌 사용자 간에 버킷 이동

radosgw-admin 버킷 chown 명령은 버킷과 포함된 모든 오브젝트의 소유권을 한 사용자의 다른 사용자로 변경할 수 있는 기능을 제공합니다. 이를 수행하려면 현재 사용자의 버킷을 연결 해제하고 새 사용자에게 연결한 다음 버킷의 소유권을 새 사용자로 변경합니다.

절차

  1. 버킷을 새 사용자에게 연결합니다.

    radosgw-admin bucket link --uid=user --bucket=bucket

    교체:

    • 버킷 연결할 사용자의 사용자 이름과 사용자 이름이 있는 사용자
    • 버킷 이름으로 버킷

    예를 들어 데이터 버킷을 user2 라는 사용자에 연결하려면 다음을 수행합니다.

    # radosgw-admin bucket link --uid=user2 --bucket=data
  2. 버킷이 user2 에 성공적으로 연결되었는지 확인합니다.

    # radosgw-admin bucket list --uid=user2
    [
        "data"
    ]
  3. 버킷의 소유권을 새 사용자로 변경합니다.

    radosgw-admin bucket chown --uid=user --bucket=bucket

    교체:

    • 버킷 소유권 다음으로 변경하기 위해 사용자의 사용자 이름이 있는 사용자
    • 버킷 이름으로 버킷

    예를 들어 데이터 버킷의 소유권을 user2 로 변경하려면 다음을 수행합니다.

    # radosgw-admin bucket chown --uid=user2 --bucket=data
  4. 다음 명령의 출력에서 owner 행을 확인하여 데이터 버킷의 소유권이 성공적으로 변경되었는지 확인합니다.

    # radosgw-admin bucket list --bucket=data

3.9.1.3. 테넌트 사용자 간에 버킷 이동

테넌트된 사용자 간에 버킷을 이동할 수 있습니다.

절차

  1. 버킷을 새 사용자에게 연결합니다.

    radosgw-admin bucket link --bucket=current-tenant/bucket --uid=new-tenant$user

    교체:

    • 버킷이 인 테넌트 이름이 current-tenant
    • 연결할 버킷 의 이름과 버킷
    • 새 사용자가 인 테넌트의 이름이 new-tenant
    • 사용자의 사용자 이름이 있는 사용자

    예를 들어 test 테넌트의 데이터 버킷을 test 2 테넌트의 user2 사용자에게 연결하려면 다음을 수행합니다.

    # radosgw-admin bucket link --bucket=test/data --uid=test2$user2
  2. 버킷이 user2 에 성공적으로 연결되었는지 확인합니다.

    # radosgw-admin bucket list --uid=test$user2
    [
        "data"
    ]
  3. 버킷의 소유권을 새 사용자로 변경합니다.

    radosgw-admin bucket chown --bucket=new-tenant/bucket --uid=new-tenant$user

    교체:

    • 연결할 버킷 의 이름과 버킷
    • 새 사용자가 인 테넌트의 이름이 new-tenant
    • 사용자의 사용자 이름이 있는 사용자

    예를 들어 데이터 버킷의 소유권을 test2 테넌트 내의 user2 로 변경하려면 다음을 수행합니다.

    # radosgw-admin bucket chown --bucket='test2/data' --uid='test$tuser2'
  4. 다음 명령의 출력에서 owner 행을 확인하여 데이터 버킷의 소유권이 성공적으로 변경되었는지 확인합니다.

    # radosgw-admin bucket list --bucket=test2/data

3.9.1.4. 테넌트가 아닌 사용자의 버킷을 테넌트 사용자로 이동

테넌트가 아닌 사용자의 버킷을 테넌트 사용자로 이동할 수 있습니다.

절차

  1. 선택 사항: 아직 여러 개의 테넌트가 없는 경우 rgw_keystone_implicit_tenants 를 활성화하고 외부 테넌트에서 Ceph Object Gateway에 액세스하여 생성할 수 있습니다.

    Ceph 구성 파일을 열고 편집합니다(기본값 /etc/ceph/ceph.conf ). rgw_keystone_implicit_tenants 옵션을 활성화합니다.

    rgw_keystone_implicit_tenants = true

    s3cmd 또는 swift 명령을 사용하여 tenant 테넌트에서 Ceph Object Gateway에 액세스합니다.

    # swift list

    또는 s3cmd 를 사용하십시오.

    # s3cmd ls

    외부 테넌트에서 첫 번째 액세스 권한은 동일한 Ceph Object Gateway 사용자를 생성합니다.

  2. 버킷을 테넌트된 사용자로 이동합니다.

    radosgw-admin bucket link --bucket=/bucket --uid='tenant$user'

    교체:

    • 버킷 이름으로 버킷
    • 새 사용자가 있는 테넌트의 이름이 인 테넌트
    • 사용자의 사용자 이름이 있는 사용자

    예를 들어 데이터 버킷을 테스트 테넌트 내부의 tenanted-user 로 이동하려면 다음을 수행합니다.

    # radosgw-admin bucket link --bucket=/data --uid='test$tenanted-user'
  3. 데이터 버킷이 tenanted-user 에 연결되었는지 확인합니다.

    # radosgw-admin bucket list --uid='test$tenanted-user'
    [
        "data"
    ]
  4. 버킷의 소유권을 새 사용자로 변경합니다.

    radosgw-admin bucket chown --bucket='tenant/bucket name' --uid='tenant$user'

    교체:

    • 버킷 이름으로 버킷
    • 새 사용자가 있는 테넌트의 이름이 인 테넌트
    • 사용자의 사용자 이름이 있는 사용자

    예를 들어 데이터 버킷의 소유권을 테스트 테넌트 내부에 있는 tenanted-user 로 변경하려면 다음을 수행합니다.

    # radosgw-admin bucket chown --bucket='test/data' --uid='test$tenanted-user'
  5. 다음 명령의 출력에서 owner 행을 확인하여 데이터 버킷의 소유권이 성공적으로 변경되었는지 확인합니다.

    # radosgw-admin bucket list --bucket=test/data

3.9.2. 버킷 이름 변경

버킷의 이름을 바꿀 수 있습니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • Ceph Object Gateway가 설치되어 있습니다.
  • 버킷.

절차

  1. 버킷을 나열합니다.

    radosgw-admin bucket list

    예를 들어 출력의 버킷에 유의하십시오.

    # radosgw-admin bucket list
    [
        "34150b2e9174475db8e191c188e920f6/swcontainer",
        "s3bucket1",
        "34150b2e9174475db8e191c188e920f6/swimpfalse",
        "c278edd68cfb4705bb3e07837c7ad1a8/ec2container",
        "c278edd68cfb4705bb3e07837c7ad1a8/demoten1",
        "c278edd68cfb4705bb3e07837c7ad1a8/demo-ct",
        "c278edd68cfb4705bb3e07837c7ad1a8/demopostup",
        "34150b2e9174475db8e191c188e920f6/postimpfalse",
        "c278edd68cfb4705bb3e07837c7ad1a8/demoten2",
        "c278edd68cfb4705bb3e07837c7ad1a8/postupsw"
    ]
  2. 버킷의 이름을 변경합니다.

    radosgw-admin bucket link --bucket=original-name --bucket-new-name=new-name --uid=user-ID

    예를 들어 s3bucket1 버킷의 이름을 s3 newb 로 변경하려면 다음을 수행합니다.

    # radosgw-admin bucket link --bucket=s3bucket1 --bucket-new-name=s3newb --uid=testuser

    버킷이 테넌트 내에 있는 경우 테넌트도 지정합니다.

    radosgw-admin bucket link --bucket=tenant/original-name --bucket-new-name=new-name --uid=tenant$user-ID

    예를 들면 다음과 같습니다.

    # radosgw-admin bucket link --bucket=test/s3bucket1 --bucket-new-name=s3newb --uid=test$testuser
  3. 버킷의 이름이 변경되었는지 확인합니다.

    radosgw-admin bucket list

    예를 들어 s3newb 라는 버킷이 있습니다.

    # radosgw-admin bucket list
    [
        "34150b2e9174475db8e191c188e920f6/swcontainer",
        "34150b2e9174475db8e191c188e920f6/swimpfalse",
        "c278edd68cfb4705bb3e07837c7ad1a8/ec2container",
        "s3newb",
        "c278edd68cfb4705bb3e07837c7ad1a8/demoten1",
        "c278edd68cfb4705bb3e07837c7ad1a8/demo-ct",
        "c278edd68cfb4705bb3e07837c7ad1a8/demopostup",
        "34150b2e9174475db8e191c188e920f6/postimpfalse",
        "c278edd68cfb4705bb3e07837c7ad1a8/demoten2",
        "c278edd68cfb4705bb3e07837c7ad1a8/postupsw"
    ]

3.9.3. 고아 및 누수 개체 찾기

정상 스토리지 클러스터에는 고립 또는 누수 개체가 없지만, 경우에 따라 고립 또는 누수 개체가 발생할 수 있습니다. 예를 들어 작업 도중 Ceph Object Gateway가 다운되면 일부 오브젝트가 고립됩니다. 또한 검색되지 않은 버그로 인해 고립된 오브젝트가 발생할 수 있습니다.

Red Hat Ceph Storage 4.1부터 스토리지 관리자는 Ceph Object Gateway 개체를 RADOS 오브젝트에 매핑하는 방법을 확인할 수 있습니다. radosgw-admin 명령은 이러한 잠재적 고립 또는 누수 개체 목록을 검색하고 생성하는 새 도구를 제공합니다. radoslist 하위 명령을 사용하면 버킷 또는 스토리지 클러스터의 모든 버킷에 저장된 오브젝트가 표시됩니다. rgw-orphan-list 스크립트는 풀 내에 고립된 오브젝트를 표시합니다.

주의

rgw-orphan-list 명령은 아직 실험적입니다. rados rm 명령을 사용하여 제거하기 전에 이 오브젝트가 나열한 오브젝트를 주의하고 신중하게 평가합니다.

중요

radoslist 하위 명령은 더 이상 사용되지 않는 orphans find 및 orphans finish 하위 명령을 대체합니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • 실행 중인 Ceph 개체 게이트웨이.

절차

  1. 버킷 내에 데이터를 보관하는 오브젝트 목록을 생성하려면 다음을 수행합니다.

    구문

    radosgw-admin bucket radoslist --bucket BUCKET_NAME

    예제

    [root@rgw ~]# radosgw-admin bucket radoslist --bucket mybucket

    참고

    BUCKET_NAME 을 생략하면 모든 버킷의 모든 오브젝트가 표시됩니다.

  2. 풀에 대한 고립자 목록을 생성하려면 다음을 수행합니다.

    [root@rgw ~]# rgw-orphan-list

    예제

    Available pools:
        .rgw.root
        default.rgw.control
        default.rgw.meta
        default.rgw.log
        default.rgw.buckets.index
        default.rgw.buckets.data
        rbd
        default.rgw.buckets.non-ec
        ma.rgw.control
        ma.rgw.meta
        ma.rgw.log
        ma.rgw.buckets.index
        ma.rgw.buckets.data
        ma.rgw.buckets.non-ec
    Which pool do you want to search for orphans?

    orphans를 검색할 풀 이름을 입력합니다.

    중요

    메타데이터 풀이 아닌 rgw-orphan-list 명령을 사용할 때 데이터 풀을 지정해야 합니다.

  3. 목록에서 고립된 오브젝트를 검토합니다.
  4. orphan 오브젝트를 제거하려면 다음을 수행합니다.

    구문

    rados -p POOL_NAME rm OBJECT_NAME

    예제

    [root@rgw ~]# rados -p default.rgw.buckets.data rm myobject

    주의

    올바른 오브젝트를 제거 중인지 확인합니다. rados rm 명령을 실행하면 스토리지 클러스터에서 데이터가 제거됩니다.

추가 리소스

  • 레거시 radosgw-admin orphans find 하위 명령에 대한 자세한 내용은 Red Hat Ceph Storage 3 Object Gateway 관리 가이드Orphan Objects 찾기 섹션을 참조하십시오.

3.9.4. 버킷 인덱스 항목 관리

radosgw-admin bucket check 하위 명령을 사용하여 Red Hat Ceph Storage 클러스터에서 Ceph Object Gateway의 버킷 인덱스 항목을 관리할 수 있습니다.

다중 파트 업로드 오브젝트와 관련된 각 버킷 인덱스 항목은 해당 .meta 인덱스 항목과 일치합니다. 지정된 다중 부분 업로드의 모든 부분에 대해 하나의 .meta 항목이 있어야 합니다. 조각에 대한 해당 .meta 항목을 찾지 못하는 경우 출력 섹션에 "또는phaned" 항목이 나열됩니다.

버킷에 대한 통계는 버킷 인덱스 헤더에 저장됩니다. 이 단계에서는 해당 헤더를 로드하고 버킷 인덱스의 모든 일반 오브젝트 항목을 반복하고 통계를 다시 계산합니다. 그런 다음 각각 "existing_header" 및 "calculated_header"라는 섹션에 실제 및 계산된 통계를 표시하므로 비교될 수 있습니다.

bucket check 하위 명령과 함께 --fix 옵션을 사용하면 버킷 인덱스에서 "또는phaned" 항목을 제거하고 헤더에 있는 기존 통계를 계산된 항목으로 덮어씁니다. 이로 인해 버전 관리에 사용되는 여러 항목을 포함한 모든 항목이 출력의 섹션에 나열됩니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • 실행 중인 Ceph 개체 게이트웨이.
  • 생성된 버킷입니다.

절차

  1. 특정 버킷의 버킷 인덱스를 확인합니다.

    구문

    radosgw-admin bucket check --bucket=BUCKET_NAME

    예제

    [root@rgw ~]# radosgw-admin bucket check --bucket=mybucket

  2. 분리된 오브젝트 제거를 포함하여 버킷 인덱스에서 불일치를 수정합니다.

    구문

    radosgw-admin bucket check --fix --bucket=BUCKET_NAME

    예제

    [root@rgw ~]# radosgw-admin bucket check --fix --bucket=mybucket

3.9.5. 버킷 알림

버킷 알림은 버킷에서 특정 이벤트가 발생할 때 Ceph Object Gateway에서 정보를 전송하는 방법을 제공합니다. 버킷 알림을 HTTP, AMQP0.9.1 및 Kafka 엔드포인트로 전송할 수 있습니다.

특정 버킷과 특정 주제의 이벤트에 대한 버킷 알림을 보내려면 알림 항목을 생성해야 합니다. 버킷 알림은 이벤트 유형의 하위 집합 또는 모든 이벤트 유형에 대해 기본적으로 만들 수 있습니다. 버킷 알림은 키 접두사 또는 접미사, 키와 일치하는 정규식 및 오브젝트에 연결된 메타데이터 특성 또는 오브젝트 태그에 연결된 메타데이터 특성에 따라 이벤트를 필터링할 수 있습니다. 버킷 알림에는 버킷 알림 메커니즘에 대한 구성 및 제어 인터페이스를 제공하는 REST API가 있습니다.

참고

버킷 알림 API는 기본적으로 활성화되어 있습니다. rgw_enable_apis 구성 매개 변수가 명시적으로 설정된 경우 s3pubsub 가 포함되어 있는지 확인합니다. 이를 확인하려면 ceph config get mon.* rgw_enable_apis 명령을 실행합니다.

추가 리소스

3.9.6. 버킷 알림 생성

버킷 수준에서 버킷 알림을 생성합니다. 알림 구성에는 Red Hat Ceph Storage Object Gateway S3 이벤트, ObjectCreated 및 Object Removed 가 있습니다. 이를 게시하고 버킷 알림을 보내려면 대상을 게시해야 합니다. 버킷 알림은 S3 작업입니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • 실행 중인 HTTP 서버, RabbitMQ 서버 또는 Kafka 서버.
  • 루트 수준 액세스.
  • Red Hat Ceph Storage 개체 게이트웨이 설치.
  • 사용자 액세스 키 및 비밀 키.
  • 엔드포인트 매개 변수.
중요

Red Hat은 ObjectCreate 이벤트(예:, put,post,multipartUpload, copy )를 지원합니다. Red Hat은 Object _delete 및 s3_multi_object_delete 와 같은 ObjectRemove 이벤트도 지원합니다.

절차

  1. s3 버킷을 만듭니다.
  2. http,amqp 또는 kafka 프로토콜에 대한 pvc 주제를 만듭니다.
  3. s 3:objectCreate 및 s3:object Remove 이벤트에 대한 s3 버킷 알림을 생성합니다.

    예제

    client.put_bucket_notification_configuration(
       Bucket=bucket_name,
       NotificationConfiguration={
           'TopicConfigurations': [
               {
                   'Id': notification_name,
                   'TopicArn': topic_arn,
                   'Events': ['s3:ObjectCreated:*', 's3:ObjectRemoved:*']
               }]})

  4. 버킷에 s3 오브젝트를 생성합니다.
  5. http 또는 rabbitmq 또는 kafka 수신자에서 오브젝트 생성 이벤트를 확인합니다.
  6. 오브젝트를 삭제합니다.
  7. http 또는 rabbitmq 또는 kafka 수신자에서 오브젝트 삭제 이벤트를 확인합니다.

3.9.7. 추가 리소스

3.10. 버킷 라이프사이클

스토리지 관리자는 버킷 라이프사이클 구성을 사용하여 오브젝트를 관리하여 수명 동안 효과적으로 저장할 수 있습니다. 예를 들어 사용 사례에 따라 오브젝트를 저렴한 스토리지 클래스, 아카이브 또는 삭제할 수 있습니다.

참고

radosgw-admin lc rec rec rec는 Red Hat Ceph Storage 3.3에서 더 이상 사용되지 않으며 Red Hat Ceph Storage 4 이상 릴리스에서 지원되지 않습니다.

3.10.1. 라이프사이클 관리 정책 생성

radosgw-admin 명령을 사용하는 대신 표준 S3 작업을 사용하여 버킷 라이프사이클 정책 구성을 관리할 수 있습니다. RADOS 게이트웨이는 버킷에 적용된 Amazon S3 API 정책 언어의 하위 집합만 지원합니다. 라이프사이클 구성에는 버킷 오브젝트 집합에 대해 정의된 하나 이상의 규칙이 포함됩니다.

사전 요구 사항

  • 실행 중인 Red Hat Storage 클러스터.
  • Ceph 개체 게이트웨이 설치.
  • Ceph Object Gateway 노드에 대한 루트 수준 액세스.
  • S3 버킷이 생성되었습니다.
  • 사용자 액세스 권한으로 생성된 S3 사용자.
  • AWS CLI 패키지가 설치된 Ceph Object Gateway 클라이언트에 액세스합니다.

절차

  1. 라이프사이클 구성에 사용할 JSON 파일을 생성합니다.

    예제

    [user@client ~]$ vi lifecycle.json

  2. 파일에 특정 라이프사이클 구성 규칙을 추가합니다.

    예제

    {
    	"Rules": [
            {
    		    "Filter": {
    			    "Prefix": "images/"
    		    },
    		    "Status": "Enabled",
    		    "Expiration": {
    			    "Days": 1
    		    },
    		    "ID": "ImageExpiration"
    	    }
        ]
    }

    라이프사이클 구성 예에서는 images 디렉터리에서 1일이 지난 오브젝트를 만료합니다.

  3. 버킷에서 라이프사이클 구성을 설정합니다.

    구문

    aws --endpoint-url=RADOSGW_ENDPOINT_URL:PORT s3api put-bucket-lifecycle-configuration --bucket BUCKET_NAME --lifecycle-configuration file://PATH_TO_LIFECYCLE_CONFIGURATION_FILE/LIFECYCLE_CONFIGURATION_FILE.json

    예제

    [user@client ~]$ aws --endpoint-url=http://host01:80 s3api put-bucket-lifecycle-configuration --bucket testbucket --lifecycle-configuration file://lifecycle.json

    이 예에서는 현재 디렉터리에 lifecycle.json 파일이 있습니다.

검증

  • 버킷의 라이프사이클 구성을 검색합니다.

    구문

    aws --endpoint-url=RADOSGW_ENDPOINT_URL:PORT s3api get-bucket-lifecycle-configuration --bucket BUCKET_NAME

    예제

    [user@client ~]$ aws --endpoint-url=http://host01:80 s3api get-bucket-lifecycle-configuration --bucket testbucket
    {
    	"Rules": [
            {
    		    "Expiration": {
    			    "Days": 1
    		    },
    		    "ID": "ImageExpiration",
    		    "Filter": {
    			    "Prefix": "images/"
    		    },
    		    "Status": "Enabled"
    	    }
        ]
    }

  • 선택 사항: Ceph Object Gateway 노드에서 Cephadm 쉘에 로그인하고 버킷 라이프사이클 구성을 검색합니다.

    구문

    radosgw-admin lc get --bucket=BUCKET_NAME

    예제

    [root@rgw ~]# radosgw-admin lc get --bucket=testbucket
    {
    	"prefix_map": {
    		"images/": {
    			"status": true,
    			"dm_expiration": false,
    			"expiration": 1,
    			"noncur_expiration": 0,
    			"mp_expiration": 0,
    			"transitions": {},
    			"noncur_transitions": {}
    		}
    	},
    	"rule_map": [
            {
    		"id": "ImageExpiration",
    		"rule": {
    			"id": "ImageExpiration",
    			"prefix": "",
    			"status": "Enabled",
    			"expiration": {
    				"days": "1",
    				"date": ""
    			},
    			"mp_expiration": {
    				"days": "",
    				"date": ""
    			},
    			"filter": {
    				"prefix": "images/",
    				"obj_tags": {
    					"tagset": {}
    				}
    			},
    			"transitions": {},
    			"noncur_transitions": {},
    			"dm_expiration": false
    		}
    	}
      ]
    }

추가 리소스

3.10.2. 라이프사이클 관리 정책 삭제

s3api delete-bucket-lifecycle 명령을 사용하여 지정된 버킷의 라이프사이클 관리 정책을 삭제할 수 있습니다.

사전 요구 사항

  • 실행 중인 Red Hat Storage 클러스터.
  • Ceph 개체 게이트웨이 설치.
  • Ceph Object Gateway 노드에 대한 루트 수준 액세스.
  • S3 버킷이 생성되었습니다.
  • 사용자 액세스 권한으로 생성된 S3 사용자.
  • AWS CLI 패키지가 설치된 Ceph Object Gateway 클라이언트에 액세스합니다.

절차

  • 라이프사이클 구성을 삭제합니다.

    구문

    aws --endpoint-url=RADOSGW_ENDPOINT_URL:PORT s3api delete-bucket-lifecycle --bucket BUCKET_NAME

    예제

    [user@client ~]$ aws --endpoint-url=http://host01:80 s3api delete-bucket-lifecycle --bucket testbucket

검증

  • 버킷의 라이프사이클 구성을 검색합니다.

    구문

    aws --endpoint-url=RADOSGW_ENDPOINT_URL:PORT s3api get-bucket-lifecycle-configuration --bucket BUCKET_NAME

    예제

    [user@client ~]# aws --endpoint-url=http://host01:80  s3api get-bucket-lifecycle-configuration --bucket testbucket

  • 선택 사항: Ceph Object Gateway 노드에서 버킷 라이프사이클 구성을 검색합니다.

    구문

    radosgw-admin lc get --bucket=BUCKET_NAME

    예제

    [root@rgw ~]# radosgw-admin lc get --bucket=testbucket

    참고

    버킷 라이프사이클 정책이 없는 경우 명령은 정보를 반환하지 않습니다.

추가 리소스

3.10.3. 라이프사이클 관리 정책 업데이트

s3cmd put-bucket-lifecycle-configuration 명령을 사용하여 라이프사이클 관리 정책을 업데이트할 수 있습니다.

참고

put-bucket-lifecycle-configuration 은 기존 버킷 라이프사이클 구성을 덮어씁니다. 현재 라이프사이클 정책 설정을 유지하려면 이를 라이프사이클 구성 파일에 포함해야 합니다.

사전 요구 사항

  • 실행 중인 Red Hat Storage 클러스터.
  • Ceph 개체 게이트웨이 설치.
  • Ceph Object Gateway 노드에 대한 루트 수준 액세스.
  • S3 버킷이 생성되었습니다.
  • 사용자 액세스 권한으로 생성된 S3 사용자.
  • AWS CLI 패키지가 설치된 Ceph Object Gateway 클라이언트에 액세스합니다.

절차

  1. 라이프사이클 구성에 대한 JSON 파일을 생성합니다.

    예제

    [user@client ~]$ vi lifecycle.json

  2. 파일에 특정 라이프사이클 구성 규칙을 추가합니다.

    예제

    {
    	"Rules": [
            {
    		    "Filter": {
    			    "Prefix": "images/"
    		    },
    		    "Status": "Enabled",
    		    "Expiration": {
    			    "Days": 1
    		    },
    		    "ID": "ImageExpiration"
    	    },
    		{
    			"Filter": {
    				"Prefix": "docs/"
    			},
    			"Status": "Enabled",
    			"Expiration": {
    				"Days": 30
    			},
    			"ID": "DocsExpiration"
    		}
    	]
    }

  3. 버킷에서 라이프사이클 구성을 업데이트합니다.

    구문

    aws --endpoint-url=RADOSGW_ENDPOINT_URL:PORT s3api put-bucket-lifecycle-configuration --bucket BUCKET_NAME --lifecycle-configuration file://PATH_TO_LIFECYCLE_CONFIGURATION_FILE/LIFECYCLE_CONFIGURATION_FILE.json

    예제

    [user@client ~]$ aws --endpoint-url=http://host01:80 s3api put-bucket-lifecycle-configuration --bucket testbucket --lifecycle-configuration file://lifecycle.json

검증

  • 버킷의 라이프사이클 구성을 검색합니다.

    구문

    aws --endpointurl=RADOSGW_ENDPOINT_URL:PORT s3api get-bucket-lifecycle-configuration --bucket BUCKET_NAME

    예제

    [user@client ~]$ aws -endpoint-url=http://host01:80 s3api get-bucket-lifecycle-configuration --bucket testbucket
    
    {
        "Rules": [
            {
                "Expiration": {
                    "Days": 30
                },
                "ID": "DocsExpiration",
                "Filter": {
                    "Prefix": "docs/"
                },
                "Status": "Enabled"
            },
            {
                "Expiration": {
                    "Days": 1
                },
                "ID": "ImageExpiration",
                "Filter": {
                    "Prefix": "images/"
                },
                "Status": "Enabled"
            }
        ]
    }

  • 선택 사항: Ceph Object Gateway 노드에서 Cephadm 쉘에 로그인하고 버킷 라이프사이클 구성을 검색합니다.

    구문

    radosgw-admin lc get --bucket=BUCKET_NAME

    예제

    [root@rgw ~]# radosgw-admin lc get --bucket=testbucket
    {
    	"prefix_map": {
            "docs/": {
    			"status": true,
    			"dm_expiration": false,
    			"expiration": 1,
    			"noncur_expiration": 0,
    			"mp_expiration": 0,
    			"transitions": {},
    			"noncur_transitions": {}
    		},
    		"images/": {
    			"status": true,
    			"dm_expiration": false,
    			"expiration": 1,
    			"noncur_expiration": 0,
    			"mp_expiration": 0,
    			"transitions": {},
    			"noncur_transitions": {}
    		}
    	},
    	"rule_map": [
            {
            "id": "DocsExpiration",
        	"rule": {
        		"id": "DocsExpiration",
        		"prefix": "",
        		"status": "Enabled",
        		"expiration": {
        			"days": "30",
        			"date": ""
        		},
                "noncur_expiration": {
                    "days": "",
                    "date": ""
                },
        		"mp_expiration": {
        			"days": "",
        			"date": ""
        		},
        		"filter": {
        			"prefix": "docs/",
        			"obj_tags": {
        				"tagset": {}
        			}
        		},
        		"transitions": {},
        		"noncur_transitions": {},
        		"dm_expiration": false
        	}
        },
        {
    		"id": "ImageExpiration",
    		"rule": {
    			"id": "ImageExpiration",
    			"prefix": "",
    			"status": "Enabled",
    			"expiration": {
    				"days": "1",
    				"date": ""
    			},
    			"mp_expiration": {
    				"days": "",
    				"date": ""
    			},
    			"filter": {
    				"prefix": "images/",
    				"obj_tags": {
    					"tagset": {}
    				}
    			},
    			"transitions": {},
    			"noncur_transitions": {},
    			"dm_expiration": false
    		}
    	}
      ]
    }

3.10.4. 버킷 라이프사이클 모니터링

라이프사이클 처리를 모니터링하고 radosgw-admin lc 목록 및 radosgw-admin lc 프로세스 명령을 사용하여 버킷의 라이프사이클을 수동으로 처리할 수 있습니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • Ceph Object Gateway 노드에 대한 루트 수준 액세스.
  • 라이프사이클 구성 정책이 적용된 S3 버킷 생성.

절차

  1. 버킷 라이프사이클 진행 상황을 나열합니다.

    예제

    [root@rgw ~]# radosgw-admin lc list
    
    [
       {
             “bucket”: “:testbucket:8b63d584-9ea1-4cf3-8443-a6a15beca943.54187.1”,
             “started”: “Thu, 01 Jan 1970 00:00:00 GMT”,
             “status” : “UNINITIAL”
       },
       {
             “bucket”: “:testbucket1:8b635499-9e41-4cf3-8443-a6a15345943.54187.2”,
             “started”: “Thu, 01 Jan 1970 00:00:00 GMT”,
             “status” : “UNINITIAL”
       }
    ]

    버킷 라이프사이클 처리 상태는 다음 중 하나일 수 있습니다.

    • UNINITIAL - 프로세스가 아직 실행되지 않았습니다.
    • PROCESSING - 현재 실행 중인 프로세스가 있습니다.
    • COMPLETE - 프로세스가 완료되었습니다.
  2. 선택 사항: 버킷 라이프사이클 정책을 수동으로 처리할 수 있습니다.

    1. 단일 버킷에 대한 라이프사이클 정책을 처리합니다.

      구문

      radosgw-admin lc process --bucket=BUCKET_NAME

      예제

      [root@rgw ~]# radosgw-admin lc process --bucket=testbucket1

    2. 모든 버킷 라이프사이클 정책을 즉시 처리합니다.

      예제

      [root@rgw ~]# radosgw-admin lc process

검증

  • 버킷 라이프사이클 정책을 나열합니다.

    [root@rgw ~]# radosgw-admin lc list
    [
        {
              “bucket”: “:testbucket:8b63d584-9ea1-4cf3-8443-a6a15beca943.54187.1”,
              “started”: “Thu, 17 Mar 2022 21:48:50 GMT”,
              “status” : “COMPLETE”
        }
        {
              “bucket”: “:testbucket1:8b635499-9e41-4cf3-8443-a6a15345943.54187.2”,
              “started”: “Thu, 17 Mar 2022 20:38:50 GMT”,
              “status” : “COMPLETE”
        }
    ]

추가 리소스

3.10.5. 라이프사이클 만료 창 구성

rgw_lifecycle_work_time 매개변수를 설정하여 라이프사이클 관리 프로세스가 매일 실행되는 시간을 설정할 수 있습니다. 기본적으로 라이프사이클 처리는 자정에 한 번 수행됩니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • Ceph 개체 게이트웨이 설치.
  • Ceph Object Gateway 노드에 대한 루트 수준 액세스.

절차

  1. 라이프사이클 만료 시간을 설정합니다.

    구문

    ceph config set client.rgw rgw_lifecycle_work_time %D:%D-%D:%D

    %d:%d-%d:%dstart_hour:start_minute-end_hour:end_minute;%d로 바꿉니다.

    예제

    [root@rgw ~]# ceph config set client.rgw rgw_lifecycle_work_time 06:00-08:00

검증

  • 라이프사이클 만료 작업 시간을 검색합니다.

    예제

    [root@rgw ~]# ceph config get client.rgw rgw_lifecycle_work_time
    
    06:00-08:00

추가 리소스

3.10.6. 스토리지 클러스터 내에서 S3 버킷 라이프사이클 전환

버킷 라이프사이클 구성을 사용하여 개체를 관리할 수 있으므로 개체의 수명 동안 개체가 효과적으로 저장됩니다. 개체 수명 주기 전환 규칙을 사용하면 개체 수명 동안 개체를 관리하고 효과적으로 저장할 수 있습니다.The object lifecycle transition rule allows you to manage, and effectively store the objects throughout the object's lifetime. 오브젝트를 저렴한 스토리지 클래스, 아카이브 또는 삭제할 수 있습니다.

다음을 위한 스토리지 클래스를 생성할 수 있습니다.

  • I/O 민감한 워크로드를 위한 SSD 또는 NVMe와 같은 빠른 미디어
  • 아카이브에 사용되는 SAS 또는 SATA와 같은 느린 자기 미디어.

핫 스토리지 클래스와 콜드 스토리지 클래스 간의 데이터 이동 스케줄을 생성할 수 있습니다. 지정된 시간 후에 이 이동을 예약할 수 있으므로 오브젝트가 만료되고 영구적으로 삭제될 수 있습니다. 예를 들어 30일 후에 오브젝트를 생성한 후 스토리지 클래스 30으로 전환하거나 오브젝트를 스토리지 클래스 1년으로 보관할 수 있습니다. 전환 규칙을 통해 이 작업을 수행할 수 있습니다. 이 규칙은 하나의 스토리지 클래스에서 다른 스토리지 클래스로의 개체 전환에 적용됩니다. 라이프사이클 구성에는 < Rule> 요소를 사용하는 하나 이상의 규칙이 포함됩니다.

추가 리소스

3.10.7. 한 스토리지 클래스에서 다른 스토리지 클래스로 오브젝트 전환

오브젝트 라이프사이클 전환 규칙을 사용하면 한 스토리지 클래스에서 다른 클래스로 오브젝트를 전환할 수 있습니다.

사전 요구 사항

  • Ceph Object Gateway 소프트웨어 설치.
  • Ceph Object Gateway 노드에 대한 루트 수준 액세스.
  • 사용자 액세스 권한으로 생성된 S3 사용자.

절차

  1. 새 데이터 풀을 생성합니다.

    구문

    ceph osd pool create POOL_NAME

    예제

    [root@rgw ~]# ceph osd pool create test.hot.data

  2. 새 스토리지 클래스를 추가합니다.

    구문

    radosgw-admin zonegroup placement add  --rgw-zonegroup default --placement-id PLACEMENT_TARGET --storage-class STORAGE_CLASS

    예제

    [root@rgw ~]# radosgw-admin zonegroup placement add  --rgw-zonegroup default --placement-id default-placement --storage-class hot.test
    {
            "key": "default-placement",
            "val": {
                "name": "default-placement",
                "tags": [],
                "storage_classes": [
                    "STANDARD",
                    "hot.test"
                ]
            }
        }

  3. 새 스토리지 클래스의 영역 배치 정보를 제공합니다.

    구문

    radosgw-admin zone placement add --rgw-zone default --placement-id PLACEMENT_TARGET --storage-class STORAGE_CLASS --data-pool DATA_POOL

    예제

    [root@rgw ~]# radosgw-admin zone placement add --rgw-zone default --placement-id default-placement --storage-class hot.test --data-pool test.hot.data
    {
               "key": "default-placement",
               "val": {
                   "index_pool": "test_zone.rgw.buckets.index",
                   "storage_classes": {
                       "STANDARD": {
                           "data_pool": "test.hot.data"
                       },
                       "hot.test": {
                           "data_pool": "test.hot.data",
                      }
                   },
                   "data_extra_pool": "",
                   "index_type": 0
               }

    참고

    쓰기로 콜드 또는 아카이브 데이터 스토리지 풀을 생성할 때 compression_type 을 설정하는 것이 좋습니다.

  4. 데이터 풀에서 rgw 애플리케이션을 활성화합니다.

    구문

    ceph osd pool application enable POOL_NAME rgw

    예제

    [root@rgw ~] ceph osd pool application enable test.hot.data rgw
    enabled application 'rgw' on pool 'test.hot.data'

  5. 모든 rgw 데몬을 다시 시작합니다.
  6. 버킷을 생성합니다.

    예제

    [root@rgw ~]# aws s3api create-bucket --bucket testbucket10 --create-bucket-configuration LocationConstraint=default:default-placement --endpoint-url http://1x.7x.2xx.1xx:80

  7. 오브젝트를 추가합니다.

    예제

    [root@rgw ~]# aws --endpoint=http://1x.7x.2xx.1xx:80 s3api put-object --bucket testbucket10  --key compliance-upload --body /root/test2.txt

  8. 두 번째 데이터 풀을 생성합니다.

    구문

    ceph osd pool create POOL_NAME

    예제

    [root@rgw ~]# ceph osd pool create test.cold.data

  9. 새 스토리지 클래스를 추가합니다.

    구문

    radosgw-admin zonegroup placement add  --rgw-zonegroup default --placement-id PLACEMENT_TARGET --storage-class STORAGE_CLASS

    예제

    [root@rgw ~]# radosgw-admin zonegroup placement add  --rgw-zonegroup default --placement-id default-placement --storage-class cold.test
    {
            "key": "default-placement",
            "val": {
                "name": "default-placement",
                "tags": [],
                "storage_classes": [
                    "STANDARD",
                    "cold.test"
                ]
            }
        }

  10. 새 스토리지 클래스의 영역 배치 정보를 제공합니다.

    구문

    radosgw-admin zone placement add --rgw-zone default --placement-id PLACEMENT_TARGET --storage-class STORAGE_CLASS --data-pool DATA_POOL

    예제

    [root@rgw ~]# radosgw-admin zone placement add --rgw-zone default --placement-id default-placement --storage-class cold.test --data-pool test.cold.data

  11. 데이터 풀에서 rgw 애플리케이션을 활성화합니다.

    구문

    ceph osd pool application enable POOL_NAME rgw

    예제

    [root@rgw ~] ceph osd pool application enable test.cold.data rgw
    enabled application 'rgw' on pool 'test.cold.data'

  12. 모든 rgw 데몬을 다시 시작합니다.
  13. 영역 그룹 구성을 보려면 다음을 실행합니다.

    구문

    radosgw-admin zonegroup get
    {
        "id": "3019de59-ddde-4c5c-b532-7cdd29de09a1",
        "name": "default",
        "api_name": "default",
        "is_master": "true",
        "endpoints": [],
        "hostnames": [],
        "hostnames_s3website": [],
        "master_zone": "adacbe1b-02b4-41b8-b11d-0d505b442ed4",
        "zones": [
            {
                "id": "adacbe1b-02b4-41b8-b11d-0d505b442ed4",
                "name": "default",
                "endpoints": [],
                "log_meta": "false",
                "log_data": "false",
                "bucket_index_max_shards": 11,
                "read_only": "false",
                "tier_type": "",
                "sync_from_all": "true",
                "sync_from": [],
                "redirect_zone": ""
            }
        ],
        "placement_targets": [
            {
                "name": "default-placement",
                "tags": [],
                "storage_classes": [
                    "hot.test",
                    "cold.test",
                    "STANDARD"
                ]
            }
        ],
        "default_placement": "default-placement",
        "realm_id": "",
        "sync_policy": {
            "groups": []
        }
    }

  14. 영역 구성을 보려면 다음을 실행합니다.

    구문

    radosgw-admin zone get
    {
        "id": "adacbe1b-02b4-41b8-b11d-0d505b442ed4",
        "name": "default",
        "domain_root": "default.rgw.meta:root",
        "control_pool": "default.rgw.control",
        "gc_pool": "default.rgw.log:gc",
        "lc_pool": "default.rgw.log:lc",
        "log_pool": "default.rgw.log",
        "intent_log_pool": "default.rgw.log:intent",
        "usage_log_pool": "default.rgw.log:usage",
        "roles_pool": "default.rgw.meta:roles",
        "reshard_pool": "default.rgw.log:reshard",
        "user_keys_pool": "default.rgw.meta:users.keys",
        "user_email_pool": "default.rgw.meta:users.email",
        "user_swift_pool": "default.rgw.meta:users.swift",
        "user_uid_pool": "default.rgw.meta:users.uid",
        "otp_pool": "default.rgw.otp",
        "system_key": {
            "access_key": "",
            "secret_key": ""
        },
        "placement_pools": [
            {
                "key": "default-placement",
                "val": {
                    "index_pool": "default.rgw.buckets.index",
                    "storage_classes": {
                        "cold.test": {
                            "data_pool": "test.cold.data"
                        },
                        "hot.test": {
                            "data_pool": "test.hot.data"
                        },
                        "STANDARD": {
                            "data_pool": "default.rgw.buckets.data"
                        }
                    },
                    "data_extra_pool": "default.rgw.buckets.non-ec",
                    "index_type": 0
                }
            }
        ],
        "realm_id": "",
        "notif_pool": "default.rgw.log:notif"
    }

  15. 버킷을 생성합니다.

    예제

    [root@rgw ~]# aws s3api create-bucket --bucket testbucket10 --create-bucket-configuration LocationConstraint=default:default-placement --endpoint-url http://1x.7x.2xx.1xx:80

  16. 라이프사이클 구성에 사용할 JSON 파일을 생성합니다.

    예제

    [root@rgw ~]# vi lifecycle.json

  17. 파일에 특정 lifecyle 구성 규칙을 추가합니다.

    예제

    {
        "Rules": [
            {
                "Filter": {
                    "Prefix": ""
                },
                "Status": "Enabled",
                "Transitions": [
                    {
                        "Days": 5,
                        "StorageClass": "hot.test"
                    },
     {
                        "Days": 20,
                        "StorageClass": "cold.test"
                    }
                ],
                "Expiration": {
                    "Days": 365
                },
                "ID": "double transition and expiration"
            }
        ]
    }

    라이프사이클 구성 예제에서는 기본 STANDARD 스토리지 클래스에서 5일 후에 hot.test 스토리지 클래스로 전환할 오브젝트를 표시하고, 20일 후에 다시 cold.test 스토리지 클래스로 전환한 후 365일이 지나면 만료됩니다.

  18. 버킷에서 라이프사이클 구성을 설정합니다.

    예제

    [root@rgw ~] aws s3api put-bucket-lifecycle-configuration --bucket testbucket20 --lifecycle-configuration file://lifecycle.json

  19. 버킷에서 라이프사이클 구성을 검색합니다.

    예제

    [root@rgw ~]aws s3api get-bucket-lifecycle-configuration --bucket testbucket20
    {
        "Rules": [
            {
                "Expiration": {
                    "Days": 365
                },
                "ID": "double transition and expiration",
                "Prefix": "",
                "Status": "Enabled",
                "Transitions": [
                    {
                        "Days": 20,
                        "StorageClass": "cold.test"
                    },
                    {
                        "Days": 5,
                        "StorageClass": "hot.test"
                    }
                ]
            }
        ]
    }

추가 리소스

3.11. Ceph Object Gateway 데이터 레이아웃

RADOS는 확장 속성(xattrs) 및 개체 맵(OMAP)을 사용하는 풀 및 개체에 대해서만 알고 있지만 개념적으로 Ceph Object Gateway는 데이터를 세 가지 다른 종류로 구성합니다.

  • metadata
  • 버킷 인덱스
  • data

메타데이터

메타데이터의 세 가지 섹션이 있습니다.

  • 사용자: 사용자 정보를 보유하고 있습니다.
  • bucket: 버킷 이름과 버킷 인스턴스 ID 간의 매핑이 있습니다.
  • bucket.instance: 버킷 인스턴스 정보가 있습니다.

다음 명령을 사용하여 메타데이터 항목을 볼 수 있습니다.

구문

radosgw-admin metadata get bucket:BUCKET_NAME
radosgw-admin metadata get bucket.instance:BUCKET:BUCKET_ID
radosgw-admin metadata get user:USER
radosgw-admin metadata set user:USER

예제

[root@host01 ~]# radosgw-admin metadata list
[root@host01 ~]# radosgw-admin metadata list bucket
[root@host01 ~]# radosgw-admin metadata list bucket.instance
[root@host01 ~]# radosgw-admin metadata list user

모든 메타데이터 항목은 단일 RADOS 오브젝트에 유지됩니다.

참고

Ceph Object Gateway 오브젝트는 여러 RADOS 오브젝트로 구성될 수 있습니다. 첫 번째는 매니페스트, ACL(액세스 제어 목록), 콘텐츠 유형, ETag 및 사용자 정의 메타데이터와 같은 메타데이터를 포함하는 헤드입니다. 메타데이터는 xattrs 에 저장됩니다. 헤드에는 효율성 및 원자성을 위해 최대 512KB의 개체 데이터를 포함할 수도 있습니다. 매니페스트는 RADOS 오브젝트에서 각 오브젝트가 어떻게 구성되는지를 설명합니다.

버킷 인덱스

이는 다른 종류의 메타데이터이며 별도로 유지됩니다. 버킷 인덱스에는 RADOS 오브젝트에 키-값 맵이 있습니다. 기본적으로 버킷당 단일 RADOS 오브젝트이지만 여러 RADOS 오브젝트에서 맵을 분할할 수 있습니다.

맵 자체는 각 RADOS 오브젝트와 관련된 OMAP에 보관됩니다. 각 OMAP의 키는 오브젝트의 이름이고, 값은 버킷을 나열할 때 표시되는 메타데이터인 해당 오브젝트의 몇 가지 기본 메타데이터를 보유합니다. 각 OMAP에는 헤더가 있으며, 오브젝트 수, 총 크기 등과 같은 일부 버킷 계정 메타데이터를 해당 헤더에 보관합니다.

참고

OMAP는 확장 속성이 POSIX 파일과 연결된 방식과 유사한 방식으로 오브젝트와 관련된 키-값 저장소입니다. 오브젝트의 OMAP는 물리적으로 오브젝트의 스토리지에 위치하지 않지만, 정확한 구현에서는 Ceph Object Gateway에 표시되지 않고 비합리적입니다.

data

오브젝트 데이터는 각 Ceph Object Gateway 오브젝트마다 하나 이상의 RADOS 오브젝트에 보관됩니다.

3.11.1. 오브젝트 조회 경로

오브젝트에 액세스할 때 REST API는 다음 세 가지 매개변수를 사용하여 Ceph Object Gateway로 이동합니다.

  • Swift에서 S3 또는 계정 이름에 액세스 키가 있는 계정 정보
  • 버킷 또는 컨테이너 이름
  • 오브젝트 이름 또는 키

현재 Ceph Object Gateway는 계정 정보만 사용하여 사용자 ID와 액세스 제어를 찾습니다. 버킷 이름과 오브젝트 키만 사용하여 풀의 오브젝트를 처리합니다.

계정 정보

Ceph Object Gateway의 사용자 ID는 문자열이며, 일반적으로 사용자 자격 증명의 실제 사용자 이름은 해시 또는 매핑된 식별자가 아닙니다.

사용자 데이터에 액세스할 때 사용자 레코드는 default.rgw.meta 풀의 USER_ID 오브젝트에서 users.uid 네임스페이스를 사용하여 로드됩니다.

버킷 이름

이는 root 네임스페이스가 있는 default.rgw.meta 풀에 표시됩니다. 버킷 ID 역할을 하는 마커를 가져오기 위해 버킷 레코드가 로드됩니다.

오브젝트 이름

오브젝트는 default.rgw.buckets.data 풀에 있습니다. 오브젝트 이름은 MARKER_KEY (예: default.7593.4_image.png )입니다. 여기서 마커는 default.7593.4 이고 키는 image.png 입니다. 이러한 연결된 이름은 구문 분석되지 않으며 RADOS로만 전달됩니다. 따라서 구분자 선택이 중요하지 않으며 모호함을 유발하지 않습니다. 동일한 이유로 키와 같은 오브젝트 이름에서 슬래시가 허용됩니다.

3.11.1.1. 다중 데이터 풀

기본적으로 다른 사용자의 버킷이 다른 RADOS 풀에서 생성되도록 여러 데이터 풀을 생성할 수 있으므로 필요한 스케일링을 제공할 수 있습니다. 이러한 풀의 레이아웃 및 이름 지정은 정책 설정으로 제어합니다.

3.11.2. 버킷 및 오브젝트 목록

지정된 사용자에게 속하는 버킷은 USER_ID.buckets라는 오브젝트의 OMAP(예: foo.buckets )에 나열됩니다(예: default.rgw.meta 풀에 users.uid 네임스페이스). 이러한 오브젝트는 버킷을 나열하고, 버킷 콘텐츠를 업데이트할 때, 할당량과 같은 버킷 통계를 업데이트 및 검색할 때 액세스할 수 있습니다. 이러한 목록은 .rgw 풀의 버킷과 일관되게 유지됩니다.

참고

이러한 OMAP 항목의 값에 대해서는 user-visible 클래스 cls_user_bucket 및 해당 중첩 클래스 cls_user_bucket 을 참조하십시오.

지정된 버킷에 속하는 오브젝트는 버킷 인덱스에 나열됩니다. 인덱스 오브젝트의 기본 이름 지정은 default.rgw.buckets.index 풀의 .dir.MARKER 입니다.

추가 리소스

  • 자세한 내용은 Red Hat Ceph Storage Object Gateway Guide버킷 분할 구성 섹션을 참조하십시오.

3.12. Object Gateway 데이터 레이아웃 매개변수

Ceph Object Gateway의 데이터 레이아웃 매개변수 목록입니다.

알려진 풀:

.rgw.root
지정되지 않은 리전, 영역 및 글로벌 정보 레코드는 오브젝트당 하나씩입니다.
ZONE.rgw.control
알림.N
ZONE.rgw.meta

다른 종류의 메타데이터가 있는 여러 네임스페이스

네임스페이스: root

BUCKET .bucket.meta.BUCKET:MARKER #은 put_bucket_instance_info()를 참조하십시오.

테넌트는 버킷 인스턴스를 모호하지 않지만 버킷 인스턴스를 제거하는 데 사용되지 않습니다.

예제

.bucket.meta.prodtx:test%25star:default.84099.6
.bucket.meta.testcont:default.4126.1
.bucket.meta.prodtx:testcont:default.84099.4
prodtx/testcont
prodtx/test%25star
testcont

네임스페이스: users.uid

USER 오브젝트 및USER .buckets 오브젝트의 omaps에 있는 버킷 목록에 _GWWUserInfo(RGWUserInfo)를 포함합니다. 비어 있지 않은 경우 USER 에 테넌트가 포함될 수 있습니다.

예제

prodtx$prodt
test2.buckets
prodtx$prodt.buckets
test2

네임 스페이스: users.email
중요하지 않음
네임스페이스: users.keys

47UA98JSTJZ9YAN3OS3O

이를 통해 Ceph Object Gateway는 인증 중에 액세스 키로 사용자를 조회할 수 있습니다.

namespace: users.swift
test:tester
ZONE.rgw.buckets.index
오브젝트 이름은 .dir입니다.MARKER 에는 각각 버킷 인덱스가 포함되어 있습니다. 인덱스가 분할된 경우 각 shard는 마커 뒤에 shard 인덱스를 추가합니다.
ZONE.rgw.buckets.data

default.7593.4__shadow_.488urDFerTYXavx4yAd-Op8mxehnvTI_1 MARKER_KEY

마커의 예는 기본값.16004.1 또는 default.7593.4 입니다. 현재 형식은 ZONE.INSTANCE_ID.BUCKET_ID. 그러나 생성된 후에는 마커가 다시 구문 분석되지 않으므로 나중에 형식이 자유롭게 변경될 수 있습니다.

추가 리소스

3.13. STS의 속성 기반 액세스 제어(ABAC)에 대한 세션 태그

세션 태그는 사용자를 연결하는 동안 전달될 수 있는 키-값 쌍입니다. 보안 토큰 서비스(STS)에서 반환되는 세션 또는 임시 인증 정보에서 aws:PrincipalTag 로 전달됩니다. 이러한 기본 태그는 역할에 가정되는 웹 토큰 및 태그의 일부로 제공되는 세션 태그로 구성됩니다.

참고

현재 세션 태그는 AssumeRoleWithWebIdentity 로 전달되는 웹 토큰의 일부로만 지원됩니다.

태그를 항상 다음 네임스페이스에서 지정해야 합니다. https://aws.amazon.com/tags.

중요

페더레이션 사용자에 의해 전달되는 웹 토큰에 세션 태그가 포함된 경우 신뢰 정책에 sts:TagSession 권한이 있어야 합니다. 그렇지 않으면 AssumeRoleWithWebIdentity 작업이 실패합니다.

sts:TagSession 를 사용한 신뢰 정책의 예:

{
        "Version":"2012-10-17",
        "Statement":[
        {
            "Effect":"Allow",
            "Action":["sts:AssumeRoleWithWebIdentity","sts:TagSession"],
            "Principal":{"Federated":["arn:aws:iam:::oidc-provider/localhost:8080/auth/realms/quickstart"]},
            "Condition":{"StringEquals":{"localhost:8080/auth/realms/quickstart:sub":"test"}}
        }]
    }

속성

다음은 세션 태그의 속성입니다.

  • 세션 태그는 다중 값으로 설정할 수 있습니다.

    참고

    다중 값 세션 태그는 AWS(Amazon Web Service)에서 지원되지 않습니다.

  • Keycloak은 최대 50개의 세션 태그가 있는 OpenID Connect ID 공급자(IDP)로 설정할 수 있습니다.
  • 허용되는 키의 최대 크기는 128자입니다.
  • 허용되는 값의 최대 크기는 256자입니다.
  • 태그 또는 값은 aws: 로 시작할 수 없습니다.

추가 리소스

3.13.1. 태그 키

다음은 역할 신뢰 정책 또는 역할 권한 정책에 사용할 수 있는 태그 키입니다.

aws:RequestTag
설명

요청에 전달된 키-값 쌍을 역할의 신뢰 정책의 키-값 쌍과 비교합니다.

AssumeRoleWithWebIdentity 의 경우 역할 신뢰 정책에서 세션 태그를 aws:RequestTag 로 사용할 수 있습니다. 이러한 세션 태그는 웹 토큰에서 Keycloak에서 전달됩니다. 결과적으로 페더레이션 사용자는 역할을 가정할 수 있습니다.

aws:PrincipalTag
설명

주체에 연결된 키-값 쌍을 정책의 키-값 쌍과 비교합니다.

AssumeRoleWithWebIdentity 의 경우 세션 태그는 사용자가 인증되면 임시 자격 증명에 주체 태그로 표시됩니다. 이러한 세션 태그는 웹 토큰에서 Keycloak에서 전달됩니다. 역할 권한 정책에서 aws:PrincipalTag 로 사용할 수 있습니다.

iam:ResourceTag
설명

리소스에 연결된 키-값 쌍을 정책의 키-값 쌍과 비교합니다.

AssumeRoleWithWebIdentity 의 경우 역할에 연결된 태그가 신뢰 정책의 역할과 비교되어 사용자가 역할을 가정할 수 있습니다.

참고

Ceph Object Gateway는 이제 역할에 대한 태그 지정, 나열, 태그 해제 작업을 지원하기 위한 RESTful API를 지원합니다.

AWS:TagKeys
설명

요청의 태그를 정책의 태그와 비교합니다.

AssumeRoleWithWebIdentity 의 경우 사용자가 역할을 가정하기 전에 역할 신뢰 정책 또는 권한 정책에서 태그 키를 확인하는 데 사용됩니다.

s3:ResourceTag
설명

버킷 또는 오브젝트인 S3 리소스에 있는 태그를 역할의 권한 정책의 태그와 비교합니다.

Ceph Object Gateway에서 S3 작업을 승인하는 데 사용할 수 있습니다. 그러나 이는 AWS에서 허용되지 않습니다.

오브젝트 또는 버킷에 연결된 태그를 참조하는 데 사용되는 키입니다. 태그는 동일한에 사용 가능한 RESTful API를 사용하여 오브젝트 또는 버킷에 연결할 수 있습니다.

3.13.2. S3 리소스 태그

다음 목록은 특정 작업 승인을 위해 지원되는 S3 리소스 태그 유형을 보여줍니다.

태그 유형: 오브젝트 태그
작업
GetObject,GetObjectTags,DeleteObjectTags,DeleteObject Tags , DeleteObjectTags ,InitMultipart, 'ListMultipart , 'ListMultipart,GetAttrs, GetObjectRetention , GetObjectRetention,GetObjectRetention, GetObjectLegalHold,GetObjectLegalHold
태그 유형: 버킷 태그
작업
, GetBucket Tags,GetBucketTags,DeleteBucketTags , GetBucketTags ,GetBucketReplication,GetBucket Versioning,SetBucketVersioning,GetBucketWebsite, SetBucketWebsite ,SetBucketWebsite, DeleteBucketWebsite,StatBucket,ListBucket Logging ,GetBucketLogging,GetBucketLogging ,DeleteBucket Location, DeleteBucket ,GetLC,DeleteLC,GetCORS ,GetRequestPayment, SetRequestPayment FlexVolume Policy,GetBucketPolicy,DeleteBucketPolicy, DeleteBucketPolicyLock,GetBucketObjectLock,GetBucketPolicyStatus, GetBucketPublicAccessBlock,GetBucketPublicAccessBlock,DeleteBucketPublicAccessBlock
태그 유형: 버킷 ACL의 버킷 태그, 개체 ACL의 개체 태그
작업
GetACLs , ACLs
태그 유형: 소스 오브젝트의 오브젝트 태그, 대상 버킷의 버킷 태그
작업
FlexVolumeObject,CopyObject

3.14. Ceph Object Gateway의 가비지 컬렉션 최적화

새 데이터 오브젝트가 스토리지 클러스터에 작성되면 Ceph Object Gateway에서 이러한 새 오브젝트에 즉시 스토리지를 할당합니다. 스토리지 클러스터에서 데이터 오브젝트를 삭제하거나 덮어쓰면 Ceph Object Gateway가 버킷 인덱스에서 해당 오브젝트를 삭제합니다. 나중에 Ceph Object Gateway는 스토리지 클러스터에 오브젝트를 저장하는 데 사용된 공간을 제거합니다. 스토리지 클러스터에서 삭제된 오브젝트 데이터를 제거하는 프로세스를 Garbage Collection 또는 GC라고 합니다.

가비지 컬렉션 작업은 일반적으로 백그라운드에서 실행됩니다. 이러한 작업은 지속적으로 실행하거나 활동이 적고 워크로드가 적은 간격 동안만 실행되도록 구성할 수 있습니다. 기본적으로 Ceph Object Gateway는 GC 작업을 지속적으로 수행합니다. GC 작업은 Ceph Object Gateway 작업의 일반적인 일부이므로 가비지 컬렉션에 적합한 삭제된 오브젝트가 대부분 존재합니다.

3.14.1. 가비지 컬렉션 큐 보기

스토리지 클러스터에서 삭제 및 덮어쓰기 오브젝트를 제거하기 전에 radosgw-admin 을 사용하여 가비지 컬렉션을 기다리는 오브젝트를 확인합니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • Ceph 개체 게이트웨이에 대한 루트 수준 액세스.

절차

  1. 가비지 컬렉션을 기다리는 개체의 큐를 보려면 다음을 수행합니다.

    예제

    [root@rgw ~] radosgw-admin gc list

참고

만료되지 않은 항목을 포함하여 큐의 모든 항목을 나열하려면 --include-all 옵션을 사용합니다.

3.14.2. 삭제가 많은 워크로드의 가비지 컬렉션 조정

일부 워크로드는 가비지 컬렉션 활동의 속도를 일시적으로 또는 영구적으로 초과할 수 있습니다. 이는 특히 많은 오브젝트가 짧은 기간 동안 저장되고 삭제되는 삭제가 많은 워크로드에 적용됩니다. 이러한 유형의 워크로드의 경우 다른 작업을 기준으로 가비지 컬렉션 작업의 우선 순위를 늘리는 것이 좋습니다. Ceph Object Gateway Garbage Collection에 대한 추가 질문은 Red Hat 지원팀에 문의하십시오.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • 스토리지 클러스터의 모든 노드에 대한 루트 수준 액세스.

절차

  1. 편집을 위해 /etc/ceph/ceph.conf 를 엽니다.
  2. rgw_gc_max_concurrent_io 의 값을 20으로 설정하고 rgw_gc_max_trim_chunk 값을 64로 설정합니다.

    rgw_gc_max_concurrent_io = 20
    rgw_gc_max_trim_chunk = 64
  3. Ceph Object Gateway를 다시 시작하여 변경된 설정을 적용할 수 있습니다.
  4. GC 활동 중에 스토리지 클러스터를 모니터링하여 증가된 값이 성능에 부정적인 영향을 미치지 않는지 확인합니다.
중요

실행 중인 클러스터에서 rgw_gc_max_objs 옵션의 값을 수정하지 마십시오. RGW 노드를 배포하기 전에 이 값을 변경해야 합니다.

3.14.3. 가비지 수집되는 개체 수 보기

성능 덤프에서 gc_retire_object 매개변수를 사용하여 Ceph Object Gateway를 다시 시작하므로 가비지 수집된 개체 수를 볼 수 있습니다.

이 카운터는 Ceph Object Gateway의 특정 시간에 있는 개체 수(예: 매주, 일별 또는 시간별)의 평균 개체 수 간에 delta를 확인하도록 모니터링할 수 있습니다. Ceph Object Gateway에 따라 가비지 컬렉션이 얼마나 효율적으로 진행되는지 결정하는 데 사용할 수 있습니다.

소켓 파일은 /var/run/ceph 디렉터리에 있습니다.

사전 요구 사항

  • Ceph Object Gateway가 설치된 실행 중인 Red Hat Ceph Storage 클러스터.
  • 스토리지 클러스터의 모든 노드에 대한 루트 수준 액세스.
  • Ceph 모니터에 설치된 ceph-common 패키지입니다.

절차

  • gc_retire_object 카운터에 대해 grep 을 사용하여 성능 카운터 데이터에 액세스합니다.

    구문

    ceph --admin-daemon PATH_TO_SOCKET_FILE perf dump | grep gc_retire_object

    예제

    [root@mon ~]# ceph --admin-daemon /var/run/ceph/ceph-client.rgw.f27-h25-000-6048r.rgw0.104.93991732704816.asok perf dump | grep gc_retire_object

추가 리소스

3.15. Ceph Object Gateway의 데이터 개체 스토리지 최적화

버킷 라이프사이클 구성은 데이터 개체 스토리지를 최적화하여 효율성을 높이고 데이터의 수명 동안 효과적인 스토리지를 제공합니다.

Ceph Object Gateway의 S3 API는 현재 AWS 버킷 라이프 사이클 구성 작업의 하위 집합을 지원합니다.

  • 만료
  • NoncurrentVersionExpiration
  • AbortIncompleteMultipartUpload

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • 스토리지 클러스터의 모든 노드에 대한 루트 수준 액세스.

3.15.1. 버킷 라이프 사이클을 위한 병렬 스레드 처리

Ceph Object Gateway를 사용하면 여러 Ceph Object Gateway 인스턴스에서 버킷 라이프사이클의 병렬 스레드 처리를 수행할 수 있습니다. 병렬로 실행되는 스레드 수를 늘리면 Ceph Object Gateway에서 대규모 워크로드를 보다 효율적으로 처리할 수 있습니다. 또한 Ceph Object Gateway는 in-order 번호를 사용하는 대신 인덱스 shard 열거에 숫자 시퀀스를 사용합니다.

3.15.2. 버킷 라이프사이클 최적화

Ceph 구성 파일의 두 가지 옵션은 버킷 라이프사이클 처리 효율성에 영향을 줍니다.

  • rgw_lc_max_worker 은 병렬로 실행할 라이프사이클 작업자 스레드 수를 지정합니다. 이를 통해 버킷 및 인덱스 샤드를 동시에 처리할 수 있습니다. 이 옵션의 기본값은 3입니다.
  • rgw_lc_max_wp_worker 은 각 라이프사이클 작업자 스레드의 작업 풀에 있는 스레드 수를 지정합니다. 이 옵션은 각 버킷의 처리를 가속화하는 데 도움이 됩니다. 이 옵션의 기본값은 3입니다.

많은 버킷이 있는 워크로드의 경우, 예를 들어 수천 개의 버킷이 있는 워크로드는 rgw_lc_max_worker 옵션 값을 늘립니다.

버킷 수가 적지만 각 버킷에 더 많은 오브젝트 수가 있는 워크로드의 경우(예: rgw_lc_max_wp_worker 옵션 값을 늘리는 수만).

참고

이러한 옵션 중 가치를 높이기 전에 현재 스토리지 클러스터 성능과 Ceph Object Gateway 활용도를 검증하십시오. 이 옵션 중 하나에 대해 값을 10개 이상 할당하는 것은 권장되지 않습니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • 스토리지 클러스터의 모든 노드에 대한 루트 수준 액세스.

절차

  1. 편집을 위해 /etc/ceph/ceph.conf 를 엽니다.
  2. 병렬로 실행할 스레드 수를 늘리려면 rgw_lc_max_worker 값을 3에서 9 사이의 값으로 설정합니다.

    구문

    rgw_lc_max_worker = VALUE

    예제

    rgw_lc_max_worker = 7

  3. 각 스레드의 작업 풀의 스레드 수를 늘리려면 rgw_lc_max_wp_worker 값을 3에서 9 사이의 값으로 설정합니다.

    구문

    rgw_lc_max_wp_worker = VALUE

    예제

    rgw_lc_max_wp_worker = 7

  4. Ceph Object Gateway를 다시 시작하여 변경된 설정을 적용할 수 있습니다.
  5. 스토리지 클러스터를 모니터링하여 증가한 값이 성능에 부정적인 영향을 미치지 않는지 확인합니다.

추가 리소스

3.15.3. 추가 리소스

3.16. Ceph Object Gateway 및 다단계 인증

스토리지 관리자는 Ceph Object Gateway 사용자에 대해 시간 기반 TOTP(한 번 암호) 토큰을 관리할 수 있습니다.

3.16.1. 다단계 인증

버킷이 오브젝트 버전 지정에 대해 구성되면 삭제 요청에 MFA(Multi-factor Authentication)가 필요하도록 버킷을 선택적으로 구성할 수 있습니다. MFA를 사용하면 시간 기반 TOTP(한 번 암호) 토큰이 x-amz-mfa 헤더에 키로 전달됩니다. 토큰은 Google Authenticator와 같은 가상 MFA 장치 또는 Gemalto에서 제공하는 것과 같은 하드웨어 MFA 장치로 생성됩니다.

radosgw-admin 을 사용하여 시간 기반 암호 토큰을 사용자에게 할당합니다. 시크릿 시드와 직렬 ID를 설정해야 합니다. radosgw-admin 을 사용하여 토큰을 나열, 제거 및 재동기화할 수도 있습니다.

중요

MFA ID는 사용자 메타데이터에 설정되는 반면 실제 MFA 암호 구성은 로컬 영역의 OSD에 있으므로 다중 사이트 환경에서 다른 영역에 다른 토큰을 사용하는 것이 좋습니다.

표 3.1. 용어

용어설명

TOTP

시간 기반 1회 암호.

토큰 직렬

TOTP 토큰의 ID를 나타내는 문자열입니다.

토큰 시드

TOTP를 계산하는 데 사용되는 시크릿 시드입니다. 16진수 또는 base32일 수 있습니다.

TOTP 초

TOTP 생성에 사용되는 시간 확인.

TOTP 창

토큰을 검증할 때 현재 토큰 전후에 확인되는 TOTP 토큰 수입니다.

TOTP PIN

특정 시간에 TOTP 토큰의 유효한 값입니다.

3.16.2. 다단계 인증을 위한 시드 생성

MFA(다중 인증)를 설정하려면 일회성 암호 생성기 및 백엔드 MFA 시스템에서 사용할 비밀 시드를 생성해야 합니다.

사전 요구 사항

  • Linux 시스템.
  • 명령줄 쉘에 대한 액세스.

절차

  1. urandom Linux 장치 파일에서 30자 시드를 생성하고 쉘 변수 SEED 에 저장합니다.

    예제

    [user@host ~]$ SEED=$(head -10 /dev/urandom | sha512sum | cut -b 1-30)

  2. SEED 변수에서 echo를 실행하여 시드를 출력합니다.

    예제

    [user@host ~]$ echo $SEED
    492dedb20cf51d1405ef6a1316017e

    동일한 시드를 사용하도록 일회성 암호 생성기 및 백엔드 MFA 시스템을 구성합니다.

추가 리소스

3.16.3. 새 다단계 인증 TOTP 토큰 생성

새 MFA(다중 인증) 시간 기반 TOTP(한 번 암호) 토큰을 만듭니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • Ceph Object Gateway가 설치되어 있습니다.
  • Ceph 모니터 노드에서 root 액세스 권한이 있습니다.
  • 일회성 암호 생성기 및 Ceph Object Gateway MFA의 시크릿 시드가 생성되었습니다.

절차

  1. 새 MFA TOTP 토큰을 생성합니다.

    구문

    radosgw-admin mfa create --uid=USERID --totp-serial=SERIAL --totp-seed=SEED --totp-seed-type=SEED_TYPE --totp-seconds=TOTP_SECONDS --totp-window=TOTP_WINDOW

    USERID 를 사용자 이름으로 설정하여 에서 MFA를 설정하고, SERIAL 을 TOTP 토큰의 ID를 나타내는 문자열로 설정하고, SEED 를 TOTP 계산에 사용되는 16진수 또는 base32 값으로 설정합니다. 다음 설정은 선택 사항입니다. SEED_TYPE16진수 또는 base32 로 설정하고 TOTP_SECONDS 를 초 단위로 설정하거나 TOTP_WINDOW 를 TOTP 토큰 수로 설정하여 토큰을 검증할 때 현재 토큰을 확인할 수 있습니다.

    예제

    [root@mon ~]# radosgw-admin mfa create --uid=johndoe --totp-serial=MFAtest --totp-seed=492dedb20cf51d1405ef6a1316017e

추가 리소스

3.16.4. 다단계 인증 TOTP 토큰 테스트

MFA(다중 인증) 시간 기반 TOTP(한 번 암호) 토큰을 테스트합니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • Ceph Object Gateway가 설치되어 있습니다.
  • Ceph 모니터 노드에서 root 액세스 권한이 있습니다.
  • MFA TOTP 토큰은 radosgw-admin mfa create를 사용하여 생성되었습니다.

절차

  1. TOTP 토큰 PIN을 테스트하여 TOTP가 올바르게 작동하는지 확인합니다.

    구문

    radosgw-admin mfa check --uid=USERID --totp-serial=SERIAL --totp-pin=PIN

    USERID 를 사용자 이름 MFA로 설정하고, SERIAL 을 TOTP 토큰의 ID를 나타내는 문자열로 설정하고, 일회성 암호 생성기에서 PIN을 최신 PIN으로 설정합니다.

    예제

    [root@mon ~] # radosgw-admin mfa check  --uid=johndoe --totp-serial=MFAtest --totp-pin=870305
    ok

    PIN을 처음 테스트한 경우 실패할 수 있습니다. 실패하면 토큰을 다시 동기화합니다. Red Hat Ceph Storage 개체 게이트웨이 구성 및 관리 가이드에서 다단계 인증 토큰 다시 동기화 를 참조하십시오.

추가 리소스

3.16.5. 다단계 인증 TOTP 토큰 다시 동기화

MFA(다중 인증) 시간 기반 암호 토큰을 다시 동기화합니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • Ceph Object Gateway가 설치되어 있습니다.
  • Ceph 모니터 노드에서 root 액세스 권한이 있습니다.
  • MFA TOTP 토큰은 radosgw-admin mfa create를 사용하여 생성되었습니다.

절차

  1. 시간 차이 또는 실패한 검사의 경우 다단계 인증 TOTP 토큰을 다시 동기화합니다.

    이를 위해서는 두 개의 연속된 고정, 즉 이전의 고정과 현재 고정을 전달해야 합니다.

    구문

    radosgw-admin mfa resync --uid=USERID --totp-serial=SERIAL --totp-pin=PREVIOUS_PIN --totp=pin=CURRENT_PIN

    USERID 를 사용자 이름 MFA로 설정하고, SERIAL 을 TOTP 토큰의 ID를 나타내는 문자열로 설정하고, PREVIOUS_PIN 을 사용자의 이전 PIN으로 설정하고, CURRENT_PIN 을 사용자의 현재 PIN으로 설정합니다.

    예제

    radosgw-admin mfa resync --uid=johndoe --totp-serial=MFAtest --totp-pin=802017 --totp-pin=439996

  2. 새 PIN을 테스트하여 토큰이 다시 동기화되었는지 확인합니다.

    구문

    radosgw-admin mfa check --uid=USERID --totp-serial=SERIAL --totp-pin=PIN

    USERID 를 사용자 이름 MFA로 설정하고, SERIAL 을 TOTP 토큰의 ID를 나타내는 문자열로 설정하고 PIN 을 사용자의 PIN으로 설정합니다.

    예제

    [root@mon ~]# radosgw-admin mfa check  --uid=johndoe --totp-serial=MFAtest --totp-pin=870305
    ok

추가 리소스

3.16.6. 다단계 인증 TOTP 토큰 나열

특정 사용자가 보유한 모든 MFA(다중 인증) 시간 기반 TOTP(한 번 암호) 토큰을 나열합니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • Ceph Object Gateway가 설치되어 있습니다.
  • Ceph 모니터 노드에서 root 액세스 권한이 있습니다.
  • MFA TOTP 토큰은 radosgw-admin mfa create를 사용하여 생성되었습니다.

절차

  1. MFA TOTP 토큰을 나열합니다.

    구문

    radosgw-admin mfa list --uid=USERID

    USERID 를 사용자 이름 MFA로 설정합니다.

    예제

    [root@mon ~]# radosgw-admin mfa list --uid=johndoe
    {
        "entries": [
            {
                "type": 2,
                "id": "MFAtest",
                "seed": "492dedb20cf51d1405ef6a1316017e",
                "seed_type": "hex",
                "time_ofs": 0,
                "step_size": 30,
                "window": 2
            }
        ]
    }

추가 리소스

3.16.7. 다단계 인증 TOTP 토큰 표시

직렬를 지정하여 특정 MFA(다중 인증) 시간 기반 일회성 암호(TOTP) 토큰을 표시합니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • Ceph Object Gateway가 설치되어 있습니다.
  • Ceph 모니터 노드에서 root 액세스 권한이 있습니다.
  • MFA TOTP 토큰은 radosgw-admin mfa create를 사용하여 생성되었습니다.

절차

  1. MFA TOTP 토큰을 표시합니다.

    구문

    radosgw-admin mfa get --uid=USERID --totp-serial=SERIAL

    USERID 를 사용자 이름 MFA로 설정하고 SERIAL 을 TOTP 토큰의 ID를 나타내는 문자열로 설정합니다.

추가 리소스

3.16.8. 다단계 인증 TOTP 토큰 삭제

MFA(다중 인증) 시간 기반 TOTP(한 번 암호) 토큰을 삭제합니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • Ceph Object Gateway가 설치되어 있습니다.
  • Ceph 모니터 노드에서 root 액세스 권한이 있습니다.
  • MFA TOTP 토큰은 radosgw-admin mfa create를 사용하여 생성되었습니다.

절차

  1. MFA TOTP 토큰을 삭제합니다.

    구문

    radosgw-admin mfa remove --uid=USERID --totp-serial=SERIAL

    USERID 를 사용자 이름 MFA로 설정하고 SERIAL 을 TOTP 토큰의 ID를 나타내는 문자열로 설정합니다.

    예제

    [root@mon ~]# radosgw-admin mfa remove --uid=johndoe --totp-serial=MFAtest

  2. MFA TOTP 토큰이 삭제되었는지 확인합니다.

    구문

    radosgw-admin mfa get --uid=_USERID_ --totp-serial=_SERIAL_

    USERID 를 사용자 이름 MFA로 설정하고 SERIAL 을 TOTP 토큰의 ID를 나타내는 문자열로 설정합니다.

    예제

    [root@mon ~]# radosgw-admin mfa get --uid=johndoe --totp-serial=MFAtest
    MFA serial id not found

추가 리소스

3.17. Ansible을 사용하여 Ceph Object Gateway 제거

Ansible을 사용하여 Ceph Object Gateway를 제거하려면 shrink-rgw.yml 플레이북을 사용합니다.

사전 요구 사항

  • Ansible 관리 노드.
  • Ansible에서 배포한 Red Hat Ceph Storage 클러스터 실행.

절차

  1. /usr/share/ceph-ansible/ 디렉터리로 변경합니다.

    [user@admin ~]$ cd /usr/share/ceph-ansible
  2. 베어 메탈컨테이너 배포의 경우 shrink-rgw.yml Ansible 플레이북을 실행합니다.

    구문

    ansible-playbook infrastructure-playbooks/shrink-rgw.yml -e rgw_to_kill=HOSTNAME.rgw_INSTANCE_NAME_ -u ANSIBLE_USER_NAME -i hosts

    교체:

    • Ceph Object Gateway 노드의 짧은 호스트 이름이 있는 HOSTNAME. 플레이북이 실행될 때마다 하나의 Ceph Object Gateway만 제거할 수 있습니다.
    • Ansible 사용자의 이름이 있는 ANSIBLE_USER_NAME

    예제

    [user@admin ceph-ansible]$ ansible-playbook infrastructure-playbooks/shrink-rgw.yml -e rgw_to_kill=node03.rgw0 -u admin -i hosts

  3. 스토리지 클러스터의 모든 Ceph 구성 파일에서 Ceph Object Gateway 항목을 제거합니다.
  4. Ceph Object Gateway가 제대로 제거되었는지 확인합니다.

    [root@mon ~]# ceph -s

4장. 설정 참조

다음 설정은 [client.rgw .<instance_name>] 섹션 아래에 Ceph 구성 파일, 즉 ceph. conf 에 추가할 수 있습니다. 설정에 기본값이 포함될 수 있습니다. Ceph 구성 파일에서 각 설정을 지정하지 않으면 기본값이 자동으로 설정됩니다.

[client.rgw.<instance_name>] 섹션에 설정된 구성 변수는 명령에 지정된 instance_name 없이 rgw 또는 radosgw-admin 명령에 적용되지 않습니다. 따라서 모든 Ceph Object Gateway 인스턴스 또는 모든 radosgw-admin 명령에 적용해야 하는 변수를 [global] 또는 [client] 섹션에 배치하여 instance_name 을 지정하지 않도록 할 수 있습니다.

4.1. 일반 설정

이름설명유형Default

rgw_data

Ceph Object Gateway의 데이터 파일 위치를 설정합니다.

문자열

/var/lib/ceph/radosgw/$cluster-$id

rgw_enable_apis

지정된 API를 활성화합니다.

문자열

s3, s3website, swift, swift_auth, admin, sts, iam, pubsub

rgw_cache_enabled

Ceph Object Gateway 캐시가 활성화되었는지 여부.

부울

true

rgw_cache_lru_size

Ceph Object Gateway 캐시의 항목 수입니다.

정수

10000

rgw_socket_path

도메인 소켓의 소켓 경로입니다. FastCgiExternalServer 는 이 소켓을 사용합니다. 소켓 경로를 지정하지 않으면 Ceph Object Gateway가 외부 서버로 실행되지 않습니다. 여기서 지정하는 경로는 rgw.conf 파일에 지정된 경로와 동일해야 합니다.

문자열

해당 없음

rgw_host

Ceph Object Gateway 인스턴스의 호스트입니다. IP 주소 또는 호스트 이름이 될 수 있습니다.

문자열

0.0.0.0

rgw_port

인스턴스가 요청을 수신 대기하는 포트입니다. 지정하지 않으면 Ceph Object Gateway가 외부 FastCGI를 실행합니다.

문자열

없음

rgw_dns_name

제공된 도메인의 DNS 이름입니다. 영역 그룹 내에서 hostnames 설정도 참조하십시오.

문자열

없음

rgw_script_uri

요청에 설정되지 않은 경우 SCRIPT_URI 의 대체 값입니다.

문자열

없음

rgw_request_uri

요청에 설정되지 않은 경우 REQUEST_URI 의 대체 값입니다.

문자열

없음

rgw_print_continue

작동 중인 경우 100-continue 를 활성화합니다.

부울

true

rgw_remote_addr_param

원격 address 매개 변수. 예를 들어 원격 주소를 포함하는 HTTP 필드 또는 역방향 프록시가 작동하는 경우 X-Forwarded-For 주소가 사용됩니다.

문자열

REMOTE_ADDR

rgw_op_thread_timeout

열린 스레드의 시간 제한(초)입니다.

정수

600

rgw_op_thread_suicide_timeout

Ceph Object Gateway 프로세스가 종료되기 전의 시간 제한 (초)입니다. 0으로 설정하면 비활성화됩니다.

정수

0

rgw_thread_pool_size

스레드 풀의 크기입니다.

정수

512 스레드.

rgw_num_control_oids

다양한 rgw 인스턴스 간의 캐시 동기화에 사용되는 알림 개체 수입니다.

정수

8

rgw_init_timeout

Ceph Object Gateway가 초기화 시 종료되는 시간(초)입니다.

정수

30

rgw_mime_types_file

MIME 유형의 경로 및 위치입니다. 오브젝트 유형의 Swift 자동 감지에 사용됩니다.

문자열

/etc/mime.types

rgw_gc_max_objs

하나의 가비지 컬렉션 처리 주기에서 가비지 컬렉션에서 처리할 수 있는 최대 개체 수입니다.

정수

32

rgw_gc_obj_min_wait

가비지 컬렉션 처리로 개체를 제거하고 처리할 수 있는 최소 대기 시간입니다.

정수

2 * 3600

rgw_gc_processor_max_time

연속된 가비지 컬렉션 처리 주기의 시작 시간 최대 시간입니다.

정수

3600

rgw_gc_processor_period

가비지 컬렉션 처리를 위한 사이클 시간입니다.

정수

3600

rgw_s3 success_create_obj_status

create-obj 의 대체 성공 상태 응답입니다.

정수

0

rgw_resolve_cname

rgw 가 요청 호스트 이름 필드의 DNS CNAME 레코드를 사용해야 하는지 여부(호스트 이름이 rgw_dns 이름과동일하지 않은 경우).

부울

false

rgw_object_stripe_size

Ceph Object Gateway 오브젝트의 오브젝트 스트라이프 크기입니다.

정수

4 << 20

rgw_extended_http_attrs

개체에 설정할 수 있는 새 속성 세트를 추가합니다. 이러한 추가 속성은 오브젝트를 배치할 때 HTTP 헤더 필드를 통해 설정할 수 있습니다. 설정된 경우 오브젝트에서 GET/HEAD를 수행할 때 이러한 속성이 HTTP 필드로 반환됩니다.

문자열

없음. 예: "content_foo, content_bar"

rgw_exit_timeout_secs

무조건 종료하기 전에 프로세스 대기 시간(초)입니다.

정수

120

rgw_get_obj_window_size

단일 개체 요청에 대한 창 크기(바이트)입니다.

정수

16 << 20

rgw_get_obj_max_req_size

Ceph Storage 클러스터에 전송된 단일 get 작업의 최대 요청 크기입니다.

정수

4 << 20

rgw_relaxed_s3_bucket_names

영역 그룹 버킷에 대해 완화된 S3 버킷 규칙을 활성화합니다.

부울

false

rgw_list buckets_max_chunk

사용자 버킷을 나열할 때 단일 작업에서 검색할 최대 버킷 수입니다.

정수

1000

rgw_override_bucket_index_max_shards

버킷 인덱스 오브젝트의 shard 수입니다. 값 0 은 분할이 없음을 나타냅니다. 버킷 목록 비용이 증가하므로 너무 큰 값을 설정하지 않는 것이 좋습니다(예: 1000).

radosgw-admin 명령에 자동으로 적용되도록 이 변수는 [client] 또는 [global] 섹션에 설정해야 합니다.

정수

0

rgw_curl_wait_timeout_ms

특정 curl 호출에 대한 시간 제한(밀리초)입니다.

정수

1000

rgw_copy_obj_progress

긴 복사 작업 중에 오브젝트 진행 상황을 활성화합니다.

부울

true

rgw_copy_obj_progress_every_bytes

복사 진행률 출력 사이의 최소 바이트입니다.

정수

1024 * 1024

rgw_admin_entry

관리자 요청 URL의 진입점입니다.

문자열

admin

rgw_content_length_compat

CONTENT_LENGTH 및 HTTP_CONTENT_LENGTH 세트를 사용하여 FCGI 요청의 호환성 처리를 활성화합니다.

부울

false

rgw_bucket_default_quota_max_objects

버킷당 기본 최대 오브젝트 수입니다. 이 값은 다른 할당량이 지정되지 않은 경우 새 사용자에게 설정됩니다. 기존 사용자에게는 영향을 미치지 않습니다.

radosgw-admin 명령에 자동으로 적용되도록 이 변수는 [client] 또는 [global] 섹션에 설정해야 합니다.

정수

-1

rgw_bucket_quota_ttl

캐시된 할당량 정보(초)가 신뢰할 수 있는 시간(초)이 신뢰됩니다. 이 시간 초과 후에는 클러스터에서 할당량 정보를 다시 가져옵니다.

정수

600

rgw_user_quota_bucket_sync_interval

클러스터와 동기화하기 전에 버킷 할당량 정보가 누적되는 시간(초)입니다. 이 기간 동안 다른 RGW 인스턴스는 이 인스턴스의 작업에서 버킷 할당량 통계가 변경되지 않습니다.

정수

180

rgw_user_quota_sync_interval

클러스터와 동기화하기 전에 사용자 할당량 정보가 누적되는 시간(초)입니다. 이 기간 동안 다른 RGW 인스턴스에는 이 인스턴스의 작업에서 사용자 할당량 통계가 변경되지 않습니다.

정수

3600 * 24

log_meta

게이트웨이가 메타데이터 작업을 기록하는지 여부를 결정하는 zone 매개변수입니다.

부울

false

log_data

게이트웨이가 데이터 작업을 기록하는지 여부를 결정하는 zone 매개변수입니다.

부울

false

sync_from_all

모든 영역 그룹 피어에서 영역을 동기화하는지 여부를 설정하는 radosgw-admin 명령입니다.

부울

false

4.2. 풀 정보

Ceph 영역은 일련의 Ceph Storage 클러스터 풀에 매핑됩니다.

수동으로 생성된 풀과. 생성된 풀

Ceph Object Gateway의 사용자 키에 쓰기 기능이 포함된 경우 게이트웨이에서 풀을 자동으로 만들 수 있습니다. 이 기능은 시작 시 편리합니다. 그러나 Ceph Object Storage 클러스터에서는 Ceph 구성 파일에 설정되지 않은 한 배치 그룹 기본값을 사용합니다. 또한 Ceph는 기본 CRUSH 계층 구조를 사용합니다. 이러한 설정은 프로덕션 시스템에 적합하지 않습니다.

프로덕션 시스템을 설정하려면 Red Hat Ceph Storage 4에 대한 Ceph Object Gateway for Production 가이드를 참조하십시오. 스토리지 전략은 Ceph Object Gateway for Production 가이드의 Developing Storage Strategies 섹션을 참조하십시오.

Ceph Object Gateway의 기본 영역에 대한 기본 풀은 다음과 같습니다.

  • .rgw.root
  • .default.rgw.control
  • .default.rgw.meta
  • .default.rgw.log
  • .default.rgw.buckets.index
  • .default.rgw.buckets.data
  • .default.rgw.buckets.non-ec

Ceph Object Gateway는 영역별로 풀을 생성합니다. 풀을 수동으로 생성하는 경우 영역 이름 앞에 추가합니다. 시스템 풀은 시스템 제어, 로깅, 사용자 정보 등과 관련된 오브젝트를 저장합니다. 관례적으로 이러한 풀 이름에는 풀 이름에 앞에 붙은 영역 이름이 있습니다.

  • .<zone-name>.rgw.control: 제어 풀입니다.
  • .<zone-name>.log: 로그 풀에는 모든 버킷/컨테이너의 로그와 create, read, update, delete 등의 오브젝트 작업이 포함됩니다.
  • .<zone-name>.rgw.buckets.index: 이 풀은 buckes의 인덱스를 저장합니다.
  • .<zone-name>.rgw.buckets.data: 이 풀은 버킷의 데이터를 저장합니다.
  • .<zone-name>.rgw.meta: 메타데이터 풀은 user_keys 및 기타 중요한 메타데이터를 저장합니다.
  • .<zone-name>.meta:users.uid: 사용자 ID 풀에는 고유한 사용자 ID 맵이 포함되어 있습니다.
  • .<zone-name>.meta:users.keys: 키 풀에는 각 사용자 ID에 대한 액세스 키 및 비밀 키가 포함됩니다.
  • .<zone-name>.meta:users.email: 이메일 풀에는 사용자 ID와 연결된 이메일 주소가 포함됩니다.
  • .<zone-name>.meta:users.swift: Swift 풀에는 사용자 ID에 대한 Swift 하위 사용자 정보가 포함되어 있습니다.

Ceph 개체 게이트웨이는 버킷 인덱스(index_pool) 및 버킷 데이터(data_pool)의 데이터를배치 풀에 저장합니다. 이러한 설정이 중복될 수 있습니다. 즉, 인덱스와 데이터에 동일한 풀을 사용할 수 있습니다. 기본 배치를 위한 인덱스 풀은 {zone-name}.rgw.buckets.index 이며 기본 배치를 위한 데이터 풀의 경우 {zone-name}.rgw.buckets 입니다.

이름설명유형Default

rgw_zonegroup_root_pool

모든 영역 그룹별 정보를 저장하는 풀입니다.

문자열

.rgw.root

rgw_zone_root_pool

영역별 정보를 저장하기 위한 풀입니다.

문자열

.rgw.root

4.3. 라이프사이클 설정

스토리지 관리자는 Ceph Object Gateway에 대해 다양한 버킷 라이프사이클 옵션을 설정할 수 있습니다. 이러한 옵션에는 기본값이 포함되어 있습니다. 각 옵션을 지정하지 않으면 기본값은 자동으로 설정됩니다.

이러한 옵션에 대한 특정 값을 설정하려면 ceph config set client.rgw OPTION VALUE 명령을 사용하여 구성 데이터베이스를 업데이트합니다.

이름설명유형Default

rgw_lc_debug_interval

개발자의 경우 만료 규칙을 며칠에서 초 단위로 확장하여 라이프사이클 규칙을 디버깅하는 데만 사용합니다. Red Hat은 이 옵션을 프로덕션 클러스터에서는 사용하지 않는 것이 좋습니다.

정수

-1

rgw_lc_lock_max_time

Ceph Object Gateway에서 내부적으로 사용하는 시간 제한 값입니다.

정수

90

rgw_lc_max_objs

RADOS 게이트웨이 내부 라이프사이클의 작업 대기열 분할을 제어하며, 고의적 재전송 워크플로의 일부로만 설정해야 합니다. Red Hat은 먼저 Red Hat 지원에 문의하지 않고 클러스터 설정 후 이 설정을 변경하지 않는 것이 좋습니다.

정수

32

rgw_lc_max_rules

버킷당 하나의 라이프사이클 규칙, 라이프사이클 구성 문서에 포함할 라이프사이클 규칙 수입니다. AWS(Amazon Web Service) 제한은 1000개의 규칙입니다.

정수

1000

rgw_lc_max_worker

병렬로 실행할 라이프사이클 작업자 스레드 수, 버킷 및 인덱스 shard를 동시에 처리합니다. Red Hat은 Red Hat 지원에 연락하지 않고 10보다 큰 값을 설정하지 않는 것이 좋습니다.

정수

3

rgw_lc_max_wp_worker

각 라이프사이클 작업자 스레드가 병렬로 처리할 수 있는 버킷 수입니다. Red Hat은 Red Hat 지원팀에 문의하지 않고 10보다 큰 값을 설정하지 않는 것이 좋습니다.

정수

3

rgw_lc_thread_delay

여러 지점에서 shard 처리에 삽입할 수 있는 지연(밀리초)입니다. 기본값은 0입니다. 값을 10에서 100ms로 설정하면 RADOS Gateway 인스턴스의 CPU 사용률이 감소되고 포화 상태가 관찰되는 경우의 수집과 관련된 라이프사이클 스레드의 워크로드 용량 비율을 줄일 수 있습니다.

정수

0

4.4. Swift 설정

이름설명유형Default

rgw_enforce_swift_acls

Swift ACL(액세스 제어 목록) 설정을 적용합니다.

부울

true

rgw_swift_token_expiration

Swift 토큰을 만료하는 시간(초)입니다.

정수

24 * 3600

rgw_swift_url

Ceph Object Gateway Swift API의 URL입니다.

문자열

없음

rgw_swift_url_prefix

Swift API의 URL 접두사(예: http://fqdn.com/swift) .

swift

해당 없음

rgw_swift_auth_url

v1 인증 토큰을 확인하기 위한 기본 URL입니다(내부 Swift 인증을 사용하지 않는 경우).

문자열

없음

rgw_swift_auth_entry

Swift 인증 URL의 진입점입니다.

문자열

auth

4.5. 로깅 설정

이름설명유형Default

rgw_log_nonexistent_bucket

Ceph Object Gateway를 통해 존재하지 않는 버킷에 대한 요청을 기록할 수 있습니다.

부울

false

rgw_log_object_name

오브젝트 이름의 로깅 형식입니다. 형식 지정기에 대한 자세한 내용은 manpage 날짜를 참조하십시오.

날짜

%Y-%m-%d-%H-%i-%n

rgw_log_object_name_utc

기록된 개체 이름에 UTC 시간이 포함되어 있는지 여부. false인 경우 로컬 시간을 사용합니다.

부울

false

rgw_usage_max_shards

사용 로깅을 위한 최대 shard 수입니다.

정수

32

rgw_usage_max_user_shards

단일 사용자의 사용 로깅에 사용되는 최대 shard 수입니다.

정수

1

rgw_enable_ops_log

Ceph Object Gateway 작업이 성공할 때마다 로깅을 활성화합니다.

부울

false

rgw_enable_usage_log

사용 로그를 활성화합니다.

부울

false

rgw_ops_log_rados

작업 로그를 Ceph Storage 클러스터 백엔드에 작성할지 여부.

부울

true

rgw_ops_log_socket_path

작업 로그를 작성하는 Unix 도메인 소켓.

문자열

없음

rgw_ops_log_data-backlog

Unix 도메인 소켓에 기록된 작업에 대한 최대 데이터 백로그 데이터 크기입니다.

정수

5 << 20

rgw_usage_log_flush_threshold

동시에 플러시하기 전에 사용 로그에서 더티 병합 항목의 수입니다.

정수

1024

rgw_usage_log_tick_interval

대기 중인 사용 로그 데이터를 n 초마다 플러시합니다.

정수

30

rgw_intent_log_object_name

의도한 로그 오브젝트 이름의 로깅 형식입니다. 형식 지정기에 대한 자세한 내용은 manpage 날짜를 참조하십시오.

날짜

%Y-%m-%d-%i-%n

rgw_intent_log_object_name_utc

의도 로그 오브젝트 이름에 UTC 시간이 포함되어 있는지 여부. false인 경우 로컬 시간을 사용합니다.

부울

false

rgw_data_log_window

데이터 로그 항목(초)입니다.

정수

30

rgw_data_log_changes_size

데이터 변경 로그에 대해 보유할 메모리 내 항목 수입니다.

정수

1000

rgw_data_log_num_shards

데이터 변경 로그를 보관할 shard(개체) 수입니다.

정수

128

rgw_data_log_obj_prefix

데이터 로그의 개체 이름 접두사입니다.

문자열

data_log

rgw_replica_log_obj_prefix

복제본 로그의 오브젝트 이름 접두사입니다.

문자열

복제 로그

rgw_md_log_max_shards

메타데이터 로그의 최대 shard 수입니다.

정수

64

4.6. Keystone 설정

이름설명유형Default

rgw_keystone_url

Keystone 서버의 URL입니다.

문자열

없음

rgw_keystone_admin_token

Keystone 관리 토큰(공유 비밀).

문자열

없음

rgw_keystone_accepted_roles

이 역할은 요청을 처리해야 합니다.

문자열

멤버, admin

rgw_keystone_token_cache_size

각 Keystone 토큰 캐시의 최대 항목 수입니다.

정수

10000

rgw_keystone_revocation_interval

토큰 폐기 검사 간 시간(초)입니다.

정수

15 * 60

4.7. LDAP 설정

이름설명유형예제

rgw_ldap_uri

URI 형식으로 이루어진 LDAP 서버의 공백으로 구분된 목록입니다.

문자열

ldaps://<ldap.your.domain>

rgw_ldap_searchdn

LDAP 검색 도메인 이름(기본 도메인이라고도 함).

문자열

cn=users,cn=accounts,dc=example,dc=com

rgw_ldap_binddn

게이트웨이는 이 LDAP 항목(사용자 일치)과 바인딩됩니다.

문자열

uid=admin,cn=users,dc=example,dc=com

rgw_ldap_secret

rgw_ldap_binddn에 대한 자격 증명이 포함된 파일

문자열

/etc/openldap/secret

rgw_ldap_dnattr

Ceph 개체 게이트웨이 사용자 이름이 포함된 LDAP 속성(Bounddns 형식).

문자열

UID

5장. 다중 사이트

단일 영역 구성은 일반적으로 하나의 영역과 인스턴스 간에 게이트웨이 클라이언트 요청을 로드 밸런싱할 수 있는 하나 이상의 ceph-radosgw 인스턴스를 포함하는 하나의 영역 그룹으로 구성됩니다. 단일 영역 구성에서 일반적으로 여러 게이트웨이 인스턴스가 단일 Ceph 스토리지 클러스터를 가리킵니다. 그러나 Red Hat은 Ceph Object Gateway에 대한 여러 다중 사이트 구성 옵션을 지원합니다.

  • 다중 영역: 고급 구성은 하나 이상의 ceph-radosgw 인스턴스가 있는 하나의 영역 그룹과 여러 영역으로 구성됩니다. 각 영역은 자체 Ceph Storage 클러스터에서 지원합니다. 영역 그룹의 여러 영역은 영역 그룹 중 하나에 심각한 오류가 발생하는 경우 재해 복구를 제공합니다. 각 영역이 활성화되어 있으며 쓰기 작업을 수신할 수 있습니다. 재해 복구 외에도 여러 활성 영역이 콘텐츠 전달 네트워크의 기반 역할을 할 수도 있습니다. 복제 없이 여러 영역을 구성하려면 5.12절. “복제없이 다중 영역 구성” 을 참조하십시오.
  • 다중 영역 그룹: 이전의 'regions'라고 하는 Ceph Object Gateway는 하나 이상의 영역이 있는 여러 영역 그룹인 여러 영역 그룹을 지원할 수도 있습니다. 동일한 영역 내의 영역 그룹에 저장된 오브젝트는 글로벌 네임스페이스를 공유하여 영역 그룹 및 영역 간에 고유한 오브젝트 ID를 보장합니다.
  • 여러 영역: Ceph 개체 게이트웨이는 단일 영역 그룹 또는 여러 영역 그룹일 수 있으며 영역의 전역 고유 네임스페이스일 수 있는 영역 개념을 지원합니다. 여러 영역은 다양한 구성 및 네임스페이스를 지원하는 기능을 제공합니다.
게이트웨이 영역

5.1. 요구 사항 및 가정

다중 사이트 구성에는 Ceph 스토리지 클러스터 2개 이상과 Ceph 개체 게이트웨이 인스턴스가 각각 하나씩 있어야 합니다.

이 가이드에서는 지리적으로 분리된 위치에 있는 두 개 이상의 Ceph 스토리지 클러스터를 가정하지만, 이 구성은 동일한 물리적 사이트에서 작동할 수 있습니다. 이 가이드에서는 각각 rgw1, rgw 2, rgw 3 및 rgw 4 라는 4개의 Ceph 개체 게이트웨이 서버를 가정합니다.

다중 사이트 구성에는 마스터 영역 그룹과 마스터 영역이 필요합니다. 또한 각 영역 그룹에는 마스터 영역이 필요합니다. 영역 그룹에는 하나 이상의 보조 영역 또는 비마스터 영역이 있을 수 있습니다.

중요

영역의 마스터 영역 그룹 내의 마스터 영역은 사용자, 할당량 및 버킷( radosgw-admin CLI에서 생성)을 포함하여 영역 메타데이터의 마스터 복사본을 저장합니다. 이 메타데이터는 보조 영역 및 보조 영역 그룹과 자동으로 동기화됩니다. radosgw-admin CLI로 실행되는 메타데이터 작업은 마스터 영역 그룹의 마스터 영역 내의 호스트에서 실행하여 보조 영역 그룹 및 영역과 동기화되도록 합니다. 현재 보조 영역 및 영역 그룹에서 메타데이터 작업을 실행할 수 있지만, 동기화되지 않으므로 데이터 조각화된 메타데이터 가 생성되지 않으므로 사용하지 않는 것이 좋습니다.

다음 예에서 rgw1 호스트는 마스터 영역 그룹의 마스터 영역 역할을 합니다. rgw2 호스트는 마스터 영역 그룹의 보조 영역 역할을 합니다. rgw3 호스트는 보조 영역 그룹의 마스터 영역 역할을 하며, rgw4 호스트는 보조 영역 그룹의 보조 영역 역할을 합니다.

5.2. 풀

Red Hat은 풀당 Ceph 배치 그룹을 사용하여 ceph-radosgw 데몬이 생성할 풀에 적합한 개수의 배치 그룹을 계산하는 것이 좋습니다. Ceph 구성 파일에서 계산된 값을 기본값으로 설정합니다. 예를 들면 다음과 같습니다.

osd pool default pg num = 50
osd pool default pgp num = 50
참고

스토리지 클러스터의 Ceph 구성 파일을 변경한 다음, 게이트웨이 인스턴스가 풀을 생성할 때 이러한 기본값을 사용하도록 구성을 런타임으로 변경합니다.

또는 풀을 수동으로 만듭니다. 생성에 대한 자세한 내용은 스토리지 전략 가이드의 풀 장을 참조하십시오.

영역과 관련된 풀 이름은 이름 지정 규칙 {zone-name}.pool-name 을 따릅니다. 예를 들어 us-east 라는 영역에는 다음과 같은 풀이 있습니다.

  • .rgw.root
  • us-east.rgw.control
  • us-east.rgw.meta
  • us-east.rgw.log
  • us-east.rgw.buckets.index
  • us-east.rgw.buckets.data
  • us-east.rgw.buckets.non-ec
  • us-east.rgw.meta:users.keys
  • us-east.rgw.meta:users.email
  • us-east.rgw.meta:users.swift
  • us-east.rgw.meta:users.uid

5.3. 오브젝트 게이트웨이 설치

Ceph Object Gateway를 설치하려면 Red Hat Ceph Storage 설치 가이드를 참조하십시오.

모든 Ceph Object Gateway 노드는 Red Hat Ceph Storage 설치 요구 사항에 나열된 작업을 따라야 합니다.

Ansible은 Ceph Storage 클러스터에서 사용할 Ceph Object Gateway를 설치하고 구성할 수 있습니다. 다중 사이트 및 다중 사이트 그룹 배포의 경우 각 영역에 대한 Ansible 구성이 있어야 합니다.

Ansible을 사용하여 Ceph Object Gateway를 설치하는 경우 Ansible 플레이북에서 초기 구성을 처리합니다. Ansible을 사용하여 Ceph Object Gateway를 설치하려면 /etc/ansible/hosts 파일에 호스트를 추가합니다. [rgws] 섹션 아래에 Ceph Object Gateway 호스트를 추가하여 Ansible의 역할을 식별합니다. 호스트에 순차적 명명이 있는 경우 범위를 사용할 수 있습니다. 예를 들면 다음과 같습니다.

[rgws]
<rgw-host-name-1>
<rgw-host-name-2>
<rgw-host-name[3..10]>

호스트를 추가한 후에는 Ansible 플레이북을 다시 실행할 수 있습니다.

참고

Ansible은 게이트웨이가 실행 중인지 확인하므로 기본 영역과 풀을 수동으로 삭제해야 할 수도 있습니다. 이 가이드에서는 이러한 단계를 제공합니다.

비동기 업데이트를 사용하여 기존 다중 사이트 클러스터를 업데이트할 때 업데이트에 대한 설치 지침을 따르십시오. 그런 다음 게이트웨이 인스턴스를 다시 시작합니다.

참고

인스턴스를 다시 시작하는 데 필요한 순서가 없습니다. 마스터 영역 그룹과 마스터 영역을 먼저 재시작한 다음 보조 영역 그룹 및 보조 영역을 시작하는 것이 좋습니다.

5.4. 멀티사이트 Realm 구축

클러스터의 모든 게이트웨이에는 구성이 있습니다. 다중 사이트 영역에서 이러한 게이트웨이는 다양한 영역 그룹 및 영역에 있을 수 있습니다. 그러나 영역 내에서 함께 작업해야 합니다. 다중 사이트 영역에서 모든 게이트웨이 인스턴스는 마스터 영역 그룹 및 마스터 영역 내의 호스트의 ceph-radosgw 데몬에서 해당 구성을 검색 해야 합니다.

그 결과 다중 사이트 클러스터를 생성하는 첫 번째 단계에는 영역, 마스터 영역 그룹 및 마스터 영역을 설정하는 작업이 포함됩니다. 다중 사이트 구성에서 게이트웨이를 구성하려면 영역 구성, 마스터 영역 그룹 및 마스터 영역을 포함할 ceph-radosgw 인스턴스를 선택합니다.

5.4.1. Realm 만들기

영역에는 영역 그룹 및 영역의 다중 사이트 구성이 포함되어 있으며 영역 내에서 전역 고유 네임스페이스를 적용하는 방법도 포함됩니다.

마스터 영역 그룹 및 영역에서 제공하도록 식별된 호스트에서 명령줄 인터페이스를 열어 다중 사이트 구성에 대한 새 영역을 만듭니다. 그런 다음 다음을 실행합니다.

[root@master-zone]# radosgw-admin realm create --rgw-realm={realm-name} [--default]

예를 들면 다음과 같습니다.

[root@master-zone]# radosgw-admin realm create --rgw-realm=movies --default

클러스터에 단일 영역이 있는 경우 --default 플래그를 지정합니다. --default 가 지정되면 radosgw-admin 은 기본적으로 이 영역을 사용합니다. --default 를 지정하지 않으면 zone-groups 및 zones를 추가하려면 영역 그룹 및 영역을 추가할 때 영역을 식별하기 위해 --rgw-realm 플래그 또는 --realm-id 플래그를 지정해야 합니다.

영역을 만든 후 radosgw-admin 이 영역 구성을 에코합니다. 예를 들면 다음과 같습니다.

{
    "id": "0956b174-fe14-4f97-8b50-bb7ec5e1cf62",
    "name": "movies",
    "current_period": "1950b710-3e63-4c41-a19e-46a715000980",
    "epoch": 1
}
참고

Ceph는 영역의 고유한 ID를 생성하므로 필요한 경우 영역의 이름을 변경할 수 있습니다.

5.4.2. 마스터 영역 그룹 만들기

영역에는 영역의 마스터 영역 그룹 역할을 할 하나 이상의 영역 그룹이 있어야 합니다.

마스터 영역 그룹 및 영역에서 제공하도록 식별된 호스트에서 명령줄 인터페이스를 열어 다중 사이트 구성에 대한 새 마스터 영역 그룹을 만듭니다. 그런 다음 다음을 실행합니다.

[root@master-zone]# radosgw-admin zonegroup create --rgw-zonegroup={name} --endpoints={url} [--rgw-realm={realm-name}|--realm-id={realm-id}] --master --default

예를 들면 다음과 같습니다.

[root@master-zone]# radosgw-admin zonegroup create --rgw-zonegroup=us --endpoints=http://rgw1:80 --rgw-realm=movies --master --default

영역에 단일 영역 그룹만 있는 경우 --default 플래그를 지정합니다. --default 가 지정되면 radosgw-admin 은 새 영역을 추가할 때 기본적으로 이 영역 그룹을 사용합니다. --default 를 지정하지 않으면 영역을 추가하거나 수정할 때 영역 그룹을 식별하기 위해 --rgw -zonegroup 플래그 또는 --zonegroup-id 플래그가 필요합니다.

마스터 영역 그룹을 만들고 나면 radosgw-admin 이 영역 그룹 구성을 에코합니다. 예를 들면 다음과 같습니다.

{
    "id": "f1a233f5-c354-4107-b36c-df66126475a6",
    "name": "us",
    "api_name": "us",
    "is_master": "true",
    "endpoints": [
        "http:\/\/rgw1:80"
    ],
    "hostnames": [],
    "hostnames_s3webzone": [],
    "master_zone": "",
    "zones": [],
    "placement_targets": [],
    "default_placement": "",
    "realm_id": "0956b174-fe14-4f97-8b50-bb7ec5e1cf62"
}

5.4.3. 마스터 영역 만들기

중요

영역은 영역 내에 있는 Ceph Object Gateway 노드에서 생성해야 합니다.

마스터 영역 그룹 및 영역에서 제공하도록 식별된 호스트에서 명령줄 인터페이스를 열어 다중 사이트 구성의 마스터 영역을 만듭니다. 그런 다음 다음을 실행합니다.

[root@master-zone]# radosgw-admin zone create
                            --rgw-zonegroup={zone-group-name} \
                            --rgw-zone={zone-name} \
                            --master --default \
                            --endpoints={http://fqdn:port}[,{http://fqdn:port}]

예를 들면 다음과 같습니다.

[root@master-zone]# radosgw-admin zone create --rgw-zonegroup=us \
                            --rgw-zone=us-east \
                            --master --default \
                            --endpoints={http://fqdn:port}[,{http://fqdn:port}]
참고

access -key--secret 이 지정되지 않았습니다. 이러한 설정은 다음 섹션에서 사용자를 만들면 영역에 추가됩니다.

5.4.4. 기본 영역 그룹 및 영역 삭제

기본 영역이 있는 경우 삭제합니다. 먼저 기본 영역 그룹에서 제거해야 합니다.

중요

다음 단계에서는 아직 데이터를 저장하지 않는 새로 설치된 시스템을 사용하는 다중 사이트 구성을 가정합니다. 데이터를 저장하기 위해 이미 사용 중인 경우 기본 영역 그룹, 영역 및 해당 풀을 삭제하지 않거나 데이터를 삭제하고 복구할 수 없습니다.

기본 영역 및 zonegroup의 이전 데이터에 액세스하려면 radosgw-admin 명령에서 --rgw-zone default--rgw-zonegroup default 를 사용합니다.

  1. zonegroup 및 영역을 제거합니다.

    예제

    [root@master-zone]# radosgw-admin zonegroup remove --rgw-zonegroup=default --rgw-zone=default
    [root@master-zone]# radosgw-admin zone delete --rgw-zone=default
    [root@master-zone]# radosgw-admin zonegroup delete --rgw-zonegroup=default

  2. 클러스터가 다중 사이트 구성에 있는 경우 기간을 업데이트하고 커밋합니다.

    예제

    [root@master-zone]# radosgw-admin period update --commit

  3. Ceph 스토리지 클러스터의 기본 풀이 있는 경우 삭제합니다.

    예제

    [root@master-zone]# ceph osd pool delete default.rgw.control default.rgw.control --yes-i-really-really-mean-it
    [root@master-zone]# ceph osd pool delete default.rgw.data.root default.rgw.data.root --yes-i-really-really-mean-it
    [root@master-zone]# ceph osd pool delete default.rgw.log default.rgw.log --yes-i-really-really-mean-it
    [root@master-zone]# ceph osd pool delete default.rgw.users.uid default.rgw.users.uid --yes-i-really-really-mean-it

    중요

    풀을 삭제한 후 Ceph Object Gateway 프로세스를 다시 시작합니다.

5.4.5. 시스템 사용자 만들기

ceph-radosgw 데몬은 영역 및 기간 정보를 가져오기 전에 인증해야 합니다. master 영역에서 시스템 사용자를 생성하여 데몬 간 인증을 용이하게 합니다.

[root@master-zone]# radosgw-admin user create --uid="{user-name}" --display-name="{Display Name}" --system

예를 들면 다음과 같습니다.

[root@master-zone]# radosgw-admin user create --uid="synchronization-user" --display-name="Synchronization User" --system

보조 영역에 master 영역 인증이 필요하므로 access _key 및 secret_key 를 기록합니다.

마지막으로 system 사용자를 master 영역에 추가합니다.

[root@master-zone]# radosgw-admin zone modify --rgw-zone=us-east --access-key={access-key} --secret={secret}
[root@master-zone]# radosgw-admin period update --commit

5.4.6. 주기 업데이트

마스터 영역 구성을 업데이트한 후 기간을 업데이트합니다.

# radosgw-admin period update --commit
참고

기간을 업데이트하면 epoch가 변경되고 다른 영역에 업데이트된 구성이 수신됩니다.

5.4.7. Ceph 구성 파일 업데이트

rgw_zone 구성 옵션과 마스터 영역의 이름을 instance 항목에 추가하여 마스터 영역 호스트에서 Ceph 구성 파일을 업데이트합니다.

[client.rgw.{instance-name}]
...
rgw_zone={zone-name}

예를 들면 다음과 같습니다.

[client.rgw.rgw1.rgw0]
host = rgw1
rgw frontends = "civetweb port=80"
rgw_zone=us-east

5.4.8. 게이트웨이 시작

오브젝트 게이트웨이 호스트에서 Ceph Object Gateway 서비스를 시작하고 활성화합니다.

# systemctl start ceph-radosgw@rgw.`hostname -s`.rgw0
# systemctl enable ceph-radosgw@rgw.`hostname -s`.rgw0

서비스가 이미 실행 중인 경우 서비스를 시작하고 활성화하는 대신 다시 시작하십시오.

# systemctl restart ceph-radosgw@rgw.`hostname -s`.rgw0

5.5. 보조 영역 설정

영역 그룹 내의 영역은 모든 데이터를 복제하여 각 영역에 동일한 데이터가 있는지 확인합니다. 보조 영역을 만드는 경우 보조 영역을 제공하도록 식별된 호스트에서 모든 radosgw-admin 영역 작업을 실행합니다.

참고

추가 영역을 추가하려면 보조 영역을 추가할 때와 동일한 절차를 따릅니다. 다른 영역 이름을 사용합니다.

중요

마스터 영역 그룹의 마스터 영역에 있는 호스트에서 사용자 생성 및 할당량과 같은 메타데이터 작업을 실행해야 합니다. 마스터 영역과 보조 영역은 RESTful API에서 버킷 작업을 수신할 수 있지만, 보조 영역은 버킷 작업을 마스터 영역으로 리디렉션합니다. 마스터 영역이 다운되면 버킷 작업이 실패합니다. radosgw-admin CLI를 사용하여 버킷을 생성하는 경우 마스터 영역 그룹의 마스터 영역 내의 호스트에서 이를 실행해야 합니다. 그렇지 않으면 버킷이 다른 영역 그룹 및 영역과 동기화되지 않습니다.

5.5.1. 영역 가져오기

URL 경로를 사용하여 마스터 영역 그룹의 마스터 영역 키와 시크릿에 액세스하고 해당 영역을 호스트로 가져옵니다. 기본이 아닌 영역을 가져오려면 --rgw-realm 또는 --realm- id 구성 옵션을 사용하여 영역을 지정합니다.

# radosgw-admin realm pull --url={url-to-master-zone-gateway} --access-key={access-key} --secret={secret}

이 영역이 기본 영역이거나 유일한 영역인 경우 영역을 기본 영역으로 설정합니다.

# radosgw-admin realm default --rgw-realm={realm-name}

5.5.2. 기간 가져 오기

URL 경로를 사용하여 마스터 영역 그룹의 마스터 영역 키와 시크릿에 액세스하여 호스트로 기간을 가져옵니다. 기본이 아닌 영역에서 기간을 가져오려면 --rgw-realm 또는 --realm- id 구성 옵션을 사용하여 영역을 지정합니다.

# radosgw-admin period pull --url={url-to-master-zone-gateway} --access-key={access-key} --secret={secret}
참고

기간을 가져오면 이 영역의 최신 버전의 영역 그룹 및 영역 구성이 검색됩니다.

5.5.3. 보조 영역 만들기

중요

영역은 영역 내에 있는 Ceph Object Gateway 노드에서 생성해야 합니다.

보조 영역을 제공하도록 식별된 호스트에서 명령줄 인터페이스를 열어 다중 사이트 구성의 보조 영역을 만듭니다. 영역 그룹 ID, 새 영역 이름 및 영역의 엔드포인트를 지정합니다. --master 또는 -- default 플래그를 사용하지 마십시오. 기본적으로 모든 영역은 액티브-액티브 구성에서 실행됩니다. 즉 게이트웨이 클라이언트는 임의 영역에 데이터를 쓸 수 있으며 영역은 영역 그룹 내의 다른 모든 영역에 데이터를 복제합니다. 보조 영역에서 쓰기 작업을 수락하지 않아야 하는 경우 --read-only 플래그를 지정하여 마스터 영역과 보조 영역 간에 액티브-패시브 구성을 생성합니다. 또한 master 영역 그룹의 master 영역에 저장된 생성된 시스템 사용자의 access _key 및 secret_key 를 제공합니다. 다음을 실행합니다.

구문

[root@second-zone]# radosgw-admin zone create \
                           --rgw-zonegroup={zone-group-name}\
                           --rgw-zone={zone-name} \
                           --access-key={system-key} --secret={secret}\
                           --endpoints=http://{fqdn}:80 \
                           [--read-only]

예제

[root@second-zone]# radosgw-admin zone create
                            --rgw-zonegroup=us \
                            --rgw-zone=us-west \
                            --access-key={system-key} --secret={secret} \
                            --endpoints=http://rgw2:80

중요

다음 단계에서는 데이터를 저장하지 않는 새로 설치된 시스템을 사용하여 다중 사이트 구성을 가정합니다. 이미 데이터를 저장하는 데 사용 중인 경우 기본 영역과 해당 풀을 삭제하지 마십시오. 그렇지 않으면 데이터가 손실되고 복구할 수 없습니다.

필요한 경우 기본 영역을 삭제합니다.

[root@second-zone]# radosgw-admin zone delete --rgw-zone=default

마지막으로 필요한 경우 Ceph 스토리지 클러스터에서 기본 풀을 삭제합니다.

# ceph osd pool delete default.rgw.control default.rgw.control --yes-i-really-really-mean-it
# ceph osd pool delete default.rgw.data.root default.rgw.data.root --yes-i-really-really-mean-it
# ceph osd pool delete default.rgw.log default.rgw.log --yes-i-really-really-mean-it
# ceph osd pool delete default.rgw.users.uid default.rgw.users.uid --yes-i-really-really-mean-it
중요

풀을 삭제한 후 RGW 프로세스를 다시 시작합니다.

5.5.4. 주기 업데이트

마스터 영역 구성을 업데이트한 후 기간을 업데이트합니다.

# radosgw-admin period update --commit
참고

기간을 업데이트하면 epoch가 변경되고 다른 영역에 업데이트된 구성이 수신됩니다.

5.5.5. Ceph 구성 파일 업데이트

rgw_zone 구성 옵션과 보조 영역의 이름을 인스턴스 항목에 추가하여 보조 영역 호스트에서 Ceph 구성 파일을 업데이트합니다.

[client.rgw.{instance-name}]
...
rgw_zone={zone-name}

예를 들면 다음과 같습니다.

[client.rgw.rgw2.rgw0]
host = rgw2
rgw frontends = "civetweb port=80"
rgw_zone=us-west

5.5.6. 게이트웨이 시작

오브젝트 게이트웨이 호스트에서 Ceph Object Gateway 서비스를 시작하고 활성화합니다.

# systemctl start ceph-radosgw@rgw.`hostname -s`.rgw0
# systemctl enable ceph-radosgw@rgw.`hostname -s`.rgw0

서비스가 이미 실행 중인 경우 서비스를 시작하고 활성화하는 대신 다시 시작하십시오.

# systemctl restart ceph-radosgw@rgw.`hostname -s`.rgw0

5.6. 아카이브 동기화 모듈 구성(기술 프리뷰)

아카이브 동기화 모듈은 Ceph 개체 게이트웨이에서 S3 오브젝트의 버전 관리 기능을 활용하여 아카이브 영역을 보유합니다. 아카이브 영역에는 아카이브 영역과 연결된 게이트웨이를 통해서만 제거할 수 있는 S3 오브젝트 버전의 기록이 있습니다. 모든 데이터 업데이트와 메타데이터를 캡처하여 S3 오브젝트의 버전으로 통합합니다.

중요

아카이브 동기화 모듈은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원하지 않으며, 기능상 완전하지 않을 수 있어 프로덕션에 사용하지 않는 것이 좋습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다. 자세한 내용은 Red Hat 기술 프리뷰 기능에 대한 지원 범위를 참조하십시오.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • root 또는 sudo 액세스.
  • Ceph 개체 게이트웨이 설치.

절차

  1. 아카이브 계층을 사용하여 새 영역을 생성할 때 아카이브 동기화 모듈을 구성합니다.

구문

radosgw-admin zone create --rgw-zonegroup={ZONE_GROUP_NAME} --rgw-zone={ZONE_NAME} --endpoints={http://fqdn:port}[,{http://fqdn:port] --tier-type=archive

예제

[root@master-zone]# radosgw-admin zone create --rgw-zonegroup=us --rgw-zone=us-east --endpoints={http://fqdn:port}[,{http://fqdn:port}] --tier-type=archive

추가 리소스

5.7. 페일오버 및 재해 복구

마스터 영역이 실패하면 재해 복구를 위해 보조 영역으로 장애 조치(failover)합니다.

  1. 보조 영역을 master 및 default 영역으로 설정합니다. 예를 들면 다음과 같습니다.

    # radosgw-admin zone modify --rgw-zone={zone-name} --master --default

    기본적으로 Ceph Object Gateway는 액티브-액티브 구성으로 실행됩니다. 클러스터가 액티브-패시브 구성에서 실행되도록 구성된 경우 보조 영역은 읽기 전용 영역입니다. 영역이 쓰기 작업을 수신할 수 있도록 --read-only 상태를 제거합니다. 예를 들면 다음과 같습니다.

    # radosgw-admin zone modify --rgw-zone={zone-name} --master --default --read-only=false
  2. 기간을 업데이트하여 변경 사항을 적용합니다.

    # radosgw-admin period update --commit
  3. Ceph 개체 게이트웨이를 다시 시작합니다.

    # systemctl restart ceph-radosgw@rgw.`hostname -s`.rgw0

이전 마스터 영역이 복구되면 작업을 되돌립니다.

  1. 복구된 영역에서 현재 마스터 영역에서 영역을 가져옵니다.

    # radosgw-admin realm pull --url={url-to-master-zone-gateway} \
                                --access-key={access-key} --secret={secret}
  2. 복구된 영역을 마스터 및 기본 영역으로 설정합니다.

    # radosgw-admin zone modify --rgw-zone={zone-name} --master --default
  3. 기간을 업데이트하여 변경 사항을 적용합니다.

    # radosgw-admin period update --commit
  4. 복구된 영역에서 Ceph Object Gateway를 다시 시작합니다.

    # systemctl restart ceph-radosgw@rgw.`hostname -s`.rgw0
  5. 보조 영역이 읽기 전용 구성이어야 하는 경우 보조 영역을 업데이트합니다.

    # radosgw-admin zone modify --rgw-zone={zone-name} --read-only
  6. 기간을 업데이트하여 변경 사항을 적용합니다.

    # radosgw-admin period update --commit
  7. 보조 영역에서 Ceph 개체 게이트웨이를 다시 시작합니다.

    # systemctl restart ceph-radosgw@rgw.`hostname -s`.rgw0

5.8. 단일 사이트 시스템을 다중 사이트 시스템으로 마이그레이션

기본 영역 그룹 및 영역이 있는 단일 사이트 시스템에서 다중 사이트 시스템으로 마이그레이션하려면 다음 단계를 사용하십시오.

  1. 영역을 생성합니다. <name> 을 영역 이름으로 바꿉니다.

    [root@master-zone]# radosgw-admin realm create --rgw-realm=<name> --default
  2. 기본 영역 및 영역 그룹의 이름을 변경합니다. <name> 을 zonegroup 또는 zone 이름으로 바꿉니다.

    [root@master-zone]# radosgw-admin zonegroup rename --rgw-zonegroup default --zonegroup-new-name=<name>
    [root@master-zone]# radosgw-admin zone rename --rgw-zone default --zone-new-name us-east-1 --rgw-zonegroup=<name>
  3. 마스터 영역 그룹을 구성합니다. <name> 을 영역 또는 영역 그룹 이름으로 바꿉니다. <fqdn> 을 영역 그룹에서 정규화된 도메인 이름으로 바꿉니다.

    [root@master-zone]# radosgw-admin zonegroup modify --rgw-realm=<name> --rgw-zonegroup=<name> --endpoints http://<fqdn>:80 --master --default
  4. 마스터 영역을 구성합니다. <name> 을 영역, zonegroup 또는 영역 이름으로 바꿉니다. <fqdn> 을 영역 그룹에서 정규화된 도메인 이름으로 바꿉니다.

    [root@master-zone]# radosgw-admin zone modify --rgw-realm=<name> --rgw-zonegroup=<name> \
                                --rgw-zone=<name> --endpoints http://<fqdn>:80 \
                                --access-key=<access-key> --secret=<secret-key> \
                                --master --default
  5. 시스템 사용자를 만듭니다. <user-id> 를 사용자 이름으로 바꿉니다. <display-name> 을 표시 이름으로 바꿉니다. 여기에는 공백이 포함될 수 있습니다.

    [root@master-zone]# radosgw-admin user create --uid=<user-id> \
                                --display-name="<display-name>" \
                                --access-key=<access-key> --secret=<secret-key> \ --system
  6. 업데이트된 구성을 커밋합니다.

    # radosgw-admin period update --commit
  7. Ceph 개체 게이트웨이를 다시 시작합니다.

    # systemctl restart ceph-radosgw@rgw.`hostname -s`.rgw0

이 절차를 완료한 후 보조 영역을 구축하여 master 영역 그룹에 보조 영역을 만듭니다.

5.9. 다중 사이트 명령줄 사용

5.9.1. 영역

영역은 하나 이상의 영역을 포함하는 하나 이상의 영역 그룹과 개체가 포함된 버킷을 포함하는 영역으로 구성된 전역 고유 네임스페이스를 나타냅니다. 영역을 사용하면 Ceph Object Gateway에서 동일한 하드웨어에서 여러 네임스페이스와 해당 구성을 지원할 수 있습니다.

영역에는 마침표의 개념이 포함되어 있습니다. 각 기간은 시간대 그룹 및 영역 구성의 상태를 나타냅니다. 영역 그룹 또는 영역을 변경할 때마다 기간을 업데이트하고 커밋합니다.

기본적으로 Ceph Object Gateway 버전 2는 버전 1.3 및 이전 버전과의 호환성을 위한 영역을 생성하지 않습니다. 그러나 Red Hat은 모범 사례로 새 클러스터에 대한 영역을 생성하는 것이 좋습니다.

5.9.1.1. Realm 생성

영역을 생성하려면 영역 생성을 실행하고 영역 이름을 지정합니다. 영역이 기본값인 경우 --default 를 지정합니다.

[root@master-zone]# radosgw-admin realm create --rgw-realm={realm-name} [--default]

예를 들면 다음과 같습니다.

[root@master-zone]# radosgw-admin realm create --rgw-realm=movies --default

--default를 지정하면 -- rgw-realm 및 영역 이름이 명시적으로 제공되지 않는 한 각 radosgw- admin 호출에서 영역이 암시적으로 호출됩니다.

5.9.1.2. Realm을 기본값으로 설정

영역 목록에서 하나의 영역이 기본 영역이어야 합니다. 기본 영역은 하나만 있을 수 있습니다. 영역이 하나뿐이고 생성 시 기본 영역으로 지정되지 않은 경우 기본 영역으로 설정합니다. 또는 기본값인 영역을 변경하려면 다음을 실행합니다.

[root@master-zone]# radosgw-admin realm default --rgw-realm=movies
참고

영역이 기본값이면 명령줄에서 --rgw-realm=<realm-name> 을 인수로 가정합니다.

5.9.1.3. 영역 삭제

영역을 삭제하려면 realm delete를 실행하고 영역 이름을 지정합니다.

[root@master-zone]# radosgw-admin realm delete --rgw-realm={realm-name}

예를 들면 다음과 같습니다.

[root@master-zone]# radosgw-admin realm delete --rgw-realm=movies

5.9.1.4. 영역 가져오기

영역을 가져오려면 realm get를 실행하고 영역 이름을 지정합니다.

# radosgw-admin realm get --rgw-realm=<name>

예를 들면 다음과 같습니다.

# radosgw-admin realm get --rgw-realm=movies [> filename.json]

CLI는 영역 속성을 사용하여 JSON 오브젝트를 에코합니다.

{
    "id": "0a68d52e-a19c-4e8e-b012-a8f831cb3ebc",
    "name": "movies",
    "current_period": "b0c5bbef-4337-4edd-8184-5aeab2ec413b",
    "epoch": 1
}

> 및 출력 파일 이름을 사용하여 JSON 오브젝트를 파일로 출력합니다.

5.9.1.5. Realm 설정

영역을 설정하려면 영역 세트를 실행하고 입력 파일 이름을 사용하여 영역 이름을 지정하고 --infile= 을 지정합니다.

[root@master-zone]# radosgw-admin realm set --rgw-realm=<name> --infile=<infilename>

예를 들면 다음과 같습니다.

[root@master-zone]# radosgw-admin realm set --rgw-realm=movies --infile=filename.json

5.9.1.6. Realms 나열

영역을 나열하려면 영역 목록을 실행합니다.

# radosgw-admin realm list

5.9.1.7. 영역 기간 나열

영역 기간을 나열하려면 영역 목록을 실행합니다.

# radosgw-admin realm list-periods

5.9.1.8. Realm 가져오기

마스터 영역 그룹 및 마스터 영역을 포함하는 노드에서 보조 영역 그룹 또는 영역을 포함하는 노드로 영역을 가져오려면 영역 구성을 수신할 노드에서 영역 가져오기를 실행합니다.

# radosgw-admin realm pull --url={url-to-master-zone-gateway} --access-key={access-key} --secret={secret}

5.9.1.9. 영역 이름 변경

영역은 기간의 일부가 아닙니다. 결과적으로 영역 이름 변경은 로컬로만 적용되며 영역 가져오기를 통해 가져오지 않습니다. 여러 영역의 영역 이름을 변경할 때 각 영역에서 명령을 실행합니다. 영역 이름을 변경하려면 다음을 실행합니다.

# radosgw-admin realm rename --rgw-realm=<current-name> --realm-new-name=<new-realm-name>
참고

name 매개 변수를 변경하는 데 realm 을 사용하지 마십시오. 내부 이름만 변경됩니다. --rgw-realm 을 지정하면 이전 영역 이름이 계속 사용됩니다.

5.9.2. 영역 그룹

Ceph Object Gateway는 영역 그룹 개념을 사용하여 다중 사이트 배포 및 글로벌 네임스페이스를 지원합니다. 이전에는 지역이라고 하는 영역 그룹은 하나 이상의 Ceph Object Gateway 인스턴스의 지리적 위치를 하나 이상의 영역에 정의합니다.

모든 설정이 Ceph 구성 파일에 종료되지 않으므로 영역 그룹 구성은 일반적인 구성 절차와 다릅니다. 영역 그룹을 나열하고, 영역 그룹 구성을 가져오고, 영역 그룹 구성을 설정할 수 있습니다.

참고

기간 업데이트 단계에서 클러스터 전체에 변경 사항을 전파하므로 radosgw-admin 영역 그룹 작업은 영역 내 모든 노드에서 수행할 수 있습니다. 그러나 radosgw-admin 영역 작업은 영역 내의 호스트에서 수행해야 합니다.

5.9.2.1. 영역 그룹 생성

영역 그룹 생성은 영역 그룹 이름을 지정하는 것으로 구성됩니다. 영역을 만들면 --rgw-realm=<realm-name> 이 지정되지 않는 한 기본 영역에 존재한다고 가정합니다. zonegroup이 기본 영역 그룹인 경우 --default 플래그를 지정합니다. zonegroup이 마스터 영역 그룹인 경우 --master 플래그를 지정합니다. 예를 들면 다음과 같습니다.

# radosgw-admin zonegroup create --rgw-zonegroup=<name> [--rgw-realm=<name>][--master] [--default]
참고

zonegroup에서 --rgw-zonegroup=<zonegroup-name> 을 수정하여 기존 영역 그룹의 설정을 수정합니다.

5.9.2.2. 영역 그룹을 기본값으로 만들기

영역 그룹 목록에 있는 하나의 zonegroup이 기본 영역 그룹이어야 합니다. 기본 영역 그룹이 하나만 있을 수 있습니다. 영역 그룹이 하나뿐이고 생성 시 기본 영역 그룹으로 지정되지 않은 경우 기본 영역 그룹으로 설정합니다. 또는 기본값인 영역 그룹을 변경하려면 다음을 실행합니다.

# radosgw-admin zonegroup default --rgw-zonegroup=comedy
참고

zonegroup이 default이면 명령줄에서 --rgw-zonegroup=<zonegroup-name> 을 인수로 가정합니다.

그런 다음 기간을 업데이트합니다.

# radosgw-admin period update --commit

5.9.2.3. 영역 그룹에 영역 추가

영역 그룹에 영역을 추가하려면 영역에 있을 호스트에서 이 단계를 실행해야 합니다. 영역을 영역 그룹에 추가하려면 다음을 실행합니다.

# radosgw-admin zonegroup add --rgw-zonegroup=<name> --rgw-zone=<name>

그런 다음 기간을 업데이트합니다.

# radosgw-admin period update --commit

5.9.2.4. 영역 그룹에서 영역 제거

영역 그룹에서 영역을 제거하려면 다음을 실행합니다.

# radosgw-admin zonegroup remove --rgw-zonegroup=<name> --rgw-zone=<name>

그런 다음 기간을 업데이트합니다.

# radosgw-admin period update --commit

5.9.2.5. 영역 그룹 이름 변경

영역 그룹의 이름을 변경하려면 다음을 실행합니다.

# radosgw-admin zonegroup rename --rgw-zonegroup=<name> --zonegroup-new-name=<name>

그런 다음 기간을 업데이트합니다.

# radosgw-admin period update --commit

5.9.2.6. 영역 그룹 삭제

영역 그룹을 삭제하려면 다음을 실행합니다.

# radosgw-admin zonegroup delete --rgw-zonegroup=<name>

그런 다음 기간을 업데이트합니다.

# radosgw-admin period update --commit

5.9.2.7. 영역 그룹 나열

Ceph 클러스터에는 영역 그룹 목록이 포함되어 있습니다. 영역 그룹을 나열하려면 다음을 실행합니다.

# radosgw-admin zonegroup list

radosgw-admin 은 JSON 형식의 영역 그룹 목록을 반환합니다.

{
    "default_info": "90b28698-e7c3-462c-a42d-4aa780d24eda",
    "zonegroups": [
        "us"
    ]
}

5.9.2.8. 영역 그룹 가져오기

영역 그룹의 구성을 보려면 다음을 실행합니다.

# radosgw-admin zonegroup get [--rgw-zonegroup=<zonegroup>]

영역 그룹 구성은 다음과 같습니다.

{
    "id": "90b28698-e7c3-462c-a42d-4aa780d24eda",
    "name": "us",
    "api_name": "us",
    "is_master": "true",
    "endpoints": [
        "http:\/\/rgw1:80"
    ],
    "hostnames": [],
    "hostnames_s3website": [],
    "master_zone": "9248cab2-afe7-43d8-a661-a40bf316665e",
    "zones": [
        {
            "id": "9248cab2-afe7-43d8-a661-a40bf316665e",
            "name": "us-east",
            "endpoints": [
                "http:\/\/rgw1"
            ],
            "log_meta": "true",
            "log_data": "true",
            "bucket_index_max_shards": 11,
            "read_only": "false"
        },
        {
            "id": "d1024e59-7d28-49d1-8222-af101965a939",
            "name": "us-west",
            "endpoints": [
                "http:\/\/rgw2:80"
            ],
            "log_meta": "false",
            "log_data": "true",
            "bucket_index_max_shards": 11,
            "read_only": "false"
        }
    ],
    "placement_targets": [
        {
            "name": "default-placement",
            "tags": []
        }
    ],
    "default_placement": "default-placement",
    "realm_id": "ae031368-8715-4e27-9a99-0c9468852cfe"
}

5.9.2.9. 영역 그룹 설정

영역 그룹 정의는 최소한 필요한 설정을 지정하는 JSON 오브젝트를 생성하는 것으로 구성됩니다.

  1. name: 영역 그룹의 이름입니다. 필수 항목입니다.
  2. api_name: 영역 그룹의 API 이름입니다. 선택 사항:
  3. is_master: 영역 그룹이 마스터 영역 그룹인지 여부를 결정합니다. 필수 항목 : 하나의 마스터 영역 그룹만 가질 수 있습니다.
  4. 엔드 포인트 : 영역 그룹의 모든 엔드포인트 목록입니다. 예를 들어 여러 도메인 이름을 사용하여 동일한 영역 그룹을 참조할 수 있습니다. 슬래시(\/)를 이스케이프해야 합니다. 각 엔드포인트에 포트(fqdn:port)를 지정할 수도 있습니다. 선택 사항:
  5. hostnames: 영역 그룹의 모든 호스트 이름 목록입니다. 예를 들어 여러 도메인 이름을 사용하여 동일한 영역 그룹을 참조할 수 있습니다. 선택 사항: rgw dns 이름 설정이 이 목록에 자동으로 포함됩니다. 이 설정을 변경한 후 게이트웨이 데몬을 다시 시작해야 합니다.
  6. master_zone: 영역 그룹의 마스터 영역입니다. 선택 사항: 지정하지 않는 경우 기본 영역을 사용합니다. 참고: 영역 그룹당 하나의 마스터 영역만 가질 수 있습니다.
  7. 영역: 영역 그룹 내의 모든 영역 목록. 각 영역에는 이름(필수), 엔드포인트 목록(선택 사항) 및 게이트웨이가 메타데이터 및 데이터 작업(기본값)을 기록할지 여부가 있습니다.
  8. placement_targets: 배치 대상 목록(선택 사항). 각 배치 대상에는 배치 대상의 이름(필수)과 태그 목록(선택 사항)이 포함되어 있으므로 태그가 있는 사용자만 배치 대상(즉, 사용자 info의 사용자 placement_tags 필드)을 사용할 수 있습니다.
  9. default_placement: 오브젝트 인덱스 및 오브젝트 데이터의 기본 배치 대상입니다. 기본적으로 default-placement 로 설정합니다. 각 사용자에 대한 사용자 정보에 사용자별 기본 배치를 설정할 수도 있습니다.

영역 그룹을 설정하려면 필수 필드로 구성된 JSON 오브젝트를 생성하고 오브젝트를 파일에 저장합니다(예: zonegroup.json).

# radosgw-admin zonegroup set --infile zonegroup.json

여기서 zonegroup.json 은 생성한 JSON 파일입니다.

중요

기본 영역 그룹 is_master 설정은 기본적으로 true 입니다. 새 영역 그룹을 생성하고 마스터 영역 그룹을 생성하려면 기본 영역 그룹 is_master 설정을 false 로 설정하거나 기본 영역 그룹을 삭제해야 합니다.

마지막으로 기간을 업데이트합니다.

# radosgw-admin period update --commit

5.9.2.10. 영역 그룹 맵 설정

영역 그룹 맵 설정은 하나 이상의 영역 그룹으로 구성된 JSON 오브젝트를 생성하고 클러스터에 대한 master_zonegroup 을 설정하는 것입니다. 영역 그룹 맵의 각 영역 그룹은 키/값 쌍으로 구성됩니다. 여기서 설정은 개별 영역 그룹 구성에 대한 이름 설정과 동일하며, val 는 개별 영역 그룹 구성으로 구성된 JSON 오브젝트입니다.

is_mastertrue 인 영역 그룹이 하나만 있을 수 있으며 영역 그룹 맵 끝에 master_zonegroup 으로 지정해야 합니다. 다음 JSON 오브젝트는 기본 영역 그룹 맵의 예입니다.

{
    "zonegroups": [
        {
            "key": "90b28698-e7c3-462c-a42d-4aa780d24eda",
            "val": {
                "id": "90b28698-e7c3-462c-a42d-4aa780d24eda",
                "name": "us",
                "api_name": "us",
                "is_master": "true",
                "endpoints": [
                    "http:\/\/rgw1:80"
                ],
                "hostnames": [],
                "hostnames_s3website": [],
                "master_zone": "9248cab2-afe7-43d8-a661-a40bf316665e",
                "zones": [
                    {
                        "id": "9248cab2-afe7-43d8-a661-a40bf316665e",
                        "name": "us-east",
                        "endpoints": [
                            "http:\/\/rgw1"
                        ],
                        "log_meta": "true",
                        "log_data": "true",
                        "bucket_index_max_shards": 11,
                        "read_only": "false"
                    },
                    {
                        "id": "d1024e59-7d28-49d1-8222-af101965a939",
                        "name": "us-west",
                        "endpoints": [
                            "http:\/\/rgw2:80"
                        ],
                        "log_meta": "false",
                        "log_data": "true",
                        "bucket_index_max_shards": 11,
                        "read_only": "false"
                    }
                ],
                "placement_targets": [
                    {
                        "name": "default-placement",
                        "tags": []
                    }
                ],
                "default_placement": "default-placement",
                "realm_id": "ae031368-8715-4e27-9a99-0c9468852cfe"
            }
        }
    ],
    "master_zonegroup": "90b28698-e7c3-462c-a42d-4aa780d24eda",
    "bucket_quota": {
        "enabled": false,
        "max_size_kb": -1,
        "max_objects": -1
    },
    "user_quota": {
        "enabled": false,
        "max_size_kb": -1,
        "max_objects": -1
    }
}

영역 그룹 맵을 설정하려면 다음을 실행합니다.

# radosgw-admin zonegroup-map set --infile zonegroupmap.json

여기서 zonegroupmap.json 은 생성한 JSON 파일입니다. 영역 그룹 맵에 지정된 영역에 대해 생성된 영역이 있는지 확인합니다. 마지막으로 기간을 업데이트합니다.

# radosgw-admin period update --commit

5.9.3. 영역

Ceph Object Gateway는 영역 개념을 지원합니다. 영역은 하나 이상의 Ceph Object Gateway 인스턴스로 구성된 논리적 그룹을 정의합니다.

모든 설정이 Ceph 구성 파일에 종료되는 것은 아니므로 영역 구성은 일반적인 구성 절차와 다릅니다. 영역을 나열하고, 영역 구성을 가져오고, 영역 구성을 설정할 수 있습니다.

중요

모든 radosgw-admin 영역 작업은 영역 내에서 작동하거나 작동하는 호스트에서 실행해야 합니다.

5.9.3.1. 영역 생성

영역을 생성하려면 영역 이름을 지정합니다. 마스터 영역인 경우 --master 옵션을 지정합니다. 영역 그룹의 영역 하나만 마스터 영역일 수 있습니다. 영역을 영역 그룹에 추가하려면 zonegroup 이름으로 --rgw-zonegroup 옵션을 지정합니다.

중요

영역은 영역 내에 있는 Ceph Object Gateway 노드에서 생성해야 합니다.

[root@zone] radosgw-admin zone create --rgw-zone=<name> \
                [--zonegroup=<zonegroup-name]\
                [--endpoints=<endpoint:port>[,<endpoint:port>] \
                [--master] [--default] \
                --access-key $SYSTEM_ACCESS_KEY --secret $SYSTEM_SECRET_KEY

그런 다음 기간을 업데이트합니다.

# radosgw-admin period update --commit

5.9.3.2. 영역 삭제

먼저 영역을 삭제하려면 zonegroup에서 해당 영역을 제거합니다.

# radosgw-admin zonegroup remove --rgw-zonegroup=<name>\
                                 --rgw-zone=<name>

그런 다음 기간을 업데이트합니다.

# radosgw-admin period update --commit

그런 다음 영역을 삭제합니다.

중요

절차는 영역 내의 호스트에서 실행해야 합니다.

다음을 실행합니다.

[root@zone]# radosgw-admin zone delete --rgw-zone<name>

마지막으로 기간을 업데이트합니다.

# radosgw-admin period update --commit
중요

먼저 영역 그룹에서 영역을 제거하지 않고 삭제하지 마십시오. 그렇지 않으면 기간 업데이트에 실패합니다.

삭제된 영역의 풀이 다른 곳에 사용되지 않는 경우 풀을 삭제하는 것이 좋습니다. 아래 예에서 <del-zone> 을 삭제된 영역의 이름으로 바꿉니다.

중요

Ceph가 영역 풀을 삭제하면 복구할 수 없는 방식으로 해당 영역 내의 모든 데이터를 삭제합니다. Ceph 클라이언트에 더 이상 풀 콘텐츠가 필요하지 않은 경우에만 영역 풀을 삭제합니다.

중요

다중 영역 클러스터에서 영역 풀과 함께 .rgw.root 풀을 삭제하면 클러스터의 모든 영역 정보가 제거됩니다. .rgw.root 풀을 삭제하기 전에 .rgw.root 영역이 없는지 확인합니다.

# ceph osd pool delete <del-zone>.rgw.control <del-zone>.rgw.control --yes-i-really-really-mean-it
# ceph osd pool delete <del-zone>.rgw.data.root <del-zone>.rgw.data.root --yes-i-really-really-mean-it
# ceph osd pool delete <del-zone>.rgw.log <del-zone>.rgw.log --yes-i-really-really-mean-it
# ceph osd pool delete <del-zone>.rgw.users.uid <del-zone>.rgw.users.uid --yes-i-really-really-mean-it
중요

풀을 삭제한 후 RGW 프로세스를 다시 시작합니다.

5.9.3.3. 영역 수정

영역을 수정하려면 영역 이름과 수정할 매개변수를 지정합니다.

중요

영역은 영역 내에 있는 Ceph Object Gateway 노드에서 수정해야 합니다.

[root@zone]# radosgw-admin zone modify [options]

--access-key=<key> --secret/-secret-key=<key> --master --default --endpoints=<list>

그런 다음 기간을 업데이트합니다.

# radosgw-admin period update --commit

5.9.3.4. 영역 나열

root 로 클러스터의 영역을 나열하려면 다음을 실행합니다.

# radosgw-admin zone list

5.9.3.5. 영역 가져오기

root 로 영역 구성을 가져오려면 다음을 실행합니다.

# radosgw-admin zone get [--rgw-zone=<zone>]

기본 영역은 다음과 같습니다.

{ "domain_root": ".rgw",
  "control_pool": ".rgw.control",
  "gc_pool": ".rgw.gc",
  "log_pool": ".log",
  "intent_log_pool": ".intent-log",
  "usage_log_pool": ".usage",
  "user_keys_pool": ".users",
  "user_email_pool": ".users.email",
  "user_swift_pool": ".users.swift",
  "user_uid_pool": ".users.uid",
  "system_key": { "access_key": "", "secret_key": ""},
  "placement_pools": [
      {  "key": "default-placement",
         "val": { "index_pool": ".rgw.buckets.index",
                  "data_pool": ".rgw.buckets"}
      }
    ]
  }

5.9.3.6. 영역 설정

영역을 구성하려면 일련의 Ceph Object Gateway 풀을 지정해야 합니다. 일관성을 위해 영역 이름과 동일한 풀 접두사를 사용하는 것이 좋습니다. 풀 구성에 대한 자세한 내용은 Pools_를 참조하십시오.

중요

영역은 영역 내에 있는 Ceph Object Gateway 노드에 설정해야 합니다.

영역을 설정하려면 풀로 구성된 JSON 오브젝트를 생성하고 오브젝트를 파일(예: zone.json)에 저장합니다.그런 다음 {zone-name} 을 영역 이름으로 교체하여 다음 명령을 실행합니다.

[root@zone]# radosgw-admin zone set --rgw-zone={zone-name} --infile zone.json

여기서 zone.json 은 생성한 JSON 파일입니다.

그런 다음 root 로 기간을 업데이트합니다.

# radosgw-admin period update --commit

5.9.3.7. 영역 이름 변경

영역 이름을 변경하려면 영역 이름과 새 영역 이름을 지정합니다. 영역 내 호스트에서 다음을 실행합니다.

[root@zone]# radosgw-admin zone rename --rgw-zone=<name> --zone-new-name=<name>

그런 다음 기간을 업데이트합니다.

# radosgw-admin period update --commit

5.10. 영역 그룹 및 영역 구성 설정

기본 영역 그룹 및 영역을 구성할 때 풀 이름에 영역 이름이 포함됩니다. 예를 들면 다음과 같습니다.

  • default.rgw.control

기본값을 변경하려면 각 [client.rgw.{instance-name}] 인스턴스의 Ceph 구성 파일에 다음 설정을 포함합니다.

이름설명유형Default

rgw_zone

gateway 인스턴스의 영역 이름입니다.

문자열

없음

rgw_zonegroup

gateway 인스턴스의 영역 그룹 이름입니다.

문자열

없음

rgw_zonegroup_root_pool

zone 그룹의 루트 풀입니다.

문자열

.rgw.root

rgw_zone_root_pool

영역의 루트 풀입니다.

문자열

.rgw.root

rgw_default_zone_group_info_oid

기본 영역 그룹을 저장할 OID입니다. 이 설정은 변경하지 않는 것이 좋습니다.

문자열

default.zonegroup

5.11. 멀티사이트를 사용하여 수동으로 버킷 복구

다중 사이트 클러스터에서 버킷을 수동으로 재하드하려면 다음 절차를 사용하십시오.

참고

수동 재하드(resharding)는 매우 비용이 많이 드는 프로세스이며, 특히 수동 복구를 보증하는 대규모 버킷의 경우 프로세스입니다. 모든 보조 영역은 모든 오브젝트를 삭제한 다음 마스터 영역에서 다시 동기화합니다.

사전 요구 사항

  • 모든 Ceph Object Gateway 인스턴스를 중지합니다.

절차

  1. master 영역 그룹의 마스터 영역 내의 노드에서 다음 명령을 실행합니다.

    구문

    # radosgw-admin bucket sync disable --bucket=BUCKET_NAME

    모든 영역에서 데이터 동기화가 최신 상태 임을 보고할 때까지 기다립니다.

  2. 모든 영역에서 모든 ceph-radosgw 데몬 중지합니다.
  3. 마스터 영역 그룹의 마스터 영역 내의 노드에서 버킷을 재배치합니다.

    구문

    # radosgw-admin bucket reshard --bucket=BUCKET_NAME --num-shards=NEW_SHARDS_NUMBER

  4. 보조 영역에서 다음을 실행합니다.

    구문

    # radosgw-admin bucket rm --purge-objects --bucket=BUCKET_NAME

  5. 모든 영역에서 모든 ceph-radosgw 데몬을 다시 시작합니다.
  6. master 영역 그룹의 마스터 영역 내의 노드에서 다음 명령을 실행합니다.

    구문

    # radosgw-admin bucket sync enable --bucket=BUCKET_NAME

메타데이터 동기화 프로세스는 업데이트된 버킷 진입점 및 버킷 인스턴스 메타데이터를 가져옵니다. 데이터 동기화 프로세스는 전체 동기화를 수행합니다.

추가 리소스

5.12. 복제없이 다중 영역 구성

서로 복제할 수 없는 여러 영역을 구성할 수 있습니다. 예를 들어 회사의 각 팀에 전용 영역을 만들 수 있습니다.

사전 요구 사항

  • Ceph Object Gateway가 설치된 Ceph Storage 클러스터.

절차

  1. 영역을 생성합니다.

    radosgw-admin realm create --rgw-realm=realm-name [--default]

    예를 들면 다음과 같습니다.

    [root@master-zone]# radosgw-admin realm create --rgw-realm=movies --default
    {
        "id": "0956b174-fe14-4f97-8b50-bb7ec5e1cf62",
        "name": "movies",
        "current_period": "1950b710-3e63-4c41-a19e-46a715000980",
        "epoch": 1
    }
  2. 영역 그룹을 만듭니다.

    radosgw-admin zonegroup create --rgw-zonegroup=zone-group-name --endpoints=url [--rgw-realm=realm-name|--realm-id=realm-id] --master --default

    예를 들면 다음과 같습니다.

    [root@master-zone]# radosgw-admin zonegroup create --rgw-zonegroup=us --endpoints=http://rgw1:80 --rgw-realm=movies --master --default
    {
        "id": "f1a233f5-c354-4107-b36c-df66126475a6",
        "name": "us",
        "api_name": "us",
        "is_master": "true",
        "endpoints": [
            "http:\/\/rgw1:80"
        ],
        "hostnames": [],
        "hostnames_s3webzone": [],
        "master_zone": "",
        "zones": [],
        "placement_targets": [],
        "default_placement": "",
        "realm_id": "0956b174-fe14-4f97-8b50-bb7ec5e1cf62"
    }
  3. 사용 사례에 따라 하나 이상의 영역을 만듭니다.

    radosgw-admin zone create
                 --rgw-zonegroup=zone-group-name \
                 --rgw-zone=zone-name \
                 --master --default \
                 --endpoints=http://fqdn:port[,http://fqdn:port]

    예를 들면 다음과 같습니다.

    [root@master-zone]# radosgw-admin zone create --rgw-zonegroup=us \
                                                  --rgw-zone=us-east \
                                                  --master --default \
                                                  --endpoints=http://rgw1:80
  4. 영역 그룹의 구성을 사용하여 JSON 파일을 가져옵니다.

    radosgw-admin zonegroup get --rgw-zonegroup=zone-group-name > zonegroup.json

    예를 들면 다음과 같습니다.

    [root@master-zone]# radosgw-admin zonegroup get --rgw-zonegroup=us > zonegroup.json
  5. 파일에서 log_meta,log_ data 및 sync_ from_all 매개 변수를 false로 설정합니다.

        {
            "id": "72f3a886-4c70-420b-bc39-7687f072997d",
            "name": "default",
            "api_name": "",
            "is_master": "true",
            "endpoints": [],
            "hostnames": [],
            "hostnames_s3website": [],
            "master_zone": "a5e44ecd-7aae-4e39-b743-3a709acb60c5",
            "zones": [
                {
                    "id": "975558e0-44d8-4866-a435-96d3e71041db",
                    "name": "testzone",
                    "endpoints": [],
                    "log_meta": "false",
                    "log_data": "false",
                    "bucket_index_max_shards": 11,
                    "read_only": "false",
                    "tier_type": "",
                    "sync_from_all": "false",
                    "sync_from": []
                },
                {
                    "id": "a5e44ecd-7aae-4e39-b743-3a709acb60c5",
                    "name": "default",
                    "endpoints": [],
                    "log_meta": "false",
                    "log_data": "false",
                    "bucket_index_max_shards": 11,
                    "read_only": "false",
                    "tier_type": "",
                    "sync_from_all": "false",
                    "sync_from": []
                }
            ],
            "placement_targets": [
                {
                    "name": "default-placement",
                    "tags": []
                }
            ],
            "default_placement": "default-placement",
            "realm_id": "2d988e7d-917e-46e7-bb18-79350f6a5155"
        }
  6. 업데이트된 JSON 파일을 사용합니다.

    radosgw-admin zonegroup set --rgw-zonegroup=zone-group-name --infile=zonegroup.json

    예를 들면 다음과 같습니다.

    [root@master-zone]# radosgw-admin zonegroup set --rgw-zonegroup=us --infile=zonegroup.json
  7. 기간을 업데이트합니다.

    # radosgw-admin period update --commit

5.13. 동일한 스토리지 클러스터에서 여러 영역 구성

이 섹션에서는 동일한 스토리지 클러스터에서 여러 영역을 구성하는 방법에 대해 설명합니다. 이는 다중 사이트에 대한 고급 사용 사례입니다. 동일한 스토리지 클러스터에서 여러 영역을 구성하면 로컬 영역을 사용하여 로컬 영역과 보조 사이트에 복제되는 데이터에 대한 복제된 영역을 처리할 수 있습니다.

참고

Red Hat은 각 영역에 고유한 Ceph Object Gateway를 보유하는 것이 좋습니다.

사전 요구 사항

절차

  1. 스토리지 클러스터의 첫 번째 데이터 센터에 하나의 로컬 영역을 생성합니다.

    구문

    radosgw-admin realm create --rgw-realm=REALM_NAME --default

    예제

    [root@rgw1 ~]# radosgw-admin realm create --rgw-realm=ldc1 --default

  2. 첫 번째 데이터 센터에 하나의 로컬 마스터 영역 그룹을 생성합니다.

    구문

    radosgw-admin zonegroup create --rgw-zonegroup=ZONE_GROUP_NAME --endpoints=http://RGW_NODE_NAME:80 --rgw-realm=REALM_NAME --master --default

    예제

    [root@rgw1 ~]# radosgw-admin zonegroup create --rgw-zonegroup=ldc1zg --endpoints=http://rgw1:80 --rgw-realm=ldc1 --master --default

  3. 첫 번째 데이터 센터에 하나의 로컬 영역을 생성합니다.

    구문

    radosgw-admin zone create --rgw-zonegroup=ZONE_GROUP_NAME --rgw-zone=ZONE_NAME --master --default --endpoints=HTTP_FQDN[,HTTP_FQDN]

    예제

    [root@rgw1 ~]# radosgw-admin zone create --rgw-zonegroup=ldc1zg --rgw-zone=ldc1z --master --default --endpoints=http://rgw.example.com

  4. 기간을 커밋합니다.

    예제

    [root@rgw1 ~]# radosgw-admin period update --commit

  5. rgw_realm, rgw_ zonegroup 및 rgw_zone 이름으로 ceph.conf 를 업데이트합니다.

    구문

    rgw_realm = REALM_NAME
    rgw_zonegroup = ZONE_GROUP_NAME
    rgw_zone = ZONE_NAME

    예제

    rgw_realm = ldc1
    rgw_zonegroup = ldc1zg
    rgw_zone = ldc1z

  6. RGW 데몬을 다시 시작하십시오.

    구문

    systemctl restart ceph-radosgw@rgw.$(hostname -s).rgw0.service

  7. 스토리지 클러스터의 두 번째 데이터 센터에 하나의 로컬 영역을 생성합니다.

    구문

    radosgw-admin realm create --rgw-realm=REALM_NAME --default

    예제

    [root@rgw2 ~]# radosgw-admin realm create --rgw-realm=ldc2 --default

  8. 두 번째 데이터 센터에 하나의 로컬 마스터 영역 그룹을 생성합니다.

    구문

    radosgw-admin zonegroup create --rgw-zonegroup=ZONE_GROUP_NAME --endpoints=http://RGW_NODE_NAME:80 --rgw-realm=REALM_NAME --master --default

    예제

    [root@rgw2 ~]# radosgw-admin zonegroup create --rgw-zonegroup=ldc2zg --endpoints=http://rgw2:80 --rgw-realm=ldc2 --master --default

  9. 두 번째 데이터 센터에 하나의 로컬 영역을 생성합니다.

    구문

    radosgw-admin zone create --rgw-zonegroup=ZONE_GROUP_NAME --rgw-zone=ZONE_NAME --master --default --endpoints=HTTP_FQDN[, HTTP_FQDN]

    예제

    [root@rgw2 ~]# radosgw-admin zone create --rgw-zonegroup=ldc2zg --rgw-zone=ldc2z --master --default --endpoints=http://rgw.example.com

  10. 기간을 커밋합니다.

    예제

    [root@rgw2 ~]# radosgw-admin period update --commit

  11. rgw_realm, rgw_ zonegroup 및 rgw_zone 이름으로 ceph.conf 를 업데이트합니다.

    구문

    rgw_realm = REALM_NAME
    rgw_zonegroup = ZONE_GROUP_NAME
    rgw_zone = ZONE_NAME

    예제

    rgw_realm = ldc2
    rgw_zonegroup = ldc2zg
    rgw_zone = ldc2z

  12. RGW 데몬을 다시 시작하십시오.

    구문

    systemctl restart ceph-radosgw@rgw.$(hostname -s).rgw0.service

  13. 스토리지 클러스터의 첫 번째 데이터 센터에 복제된 영역을 생성합니다.

    구문

    radosgw-admin realm create --rgw-realm=REPLICATED_REALM_1 --default

    예제

    [user@rgw1 ~] radosgw-admin realm create --rgw-realm=rdc1 --default

    --default 플래그를 사용하여 기본 사이트에서 복제된 영역을 기본값으로 설정합니다.

  14. 첫 번째 데이터 센터에 대한 마스터 영역 그룹을 생성합니다.

    구문

    radosgw-admin zonegroup create --rgw-zonegroup=RGW_ZONE_GROUP --endpoints=http://_RGW_NODE_NAME:80 --rgw-realm=_RGW_REALM_NAME --master --default

    예제

    [root@rgw1 ~]# radosgw-admin zonegroup create --rgw-zonegroup=rdc1zg --endpoints=http://rgw1:80 --rgw-realm=rdc1 --master --default

  15. 첫 번째 데이터 센터에 마스터 영역을 생성합니다.

    구문

    radosgw-admin zone create --rgw-zonegroup=RGW_ZONE_GROUP --rgw-zone=_MASTER_RGW_NODE_NAME --master --default --endpoints=HTTP_FQDN[,HTTP_FQDN]

    예제

    [root@rgw1 ~]# radosgw-admin zone create --rgw-zonegroup=rdc1zg --rgw-zone=rdc1z --master --default --endpoints=http://rgw.example.com

  16. 복제/동기화 사용자를 생성하고 시스템 사용자를 다중 사이트의 마스터 영역에 추가합니다.

    구문

    radosgw-admin user create --uid="r_REPLICATION_SYNCHRONIZATION_USER_" --display-name="Replication-Synchronization User" --system
    radosgw-admin zone modify --rgw-zone=RGW_ZONE --access-key=ACCESS_KEY --secret=SECRET_KEY

    예제

    [root@rgw1 ~]# radosgw-admin zone modify --rgw-zone=rdc1zg --access-key=3QV0D6ZMMCJZMSCXJ2QJ --secret=VpvQWcsfI9OPzUCpR4kynDLAbqa1OIKqRB6WEnH8

  17. 기간을 커밋합니다.

    구문

    radosgw-admin period update --commit

  18. 첫 번째 데이터 센터에 대해 rgw_realm,rgw_zonegrouprgw_zone 이름으로 ceph.conf 를 업데이트합니다.

    구문

    rgw_realm = REALM_NAME
    rgw_zonegroup = ZONE_GROUP_NAME
    rgw_zone = ZONE_NAME

    예제

    rgw_realm = rdc1
    rgw_zonegroup = rdc1zg
    rgw_zone = rdc1z

  19. RGW 데몬을 다시 시작하십시오.

    구문

    systemctl restart ceph-radosgw@rgw.$(hostname -s).rgw0.service

  20. 두 번째 데이터 센터에서 복제 영역을 가져옵니다.

    구문

    radosgw-admin realm pull --url=https://tower-osd1.cephtips.com --access-key=ACCESS_KEY --secret-key=SECRET_KEY

    예제

    radosgw-admin realm pull --url=https://tower-osd1.cephtips.com --access-key=3QV0D6ZMMCJZMSCXJ2QJ --secret-key=VpvQWcsfI9OPzUCpR4kynDLAbqa1OIKqRB6WEnH8

  21. 첫 번째 데이터 센터에서 기간을 가져옵니다.

    구문

    radosgw-admin period pull --url=https://tower-osd1.cephtips.com --access-key=ACCESS_KEY --secret-key=SECRET_KEY

    예제

    radosgw-admin period pull --url=https://tower-osd1.cephtips.com --access-key=3QV0D6ZMMCJZMSCXJ2QJ --secret-key=VpvQWcsfI9OPzUCpR4kynDLAbqa1OIKqRB6WEnH8

  22. 두 번째 데이터 센터에 보조 영역을 생성합니다.

    구문

    radosgw-admin zone create --rgw-zone=RGW_ZONE --rgw-zonegroup=RGW_ZONE_GROUP --endpoints=https://tower-osd4.cephtips.com --access-key=_ACCESS_KEY --secret-key=SECRET_KEY

    예제

    [root@rgw2 ~]# radosgw-admin zone create --rgw-zone=rdc2z --rgw-zonegroup=rdc1zg --endpoints=https://tower-osd4.cephtips.com --access-key=3QV0D6ZMMCJZMSCXJ2QJ --secret-key=VpvQWcsfI9OPzUCpR4kynDLAbqa1OIKqRB6WEnH8

  23. 기간을 커밋합니다.

    구문

    radosgw-admin period update --commit

  24. 두 번째 데이터 센터의 rgw_realm,rgw_zonegrouprgw_zone 이름으로 ceph.conf 를 업데이트합니다.

    구문

    rgw_realm = REALM_NAME
    rgw_zonegroup = ZONE_GROUP_NAME
    rgw_zone = ZONE_NAME

    예제

    rgw realm = rdc1
    rgw zonegroup = rdc1zg
    rgw zone = rdc2z

  25. Ceph Object Gateway 데몬을 다시 시작합니다.

    구문

    systemctl restart ceph-radosgw@rgw.$(hostname -s).rgw0.service

  26. 두 번째 데이터 센터에 로그인하고 마스터 영역에서 동기화 상태를 확인합니다.

    구문

    radosgw-admin sync status

    예제

    [root@rgw2 ~]# radosgw-admin sync status
              realm 59762f08-470c-46de-b2b1-d92c50986e67 (ldc2)
          zonegroup 7cf8daf8-d279-4d5c-b73e-c7fd2af65197 (ldc2zg)
               zone 034ae8d3-ae0c-4e35-8760-134782cb4196 (ldc2z)
      metadata sync no sync (zone is master)

  27. 첫 번째 데이터 센터에 로그인하고 replication-synchronization 영역의 동기화 상태를 확인합니다.

    구문

    radosgw-admin sync status --rgw-realm RGW_REALM_NAME

    예제

    [root@rgw1 ~]# radosgw-admin sync status --rgw-realm rdc1
              realm 73c7b801-3736-4a89-aaf8-e23c96e6e29d (rdc1)
          zonegroup d67cc9c9-690a-4076-89b8-e8127d868398 (rdc1zg)
               zone 67584789-375b-4d61-8f12-d1cf71998b38 (rdc2z)
      metadata sync syncing
                    full sync: 0/64 shards
                    incremental sync: 64/64 shards
                    metadata is caught up with master
          data sync source: 705ff9b0-68d5-4475-9017-452107cec9a0 (rdc1z)
                            syncing
                            full sync: 0/128 shards
                            incremental sync: 128/128 shards
                            data is caught up with source
              realm 73c7b801-3736-4a89-aaf8-e23c96e6e29d (rdc1)
          zonegroup d67cc9c9-690a-4076-89b8-e8127d868398 (rdc1zg)
               zone 67584789-375b-4d61-8f12-d1cf71998b38 (rdc2z)
      metadata sync syncing
                    full sync: 0/64 shards
                    incremental sync: 64/64 shards
                    metadata is caught up with master
          data sync source: 705ff9b0-68d5-4475-9017-452107cec9a0 (rdc1z)
                            syncing
                            full sync: 0/128 shards
                            incremental sync: 128/128 shards
                            data is caught up with source

  28. 로컬 사이트에 데이터를 저장하고 액세스하려면 로컬 영역의 사용자를 생성합니다.

    구문

    radosgw-admin user create --uid="LOCAL_USER" --display-name="Local user" --rgw-realm=_REALM_NAME --rgw-zonegroup=ZONE_GROUP_NAME --rgw-zone=ZONE_NAME

    예제

    [root@rgw2 ~]# radosgw-admin user create --uid="local-user" --display-name="Local user" --rgw-realm=ldc1 --rgw-zonegroup=ldc1zg --rgw-zone=ldc1z

중요

기본적으로 사용자는 기본 영역에 생성됩니다. 사용자가 로컬 영역의 데이터에 액세스하려면 radosgw-admin 명령에 --rgw-realm 인수가 필요합니다.