此操作用来还原HBlock上云卷。
以下场景适合还原卷功能:
- 原HBlock中存在上云卷,并且将数据上传到了云端。如果此时HBlock发生故障无法启动,可以通过还原卷的功能,在另一个HBlock中将该卷重新生成,并且从云端进行数据恢复。
- 原上云卷被删除,但云上数据保留,可以通过还原卷功能恢复卷数据。
注意
在执行还原操作的时候,请确保原HBlock和云上的连接已经断开,不再向该卷写入新的数据。
还原的卷名称在当前HBlock中不存在。
还原的卷必须在指定的Bucket/prefix中找到,且数据完整。
还原操作异步执行,请通过查询卷的功能查看还原进度。
请求语法
单机版
POST /rest/v1/block/lun/recover HTTP/1.1
Date:date
Content-Type: application/json; charset=utf-8
Content-Length: length
Host: ip:port
Authorization: authorization
{
"lunName": lunName,
"uuid": lunuuid,
"targetName": targetName,
"storageMode": storageMode,
"config": {
"sectorSize": sectorSize,
"writePolicy": writePolicy,
"path": path
},
"cloud": {
"bucketName": bucketName,
"prefix": prefix,
"accessKey": accessKey,
"secretKey": secretKey,
"endpoint": endpoint,
"signVersion": signVersion,
"region": region,
"storageClass": storageClass,
"compression": compression
}
}
集群版
POST /rest/v1/block/lun/recover HTTP/1.1
Date:date
Content-Type: application/json; charset=utf-8
Content-Length: length
Host: ip:port
Authorization: authorization
{
"lunName": lunName,
"uuid": lunuuid,
"targetName": targetName,
"storageMode": storageMode,
"config": {
"localStorageClass": localStorageClass,
"minReplica": minReplica,
"ECfragmentSize": ECfragmentSize,
"cachePool": poolName,
"pool": poolName,
"highAvailability": highAvailability,
"writePolicy": writePolicy
},
"cloud": {
"bucketName": bucketName,
"prefix": prefix,
"accessKey": accessKey,
"secretKey": secretKey,
"endpoint": endpoint,
"signVersion": signVersion,
"region": region,
"storageClass": storageClass,
"compression": compression
}
}
请求参数
参数 描述 是否必须 lunName 源卷的卷名称。
类型:字符串
是 uuid 源卷的唯一标识码。
类型:字符串
是 targetName 指定还原卷的Target名称。
说明还原卷时,如果指定的Target名称不存在,那么同时创建iSCSI Target。
类型:字符串
取值:长度范围是1~16,可以由小写字母、数字、句点(.)和短横线(-)组成,且仅支持以字母或数字开头。
是 storageMode 指定还原卷的存储类型。 类型:枚举
取值:
Cache:缓存模式,本地保留部分热数据,全部数据异步存储到OOS中。
Storage:存储模式,本地保留全部数据,并异步存储到OOS中。
存储类型默认为源卷的存储类型。
否 config.localStorageClass 指定还原卷冗余模式(仅集群版支持)。
类型:枚举
取值:
single-copy:单副本。
2-copy:两副本。
3-copy:三副本。
EC N+M:纠删码模式。其中N、M为正整数,N>M,且N+M≤128。表示将数据分割成N个片段,并生成M个校验数据。
默认值为源卷的冗余模式。
说明(以下场景均为集群可用的前提下):
还原EC N+M的卷时:
服务器级别故障域:集群中可用节点台数不足N+M时,卷可以还原成功,但是卷数据将处于降级状态,允许故障的服务器台数不足M,建议尽快添加服务器或修复故障服务器。可用故障域不足N时,可以执行还原卷,但是不会还原成功,建议尽快添加服务器或修复故障服务器。
数据目录级别故障域:集群中可用数据目录数量不足N+M时,卷可以还原成功,但是卷数据将处于降级状态,允许故障的数据目录个数不足M,建议尽快添加数据目录或修复故障数据目录。可用故障域不足N时,可以执行还原卷,但是不会还原成功,建议尽快添加数据目录或修复故障数据目录。
还原副本模式的卷时:可用故障域数量大于等于1,可以还原单副本、两副本、三副本的卷,但数量小于卷副本要求数量时,卷数据将处于降级状态,建议尽快添加或修复故障域。
否 config.minReplica 指定还原卷的最小副本数(仅集群版支持)。
对于副本模式的卷,假设卷副本数为X,最小副本数为Y(Y必须≤X),该卷每次写入时,至少Y份数据写入成功,才视为本次写入成功。对于EC N+M模式的卷,假设该卷最小副本数设置为Y(必须满足N≤Y≤N+M),必须满足总和至少为Y的数据块和校验块写入成功,才视为本次写入成功。
类型:整型
取值:对于副本卷,取值范围是[1, N],N为副本模式卷的副本数,默认值为源卷的最小副本数。对于EC卷,取值范围是[N, N+M],默认值为源卷的最小副本数。
否 config.ECfragmentSize 设置还原卷的纠删码模式分片大小(仅集群版支持)。
config.localStorageClass为EC模式时,此设置才生效,否则忽略。
类型:枚举
取值:1、2、4、8、16、32、64、128、256、512、1024、2048、4096,单位是KiB。默认值为源卷的纠删码模式分片大小。
否 config.cachePool 指定还原卷的缓存存储池(仅集群版支持)。如果指定了缓存存储池,卷数据首先写入缓存存储池,然后再存入存储池。
注意:存储池与缓存存储池不能是同一个存储池。
类型:字符串
取值:长度范围是1~16,只能由字母、数字和短横线(-)、下划线(_)组成,字母区分大小写,且仅支持以字母和数字开头。
否 config.pool 指定还原卷的存储池(仅集群版支持),表示最终存储池,卷数据最终落在该存储池内。默认使用集群的基础存储池。
类型:字符串
取值:长度范围是1~16,只能由字母、数字和短横线(-)、下划线(_)组成,字母区分大小写,且仅支持以字母和数字开头。
说明不指定,默认使用基础存储池。
否 config.highAvailability 指定还原卷的高可用类型(仅集群版支持)。
类型:枚举
取值:
ActiveStandby:启用主备,该卷关联对应Target下的所有IQN。
Disabled:不启用主备,该卷关联对应Target下的1个IQN。
默认值为源卷的高可用类型。
否 config.writePolicy 设置还原卷的写策略。
类型:枚举
取值:
WriteBack:回写,指数据写入到内存后即返回客户端成功,之后再异步写入磁盘。适用于对性能要求较高,稳定性要求不高的场景。
WriteThrough:透写,指数据同时写入内存和磁盘,并在都写成功后再返回客户端成功。适用于稳定性要求较高,写性能要求不高,且最近写入的数据会较快被读取的场景。
WriteAround:绕写,指数据直接写到磁盘,不写入内存。适用于稳定性要求较高,性能要求不高,且写多读少的场景。
默认值为源卷的写策略。
否 config.path 指定还原卷存储数据的数据目录(仅单机版支持)。
如果还原卷时不指定数据目录,使用服务器设置的默认数据目录。
否 cloud.bucketName 源卷所在OOS存储桶的名称。
注意请勿开启Bucket的生命周期设定和合规保留。
类型:字符串
是 cloud.prefix 源卷的前缀名称。如果源卷未指定前缀,则此处不设置。
类型:字符串
取值:长度范围是1~256。
否 cloud.accessKey 源卷的OOS AccessKeyID。
类型:字符串
是 cloud.secretKey 源卷的OOS SecretAccessKey。
类型:字符串
是 cloud.endpoint 源卷的OOS Endpoint。
类型:字符串
是 cloud.signVersion 指定还原卷上云签名认证的类型。
类型:枚举
取值:
v2:V2签名认证。
v4:V4签名认证。
默认值为v2。
否 cloud.region 表示Endpoint资源池所在区域。具体region详见OOS Endpoint和区域。
V4签名时,此项必填。
类型:字符串
否 cloud.storageClass 设置还原卷云上OOS的存储类型。
类型:枚举
取值:
STANDARD:标准存储。
STANDARD_IA:低频访问存储。
默认为源卷上传数据至OOS的存储类型。
否 cloud.compression 设置还原卷是否压缩数据上传至OOS。
类型:枚举
取值:
Enabled:压缩数据上传至OOS。
Disabled:不压缩数据上传至OOS。
默认值为源卷的设置。
否
请求示例1
单机版:还原卷luna9。
POST /rest/v1/block/lun HTTP/1.1
Date: Mon, 13 May 2024 10: 46: 42 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Authorization: HBlock userName:signature
Content-Length: 516
Host: 192.168.0.32: 1443
{
"lunName": "luna9",
"uuid": "lun-uuid-df8308a9-bfb0-40a0-bf9d-7e741b1b6a63",
"targetName": "targeta",
"storageMode": "Storage",
"config": {
"writePolicy": "WriteThrough"
},
"cloud": {
"bucketName": "hblocktest3",
"prefix": "hblock1",
"accessKey": "cb22b08b1f9229f85874",
"secretKey": "**************************",
"endpoint": "oos-cn.ctyunapi.cn",
"signVersion": "v4",
"region": "cn"
}
}
响应示例1
HTTP/1.1 200 OK
x-hblock-request-id: 20b087c7711f44af9588cc013ede8654
Connection: keep-alive
Content-Length: 0
Date: Mon, 13 May 2024 10: 46: 42 GMT
Server: HBlock
请求示例2
集群版:还原卷lun08a。
POST /rest/v1/block/lun/recover HTTP/1.1
Date: Mon, 13 May 2024 09:33:12 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Authorization: HBlock userName:signature
Content-Length: 629
Host: 192.168.0.110: 1443
{
"lunName": "lun08a",
"uuid": "lun-uuid-a74475f7-8d73-49b5-bd82-0ac0309e1fae",
"targetName": "target08",
"storageMode": "Storage",
"config": {
"localStorageClass": "EC 2+1",
"minReplica": 2,
"highAvailability": "ActiveStandby",
"writePolicy": "WriteThrough"
},
"cloud": {
"bucketName": "hblocktest3",
"prefix": "hblock",
"accessKey": "cb22b08b1f9229f85874",
"secretKey": "*****************************",
"endpoint": "oos-cn.ctyunapi.cn",
"signVersion": "v4",
"region": "cn"
}
}
响应示例2
HTTP/1.1 200 OK
x-hblock-request-id: 251c5dcfab5247599aca4f60f5784b34
Connection: keep-alive
Content-Length: 0
Date: Mon, 13 May 2024 09: 33: 12 GMT
Server: HBlock