Use comandos de sincronização JuiceFS para migrar e sincronizar dados entre nuvens

Nos últimos anos, a computação em nuvem se tornou o mainstream. Por interesse próprio, ou por não querer ser bloqueado por um único provedor de serviços de nuvem, ou por causa da redundância de negócios e dados, ou para otimização de custos, as empresas tentarão transferir alguns ou todos os seus negócios de salas de computadores offline são migrados para a nuvem ou migrados de uma plataforma de nuvem para outra.A migração de serviço envolve a migração de dados. Acontece que o JuiceFS já se conectou a várias APIs de armazenamento de objetos, e também implementou a lógica de sincronização de dados.Vamos entender o comando sync do JuiceFS.

O que é JuiceFS Sync

O subcomando sync do JuiceFS é um utilitário de sincronização de dados completo que pode sincronizar ou migrar dados simultaneamente com vários threads entre todos os armazenamentos de objetos suportados pelo JuiceFS. Ele suporta tanto a migração de dados entre "armazenamento de objetos" e "JuiceFS" regiões entre o Object Storage e o Object Storage. Semelhante ao rsync, além do armazenamento de objetos, ele também suporta sincronização de diretórios locais, acesso a diretórios remotos através de SSH, HDFS, WebDAV, etc. Ele também fornece funções avançadas como sincronização completa, sincronização incremental e correspondência de padrões condicionais.

Uso básico

formato de comando

juicefs sync [command options] SRC DST

Ou seja, se você SRCsincronizar com DST, poderá sincronizar diretórios e arquivos.

dentro:

  • SRCRepresenta o endereço e o caminho da fonte de dados
  • DSTRepresenta o endereço de destino e o caminho
  • [command options]Representa opções opcionais de sincronização, consulte a referência de comando para obter detalhes .

