검색

9.8. 버킷 라이프사이클

download PDF

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

RADOS 게이트웨이는 버킷 오브젝트 세트에 정의된 규칙을 사용하여 S3 API 오브젝트 만료를 지원합니다. 각 규칙에는 오브젝트를 선택하는 접두사와 오브젝트를 사용할 수 없게 되는 일 수가 있습니다.

참고

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

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

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

사전 요구 사항

  • 실행 중인 Red Hat Storage 클러스터입니다.
  • Ceph Object Gateway 설치
  • 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"
    	    }
        ]
    }

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

  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

    예제

    [ceph: root@host01 /]# 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
    		}
    	}
      ]
    }

추가 리소스

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

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

사전 요구 사항

  • 실행 중인 Red Hat Storage 클러스터입니다.
  • Ceph Object Gateway 설치
  • 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

    예제

    [ceph: root@host01 /]# radosgw-admin lc get --bucket=testbucket

    참고

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

추가 리소스

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

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

참고

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

사전 요구 사항

  • 실행 중인 Red Hat Storage 클러스터입니다.
  • Ceph Object Gateway 설치
  • 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

    예제

    [ceph: root@host01 /]# 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
    		}
    	}
      ]
    }

추가 리소스

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

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

사전 요구 사항

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

프로세스

  1. Cephadm 쉘에 로그인합니다.

    예제

    [root@host01 ~]# cephadm shell

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

    예제

    [ceph: root@host01 /]# 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 - 프로세스가 완료되었습니다.
  3. 선택 사항: 버킷 라이프사이클 정책을 수동으로 처리할 수 있습니다.

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

      구문

      radosgw-admin lc process --bucket=BUCKET_NAME

      예제

      [ceph: root@host01 /]# radosgw-admin lc process --bucket=testbucket1

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

      예제

      [ceph: root@host01 /]# radosgw-admin lc process

검증

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

    [ceph: root@host01 /]# 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”
        }
    ]

추가 리소스

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

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

사전 요구 사항

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

프로세스

  1. Cephadm 쉘에 로그인합니다.

    예제

    [root@host01 ~]# cephadm shell

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

    구문

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

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

    예제

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

검증

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

    예제

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

추가 리소스

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

버킷 라이프사이클 구성을 사용하여 개체를 관리할 수 있으므로 개체의 수명 동안 개체가 효과적으로 저장됩니다. 오브젝트 라이프사이클 전환 규칙을 사용하면 개체 수명 동안 오브젝트를 관리하고 효과적으로 저장할 수 있습니다. 오브젝트를 더 저렴한 스토리지 클래스, 아카이브로 전환하거나 삭제할 수도 있습니다.

다음과 같은 스토리지 클래스를 생성할 수 있습니다.

  • I/O 민감한 워크로드의 경우 SSD 또는 NVMe와 같은 빠른 미디어
  • 보관을 위해 SAS 또는 SATA와 같은 느린 미디어입니다.

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

추가 리소스

9.8.7. 하나의 스토리지 클래스에서 다른 스토리지 클래스로 오브젝트 전환

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

복제된 풀, 삭제 코딩된 풀 간에 데이터를 마이그레이션하거나, 삭제로 코딩된 풀로 복제하거나, Ceph Object Gateway 라이프사이클 전환 정책을 사용하여 복제된 풀로 삭제할 수 있습니다.

참고

다중 사이트 구성에서 라이프사이클 전환 규칙이 첫 번째 사이트에 적용되면 동일한 스토리지 클러스터에 있는 한 데이터 풀에서 개체를 다른 데이터 풀로 전환하기 위해 두 번째 사이트에 해당 데이터 풀이 생성되고 rgw 애플리케이션을 사용하여 활성화되는 경우 두 번째 사이트에도 동일한 규칙이 적용됩니다.

사전 요구 사항

  • Ceph Object Gateway 소프트웨어 설치.
  • Ceph Object Gateway 노드에 대한 루트 수준 액세스.
  • 사용자 액세스 권한이 있는 S3 사용자

