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ê SRC
sincronizar com DST
, poderá sincronizar diretórios e arquivos.
dentro:
SRC
Representa o endereço e o caminho da fonte de dadosDST
Representa 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 exemplos3
, ,oss
. Veja todos os serviços de armazenamento compatíveis para obter detalhesACCESS_KEY
eSECRET_KEY
são as chaves de acesso da API para o Object StorageBUCKET[.ENDPOINT]
é o endereço de acesso do armazenamento de objetosPREFIX
é 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/
/
test
text
~/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 :te
test
text
~/mnt/te
te
te
te
ab
juicefs sync ./te ~/mnt/ab
O nome do test
diretório se tornará abst
, text
se tornará abxt
.
Lista de recursos
Isso pressupõe os seguintes recursos de armazenamento:
-
Armazenamento de objetos A <span id="bucketA" />
- Nome do bucket: aaa
- Ponto final:
https://aaa.s3.us-west-1.amazonaws.com
-
Armazenamento de objetos B <span id="bucketB" />
- Nome do bucket: bbb
- Ponto final:
https://bbb.oss-cn-hangzhou.aliyuncs.com
-
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
- Armazenamento de metadados:
Todas as chaves de acesso armazenadas são:
- ACCESS_KEY:
ABCDEFG
- SECRET_KEY:
HIJKLMN
Sincronização entre Object Storage e JuiceFS
Sincronize o movies
diretó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 images
diretó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 --update
a -u
opção ou mtime
.
Para uma sincronização completa, ou seja, para ressincronizar independentemente de o mesmo arquivo existir no caminho de destino, use --force-update
ou -f
. Por exemplo, para sincronizar totalmente o movies
diretó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
sync
A 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 --exclude
opçã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.png
arquivos ocultos:
juicefs sync --exclude '.*' --exclude 'pic/' --exclude '4.png' /mnt/jfs/ s3://ABCDEFG:[email protected]
Incluir arquivos/diretórios
Use a --include
opçã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.
--include
Ele 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 sync
permite que 10 threads executem tarefas de sincronização por padrão e você pode definir --thread
opções .
Além disso, se você precisar limitar a largura de banda ocupada por tarefas de sincronização, você pode definir a --bwlimit
opção , unidade Mbps
e 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 --dirs
opçã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 --perms
opção .
copiar link simbólico
sync
Ao sincronizar entre diretórios locais, o JuiceFS suporta a configuração da --links
opçã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
- O próprio link simbólico
mtime
não será copiado; --check-new
--perms
O 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 sync
comandos e --worker
define 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/config
configuraçã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✿)