华为云用户手册

  • 清除托管配置 您可以通过deleteBucketWebsite清除桶的托管配置。以下代码展示了如何清除托管配置: static OBSClient *client; NSString *endPoint = @"your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html char* ak_env = getenv("AccessKeyID"); char* sk_env = getenv("SecretAccessKey"); NSString *AK = [NSString stringWithUTF8String:ak_env]; NSString *SK = [NSString stringWithUTF8String:sk_env]; // 初始化身份验证 OBSStaticCredentialProvider *credentialProvider = [[OBSStaticCredentialProvider alloc] initWithAccessKey:AK secretKey:SK]; //初始化服务配置 OBSServiceConfiguration *conf = [[OBSServiceConfiguration alloc] initWithURLString:endPoint credentialProvider:credentialProvider]; // 初始化client client = [[OBSClient alloc] initWithConfiguration:conf]; // 清除托管配置 OBSDeleteBucketWebsiteRequest *request = [[OBSDeleteBucketWebsiteRequest alloc] initWithBucketName:@"bucketname"]; [client deleteBucketWebsite:request completionHandler:^(OBSDeleteBucketWebsiteResponse *response, NSError *error){ NSLog(@"%@",response); }]; 父主题: 静态网站托管
  • 删除桶策略 您可以通过deleteBucketPolicy删除桶策略。示例代码如下: static OBSClient *client; NSString *endPoint = @"your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html char* ak_env = getenv("AccessKeyID"); char* sk_env = getenv("SecretAccessKey"); NSString *AK = [NSString stringWithUTF8String:ak_env]; NSString *SK = [NSString stringWithUTF8String:sk_env]; // 初始化身份验证 OBSStaticCredentialProvider *credentialProvider = [[OBSStaticCredentialProvider alloc] initWithAccessKey:AK secretKey:SK]; //初始化服务配置 OBSServiceConfiguration *conf = [[OBSServiceConfiguration alloc] initWithURLString:endPoint credentialProvider:credentialProvider]; // 初始化client client = [[OBSClient alloc] initWithConfiguration:conf]; // 删除桶策略 OBSDeleteBucketPolicyRequest *request = [[OBSDeleteBucketPolicyRequest alloc] initWithBucketName:g_bucketName]; [client deleteBucketPolicy:request completionHandler:^(OBSDeleteBucketPolicyResponse *response, NSError *error) { NSLog(@"%@",response); }];
  • 设置桶策略 您可以通过setBucketPolicy设置桶策略。示例代码如下: static OBSClient *client; NSString *endPoint = @"your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html char* ak_env = getenv("AccessKeyID"); char* sk_env = getenv("SecretAccessKey"); NSString *AK = [NSString stringWithUTF8String:ak_env]; NSString *SK = [NSString stringWithUTF8String:sk_env]; // 初始化身份验证 OBSStaticCredentialProvider *credentialProvider = [[OBSStaticCredentialProvider alloc] initWithAccessKey:AK secretKey:SK]; //初始化服务配置 OBSServiceConfiguration *conf = [[OBSServiceConfiguration alloc] initWithURLString:endPoint credentialProvider:credentialProvider]; // 初始化client client = [[OBSClient alloc] initWithConfiguration:conf]; // 设置桶策略 OBSSetBucketPolicyWithStringRequest *request = [[OBSSetBucketPolicyWithStringRequest alloc] initWithBucketName:@"bucketname" policyString:@"policystring"]; [client setBucketPolicy:request completionHandler:^(OBSSetBucketPolicyResponse *response, NSError *error){ NSLog(@"%@",response); }];
  • 获取桶策略 您可以通过getBucketPolicy获取桶策略。示例代码如下: static OBSClient *client; NSString *endPoint = @"your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html char* ak_env = getenv("AccessKeyID"); char* sk_env = getenv("SecretAccessKey"); NSString *AK = [NSString stringWithUTF8String:ak_env]; NSString *SK = [NSString stringWithUTF8String:sk_env]; // 初始化身份验证 OBSStaticCredentialProvider *credentialProvider = [[OBSStaticCredentialProvider alloc] initWithAccessKey:AK secretKey:SK]; //初始化服务配置 OBSServiceConfiguration *conf = [[OBSServiceConfiguration alloc] initWithURLString:endPoint credentialProvider:credentialProvider]; // 初始化client client = [[OBSClient alloc] initWithConfiguration:conf]; // 获取桶策略 OBSGetBucketPolicyRequest *request = [[OBSGetBucketPolicyRequest alloc] initWithBucketName:g_bucketName]; [client getBucketPolicy:request completionHandler:^(OBSGetBucketPolicyResponse *response, NSError *error){ NSLog(@"%@",response); }];
  • 上传字符串 static OBSClient *client; NSString *endPoint = @"your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html char* ak_env = getenv("AccessKeyID"); char* sk_env = getenv("SecretAccessKey"); NSString *AK = [NSString stringWithUTF8String:ak_env]; NSString *SK = [NSString stringWithUTF8String:sk_env]; // 初始化身份验证 OBSStaticCredentialProvider *credentialProvider = [[OBSStaticCredentialProvider alloc] initWithAccessKey:AK secretKey:SK]; //初始化服务配置 OBSServiceConfiguration *conf = [[OBSServiceConfiguration alloc] initWithURLString:endPoint credentialProvider:credentialProvider]; // 初始化client client = [[OBSClient alloc] initWithConfiguration:conf]; // 流式上传字符串 OBSPutObjectWithDataRequest *request = [[OBSPutObjectWithDataRequest alloc]initWithBucketName:@"bucketname" objectKey:@"objectname" uploadData:[@"hello" dataUsingEncoding:NSUTF8StringEncoding]]; // 上传文件进度 request.uploadProgressBlock = ^(int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend) { NSLog(@"%0.1f%%",(float)floor(totalBytesSent*10000/totalBytesExpectedToSend)/100); }; [client putObject:request completionHandler:^(OBSPutObjectResponse *response, NSError *error){ NSLog(@"%@",response); }];
  • 上传网络流 static OBSClient *client; NSString *endPoint = @"your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html char* ak_env = getenv("AccessKeyID"); char* sk_env = getenv("SecretAccessKey"); NSString *AK = [NSString stringWithUTF8String:ak_env]; NSString *SK = [NSString stringWithUTF8String:sk_env]; // 初始化身份验证 OBSStaticCredentialProvider *credentialProvider = [[OBSStaticCredentialProvider alloc] initWithAccessKey:AK secretKey:SK]; //初始化服务配置 OBSServiceConfiguration *conf = [[OBSServiceConfiguration alloc] initWithURLString:endPoint credentialProvider:credentialProvider]; // 初始化client client = [[OBSClient alloc] initWithConfiguration:conf]; // 流式上传网络流 OBSPutObjectWithDataRequest *request = [[OBSPutObjectWithDataRequest alloc] initWithBucketName:@"bucketname" objectKey:@"objectname" uploadDataURL:[NSURL URLWithString:@"DateURL"]]; // 上传文件进度 request.uploadProgressBlock = ^(int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend) { NSLog(@"%0.1f%%",(float)floor(totalBytesSent*10000/totalBytesExpectedToSend)/100); }; [client putObject:request completionHandler:^(OBSPutObjectResponse *response, NSError *error){ NSLog(@"%@",response); }];
  • 上传文件流 static OBSClient *client; NSString *endPoint = @"your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html char* ak_env = getenv("AccessKeyID"); char* sk_env = getenv("SecretAccessKey"); NSString *AK = [NSString stringWithUTF8String:ak_env]; NSString *SK = [NSString stringWithUTF8String:sk_env]; // 初始化身份验证 OBSStaticCredentialProvider *credentialProvider = [[OBSStaticCredentialProvider alloc] initWithAccessKey:AK secretKey:SK]; //初始化服务配置 OBSServiceConfiguration *conf = [[OBSServiceConfiguration alloc] initWithURLString:endPoint credentialProvider:credentialProvider]; // 初始化client client = [[OBSClient alloc] initWithConfiguration:conf]; NSString *filePath = [[NSBundle mainBundle]pathForResource:@"fileName" ofType:@"Type"]; // 文件流上传 NSData *uploadData = [NSData dataWithContentsOfFile:filePath]; OBSPutObjectWithDataRequest *request = [[OBSPutObjectWithDataRequest alloc]initWithBucketName:@"bucketname" objectKey:@"test/image1" uploadData:uploadData]; // 上传文件进度 request.uploadProgressBlock = ^(int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend) { NSLog(@"%0.1f%%",(float)floor(totalBytesSent*10000/totalBytesExpectedToSend)/100); }; [client putObject:request completionHandler:^(OBSPutObjectResponse *response, NSError *error){ NSLog(@"%@",response); }]; 推荐使用文件上传的形式上传本地文件,而不是文件流形式。 大文件上传建议使用分段上传。 上传的内容大小不能超过5GB。
  • 分段复制 分段复制是分段上传的一种特殊情况,即分段上传任务中的段通过复制OBS指定桶中现有对象(或对象的一部分)来实现。您可以通过copyPart来复制段。以下代码展示了如何使用分段复制对象: static OBSClient *client; NSString *endPoint = @"your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html char* ak_env = getenv("AccessKeyID"); char* sk_env = getenv("SecretAccessKey"); NSString *AK = [NSString stringWithUTF8String:ak_env]; NSString *SK = [NSString stringWithUTF8String:sk_env]; // 初始化身份验证 OBSStaticCredentialProvider *credentialProvider = [[OBSStaticCredentialProvider alloc] initWithAccessKey:AK secretKey:SK]; //初始化服务配置 OBSServiceConfiguration *conf = [[OBSServiceConfiguration alloc] initWithURLString:endPoint credentialProvider:credentialProvider]; // 初始化client client = [[OBSClient alloc] initWithConfiguration:conf]; // 拷贝段 OBSCopyPartRequest* copyRequest = [[OBSCopyPartRequest alloc]initWithSrcBucketName:@"buckeName" srcObjectKey:@"MultiPart" uploadBucketName:@"bucketName" uploadObjectKey:@"MultiPart" uploadPartNumber:[NSNumber numberWithInt:3] uploadID:@"uploadID"]; [client copyPart:copyRequest completionHandler:^(OBSCopyPartResponse *response, NSError *error) { NSLog(@"%@",response); }]; 父主题: 上传对象
  • 设置桶多版本状态 您可以通过setBucketVersioning设置桶的多版本状态。OBS中的桶支持两种多版本状态: 多版本状态 说明 OBS iOS SDK对应值 启用状态 上传对象时,系统为每一个对象创建一个唯一版本号,上传同名的对象将不再覆盖旧的对象,而是创建新的不同版本号的同名对象。 可以指定版本号下载对象,不指定版本号默认下载最新对象。 删除对象时可以指定版本号删除,不带版本号删除对象仅产生一个带唯一版本号的删除标记,并不删除对象。 列出桶内对象列表(OBSListObjectsRequest)时默认列出最新对象列表,可以指定列出桶内所有版本对象列表(OBSListObjectsVersionsRequest)。 除了删除标记外,每个版本的对象存储均需计费 OBSVersioningStatusEnabled 暂停状态 旧的版本数据继续保留。 上传对象时创建对象的版本号为null,上传同名的对象将覆盖原有同名的版本号为null的对象。 可以指定版本号下载对象,不指定版本号默认下载最新对象。 删除对象时可以指定版本号删除,不带版本号删除对象将产生一个版本号为null的删除标记,并删除版本号为null的对象。 除了删除标记外,每个版本的对象存储均需计费。 OBSVersioningStatusSuspended 以下代码展示了如何设置桶的多版本状态: static OBSClient *client; NSString *endPoint = @"your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html char* ak_env = getenv("AccessKeyID"); char* sk_env = getenv("SecretAccessKey"); NSString *AK = [NSString stringWithUTF8String:ak_env]; NSString *SK = [NSString stringWithUTF8String:sk_env]; // 初始化身份验证 OBSStaticCredentialProvider *credentialProvider = [[OBSStaticCredentialProvider alloc] initWithAccessKey:AK secretKey:SK]; //初始化服务配置 OBSServiceConfiguration *conf = [[OBSServiceConfiguration alloc] initWithURLString:endPoint credentialProvider:credentialProvider]; // 初始化client client = [[OBSClient alloc] initWithConfiguration:conf]; // 配置桶多版本 OBSBucketVersioningConfiguration *conf1 = [OBSBucketVersioningConfiguration new]; conf1.status = OBSVersioningStatusEnabled; // 设置桶多版本 OBSSetBucketVersioningRequest *request = [[OBSSetBucketVersioningRequest alloc] initWithBucketName:@"bucketname" configuration: conf]; [client setBucketVersioning:request completionHandler:^(OBSSetBucketVersioningResponse *response, NSError *error) { NSLog(@"%@",response); }]; 父主题: 多版本控制
  • 设置对象转换策略 以下代码展示了如何设置最新版本对象和历史版本对象的转换策略: static OBSClient *client; NSString *endPoint = @"your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html char* ak_env = getenv("AccessKeyID"); char* sk_env = getenv("SecretAccessKey"); NSString *AK = [NSString stringWithUTF8String:ak_env]; NSString *SK = [NSString stringWithUTF8String:sk_env]; // 初始化身份验证 OBSStaticCredentialProvider *credentialProvider = [[OBSStaticCredentialProvider alloc] initWithAccessKey:AK secretKey:SK]; //初始化服务配置 OBSServiceConfiguration *conf = [[OBSServiceConfiguration alloc] initWithURLString:endPoint credentialProvider:credentialProvider]; // 初始化client client = [[OBSClient alloc] initWithConfiguration:conf]; // 设置一条规则 OBSLifecycleRule *rule = [[OBSLifecycleRule alloc] initWithID:@"delete-2-days" prefix:@"test/" status:OBSLifecycleStatusEnabled]; // 创建30天后转换成低频访问存储 OBSLifecycleTransition* transitionStandard = [[OBSLifecycleTransition alloc]initWithDays:[NSNumber numberWithInteger:30] storageClass:OBSStorageClassStandardIA]; // 创建60天后转换成指定存储 OBSLifecycleTransition* transitionGlacier= [[OBSLifecycleTransition alloc]initWithDays:[NSNumber numberWithInteger:60] storageClass:OBSStorageClassGlacier]; // 30天后历史版本转换成标准存储 OBSLifecycleNoncurrentVersionTransition* noncurrentTransistionStandard = [[OBSLifecycleNoncurrentVersionTransition alloc]initWithDays:[NSNumber numberWithInteger:30] storageClass:OBSStorageClassStandardIA]; //60天后历史版本转换成归档存储 OBSLifecycleNoncurrentVersionTransition* noncurrentTransistionGlacier= [[OBSLifecycleNoncurrentVersionTransition alloc]initWithDays:[NSNumber numberWithInteger:60] storageClass:OBSStorageClassGlacier]; [rule.transitionList addObject:transitionStandard]; [rule.transitionList addObject:transitionGlacier]; [rule.noncurrentVersionTransitionList addObject:noncurrentTransistionStandard]; [rule.noncurrentVersionTransitionList addObject:noncurrentTransistionGlacier]; rule.expiration = expiration; rule.noncurrentVersionExpiration = noncurrentExpiration; OBSSetBucketLifecycleRequest *request = [[OBSSetBucketLifecycleRequest alloc]initWithBucketName:@"bucketname" ]; [request.lifecycleRuleList addObject: rule]; OBSLifecycleRule* rule2 = [rule copy]; rule2.ID = @"123"; rule2.prefix = @"test1/"; [request.lifecycleRuleList addObject: rule2]; [client setBucketLifecycle:request completionHandler:^(OBSSetBucketLifecycleResponse *response, NSError *error){ NSLog(@"%@",response); }];
  • 删除桶 您可以通过deleteBucket来删除桶。以下代码展示如何删除桶: static OBSClient *client; NSString *endPoint = @"your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html char* ak_env = getenv("AccessKeyID"); char* sk_env = getenv("SecretAccessKey"); NSString *AK = [NSString stringWithUTF8String:ak_env]; NSString *SK = [NSString stringWithUTF8String:sk_env]; // 初始化身份验证 OBSStaticCredentialProvider *credentialProvider = [[OBSStaticCredentialProvider alloc] initWithAccessKey:AK secretKey:SK]; //初始化服务配置 OBSServiceConfiguration *conf = [[OBSServiceConfiguration alloc] initWithURLString:endPoint credentialProvider:credentialProvider]; // 初始化client client = [[OBSClient alloc] initWithConfiguration:conf]; //删除桶 OBSDeleteBucketRequest *deleteRequest = [[OBSDeleteBucketRequest alloc] initWithBucketName:@"bucketname"]; [client deleteBucket:deleteRequest completionHandler:^(OBSDeleteBucketResponse *response, NSError *error) { NSLog(@"%@",response); }]; 如果桶不为空(包含对象或分段上传碎片),则该桶无法删除。 删除桶非幂等操作,删除不存在的桶会报错。 父主题: 管理桶
  • 文件上传 文件上传使用本地文件作为对象的数据源。以下代码展示了如何进行文件上传: static OBSClient *client; NSString *endPoint = @"your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html char* ak_env = getenv("AccessKeyID"); char* sk_env = getenv("SecretAccessKey"); NSString *AK = [NSString stringWithUTF8String:ak_env]; NSString *SK = [NSString stringWithUTF8String:sk_env]; // 初始化身份验证 OBSStaticCredentialProvider *credentialProvider = [[OBSStaticCredentialProvider alloc] initWithAccessKey:AK secretKey:SK]; //初始化服务配置 OBSServiceConfiguration *conf = [[OBSServiceConfiguration alloc] initWithURLString:endPoint credentialProvider:credentialProvider]; // 初始化client client = [[OBSClient alloc] initWithConfiguration:conf]; //指定待上传文件名及文件类型 NSString *filePath = [[NSBundle mainBundle]pathForResource:@"fileName" ofType:@"Type"]; // 文件上传 OBSPutObjectWithFileRequest *request = [[OBSPutObjectWithFileRequest alloc]initWithBucketName:@"bucket-ios-test02" objectKey:@"imageWithFile" uploadFilePath:filePath]; // 开启后台上传,当应用退出到后台后,上传任务仍然会进行 request.background = YES; // 上传进度 request.uploadProgressBlock = ^(int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend) { NSLog(@"%0.1f%%",(float)floor(totalBytesSent*10000/totalBytesExpectedToSend)/100); }; [client putObject:request completionHandler:^(OBSPutObjectResponse *response, NSError *error){ // 判断error状态 if(error){ // 打印错误信息 NSLog(@"文件上传失败"); NSLog(@"%@",error); } // 上传文件成功,返回200,打印返回响应值 if([response.statusCode isEqualToString:@"200"]){ NSLog(@"文件上传成功"); NSLog(@"%@",response); NSLog(@"%@",response.etag); } }]; 上传的内容大小不能超过5GB。 设置background为YES时,可以开启后台上传。 父主题: 上传对象
  • 范围下载 如果只需要下载对象的其中一部分数据,可以使用范围下载,下载指定范围的数据。如果指定的下载范围是0~1000,则返回第0到第1000个字节的数据,包括第1000个,共1001字节的数据,即[0,1000]。如果指定的范围无效,则返回整个对象的数据。以下代码展示了如何进行范围下载: static OBSClient *client; NSString *endPoint = @"your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html char* ak_env = getenv("AccessKeyID"); char* sk_env = getenv("SecretAccessKey"); NSString *AK = [NSString stringWithUTF8String:ak_env]; NSString *SK = [NSString stringWithUTF8String:sk_env]; // 初始化身份验证 OBSStaticCredentialProvider *credentialProvider = [[OBSStaticCredentialProvider alloc] initWithAccessKey:AK secretKey:SK]; //初始化服务配置 OBSServiceConfiguration *conf = [[OBSServiceConfiguration alloc] initWithURLString:endPoint credentialProvider:credentialProvider]; // 初始化client client = [[OBSClient alloc] initWithConfiguration:conf]; // 流式下载 OBSGetObjectToDataRequest *request = [[OBSGetObjectToDataRequest alloc]initWithBucketName:@"bucketname" objectKey:@"objectname"]; // 设置下载范围0-10000 request.range = @"bytes=0-1000"; // 下载进度 request.downloadProgressBlock = ^(int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite) { NSLog(@"%0.1f%%",(float)(totalBytesWritten)*100/(float)totalBytesExpectedToWrite); }; // 下载的数据 __block NSMutableData *objectData = [NSMutableData new]; request.onReceiveDataBlock = ^(NSData *data) { [objectData appendData:data]; }; // 下载结果 [client getObject:request completionHandler:^(OBSGetObjectResponse *response, NSError *error){ NSLog(@"%@",response); }] ; 如果指定的范围无效(比如开始位置、结束位置为负数,大于文件大小),则会返回整个对象。 父主题: 下载对象
  • 查看桶多版本状态 您可以通过getBucketVersioning查看桶的多版本状态。以下代码展示了如何查看桶的多版本状态: static OBSClient *client; NSString *endPoint = @"your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html char* ak_env = getenv("AccessKeyID"); char* sk_env = getenv("SecretAccessKey"); NSString *AK = [NSString stringWithUTF8String:ak_env]; NSString *SK = [NSString stringWithUTF8String:sk_env]; // 初始化身份验证 OBSStaticCredentialProvider *credentialProvider = [[OBSStaticCredentialProvider alloc] initWithAccessKey:AK secretKey:SK]; //初始化服务配置 OBSServiceConfiguration *conf = [[OBSServiceConfiguration alloc] initWithURLString:endPoint credentialProvider:credentialProvider]; // 初始化client client = [[OBSClient alloc] initWithConfiguration:conf]; // 查看桶多版本状态 OBSGetBucketVersioningRequest *request = [[OBSGetBucketVersioningRequest alloc] initWithBucketName:@"bucketname"]; [client getBucketVersioning:request completionHandler:^(OBSGetBucketVersioningResponse *response, NSError *error) { NSLog(@"%@",response); }]; 父主题: 多版本控制
  • 查看生命周期规则 您可以通过getBucketLifecycle查看桶的生命周期规则,以下代码展示了如何查看桶的生命周期规则: static OBSClient *client; NSString *endPoint = @"your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html char* ak_env = getenv("AccessKeyID"); char* sk_env = getenv("SecretAccessKey"); NSString *AK = [NSString stringWithUTF8String:ak_env]; NSString *SK = [NSString stringWithUTF8String:sk_env]; // 初始化身份验证 OBSStaticCredentialProvider *credentialProvider = [[OBSStaticCredentialProvider alloc] initWithAccessKey:AK secretKey:SK]; //初始化服务配置 OBSServiceConfiguration *conf = [[OBSServiceConfiguration alloc] initWithURLString:endPoint credentialProvider:credentialProvider]; // 初始化client client = [[OBSClient alloc] initWithConfiguration:conf]; // 查看生命周期 OBSGetBucketLifecycleRequest *request = [[OBSGetBucketLifecycleRequest alloc] initWithBucketName:@"bucketname"]; [client getBucketLifecycle:request completionHandler:^(OBSGetBucketLifecycleResponse *response, NSError *error){ NSLog(@"%@",response); }]; 父主题: 生命周期管理
  • 容器的权限访问控制 使用容器应用时,遵循权限最小化原则,合理设置Deployment/Statefulset的securityContext: 通过配置runAsUser,指定容器使用非root用户运行。 通过配置privileged,在不需要特权的场景不建议使用特权容器。 通过配置capabilities,使用capability精确控制容器的特权访问权限。 通过配置allowPrivilegeEscalation, 在不需要容器进程提权的场景,建议关闭“允许特权逃逸”的配置。 通过配置安全计算模式seccomp,限制容器的系统调用权限,具体配置方法可参考社区官方资料使用 Seccomp 限制容器的系统调用。 通过配置ReadOnlyRootFilesystem的配置,保护容器根文件系统。 如deployment配置如下: apiVersion: apps/v1 kind: Deployment metadata: name: security-context-example namespace: security-example spec: replicas: 1 selector: matchLabels: app: security-context-example label: security-context-example strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: annotations: seccomp.security.alpha.kubernetes.io/pod: runtime/default labels: app: security-context-example label: security-context-example spec: containers: - image: ... imagePullPolicy: Always name: security-context-example securityContext: allowPrivilegeEscalation: false readOnlyRootFilesystem: true runAsUser: 1000 capabilities: add: - NET_BIND_SERVICE drop: - all volumeMounts: - mountPath: /etc/localtime name: localtime readOnly: true - mountPath: /opt/write-file-dir name: tmpfs-example-001 securityContext: seccompProfile: type: RuntimeDefault volumes: - hostPath: path: /etc/localtime type: "" name: localtime - emptyDir: {} name: tmpfs-example-001
  • 容器安全配置建议 通过设置容器的计算资源限制(request和limit),避免容器占用大量资源影响宿主机和同节点其他容器的稳定性 如非必须,不建议将宿主机的敏感目录挂载到容器中,如/、/boot、/dev、/etc、/lib、/proc、/sys、/usr等目录 如非必须,不建议在容器中运行sshd进程 如非必须,不建议容器与宿主机共享网络命名空间 如非必须,不建议容器与宿主机共享进程命名空间 如非必须,不建议容器与宿主机共享IPC命名空间 如非必须,不建议容器与宿主机共享UTS命名空间 如非必须,不建议将docker的sock文件挂载到任何容器中
  • 集群跨VPC互联场景 不同VPC之间网络不通,对等连接用于连通同一个区域内的VPC,实现不同VPC的网络互联。两个VPC网络互联的情况下,可以通过路由表配置哪些报文要发送到对端VPC里。详情请参见对等连接简介。 VPC网络模式集群 VPC网络模式的集群跨VPC互联时,在创建对等连接后,您需要在两端VPC内添加对等连接路由信息,才能使两个VPC互通。 图7 VPC网络-VPC互联场景 跨VPC的集群容器之间互联需要建立VPC对等连接时,需要注意如下几点: 两端集群所属的VPC地址段需要避免重叠,且在每个集群中,子网网段不能与容器网段重叠。 两端集群的容器网段不能相互重叠,但服务网段可以重叠。 当请求端集群为VPC网络模型时,需要关注目的端集群的节点安全组在入方向上是否放通了请求端集群的容器网段。此时,一个集群的Pod可以通过容器IP直接访问另外一个集群的Pod。同理,如果两端集群的节点需要相互访问,节点安全组需要放通对端集群的VPC网段。 两端的VPC路由表中不仅需要添加对端集群VPC网段地址,还需要添加对端容器网段的地址。需要注意该操作在两侧的VPC路由表中均要进行。 图8 在本端路由中添加对端容器网段的地址 容器隧道网络模式集群 两个容器隧道网络模式的集群跨VPC互联时,创建对等连接后,您需要在两端VPC内添加对等连接路由信息,才能使两个VPC互通。 图9 容器隧道网络-VPC互联场景 需要注意如下几点: 两端集群所属的VPC地址段需要避免重叠。 所有集群的容器网段可以重叠,服务网段也可以重叠。 当请求端集群为容器隧道网络模型时,需要关注目的端集群的节点安全组在入方向上是否放通了请求端集群的VPC网段(包含节点子网)。在此情况下,一个集群的节点可以访问另一个集群的节点。但不同集群的Pod不能通过容器IP直接访问,跨集群容器之间的访问需要通过Service,建议使用负载均衡类型的Service。 对等连接的路由表中需要添加对端集群VPC网段的地址。需要注意该操作在两侧的VPC路由表中均要进行。 图10 在本端路由中添加对端集群节点子网网段的地址 云原生网络2.0集群(即CCE Turbo集群) 创建对等连接后,您需要在两端VPC内添加对等连接路由信息,使两个VPC互通,即可完成集群间的互通。需要注意如下几点: 两端集群所属的VPC地址段需要避免重叠。 当请求端集群为云原生网络2.0模型时,需要关注目的端集群的ENI安全组(名为{集群名}-cce-eni-{随机ID})在入方向上是否放通了请求端集群的VPC网段(包含节点子网和容器子网)。此时,一个集群的Pod可以通过容器IP直接访问另外一个集群的Pod。同理,如果两端集群的节点需要相互访问,则需要在集群的节点安全组(名为{集群名}-cce-node-{随机ID})放通对端集群的VPC网段。 对等连接的路由表中需要添加对端集群VPC网段的地址。需要注意该操作在两侧的VPC路由表中均要进行。 多网络模式集群并存场景 在不同网络模式集群间需要跨VPC互访的情况下,每种类型的集群均可能作为请求端和目的端。一般情况下需遵循以下规律: 集群所属的VPC地址段需要避免和对端集群的VPC地址段重叠。 集群子网网段尽量避免和自身的容器网段重叠。 集群间的容器网段需要避免相互重叠。 如集群间容器或节点存在相互访问,则两侧集群的安全组在入方向上均需按以下规则放通对应网段: 请求端集群为VPC网络模型时,目的端集群的节点安全组需放通请求端集群的VPC网段(包含节点子网)和容器网段。 请求端集群为容器隧道网络模型时,目的端集群的节点安全组需放通请求端集群的VPC网段(包含节点子网)。 请求端集群为云原生网络2.0模型时,目的端集群的ENI安全组和节点安全组需放通请求端集群的VPC网段(包含节点子网和容器子网)。 两端的VPC路由表中需要添加对端集群VPC网段地址。需要注意该操作在两侧的VPC路由表中均要进行。 若某个集群为VPC网络模型,两端的VPC路由表中还需要添加容器网段的地址。
  • 单VPC下单集群场景 CCE集群:包含VPC网络模式和容器隧道网络模式集群,集群网络地址段规划示意图如图2所示。 VPC网段:集群所在的VPC网段,该网段的大小影响集群中可创建的节点数量上限。 子网网段:集群中节点所在的子网网段,子网网段包含在VPC网段中。同个集群中的不同节点可分配到不同的子网网段。 容器网段:容器网段不能和子网网段重叠。 服务网段:服务网段不能和子网网段重叠,而且也不能和容器网段重叠。 图2 单VPC单集群场景网段规划-CCE集群 CCE Turbo集群:即云原生网络2.0模式集群,集群网络地址段规划示意图如图3所示。 VPC网段:集群所在的VPC网段,该网段的大小影响集群中可创建的节点数量上限。 子网网段:集群中节点所在的子网网段,子网网段包含在VPC网段中。同个集群中的不同节点可分配到不同的子网网段。 容器子网网段:容器子网包含在VPC网段中,且可以和子网网段重叠,甚至可以选择和子网网段相同。但需要注意的是,由于容器直接分配VPC中的IP,因此该容器子网的大小决定了集群下容器的数量上限。在集群创建完成后,仅支持新增容器子网,不支持删除。建议将容器子网的IP地址段设大一些,以免出现容器IP分配不足的情况。 服务网段:服务网段不能和子网网段重合,而且也不能和容器网段重叠。 图3 单VPC单集群场景网段规划-CCE Turbo集群
  • 集群各网段基本概念 VPC网段 虚拟私有云(Virtual Private Cloud,简称VPC)可以为云服务器、云容器、云数据库等资源构建隔离的、用户自主配置和管理的虚拟网络环境。您可以自由配置VPC内的IP地址段、子网、安全组等子服务,也可以申请弹性带宽和弹性公网IP搭建业务系统。 子网网段 子网是用来管理弹性云服务器网络平面的一个网络,可以提供IP地址管理、DNS服务,子网内的弹性云服务器IP地址都属于该子网。 图1 VPC网段结构 默认情况下,同一个VPC的所有子网内的弹性云服务器均可以进行通信,不同VPC的弹性云服务器不能进行通信。 不同VPC的弹性云服务器可通过VPC创建对等连接通信。 容器网段(Pod网段) Pod是Kubernetes内的概念,每个Pod具有一个IP地址。 在CCE上创建集群时,可以指定Pod的地址段(即容器网段),容器网段不能和子网网段重叠。例如子网网段用的是 192.168.0.0/16,集群的容器网段就不能使用192.168.0.0/18,192.168.1.0/18等,因为这些地址都涵盖在 192.168.0.0/16 里了。 容器子网(仅CCE Turbo集群) CCE Turbo集群中,容器直接从VPC网段中分配IP地址,容器子网可以和子网网段重叠,但需要注意该容器子网的大小决定了集群下容器的数量上限。在集群创建完成后,仅支持新增容器子网,不支持删除。 服务网段 Service也是Kubernetes内的概念,每个Service都有自己的地址,在CCE上创建集群时,可以指定Service的地址段(即服务网段)。同样,服务网段也不能和子网网段重合,而且服务网段也不能和容器网段重叠。服务网段只在集群内使用,不能在集群外使用。
  • 单VPC下多集群场景 VPC网络模式 Pod的报文需要通过VPC路由转发,CCE会自动在VPC路由上配置到每个容器网段的路由表,集群组网规模受限于VPC路由表能力。集群网络地址段规划示意图如图4所示。 VPC网段:集群所在的VPC网段,该网段的大小影响集群中可创建的节点数量上限。 子网网段:每个集群中的子网网段不能和容器网段重叠。 容器网段:单VPC中存在多个VPC网络模型集群的场景下,由于各个集群使用同一路由表,因此所有集群的容器网段不能相互重叠。在此情况下,如果节点安全组在入方向上放通对端集群的容器网段,一个集群的Pod可以通过容器IP直接访问另外一个集群的Pod。 服务网段:由于服务网段只能在集群中使用,因此集群之间服务网段可以重叠,但是不能和所属集群的子网网段和容器网段重叠。 图4 VPC网络-多集群场景示例 容器隧道网络 该模式下容器网络是承载于VPC网络之上的Overlay网络平面,具有少量隧道封装性能损耗,但获得了通用性强、互通性强、高级特性支持全面(例如Network Policy网络隔离)的优势,可以满足大多数应用需求。集群网络地址段规划示意图如图5所示。 VPC网段:集群所在的VPC网段,该网段的大小影响集群中可创建的节点数量上限。 子网网段:每个集群中的子网网段不能和容器网段重叠。 容器网段:所有集群的容器网段可以重叠。在此情况下不同集群的Pod不能通过容器IP直接访问,跨集群容器之间的访问需要通过Service,建议使用负载均衡类型的Service。 服务网段:由于服务网段只能在集群中使用,因此集群之间服务网段可以重叠,但是不能和所属集群的子网网段和容器网段重叠。 图5 容器隧道网络-多集群场景示例 云原生网络2.0模式(即CCE Turbo集群) 该模式下集群直接从VPC网段内分配容器IP地址,支持ELB直通容器、支持容器直接绑定安全组等多种VPC网络的能力,极大提高了网络连通速度和转发效率。 VPC网段:集群所在的VPC网段,在CCE Turbo集群中,该网段的大小影响集群中可创建的节点数量与容器数量之和。 子网网段:CCE Turbo集群中的子网网段没有特殊限制。 容器子网:容器子网的网段包含在VPC网段中,且不同集群的容器子网之间可以重叠,也可以和子网网段重叠。但仍建议您将不同集群的容器网段错开,且尽量保证容器子网网段的IP数充足。在此情况下,如果集群ENI安全组在入方向上放通对端集群的容器子网网段,不同集群的Pod之间可以直接通过IP访问。 服务网段:由于服务网段只能在集群中使用,因此集群之间服务网段可以重叠,但是不能和所属集群的子网网段和容器子网网段重叠。 图6 云原生网络2.0-多集群场景示例 多网络模式集群并存场景 同一VPC中包含多个网络模式的集群时,应在创建新集群时遵循以下规律: VPC网段:该场景下各个集群所在的VPC网段相同,请保证VPC内可用的IP地址数充足。 子网网段:子网网段尽量避免和容器网段重叠。即使在某些场景下(例如和CCE Turbo集群共存时),子网网段可以和容器(子网)网段重叠,但从地址段规划角度出发,这是不推荐的。 容器网段:仅VPC网络模式的集群间的容器网段需要避免相互重叠。 服务网段:所有集群之间服务网段可以重叠,但是不能和所属集群的子网网段和容器网段重叠。
  • 排查原因 查询指定时段的内存使用率信息,具体操作请参见性能监控。“内存利用率”指标持续接近100%。 查询内存使用率超过95%的时间段内,“已逐出的键数量”和“命令最大时延”,均呈现显著上升趋势,表明存在内存不足的问题。 建议客户登录控制台,参考缓存分析和慢查询,执行大Key扫描和慢查询。如果实例没有设置过期时间,会导致存储数据太多,内存被占满。 Redis实例如果内存满了但是key不多,可能原因是客户端缓冲区(output buffer)占用过多的内存空间。 可以在Redis-cli客户端连接实例后,执行大key扫描命令:redis-cli --bigkeys,然后执行info,查看output buffer占用情况。
  • 处理措施 DCS控制台提供了大Key和热Key的分析功能,你可参考分析Redis实例大Key和热Key减少大key和热key。 Redis 3.0实例不支持热key分析,您可以通过配置告警的方式帮助您发现热key。 执行过期Key扫描释放已经过期的Key,或手动清理一些不需要的Key,释放空间。 其他优化建议: String类型数据的Value大小控制在10KB以内。 Hash、List、Set、Zset类数据结构,建议单Key中的元素不要超过5000个。 Key的命名前缀为业务缩写,禁止包含特殊字符(比如空格、换行、单双引号以及其他转义字符)。 Redis事务功能较弱,不建议过多使用。 短连接性能差,推荐使用带有连接池的客户端。 如果只是用于数据缓存,容忍数据丢失,建议关闭持久化(在实例参数配置中将appendonly参数修改为no即关闭AOF持久化)。 配置告警,便于提前发现大Key、热Key。 参考配置告警配置节点级别的内存利用率监控指标的告警。 如果某个节点存在大key,这个节点比其他节点内存使用率高很多,会触发告警,便于您发现潜在的大key。 参考配置告警配置节点级别的入网最大带宽、出网最大带宽、CPU利用率监控指标的告警。 如果某个节点存在热key,这个节点的带宽占用、CPU利用率都比其他节点高,该节点会容易触发告警,便于您发现潜在热key。 如果实例内存使用率通过以上方式仍然很高,请考虑在业务低峰期扩大实例规格。具体操作请参见变更实例规格。
  • 迁移准备 权限准备: 当使用 DRS 将其他云MongoDB数据库的数据迁移到本云DDS实例时,在不同迁移类型情况下,对源数据库和目标数据库的账号权限要求如表1: 表1 迁移账号权限 迁移类型 全量迁移 全量+增量迁移 源数据库 副本集:连接源数据库的用户需要对待迁移库有read权限。 单节点:连接源数据库的用户需要对待迁移库有read权限。 集群:连接源数据库的用户需要对待迁移库有read权限,对config数据库有read权限。 如果需要迁移源数据库用户和角色信息,连接源数据库的用户需要对admin数据库的系统表system.users,system.roles有读权限。 副本集:连接源数据库的用户需要对待迁移库有read权限,对local数据库有read权限。 单节点:连接源数据库的用户需要对待迁移库有read权限,对local数据库有read权限。 集群:连接源数据库mongos节点的用户需要对待迁移库有read权限,对config数据库有read权限, 连接源数据库分片节点的用户需要对admin数据库有readAnyDatabase权限,对local数据库有read权限。 如果需要迁移源数据库用户和角色信息,连接源数据库的用户需要对admin数据库的系统表system.users,system.roles有读权限。 目标数据库 连接目标数据库的用户需要对admin数据库有dbAdminAnyDatabase权限,对目标数据库有readWrite权限。对于目标数据库是集群的实例,迁移账号还要有对config数据的读权限 源数据库权限设置: 需要确保源数据库MongoDB的账号权限具备表1的要求。若权限不足,需要在源数据库端开通高权限的账号。 目标数据库权限设置: 本云DDS实例使用初始账号即可。 网络准备: 源数据库需要开放公网访问。 源数据库的网络设置: 源数据库MongoDB实例需要开放公网域名的访问。 目标数据库的网络设置:目标端不需要进行设置。 安全规则准备: 源数据库安全组规则设置: 源数据库MongoDB实例需要将具体的DRS迁移实例的弹性公网IP添加到其网络白名单中,确保源数据库MongoDB实例可以与上述弹性公网IP连通。 在设置网络白名单之前,需要先获取DRS迁移实例的弹性公网IP,具体操作如下: 迁移实例创建成功后,可在“源库及目标库”页面获取DRS迁移实例的弹性公网IP。如图4所示: 图4 迁移实例公网弹性IP 以上讲述的是精细配置白名单的方法,还有一种简单设置白名单的方法,在安全允许的情况下,可以将源数据库MongoDB实例的网络白名单设置为0.0.0.0/0,代表允许任何IP地址访问该实例。 上述的网络白名单是为了进行数据迁移设置的,迁移结束后可以删除。 目标数据库安全组规则设置: 目标数据库默认与DRS迁移实例处在同一个VPC,网络是互通的,DRS可以直接写入数据到目标数据库,不需要进行任何设置。 其他事项准备: 由于迁移过程不会迁移MongoDB数据库的用户信息以及相关参数,需要自行将上述信息导出后手动添加到目标DDS中。
  • 账号权限要求 当使用DRS将其他云MySQL数据库的数据迁移到华为云云数据库GaussDB(for MySQL)实例时,在不同迁移类型的情况下,对源数据库的账号权限要求如下: 表1 迁移账号权限 迁移类型 全量迁移 全量+增量迁移 源数据库(MySQL) SELECT、SHOW VIEW、EVENT。 SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。 MySQL的相关授权操作可参考操作指导。
  • 创建RDS for MySQL实例 本章节介绍创建RDS for MySQL实例。 进入购买云数据库RDS页面。 配置实例名称和实例基本信息。选择区域“华南-广州”。 选择实例规格。 选择实例所属的VPC和安全组、配置数据库端口。 VPC和安全组已在创建VPC和安全组中准备好。 配置实例密码。 单击“立即购买”。 进行规格确认。 如果需要重新选择实例规格,单击“上一步”,回到上个页面修改实例信息。 如果规格确认无误,单击“提交”,完成购买实例的申请。 返回云数据库实例列表。当RDS实例运行状态为“正常”时,表示实例创建完成。 父主题: 其他云MySQL迁移到云数据库 RDS for MySQL
  • 迁移准备 权限准备: 当使用 DRS 将本地数据库的数据迁移到本云DDS实例时,在不同迁移类型情况下,对源数据库和目标数据库的账号权限要求如表1所示: 表1 迁移账号权限 迁移类型 全量迁移 全量+增量迁移 源数据库 副本集:连接源数据库的用户需要对待迁移库有read权限。 单节点:连接源数据库的用户需要对待迁移库有read权限。 集群:连接源数据库的用户需要对待迁移库有read权限,对config数据库有read权限。 如果需要迁移源数据库用户和角色信息,连接源数据库的用户需要对admin数据库的系统表system.users,system.roles有读权限。 副本集:连接源数据库的用户需要对待迁移库有read权限,对local数据库有read权限。 单节点:连接源数据库的用户需要对待迁移库有read权限,对local数据库有read权限。 集群:连接源数据库mongos节点的用户需要对待迁移库有read权限,对config数据库有read权限, 连接源数据库分片节点的用户需要对admin数据库有readAnyDatabase权限,对local数据库有read权限。 如果需要迁移源数据库用户和角色信息,连接源数据库的用户需要对admin数据库的系统表system.users,system.roles有读权限。 目标数据库 连接目标数据库的用户需要对admin数据库有dbAdminAnyDatabase权限,对目标数据库有readWrite权限。对于目标数据库是集群的实例,迁移账号还要有对config数据的读权限 源数据库的权限设置: 需要确保源数据库MongoDB的账号具备表1的权限,若权限不足,需要在源数据库端创建高权限的账号。 目标数据库的权限设置: 本云DDS实例使用初始账号即可。 网络准备: 源数据库的网络设置: 本地MongoDB数据库实时迁移至本云DDS的场景,一般可以使用VPN网络和公网网络两种方式进行迁移,您可以根据实际情况为本地MongoDB数据库开放公网访问或建立VPN访问。一般推荐使用公网网络进行迁移,该方式下的数据迁移过程较为方便和经济。 目标数据库的网络设置: 若通过VPN访问,请先开通VPN服务,确保源数据库和目标DDS网络互通。 若通过公网网络访问,目标DDS不需要进行设置。 安全规则准备: 源数据库的白名单设置: 若通过公网网络进行迁移,源数据库MongoDB实例需要将具体的DRS迁移实例的弹性公网IP添加到其网络白名单中,确保源数据库MongoDB实例可以与上述弹性公网IP连通。在设置网络白名单之前需要获取DRS迁移实例,具体方法如下: 迁移实例创建成功后,可在“源库及目标库”页面获取DRS迁移实例的弹性公网IP。如图4所示: 图4 迁移实例公网弹性IP 以上讲述的是精细配置白名单的方法,还有一种简单设置白名单的方法,在安全允许的情况下,可以将源数据库MongoDB实例的网络白名单设置为0.0.0.0/0,代表允许任何IP地址访问该实例。 若通过VPN网络进行迁移,源库需要将DRS迁移实例的私有IP添加到其网络白名单内,确保源端和目标端网络互通。 上述的网络白名单是为了进行数据迁移设置的,迁移结束后可以删除。 目标数据库安全组规则设置: 目标数据库默认与DRS迁移实例处在同一个VPC,网络是互通的,DRS可以直接写入数据到目标数据库,不需要进行任何设置。 其他事项准备: 由于迁移过程不会迁移MongoDB数据库的用户信息以及相关参数,需要自行将上述信息导出后手动添加到目标DDS中。
  • 迁移准备 权限准备: 当使用 DRS 将本地数据库的数据迁移到本云云数据库 RDS for MySQL 实例时,在不同迁移类型情况下,对源数据库和目标数据库的账号权限要求如表1所示: 表1 迁移账号权限 迁移类型 全量迁移 全量+增量迁移 源数据库 SELECT、SHOW VIEW、EVENT。 SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。 目标数据库 SELECT、CREATE、ALTER、DROP、DELETE、INSERT、UPDATE、INDEX、EVENT、CREATE VIEW、CREATE ROUTINE、TRIGGER、REFERENCES、WITH GRANT OPTION。 当目标库为8.0.14-8.0.18版本时,还需要有SESSION_VARIABLES_ADMIN权限。 用户迁移时,需要有mysql库的SELECT、INSERT、UPDATE、DELETE权限。 源数据库的权限设置: 需要确保源数据库MySQL的账号具备表1的权限,若权限不足,需要在源数据库端创建高权限的账号。 目标数据库的权限设置: 本云云数据库 RDS for MySQL使用初始账号即可。 网络准备: 源数据库的网络设置: 本地MySQL数据库实时迁移至本云云数据库 RDS for MySQL的场景,一般可以使用VPN网络和公网网络两种方式进行迁移,您可以根据实际情况为本地MySQL数据库开放公网访问或建立VPN访问。一般推荐使用公网网络进行迁移,该方式下的数据迁移过程较为方便和经济。 目标数据库的网络设置: 若通过VPN访问,请先开通华为VPN服务,确保源数据库MySQL和目标端本云云数据库 RDS for MySQL的网络互通。 若通过公网网络访问,本云云数据库 RDS for MySQL实例不需要进行任何设置。 安全规则准备: 源数据库的安全规则设置: 若通过公网网络进行迁移,源数据库MySQL需要将DRS迁移实例的弹性公网IP添加到其网络白名单内,使源数据库与本云的网络互通。在设置网络白名单之前,需要获取DRS迁移实例的弹性公网IP,具体方法如下: DRS迁移实例创建成功后,可在“源库及目标库”页面获取DRS迁移实例的弹性公网IP。 图4 迁移实例EIP 若通过VPN网络进行迁移,源数据库MySQL需要将DRS迁移实例的私有IP添加到其网络白名单内,使源数据库与本云的网络互通。DRS迁移实例创建成功后,可在“源库及目标库”页面获取DRS迁移实例的私有IP。 以上白名单是为了进行迁移针对性设置的,迁移结束后可以删除。 目标数据库安全组规则设置: 目标数据库默认与DRS迁移实例处在同一个VPC,网络是互通的,DRS可以直接写入数据到目标数据库,不需要进行任何设置。 其他事项准备。 DRS支持部分与业务和性能强相关的参数迁移,具体参数列表请参见参数列表。若涉及其他参数需要根据用户具体的业务进行手动设置。
  • 创建RDS for MySQL实例 进入购买云数据库RDS页面。 选择区域“华东-上海一”。填选实例信息后,单击“立即购买”。 图1 选择引擎版本信息 图2 选择规格信息 图3 选择已规划的网络信息 图4 设置管理员密码 进行规格确认。 如果需要重新选择实例规格,单击“上一步”,回到上个页面修改实例信息。 如果规格确认无误,单击“提交”,完成购买实例的申请。 参考如下步骤,在RDS实例管理界面,为3创建的RDS实例绑定弹性公网IP。 在“实例管理”页面,选择指定的实例,单击实例名称,进入实例基本信息页面。 图5 实例管理 选择“连接管理”页签,单击“公网地址”处的“绑定”。 在弹出框中,显示“未绑定”状态的弹性公网IP,选择已规划的弹性公网IP,单击“是”,提交绑定任务。 图6 绑定弹性公网IP
  • Token认证 Token的有效期为24小时,需要使用一个Token鉴权时,可以先缓存起来,避免频繁调用。 Token在计算机系统中代表令牌(临时)的意思,拥有Token就代表拥有某种权限。Token认证就是在调用API的时候将Token加到请求消息头,从而通过身份认证,获得操作API的权限。Token可通过调用获取用户Token接口获取。 云服务存在两种部署方式:项目级服务和全局级服务。 项目级服务需要获取项目级别的Token,此时请求body中auth.scope的取值为project。 全局级服务需要获取全局级别的Token,此时请求body中auth.scope的取值为domain。 调用本服务API需要项目级别的Token,即调用获取用户Token接口时,请求body中auth.scope的取值需要选择project,如下所示。 { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "name": "username", "password": "********", "domain": { "name": "domainname" } } } }, "scope": { "project": { "name": "xxxxxxxx" } } } } 在3.1 构造请求中以调用获取用户Token的接口为例说明了如何调用API。获取Token后,再调用其他接口时,您需要在请求消息头中添加“X-Auth-Token”,其值即为Token。例如Token值为“ABCDEFJ....”,则调用接口时将“X-Auth-Token: ABCDEFJ....”加到请求消息头即可,如下所示。 POST https://iam.cn-north-1.myhuaweicloud.com/v3/auth/projects Content-Type: application/json X-Auth-Token: ABCDEFJ....
共100000条