O formato do endereço é[NAME://][ACCESS_KEY:SECRET_KEY@]BUCKET[.ENDPOINT][/PREFIX]

dentro:

  • NAMEé o tipo de armazenamento, por exemplo s3, , oss. Veja todos os serviços de armazenamento compatíveis para obter detalhes
  • ACCESS_KEYe SECRET_KEYsão as chaves de acesso da API para o Object Storage
  • BUCKET[.ENDPOINT]é o endereço de acesso do armazenamento de objetos
  • PREFIXé opcional e qualifica o prefixo do nome do diretório a ser sincronizado.

Veja a seguir um endereço de exemplo para armazenamento de objetos do Amazon S3:

s3://ABCDEFG:[email protected]

Em particular, e são tratados como diretórios seSRC terminarem com , por exemplo: . Se não terminar com , será considerado como um "prefixo" e será correspondido de acordo com as regras de correspondência de prefixo. Por exemplo, existem dois diretórios no diretório atual e , e eles podem ser sincronizados com o caminho de destino usando o seguinte comando :DST/movies//testtext~/mnt/

juicefs sync ./te ~/mnt/te

Dessa forma, o comandosync corresponderá a todos os diretórios ou arquivos no caminho atual contendo o prefixo com o prefixo, ou seja, e . E no caminho de destino também é um prefixo, ele substituirá o prefixo de todos os diretórios e arquivos sincronizados, neste exemplo, substitua por , ou seja, mantenha o prefixo inalterado. Se você ajustar o prefixo do caminho de destino, por exemplo, altere o prefixo de destino para :tetesttext~/mnt/teteteteab

juicefs sync ./te ~/mnt/ab

O nome do testdiretório se tornará abst, textse tornará abxt.

Lista de recursos

Isso pressupõe os seguintes recursos de armazenamento:

  1. Armazenamento de objetos A <span id="bucketA" />

    • Nome do bucket: aaa
    • Ponto final:https://aaa.s3.us-west-1.amazonaws.com
  2. Armazenamento de objetos B <span id="bucketB" />

    • Nome do bucket: bbb
    • Ponto final:https://bbb.oss-cn-hangzhou.aliyuncs.com
  3. Sistema de arquivos JuiceFS <span id="bucketC" />

    • Armazenamento de metadados:redis://10.10.0.8:6379/1
    • Armazenamento de objetos:https://ccc-125000.cos.ap-beijing.myqcloud.com

Todas as chaves de acesso armazenadas são:

  • ACCESS_KEYABCDEFG
  • SECRET_KEYHIJKLMN

Sincronização entre Object Storage e JuiceFS

Sincronize o moviesdiretório com o sistema de arquivos JuiceFS:

# 挂载 JuiceFS
sudo juicefs mount -d redis://10.10.0.8:6379/1 /mnt/jfs
# 执行同步
juicefs sync s3://ABCDEFG:[email protected]/movies/ /mnt/jfs/movies/

Sincronize o imagesdiretório com o Object Storage A:

# 挂载 JuiceFS
sudo juicefs mount -d redis://10.10.0.8:6379/1 /mnt/jfs
# 执行同步
juicefs sync /mnt/jfs/images/ s3://ABCDEFG:[email protected]/images/

Sincronização entre armazenamento de objetos e armazenamento de objetos

Sincronize todos os dados do armazenamento de objetos A com o armazenamento de objetos B:

juicefs sync s3://ABCDEFG:[email protected] oss://ABCDEFG:[email protected]

Uso avançado

Sincronização incremental e sincronização completa

O comando sync funciona por padrão na sincronização incremental, ou seja, primeiro compara as diferenças entre os caminhos de origem e destino e, em seguida, sincroniza apenas as diferenças. O arquivo pode ser atualizado usando --updatea -uopção ou mtime.

Para uma sincronização completa, ou seja, para ressincronizar independentemente de o mesmo arquivo existir no caminho de destino, use --force-updateou -f. Por exemplo, para sincronizar totalmente o moviesdiretório com o sistema de arquivos JuiceFS:

# 挂载 JuiceFS
sudo juicefs mount -d redis://10.10.0.8:6379/1 /mnt/jfs
# 执行全量同步
juicefs sync --force-update s3://ABCDEFG:[email protected]/movies/ /mnt/jfs/movies/

correspondência de padrões

syncA função de correspondência de padrões do comando é semelhante à do rsync. Ele pode excluir ou incluir certos tipos de arquivos por meio de regras e obter a sincronização de qualquer conjunto por meio da combinação de várias regras. As regras são as seguintes:

  • /Um padrão que termina em corresponderá apenas a diretórios, caso contrário, corresponderá a arquivos, links ou dispositivos;
  • Quando contiver *, ?ou [caracteres , será correspondido por padrão curinga, caso contrário, será correspondido por string regular;
  • *corresponde a qualquer componente de caminho não vazio, parando /em ;
  • ?corresponde a qualquer caractere /exceto ;
  • [corresponde a um conjunto de caracteres, como [a-z]ou [[:alpha:]];
  • No modo curinga, as barras invertidas podem ser usadas para escapar de curingas, mas na ausência de curingas, elas serão correspondidas literalmente;
  • Sempre corresponda recursivamente a um padrão como prefixo.

Excluir arquivos/diretórios

Use a --excludeopção para definir diretórios ou arquivos a serem excluídos. Por exemplo, para sincronizar totalmente o sistema de arquivos JuiceFS com o armazenamento de objetos A, mas não sincronizar arquivos e pastas ocultos:

Todos os nomes que .começam

# 挂载 JuiceFS
sudo juicefs mount -d redis://10.10.0.8:6379/1 /mnt/jfs
# 完整同步,排除隐藏文件和目录
juicefs sync --exclude '.*' /mnt/jfs/ s3://ABCDEFG:[email protected]/

Esta opção pode ser repetida para corresponder a mais regras, por exemplo, para excluir todos os arquivos, pic/diretórios e 4.pngarquivos ocultos:

juicefs sync --exclude '.*' --exclude 'pic/' --exclude '4.png' /mnt/jfs/ s3://ABCDEFG:[email protected]

Incluir arquivos/diretórios

Use a --includeopção para definir diretórios ou arquivos a serem incluídos (não excluídos), por exemplo, para sincronizar apenas os doispic/ arquivos e excluir os outros:4.png

juicefs sync --include 'pic/' --include '4.png' --exclude '*' /mnt/jfs/ s3://ABCDEFG:[email protected]

Ao usar regras de inclusão/exclusão, as opções colocadas primeiro têm precedência. --includeEle deve estar na frente. Se todos os arquivos forem --exclude '*'excluídos , as seguintes --include 'pic/' --include '4.png'regras de inclusão não terão efeito.

Multithreading e limitação de largura de banda

O JuiceFS syncpermite que 10 threads executem tarefas de sincronização por padrão e você pode definir --threadopções .

Além disso, se você precisar limitar a largura de banda ocupada por tarefas de sincronização, você pode definir a --bwlimitopção , unidade Mbpse o valor padrão 0é sem limite.

Estrutura de diretórios e permissões de arquivos

Por padrão, o comando sync sincroniza apenas objetos de arquivo e diretórios que contêm objetos de arquivo. Os diretórios vazios não são sincronizados. Para sincronizar diretórios vazios, você pode usar a --dirsopção .

Além disso, se você deseja manter as permissões de arquivo ao sincronizar entre sistemas de arquivos como local, sftp, hdfs, etc., você pode usar a --permsopção .

copiar link simbólico

syncAo sincronizar entre diretórios locais, o JuiceFS suporta a configuração da --linksopção habilitar a função de sincronizar a si mesmo em vez do objeto para o qual aponta ao encontrar um link simbólico. O caminho apontado pelo link simbólico sincronizado é o caminho original armazenado no link simbólico de origem e não será convertido se o caminho for alcançável antes ou depois da sincronização.

Alguns outros detalhes a serem observados

  1. O próprio link simbólico mtimenão será copiado;
  2. --check-new--permsO comportamento das opções e é ignorado quando um link simbólico é encontrado.

Sincronização simultânea de várias máquinas

Em essência, sincronizar dados entre dois armazenamentos de objetos é extrair dados de uma extremidade e empurrá-los para a outra. Conforme mostrado na figura abaixo, a eficiência da sincronização depende da largura de banda entre o cliente e a nuvem.

Ao sincronizar uma grande quantidade de dados, a largura de banda de uma única máquina geralmente é ocupada e ocorre um gargalo.Em resposta a essa situação, o JuiceFS Sync fornece suporte à sincronização simultânea de várias máquinas, conforme mostrado na figura a seguir.

O Manager executa os synccomandos e --workerdefine múltiplos Worker hosts através do parâmetro JuiceFS irá dividir dinamicamente a carga de trabalho de sincronização de acordo com o número total de Workers e distribuí-los para cada host para execução simultânea. Ou seja, a quantidade de tarefas de sincronização processadas originalmente em um host é dividida em várias cópias e distribuída para vários hosts para processamento simultâneo.A quantidade de dados que podem ser processados ​​por unidade de tempo é maior e a largura de banda total também é dobrada.

Ao configurar tarefas de sincronização simultâneas de várias máquinas, você precisa configurar o login sem senha SSH do host do gerenciador para o host do trabalhador com antecedência para garantir que os clientes e as tarefas possam ser distribuídos com êxito aos trabalhadores.

O Gerente distribuirá o programa cliente JuiceFS para os hosts Worker. Para evitar problemas de compatibilidade do cliente, certifique-se de que o Gerente e o Worker usem o mesmo tipo e arquitetura do sistema operacional.

Por exemplo, para sincronizar o armazenamento de objetos A com o armazenamento de objetos B, usando sincronização paralela de vários mestres:

juicefs sync --worker [email protected],[email protected] s3://ABCDEFG:[email protected] oss://ABCDEFG:[email protected]

O host atual [email protected]e [email protected]compartilharão a tarefa de sincronização de dados entre os dois armazenamentos de objetos.

Se o serviço SSH do host Worker não for a porta padrão 22, defina o número da porta do serviço SSH do host Worker por meio do arquivo de .ssh/configconfiguração .

Aplicativo de cenário

Backup de recuperação de desastres externo de dados

O backup de recuperação de desastres externo é voltado para os próprios arquivos, portanto, os arquivos armazenados no JuiceFS devem ser sincronizados com outros armazenamentos de objetos. Por exemplo, os arquivos no sistema de arquivos JuiceFS devem ser sincronizados com o armazenamento de objetos A:

# 挂载 JuiceFS
sudo juicefs mount -d redis://10.10.0.8:6379/1 /mnt/jfs
# 执行同步
sudo juicefs sync /mnt/jfs/ s3://ABCDEFG:[email protected]/

Após a sincronização, todos os arquivos podem ser vistos diretamente no Object Storage A.

Criar uma cópia de dados JuiceFS

Diferente do backup de recuperação de desastres para o próprio arquivo, o objetivo de estabelecer uma cópia de dados JuiceFS é criar um espelho com o mesmo conteúdo e estrutura para o armazenamento de dados JuiceFS. copie modificando a configuração. continue trabalhando. Deve-se notar que apenas os dados do sistema de arquivos JuiceFS são copiados aqui, e os metadados não são copiados. O backup de dados do mecanismo de metadados ainda é necessário.

Isso requer manipular diretamente o armazenamento de objeto subjacente do JucieFS e sincronizá-lo com o armazenamento de objeto de destino. Por exemplo, para usar o armazenamento de objetos B como uma cópia de dados para o sistema de arquivos JuiceFS:

juicefs sync cos://ABCDEFG:[email protected] oss://ABCDEFG:[email protected]

Após a sincronização, o que você vê no Object Store B é exatamente o mesmo conteúdo e estrutura do Object Store usado pelo JuiceFS.

Se for útil, siga nosso projeto Juicedata/JuiceFS ! (0ᴗ0✿)

{{o.name}}
{{m.name}}

Acho que você gosta

Origin my.oschina.net/u/5389802/blog/5514088
Recomendado
Clasificación