Perguntas frequentes sobre replicação de dados entre contas e na mesma conta, incluindo cenários de mesma região e entre regiões.
Posso especifique um caminho ou prefixo personalizado para o bucket de destino?
Não. A replicação de mesma região e entre regiões não suporta caminhos de armazenamento personalizados para o bucket de destino. O caminho de destino é determinado pelo caminho de dados do bucket de origem configurado na regra de replicação.
Posso replicar objetos com base no horário da última modificação?
Não. Não é possível configure uma regra de replicação para replicar objetos com base em um intervalo de tempo de última modificação específico. Contudo, use o recurso File Modified Time do online migration service para isso. Ao especifique um intervalo de tempo, somente os arquivos modificados nesse período são migrados.
Por que não consigo crie uma regra de replicação de dados?
-
Verifique se as permissões necessárias foram concedidas.
-
Permissões ausentes para um usuário ram
-
Um usuário ram não consegue clique em OK ao crie uma regra de replicação de dados no console.
Causa: A permissão
oss:PutBucketReplicationnão foi concedida.Solução: Conceda a permissão
oss:PutBucketReplicationao usuário ram.
-
Funções ram personalizadas não aparecem na lista de funções ram quando um usuário ram crie uma regra de replicação de dados.
Causa: A permissão
ram:ListRolesnão foi concedida.Solução: Conceda a permissão
ram:ListRolesao usuário ram.
-
-
Permissões ausentes para uma função ram
-
Replicação na mesma conta
Conceda à função ram permissões para realizar replicação entre os buckets de origem e destino. Role types.
-
Replicação entre contas
Use a Conta A para conceder a uma função ram permissões para replicar dados do bucket de origem, e a Conta B para conceder a uma função ram permissões para receber objetos replicados no bucket de destino. Role authorization.
-
-
-
Verifique se os buckets de origem e destino têm o mesmo status de versionamento.
Os buckets de origem e destino devem ter o mesmo status de versionamento: ambos com versionamento ativo ou ambos sem versionamento.
-
Verifique se as informações de endpoint ou AccessKey estão corretas.
Ao usar um SDK ou ossutil para crie uma regra de replicação de dados, confira o seguinte:
Verifique os endpoints de região dos buckets de origem e destino. Regions and endpoints.
Verifique o par de AccessKey. View the AccessKey information of a RAM user.
O que fazer quando o console do Resource Access Management (ram) exibe avisos de autorização inválida ao crie uma política de replicação?
Ao usar o visual editor no ram console para crie uma política de replicação personalizada contendo oss:ReplicateList e oss:ReplicateGet, o console pode exibir avisos de unrecognized action e unrecognized resource.
Esses avisos ocorrem porque o dicionário de ações do editor visual não inclui essas ações internas do oss. Os avisos não afetam a validade da política.
Crie a política usando um dos métodos a seguir:
Alterne para o modo Script editor e insira o JSON da política. Esse modo não exibe esses avisos.
Use o comando
aliyun ram CreatePolicyna interface de linha de comando (CLI) para crie a política.
Após crie a política, crie uma regra de replicação entre contas no oss console. Se a regra for criada com sucesso, a política está em vigor.
Por que os objetos não são replicados para o bucket de destino?
Se os objetos não aparecerem no bucket de destino após a configuração de uma regra de replicação, verifique as causas a seguir.
-
O bucket de origem está configurado incorretamente.
Confirme se o status de replicação de dados é Enabled.
-
O prefixo está incorreto.
-
Para replicar objetos específicos, defina o prefixo. Por exemplo, se o prefixo for
log, somente objetos comolog/date1.txtelog/date2.txtserão replicados. Objetos comodate3.txtnão serão replicados.NotaNão adicione um asterisco (*) ao final do prefixo, como
log/*. O prefixo não pode conter o nome do bucket. Para replicar todos os objetos do bucket de origem para o bucket de destino, deixe o campo de prefixo vazio.
-
Verifique se a replicação de objetos históricos está ativa e se os objetos ausentes são objetos históricos.
-
Verifique se os objetos de origem são réplicas de outro bucket.
O oss não replica objetos que já são réplicas de outra regra de replicação. Por exemplo, se a replicação estiver configurada do bucket A para o bucket B e do bucket B para o bucket C, as réplicas no bucket B não são replicadas para o bucket C.
-
Verifique se os objetos são criptografados com KMS. Em caso afirmativo, ative a replicação para objetos criptografados com KMS.
Se o objeto de origem ou o bucket de destino usar SSE-KMS com um CMK ID especificado, selecione Copy e configure os seguintes parâmetros:
-
CMK ID: Especifique a chave KMS para criptografar o objeto de destino.
Primeiro crie uma chave KMS na mesma região do bucket de destino. Create a key.
-
RAM Role Name: Selecione uma função ram para execute a criptografia KMS no objeto de destino.
New RAM Role: Cria uma nova função ram para criptografia KMS. O formato do nome da função é
kms-replication-SourceBucketName-DestinationBucketName.AliyunOSSRole: Usa a função AliyunOSSRole para criptografia KMS no objeto de destino. O oss cria essa função automaticamente caso ela não exista.
NotaAo crie ou modifique uma função, conceda a ela a permissão
AliyunOSSFullAccess. Caso contrário, a replicação de dados poderá falhar.
Chame HeadObject e GetBucketEncryption para consultar o status de criptografia do objeto de origem e do bucket de destino.
-
-
Verifique se o progresso da replicação chegou a 100%.
A replicação de dados é assíncrona e pode levar de alguns minutos a várias horas, dependendo do tamanho dos dados. Após o progresso atingir 100%, confirme se o objeto aparece no bucket de destino.
Por que as exclusões de objetos não são replicadas?
-
Causa 1: Uma política de retenção (WORM) está configurada para o bucket de destino.
Antes do vencimento do período de retenção, nenhum usuário, incluindo o proprietário do recurso, pode exclua objetos.
-
Causa 2: O comportamento de exclusão depende do status de versionamento do bucket de origem e da política de replicação.
Versionamento do bucket de origem
Método de solicitação
Política de replicação de dados
Resultado
Sem versionamento
Uma solicitação Delete é iniciada.
Replicate additions and modifications
Somente o objeto no bucket de origem é excluído. O objeto no bucket de destino não é excluído.
Replicate additions, modifications, and deletions
Os objetos nos buckets de origem e destino são excluídos.
Versionamento ativo
Uma solicitação Delete é iniciada sem um ID de versão do objeto.
Replicate additions and modifications
Nenhum objeto é excluído de nenhum dos buckets. O oss cria um marcador de exclusão no bucket de origem e o replica para o bucket de destino.
Replicate additions, modifications, and deletions
Uma solicitação Delete é iniciada com um ID de versão do objeto.
Replicate additions and modifications
Somente a versão do objeto no bucket de origem é excluída. A versão do objeto no bucket de destino não é excluída.
Replicate additions, modifications, and deletions
As versões do objeto especificado nos buckets de origem e destino são excluídas.
Verificar consistência dos dados
Execute o código a seguir para verifique a consistência dos dados entre os buckets de origem e destino após a replicação.
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.model.*;
import com.aliyun.oss.OSSException;
import com.aliyuncs.exceptions.ClientException;
public class Demo {
public static void main(String[] args) throws ClientException {
// Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Set srcEndpoint to the endpoint of the region where the source bucket is located.
String srcEndpoint = "https://oss-cn-hangzhou.aliyuncs.com";
OSSClient srcClient = new OSSClient(srcEndpoint , credentialsProvider);
// Specify the name of the source bucket.
String srcBucketName = "src-replication-bucket";
// Set destEndpoint to the endpoint of the region where the destination bucket is located.
String destEndpoint = "https://oss-cn-beijing.aliyuncs.com";
OSSClient destClient = new OSSClient(destEndpoint, credentialsProvider);
// Specify the name of the destination bucket.
String destBucketName = "dest-replication-bucket";
// If the source and destination buckets do not have versioning enabled, call listObjectsV2 to list the replicated objects from the source bucket.
// If versioning is enabled or suspended for the source and destination buckets, call listVersions to list the replicated objects from the source bucket.
ListObjectsV2Result result;
ListObjectsV2Request request = new ListObjectsV2Request(srcBucketName);
do {
result = srcClient.listObjectsV2(request);
for (OSSObjectSummary summary : result.getObjectSummaries())
{
String objectName = summary.getKey();
ObjectMetadata srcMeta;
try {
// Get the metadata of the source object.
srcMeta = srcClient.headObject(srcBucketName, objectName);
} catch (OSSException ossException) {
if (ossException.getErrorCode().equals("NoSuchKey")) {
continue;
} else {
System.out.println("head src-object failed: " + objectName);
}
continue;
}
ObjectMetadata destMeta;
try {
// Get the metadata of the object replicated to the destination bucket.
destMeta = destClient.headObject(destBucketName, objectName);
} catch (OSSException ossException) {
if (ossException.getErrorCode().equals("NoSuchKey")) {
System.out.println("dest-object not exist: " + objectName);
} else {
System.out.println("head dest-object failed: " + objectName);
}
continue;
}
// Check whether the CRC values of the source and destination objects are consistent.
Long srcCrc = srcMeta.getServerCRC();
String srcMd5 = srcMeta.getContentMD5();
if (srcCrc != null) {
if (destMeta.getServerCRC() != null) {
if (!destMeta.getServerCRC().equals(srcCrc)) {
System.out.println("crc not equal: " + objectName
+ " | srcCrc: " + srcCrc + " | destCrc: " + destMeta.getServerCRC());
}
continue;
}
}
// Check whether the MD5 values of the source and destination objects are consistent.
if (srcMd5!= null) {
if (destMeta.getContentMD5() != null) {
if (!destMeta.getContentMD5().equals(srcMd5)) {
System.out.println("md5 not equal: " + objectName
+ " | srcMd5: " + srcMd5 + " | destMd5: " + destMeta.getContentMD5());
}
continue;
}
}
// Check whether the ETag values of the source and destination objects are consistent.
if (srcMeta.getETag() == null || !srcMeta.getETag().equals(destMeta.getETag())) {
System.out.println("etag not equal: " + objectName
+ " | srcEtag: " + srcMeta.getETag() + " | destEtag: " + destMeta.getETag());
}
}
request.setContinuationToken(result.getNextContinuationToken());
request.setStartAfter(result.getStartAfter());
} while (result.isTruncated());
}
}
A replicação em cadeia é suportada?
Não. Os dados replicados do bucket A para o bucket B não são replicados automaticamente do bucket B para o bucket C.
Para replicar dados do bucket A para o bucket C, configure uma regra de replicação separada do bucket A para o bucket C.
Se a replicação histórica ainda estiver em andamento para ambos os buckets, novos dados gravados no bucket A poderão ser verificados pela tarefa de replicação histórica e replicados para o bucket C.
A replicação bidirecional entre buckets cria um loop de replicação?
Não. Os dados replicados nunca são enviados de volta à origem. Dados replicados de A para B não são replicados de volta para A.
As exclusões por regras de ciclo de vida são replicadas?
Se a política de replicação for Replicate additions and modifications, os objetos excluídos por ciclo de vida no bucket de origem não são excluídos do bucket de destino.
-
Se a política de replicação for Replicate additions, modifications, and deletions, os objetos excluídos por ciclo de vida no bucket de origem também são excluídos do bucket de destino.
NotaSe o bucket de destino ainda contiver objetos com os mesmos nomes dos objetos de origem excluídos por ciclo de vida, eles podem ter sido gravados manualmente no bucket de destino.
Por que o progresso da replicação histórica está parado em 0%?
-
O progresso da replicação não é atualizado em tempo real.
O progresso da replicação histórica é atualizado somente após a varredura de todos os arquivos. Para buckets com centenas de milhões de objetos, isso pode levar várias horas. Um progresso de 0% não significa que a replicação não foi iniciada.
Confirme se a replicação histórica foi iniciada verificando as alterações na capacidade de armazenamento e no tráfego do bucket de destino. Query bucket-level usage.
-
A política de autorização do bucket de origem está incorreta.
O oss não valida as permissões ao crie uma regra de replicação. A regra é criada mesmo com permissões incorretas, mas os dados não são replicados e o progresso permanece em 0%.
O que fazer quando a replicação de dados está lenta?
-
Aumente a largura de banda
A replicação é assíncrona e pode levar de alguns minutos a várias horas, dependendo do volume de dados. Se a replicação estiver lenta por causa de limites de largura de banda, entre em contato com suporte técnico para solicitar um aumento de largura de banda.
-
Ative o Replication Time Control (RTC)
Com o RTC ativo, o oss replica a maioria dos objetos em segundos e 99,99% deles em até 10 minutos. Tarefas com RTC ativo incorrem em cobranças de tráfego de replicação de dados. Use Replication Time Control (RTC).
Como rastrear operações de replicação?
Configure uma regra de notificação de eventos com os tipos de evento ObjectReplication:ObjectCreated, ObjectReplication:ObjectRemoved e ObjectReplication:ObjectModified para rastrear criações, atualizações, exclusões e substituições de objetos. Use event notifications to monitor OSS object changes in real time.
A replicação é suportada em buckets com versionamento suspenso?
Não. Ambos os buckets devem ter o mesmo status de versionamento: ambos sem versionamento ou ambos com versionamento ativo.
As chamadas de API do KMS para replicação são cobradas?
Sim. Se o bucket de destino usar criptografia KMS, você será cobrado pelas chamadas de API do KMS correspondentes. Billing of KMS 1.0.
Posso desativar uma regra de replicação?
Sim. Clique em Disable Replication ao lado da regra para interromper a replicação de dados.
Os dados já replicados permanecem no bucket de destino, mas novos dados gravados no bucket de origem não são mais replicados.
A replicação altera a ordem dos arquivos?
Não. A replicação preserva a ordem de modificação dos arquivos.