Perguntas frequentes sobre replicação de dados na mesma conta e entre contas diferentes, abrangendo cenários de mesma região e entre regiões.
É possível especificar um caminho ou prefixo personalizado para o bucket de destino?
Não. A replicação na mesma região e entre regiões não aceita caminhos de armazenamento personalizados para o bucket de destino. O caminho de destino segue o caminho dos dados do bucket de origem configurado na regra de replicação.
É possível replicar objetos com base na última data de modificação?
Não. Não é possível configurar uma regra de replicação para replicar objetos com base em um intervalo específico de última modificação. No entanto, use o recurso File Modified Time do online migration service para essa tarefa. Se você especificar um intervalo de tempo, apenas os arquivos modificados nesse período serão migrados.
Por que não consigo criar 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 clicar em OK ao criar uma regra de replicação 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 quando um usuário RAM cria uma regra de replicação.
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 executar a replicação entre os buckets de origem e de 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 de destino têm o mesmo status de versionamento.
Os buckets de origem e de destino devem ter o mesmo status de versionamento: ambos versionados ou ambos não versionados.
-
Verifique se as informações de endpoint ou AccessKey estão corretas.
Se usar um SDK ou ossutil para criar uma regra de replicação, verifique o seguinte:
Verifique os endpoints de região dos buckets de origem e de destino. Regions and endpoints.
Verifique o par de AccessKeys. View the AccessKey information of a RAM user.
O que fazer se o console do Resource Access Management (RAM) exibir avisos de autorização inválida ao criar uma política de replicação?
Ao usar o visual editor no RAM console para criar 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 seguintes métodos:
Mude 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 criar a política.
Após criar a política, crie uma regra de replicação entre contas no OSS console. Se for possível criar a regra, a política estará efetiva.
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.
Verifique se o status da replicação de dados está como Enabled.
-
O prefixo está incorreto.
-
Para replicar objetos específicos, defina o prefixo. Por exemplo, se o prefixo for
log, apenas objetos comolog/date1.txtelog/date2.txtserão replicados. Objetos comodate3.txtnão serão replicados.NotaNão adicione um asterisco (*) no 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á ativada e se os objetos ausentes são 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 serão replicadas para o bucket C.
-
Verifique se os objetos são criptografados pelo KMS. Nesse caso, ative a replicação para objetos criptografados pelo 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 executar 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 se ela não existir.
NotaSe criar ou modificar 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 atingiu 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%, verifique 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 que o período de retenção expire, nenhum usuário, incluindo o proprietário do recurso, pode excluir 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.
Replicar adições e modificações
Apenas o objeto no bucket de origem é excluído. O objeto no bucket de destino não é excluído.
Replicar adições, modificações e exclusões
Os objetos nos buckets de origem e de destino são excluídos.
Versionamento ativado
Uma solicitação Delete é iniciada sem um ID de versão do objeto.
Replicar adições e modificações
Nenhum objeto é excluído em nenhum dos buckets. O OSS cria um marcador de exclusão no bucket de origem e replica esse marcador para o bucket de destino.
Replicar adições, modificações e exclusões
Uma solicitação Delete é iniciada com um ID de versão do objeto.
Replicar adições e modificações
Apenas a versão do objeto no bucket de origem é excluída. A versão do objeto no bucket de destino não é excluída.
Replicar adições, modificações e exclusões
As versões especificadas do objeto nos buckets de origem e de destino são excluídas.
Verificar a consistência dos dados
Execute o código a seguir para verificar a consistência dos dados entre os buckets de origem e de 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 posteriormente 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. Dados replicados nunca retornam à sua 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 pelo ciclo de vida no bucket de origem não serão excluídos do bucket de destino.
-
Se a política de replicação for Replicate additions, modifications, and deletions, os objetos excluídos pelo ciclo de vida no bucket de origem também serã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 pelo ciclo de vida, eles podem ter sido gravados manualmente no bucket de destino.
Por que o progresso da replicação histórica está travado em 0%?
-
O progresso da replicação não é atualizado em tempo real.
O progresso da replicação histórica só é atualizado 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 começou.
Confirme se a replicação histórica começou verificando 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 permissões ao criar uma regra de replicação. A regra é criada mesmo com permissões incorretas, mas os dados não serão replicados e o progresso permanecerá em 0%.
O que fazer se a replicação de dados estiver 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 devido a limites de largura de banda, entre em contato com o suporte técnico para solicitar um aumento de largura de banda.
-
Ative o Replication Time Control (RTC)
Com o RTC ativado, o OSS replica a maioria dos objetos em segundos e 99,99% deles em até 10 minutos. Tarefas com RTC ativado geram 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 não versionados ou ambos versionados.
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 serão mais replicados.
A replicação altera a ordem dos arquivos?
Não. A replicação preserva a ordem de modificação dos arquivos.