OCP4.4.1使用S3兼容协议存储备份失败

【 使用环境 】测试环境
【 OB or 其他组件 】
【 使用版本 】 OBServer 4.2.5.7、OCP: 4.4.1
【问题描述】发起备份报错设置备份路径失败,错误信息:(conn=3221967979) no I/O operation permission at the backup destination

  1. 测试存储地址可以测试成功

  2. 发起备份报错 设置备份路径失败,错误信息:(conn=3221967979) no I/O operation permission at the backup destination

  3. 使用s3cmd可以正常PUT、GET

  4. 使用./ob_admin test_io_device 报错
    ERROR INFO: The path is inaccessible, please check the path and the storage info parameter
    ERROR CODE: -4002 OB_INVALID_ARGUMENT

ob_admin.log (177.5 KB)
ob_admin_rs.log (7.3 KB)

3 个赞

sys租户执行:

ALTER SYSTEM SET ob_storage_s3_url_encode_type='compliantRfc3986Encoding';

你用的哪里的s3?

3 个赞

公司内部的服务,兼容S3协议

执行没修复 ALTER SYSTEM SET ob_storage_s3_url_encode_type=‘compliantRfc3986Encoding’;
用ob_admin 命令也指定了,验证没成功

1 个赞

ob_admin测试的时候桶名后面加/
去掉这个:&addressing_model=path_style

1 个赞

可以OCP上执行后备份触发报错后,登录到任意OBServer服务器上看下最新的observer.log日志和rootService日志,会记录生成的s3命令,可能生成的s3协议部分命令不支持,可以从日志找到命令后在命令行用ALTER SYSTEM SET DATA_BACKUP_DEST=手工指定看会不会报错。

1 个赞

公司的S3只支持path_style模式


ob_admin.log (87.6 KB)
ob_admin_rs.log (3.6 KB)

1 个赞


租户直接执行也会报错,使用s3cmd验证正常

1 个赞

这些知识点在OBCPv4的官方文档好像没见过,S3是啥呀

1 个赞

https://www.oceanbase.com/docs/common-ocp-1000000005295426

1 个赞

日志显示backup_path被拼成s3://ob-cn-backup2026-04-03-16:40:18
命令行实际为s3://ob-cn-backup

1 个赞

show parameters like ‘%ob_storage_s3_url_encode_type%’;
查询下ob_storage_s3_url_encode_type参数值是否修改正常

1 个赞

围观一下

[2026-04-03 16:40:50.075080] INFO  get_file_length (ob_storage.cpp:631) [2366387][][T500][Y0-0000000000000000-0-0] [lt=7] this file is empty(ret=0, uri=s3://ob-cn-backup/2026-04-03-16:40:49/check_file/appendable_check_file.obbak, file_length=0)
[2026-04-03 16:40:50.075097] EDIAG [STORAGE] test_appendable_check_file_ (ob_admin_test_io_device_executor.cpp:285) [2366387][][T500][Y0-0000000000000000-0-0] [lt=14][errcode=-4016] get appendable check file length does not match real length(ret=-4016, appendable_check_file_path="s3://ob-cn-backup/2026-04-03-16:40:49/check_file/appendable_check_file.obbak", real_len=42, check_file_len=0) BACKTRACE:0x61732b3 0x612cc85 0x637275f 0x6372224 0x637217c 0x6372112 0x96e33cc 0x96db931 0x96d752c 0x96d6e7c 0x953d0d7 0x7f5721f6ead0 0x7f5721f6eb89 0x66d4bea
[2026-04-03 16:40:50.075179] EDIAG [STORAGE] test_backup_dest_connectivity_ (ob_admin_test_io_device_executor.cpp:177) [2366387][][T500][Y0-0000000000000000-0-0] [lt=68][errcode=-4016] test appendable check file failed(ret=-4016) BACKTRACE:0x61732b3 0x612cc85 0x62856f4 0x62851a4 0x6285102 0x6284f2f 0x96e1580 0x96dc589 0x96d752c 0x96d6e7c 0x953d0d7 0x7f5721f6ead0 0x7f5721f6eb89 0x66d4bea
[2026-04-03 16:40:50.075208] EDIAG [STORAGE] run_all_tests_ (ob_admin_test_io_device_executor.cpp:133) [2366387][][T500][Y0-0000000000000000-0-0] [lt=20][errcode=-4016] test backup dest connectivity failed(ret=-4016, backup_path="s3://ob-cn-backup/2026-04-03-16:40:49") BACKTRACE:0x61732b3 0x612cc85 0x612a2e8 0x5f8bba6 0x5f763b4 0x5f93e76 0x96de40e 0x96d8ac8 0x96d6e7c 0x953d0d7 0x7f5721f6ead0 0x7f5721f6eb89 0x66d4bea
[2026-04-03 16:40:50.075228] EDIAG [STORAGE] execute (ob_admin_test_io_device_executor.cpp:64) [2366387][][T500][Y0-0000000000000000-0-0] [lt=20][errcode=-4016] failed to pass all tests(ret=-4016, backup_path="s3://ob-cn-backup/2026-04-03-16:40:49") BACKTRACE:0x61732b3 0x612cc85 0x612a2e8 0x5f8bba6 0x5f763b4 0x5f93e76 0x96da65e 0x96d6f7e 0x953d0d7 0x7f5721f6ead0 0x7f5721f6eb89 0x66d4bea

将 2026-04-03-16:40:49 冒号 改成 “-” ,例如 s3://ob-cn-backup/2026-04-03-16-40-49
或者s3://ob-cn-backup/2026-04-03_16_40_49
再试下呢

ob的详细版本号提供一下,
select BUILD_VERSION from dba_ob_servers;

对象存储

需要确认下你们公司的对象存储实现,是不是用空文件表示了目录?

学到了

根因:S3 兼容存储的最终一致性问题

日志显示 file_length=0ret=0,说明函数成功执行但未找到数据。结合 adaptively_is_exist 成功(找到了 @FORMAT_META)但长度为 0 的现象,根因是:

S3 兼容存储的 LIST 操作存在最终一致性(eventual consistency)问题。

解决方向

  1. 确认 S3 兼容存储是否支持强一致性,并在存储配置中启用