프로세스

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

    구문

    ceph osd pool create POOL_NAME

    예제

    [ceph: root@host01 /]# ceph osd pool create test.hot.data

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

    구문

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

    예제

    [ceph: root@host01 /]# 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

    예제

    [ceph: root@host01 /]# 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

    예제

    [ceph: root@host01 /]# ceph osd pool application enable test.hot.data rgw
    enabled application 'rgw' on pool 'test.hot.data'

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

    예제

    [ceph: root@host01 /]# aws s3api create-bucket --bucket testbucket10 --create-bucket-configuration LocationConstraint=default:default-placement --endpoint-url http://10.0.0.80:8080

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

    예제

    [ceph: root@host01 /]# aws --endpoint=http://10.0.0.80:8080 s3api put-object --bucket testbucket10  --key compliance-upload --body /root/test2.txt

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

    구문

    ceph osd pool create POOL_NAME

    예제

    [ceph: root@host01 /]# ceph osd pool create test.cold.data

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

    구문

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

    예제

    [ceph: root@host01 /]# 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

    예제

    [ceph: root@host01 /]# 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

    예제

    [ceph: root@host01 /]# 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. 버킷을 생성합니다.

    예제

    [ceph: root@host01 /]# aws s3api create-bucket --bucket testbucket10 --create-bucket-configuration LocationConstraint=default:default-placement --endpoint-url http://10.0.0.80:8080

  16. 전환 전에 오브젝트를 나열합니다.

    예제

    [ceph: root@host01 /]# radosgw-admin bucket list --bucket testbucket10
    
            {
                "ETag": "\"211599863395c832a3dfcba92c6a3b90\"",
                "Size": 540,
                "StorageClass": "STANDARD",
                "Key": "obj1",
                "VersionId": "W95teRsXPSJI4YWJwwSG30KxSCzSgk-",
                "IsLatest": true,
                "LastModified": "2023-11-23T10:38:07.214Z",
                "Owner": {
                    "DisplayName": "test-user",
                    "ID": "test-user"
                }
            }

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

    예제

    [ceph: root@host01 /]# vi lifecycle.json

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

    예제

    {
        "Rules": [
            {
                "Filter": {
                    "Prefix": ""
                },
                "Status": "Enabled",
                "Transitions": [
                    {
                        "Days": 5,
                        "StorageClass": "hot.test"
                    },
     {
                        "Days": 20,
                        "StorageClass": "cold.test"
                    }
                ],
                "Expiration": {
                    "Days": 365
                },
                "ID": "double transition and expiration"
            }
        ]
    }

    라이프사이클 구성 예제에서는 5일 후 기본 STANDARD 스토리지 클래스에서 hot.test 스토리지 클래스로 전환하고 20일 후 cold.test 스토리지 클래스로 다시 전환되며, 마지막으로 cold.test 스토리지 클래스에서 365일이 지나면 만료되는 오브젝트를 보여줍니다.

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

    예제

    [ceph: root@host01 /]# aws s3api put-bucket-lifecycle-configuration --bucket testbucket10 --lifecycle-configuration file://lifecycle.json

  20. 버킷에서 라이프사이클 구성을 검색합니다.

    예제

    [ceph: root@host01 /]# aws s3api get-bucket-lifecycle-configuration --bucket testbucke10
    {
        "Rules": [
            {
                "Expiration": {
                    "Days": 365
                },
                "ID": "double transition and expiration",
                "Prefix": "",
                "Status": "Enabled",
                "Transitions": [
                    {
                        "Days": 20,
                        "StorageClass": "cold.test"
                    },
                    {
                        "Days": 5,
                        "StorageClass": "hot.test"
                    }
                ]
            }
        ]
    }

  21. 오브젝트가 지정된 스토리지 클래스로 전환되었는지 확인합니다.

    예제

    [ceph: root@host01 /]# radosgw-admin bucket list --bucket testbucket10
    
            {
                "ETag": "\"211599863395c832a3dfcba92c6a3b90\"",
                "Size": 540,
                "StorageClass": "cold.test",
                "Key": "obj1",
                "VersionId": "W95teRsXPSJI4YWJwwSG30KxSCzSgk-",
                "IsLatest": true,
                "LastModified": "2023-11-23T10:38:07.214Z",
                "Owner": {
                    "DisplayName": "test-user",
                    "ID": "test-user"
                }
            }

