ECS: 읽기 쓰기 작업 중에 BaseURL이 누락되어 400/404 오류 발생
요약: 잘못된 BaseURL 구성으로 인해 REST 요청이 실패하고 400 코드 오류가 발생합니다.
이 문서는 다음에 적용됩니다.
이 문서는 다음에 적용되지 않습니다.
이 문서는 특정 제품과 관련이 없습니다.
모든 제품 버전이 이 문서에 나와 있는 것은 아닙니다.
증상
S3를 사용하여 ECS에 대한 읽기 및 쓰기를 시도할 때 HTTP 400/404 오류가 표시됩니다.
나열 작업이 다중 VDC 환경에서 실행 중인 경우 E RROR_KEYPOOL_NOT_FOUND 메시지와 함께 요청이 실패할 수있습니다.
원인
이 상황은 글로벌 로드 밸런서(둘 이상의 VDC 간에 로드 밸런싱)가 있는 환경에서 일반적입니다. 즉, 동일한 URL을 사용하여 한 VDC에서는 오브젝트에 액세스할 수 있지만 다른 VDC에서는 오브젝트에 액세스할 수 없지만, 사용자가 타겟 버킷의 네임스페이스에 속하지 않는 경우 어느 환경에서나 나타날 수 있습니다.
해결
- ECS에서 사용자 범위 설정을 쿼리합니다.
# svc_rest_cmd config/object/properties.json
Example:
admin@g1-ecs3:~> svc_rest_cmd config/object/properties.json
svc_rest_cmd 1.0.10
{
"properties": {
"user_scope": "GLOBAL"
},
"empty": false,
"allProperties": {
"user_scope": "GLOBAL"
}
}
- svc_request 사용하여 실패한 HTTP 요청 ID를 검색합니다.
# svc_request errorsummary
Example:
admin@g1-ecs3:~> svc_request errorsummary
svc_request v1.0.11 (svc_tools v1.5.4) Started 2019-07-02 16:26:14
Time range: 2019-07-02 14:26:14 - 2019-07-02 16:26:14
Running against node(s): <All nodes>
Resp
Time Retry
Node Time Request ID Type Status (ms) # Exception URL
169.254.1.2 19-07-02 14:38:41 0a51548d:16b6bc5bf6e:9b15:1 GET 404 17 0 ObjectControllerException https://testjkns3.xxxobj6.ms.com/bkt1/object1
- dataheadsvc 로그에서 실패한 요청에 대한 세부 정보를 가져옵니다.
Dataheadsvc 로그는 여기에서 찾을 수 있습니다.
/opt/emc/caspian/fabric/agent/services/object/main/log
또는 svc_request를 사용하여 로그를 확인합니다
:# svc_request -r <request ID> -start "<specify_start_time>" showlogs
admin@ecs:/opt/emc/caspian/fabric/agent/services/fabric/data> svc_request -r 0a51548d:16b6bc5bf6e:9b15:1 -start 14:00 showlogs
svc_request v1.0.10 (svc_tools v1.5.3) Started 2019-07-01 19:55:02
Time range: 2019-07-01 14:00:00 - 2019-07-01 19:55:01
Running against node(s): <All nodes>
Request ID: 0a51548d:16b6bc5bf6e:9b15:1
##################################################
Reqid: 0a51548d:16b6bc5bf6e:9b15:1
Reply timestamp: 2019-07-01T14:56:41,806
Protocol: s3
Request Type: GET
Size: 177 Bytes (0.000 MB)
Response Time: 17 ms
URL: https://testjkns3.xxxobj6.ms.com/bkt1/object1
ShortURL: https://testjkns3.xxxobj6.ms.com/bkt1/object1
Bucket:
Object: /testjkns3.xxxobj6.ms.com/bkt1/object1
Options:
Status: 404
Client IP: 10.xxx.xx.17
Thread ID: qtp1776502451-104390
Request (or retry)
completed: No
Exception: ObjectAccessException
Retry #: 0 (of 0 total)
Multi-part upload: -
log messages:
169.254.1.7 [qtp1776502451-104390-0a51548d:16b6bc5bf6e:9b15:1-s3-10.196.105.17] ERROR ResourceClient.java (line 331)
request id 0a51548d:16b6bc5bf6e:9b15:2,
command type REQUEST_BUCKET_GET failed with error code ERROR_KEYPOOL_NOT_FOUND and message 'bucket xxx1.bkt1 not found'
169.254.1.7 2019-07-01T14:56:41,801 INFO KeyPoolInfoAccess.java (line 283)
Cannot get keypool info from DT server since kpId xxx1.bkt1 is not found there
169.254.1.7 2019-07-01T14:56:41,801 ERROR S3Exception.java (line 942) got object access exception. RequestId 0a51548d:16b6bc5bf6e:9b15:1
com.emc.storageos.objcontrol.object.exception.ObjectAccessException: NoSuchBucket
169.254.1.7 [qtp1776502451-104390] INFO RequestLog.java (line 83) 10.196.105.17 GET https://testjkns3.xxxobj6.ms.com/bkt1/object1 HTTP/1.1 404 17 - 177
- 두 사이트의 기본 URL에 대해 구성된 내용을 확인합니다.
# svc_rest_cmd object/baseurl
Example: Output from xxxobj7 VDC, we see only a default base url svc_rest_cmd 1.0.10 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <base_urls> <base_url> <id>urn:ObjectBaseUrl:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</id> <link rel="self" href="/object/baseurl/urn:ObjectBaseUrl:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"/> <name>DefaultBaseUrl</name> </base_url> </base_urls> VDC xxxobj6 has customer baseurl configured which is not configured on xxxobj7 svc_rest_cmd 1.0.10 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <base_urls> <base_url> <id>urn:ObjectBaseUrl:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</id> <link rel="self" href="/object/baseurl/urn:ObjectBaseUrl:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"/> <name>DefaultBaseUrl</name> </base_url> <base_url> <id>urn:ObjectBaseUrl:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</id> <link rel="self" href="/object/baseurl/urn:ObjectBaseUrl:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"/> <name>xxxobj6</name> </base_url> </base_urls>
-
로드 밸런서가 해당 VDC에 구성되지 않은 baseurl 이름이 xxxobj6인 xxxobj7 VDC로 요청을 보내고 있었습니다. xxxobj7 VDC에서 버킷을 찾을 수 없습니다. 기본 URL은 VDC별 구성입니다. VDC 간에는 복제되지 않습니다.
-
이 경우 로드 밸런서가 두 VDC에 교차 트래픽을 전송하므로 해결 방법은 두 VDC에 두 기본 URL을 모두 추가하는 것입니다. 여기서 "Use with Namespace" 설정은 ECS가 클라이언트가 제공한 URL에서 네임스페이스를 구문 분석할 수 있도록 하는 설정이기 때문에 중요합니다. 이러한 설정이 올바르면 클라이언트가 두 VDC의 오브젝트/버킷에 액세스할 수 있습니다.
해당 제품
Elastic Cloud Storage제품
ECS Appliance, ECS Appliance Hardware Series, ECS Appliance Software with Encryption, ECS Appliance Software without Encryption, Elastic Cloud Storage문서 속성
문서 번호: 000062997
문서 유형: Solution
마지막 수정 시간: 08 5월 2025
버전: 5
다른 Dell 사용자에게 질문에 대한 답변 찾기
지원 서비스
디바이스에 지원 서비스가 적용되는지 확인하십시오.