ECS:缺少 BaseURL,导致读写操作期间出现 400/404 错误
Summary: 不正确的 BaseURL 配置会导致 REST 请求失败,并显示 400 代码错误。
This article applies to
This article does not apply to
This article is not tied to any specific product.
Not all product versions are identified in this article.
Symptoms
尝试使用 S3 读取和写入 ECS 时,会出现 HTTP 400/404 错误。
在多 VDC 环境中运行列表作时,请求可能会失败并显示 ERROR_KEYPOOL_NOT_FOUND消息。
Cause
这种情况在具有全局负载平衡器(平衡两个或更多 VDC 之间的负载)的环境中很常见,其中一个 VDC 上的对象可以使用相同的 URL 访问,但在另一个 VDC 上无法访问,但如果用户不属于目标存储区的命名空间,则在任何环境中都可能出现这种情况。
Resolution
- 查询 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>
-
负载平衡器正在向 baseurl 名称为 xxxobj6 的 xxxobj7 VDC 发送请求,但该 VDC 上未配置该名称。因此 xxxobj7 VDC 无法找到存储区。基本 URL 是特定于 VDC 的配置。它不会在 VDC 之间复制。
-
解决方案是将两个基本 URL 添加到两个 VDC,因为在本例中,负载平衡器会向两个 VDC 发送交叉流量。“与命名空间配合使用”设置在此处很重要,因为此设置允许 ECS 从客户端提供的 URL 解析命名空间。这些设置正确后,客户端即可从两个 VDC 访问对象/存储区。
Affected Products
Elastic Cloud StorageProducts
ECS Appliance, ECS Appliance Hardware Series, ECS Appliance Software with Encryption, ECS Appliance Software without Encryption, Elastic Cloud StorageArticle Properties
Article Number: 000062997
Article Type: Solution
Last Modified: 08 May 2025
Version: 5
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.