추가 리소스

9.8.8. S3에 대한 오브젝트 잠금 활성화

S3 개체 잠금 메커니즘을 사용하면 보존 기간, 법적 보류, 버킷 구성과 같은 개체 잠금 개념을 사용하여 사용자 지정 워크플로우에서 데이터 삭제 권한을 재정의하는 사용자 지정 워크플로우의 일부로 WORM(Write-Once-Read-Many) 기능을 구현할 수 있습니다.

중요

오브젝트 이름이 아닌 오브젝트 버전은 GOVERNANCE 또는 COMPLIANCE 모드를 지원하기 위해 오브젝트 잠금을 올바르게 수행하는 데 필요한 정의 및 필수 값입니다. 나중에 검색할 수 있도록 작성 시 오브젝트 버전을 알아야 합니다.

사전 요구 사항

  • Ceph Object Gateway가 설치된 실행 중인 Red Hat Ceph Storage 클러스터
  • Ceph Object Gateway 노드에 대한 루트 수준 액세스.
  • 버전-bucket 생성 액세스 권한이 있는 S3 사용자

프로세스

  1. 오브젝트 잠금이 활성화된 버킷을 생성합니다.

    구문

    aws --endpoint=http://RGW_PORT:8080 s3api create-bucket --bucket BUCKET_NAME --object-lock-enabled-for-bucket

    예제

    [root@rgw-2 ~]# aws --endpoint=http://rgw.ceph.com:8080 s3api create-bucket --bucket worm-bucket --object-lock-enabled-for-bucket

  2. 버킷의 보존 기간을 설정합니다.

    구문

    aws --endpoint=http://RGW_PORT:8080 s3api put-object-lock-configuration --bucket BUCKET_NAME --object-lock-configuration '{ "ObjectLockEnabled": "Enabled", "Rule": { "DefaultRetention": { "Mode": "RETENTION_MODE", "Days": NUMBER_OF_DAYS }}}'

    예제

    [root@rgw-2 ~]# aws --endpoint=http://rgw.ceph.com:8080 s3api put-object-lock-configuration --bucket worm-bucket --object-lock-configuration '{ "ObjectLockEnabled": "Enabled", "Rule": { "DefaultRetention": { "Mode": "COMPLIANCE", "Days": 10 }}}'

    참고

    S3 개체 잠금의 RETENTION_MODEGOVERNANCE 또는 COMPLIANCE 모드를 선택하여 오브젝트 잠금으로 보호되는 모든 오브젝트 버전에 다양한 수준의 보호를 적용할 수 있습니다.

    GOVERNANCE 모드에서 사용자는 오브젝트 버전을 덮어쓰거나 삭제하거나 특별한 권한이 없는 경우 잠금 설정을 변경할 수 없습니다.

    COMPLIANCE 모드에서는 AWS 계정의 root 사용자를 포함하여 보호된 오브젝트 버전을 사용자가 덮어쓰거나 삭제할 수 없습니다. 개체가 COMPLIANCE 모드로 잠겨 있으면 해당 RETENTION_MODE 를 변경할 수 없으며 보존 기간을 단축할 수 없습니다. COMPLIANCE 모드를 사용하면 기간 동안 오브젝트 버전을 덮어쓰거나 삭제할 수 없습니다.

  3. 보존 시간이 설정된 버킷에 오브젝트를 배치합니다.

    구문

    aws --endpoint=http://RGW_PORT:8080 s3api put-object --bucket BUCKET_NAME --object-lock-mode RETENTION_MODE --object-lock-retain-until-date "DATE" --key compliance-upload --body TEST_FILE

    예제

    [root@rgw-2 ~]# aws --endpoint=http://rgw.ceph.com:8080 s3api put-object --bucket worm-bucket --object-lock-mode COMPLIANCE --object-lock-retain-until-date "2022-05-31" --key compliance-upload --body test.dd
    {
        "ETag": "\"d560ea5652951637ba9c594d8e6ea8c1\"",
        "VersionId": "Nhhk5kRS6Yp6dZXVWpZZdRcpSpBKToD"
    }

  4. 동일한 키를 사용하여 새 오브젝트를 업로드합니다.

    구문

    aws --endpoint=http://RGW_PORT:8080 s3api put-object --bucket BUCKET_NAME --object-lock-mode RETENTION_MODE --object-lock-retain-until-date "DATE" --key compliance-upload --body PATH

    예제

    [root@rgw-2 ~]# aws --endpoint=http://rgw.ceph.com:8080 s3api put-object --bucket worm-bucket --object-lock-mode COMPLIANCE --object-lock-retain-until-date "2022-05-31" --key compliance-upload --body /etc/fstab
    {
        "ETag": "\"d560ea5652951637ba9c594d8e6ea8c1\"",
        "VersionId": "Nhhk5kRS6Yp6dZXVWpZZdRcpSpBKToD"
    }

