跨区域(异地)双活解决方案

最近更新时间: 2019-07-08 14:41:00

跨区域双活解决方案

目标

当某个区域数据中心不可访问时,客户的上传下载服务可以无缝切换到另一个区域数据中心

限制

同步存在特定延迟,在某区域数据中心故障后的同步无法在新的数据中心访问,仅支持国内区域做双活同步

双活上传下载域名

上传域名

双活地区(主-备) 服务端上传域名 客户端上传域名
华东-华北 up-z0-z1.qiniup.com upload-z0-z1.qiniup.com
华北-华东 up-z1-z0.qiniup.com upload-z1-z0.qiniup.com
华东-华南 up-z0-z2.qiniup.com upload-z0-z2.qiniup.com
华南-华东 up-z2-z0.qiniup.com upload-z2-z0.qiniup.com
华北-华南 up-z1-z2.qiniup.com upload-z1-z2.qiniup.com
华南-华北 up-z2-z1.qiniup.com upload-z2-z1.qiniup.com

【注】:up-z0-z1.qiniup.com 表示华东空间为主,华北空间为备,当华东空间上传出现问题,默认解析到华北空间进行上传
z0:华东,z1:华北,z2 华南

下载域名

双活地区(主-备) 下载源站域名
华东-华北 iovip-z0-z1.qbox.me
华北-华东 iovip-z1-z0.qbox.me
华东-华南 iovip-z0-z2.qbox.me
华南-华东 iovip-z2-z0.qbox.me
华北-华南 iovip-z1-z2.qbox.me
华南-华北 iovip-z2-z1.qbox.me

【注】:上述只是源站域名,不同区域的空间可以创建相同的域名,但是需要进行特殊处理,请联系技术支持

双活的两个空间通过API建立绑定关系

空间绑定

将双活的两个空间建立绑定关系,例如:A(华东),B(华北)创建了绑定关系,那么两个空间可以共用上传 token,如果 token 签的是 A 空间,那么你使用华东的上传域名 up.qiniu.com 上传是正常上传到 A 空间,如果使用华北的上传域名 up-z1.qiniup.com,那么就会上传到与 A 空间有绑定关系的 B 空间

请求包:

POST /bind/<bucket1>/to/<bucket2>
Host: api.qiniu.com
Authorization: 普通用户权限

返回包(JSON):

200 OK

<bucket1> <bucket2>: 需要绑定的两个空间名称,顺序不分先后。需要绑定的两个空间需要属于不同区域,支持共享空间(后续可能扩展使用场景,此处未对权限进行检测,使用方进行检查)
绑定的两个空间,其中任意一个均只能与另一区域的一个空间进行绑定,如有b1,b2,b3分别属于区域z1,z2,z1,若b1,b2已经建立绑定关系,则b2,b3无法再建立绑定关系,因为b2已经与属于z1的b1建立绑定关系,将不能再与属于z1的其他空间建立绑定关系

解除空间绑定

请求包:

POST /unbind/<bucket1>[/to/<bucket2>]
Host: api.qiniu.com
Authorization: 普通用户权限

返回包(JSON):

200 OK

<bucket1> <bucket2>: 需要解除绑定的空间名称,如只传入一个参数则会解绑该空间存在的所有绑定
存在绑定关系的空间在进行drop,cancelShare,transfer时需要先解除绑定

查询空间绑定

请求包:

POST /bindings/[<bucket1>][/to/<bucket2>]
Host: api.qiniu.com
Authorization: 普通用户权限

返回包(JSON):

200 OK

<bucket1> <bucket2>: 空间名称,如只传bucket1则会查询与bucket1有关的绑定,如传入两个参数则查询两个空间的绑定是否存在,如都不传则查询该用户下的所有绑定(最后的/不能省略)

创建双活跨区域同步任务

将文件从一个区域同步到另一区域,双活跨区域同步优先级最高,以保证切备时下载资源正常

创建任务

请求

POST /dualsync/task/create HTTP/1.1
Content-Type:   application/json
Body:
{
    "name":"Z0-Z1", #任务名称,必须
    "uid":12345,    #用户Id,必须
    "bkts":["test-z0","test-z1"], #双向同步的空间,必须
    "is_sync":true, #是否同步历史数据,非必须,默认不同步
    "conflict_strategy":0,#同步时文件冲突(同步文件与目标文件Hash不一致)处理策略,0:强制覆盖目标文件,1:如果当前文件上传时间较新则覆盖目标文件,2:跳过当前同步
    "prefix":"ABC"  #同步过滤前缀,非必须
}

响应

HTTP/1.1 200 OK
Body:
{
    "id":"59faeb9c834c515be2000001"
}

删除任务

请求

POST /dualsync/task/delete HTTP/1.1
Content-Type:   application/json
Body:
{
    "id":"59faeb9c834c515be2000001" #任务Id,必须
}

响应

HTTP/1.1 200 OK

暂停任务

请求

POST /dualsync/task/stop HTTP/1.1
Content-Type:   application/json
Body:
{
    "id":"59faeb9c834c515be2000001" #任务Id,必须
}

响应

HTTP/1.1 200 OK

启动任务

请求

POST /dualsync/task/start HTTP/1.1
Content-Type:   application/json
Body:
{
    "id":"59faeb9c834c515be2000001" #任务Id,必须
}

响应

HTTP/1.1 200 OK
以上内容是否对您有帮助?
  • Close