명령줄 옵션

  • 개체 버전에서 개체 잠금을 설정합니다.

    예제

    [root@rgw-2 ~]# aws --endpoint=http://rgw.ceph.com:8080 s3api put-object-legal-hold --bucket worm-bucket --key compliance-upload --legal-hold Status=ON

    참고

    개체 잠금 법적 보류 작업을 사용하면 개체 버전에 법적 유지를 배치하여 개체 버전을 덮어쓰거나 삭제할 수 없습니다. 법적 유지에는 관련 보존 기간이 없으므로 제거될 때까지 계속 적용됩니다.

  • 버킷의 오브젝트를 나열하여 최신 버전의 오브젝트만 검색합니다.

    예제

    [root@rgw-2 ~]# aws --endpoint=http://rgw.ceph.com:8080 s3api list-objects --bucket worm-bucket

  • 버킷의 오브젝트 버전을 나열합니다.

    예제

    [root@rgw-2 ~]# aws --endpoint=http://rgw.ceph.com:8080 s3api list-objects --bucket worm-bucket
    {
        "Versions": [
            {
                "ETag": "\"d560ea5652951637ba9c594d8e6ea8c1\"",
                "Size": 288,
                "StorageClass": "STANDARD",
                "Key": "hosts",
                "VersionId": "Nhhk5kRS6Yp6dZXVWpZZdRcpSpBKToD",
                "IsLatest": true,
                "LastModified": "2022-06-17T08:51:17.392000+00:00",
                "Owner": {
                    "DisplayName": "Test User in Tenant test",
                    "ID": "test$test.user"
                }
                }
            }
        ]
    }

  • version-ids를 사용하여 오브젝트에 액세스합니다.

    예제

    [root@rgw-2 ~]# aws --endpoint=http://rgw.ceph.com:8080 s3api get-object --bucket worm-bucket  --key compliance-upload --version-id 'IGOU.vdIs3SPduZglrB-RBaK.sfXpcd' download.1
    {
        "AcceptRanges": "bytes",
        "LastModified": "2022-06-17T08:51:17+00:00",
        "ContentLength": 288,
        "ETag": "\"d560ea5652951637ba9c594d8e6ea8c1\"",
        "VersionId": "Nhhk5kRS6Yp6dZXVWpZZdRcpSpBKToD",
        "ContentType": "binary/octet-stream",
        "Metadata": {},
        "ObjectLockMode": "COMPLIANCE",
        "ObjectLockRetainUntilDate": "2023-06-17T08:51:17+00:00"
    }

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.