O rsync tem uma maneira de fazer cópias desconectadas . Em outras palavras, o rsync pode (conceitualmente) diff uma árvore de diretórios e produzir um arquivo patch que depois você pode aplicar em qualquer número de arquivos que são idênticos à fonte original.
Requer que você invoque o rsync com o mestre e espelhe com --write-batch
; produz um arquivo. Em seguida, você transfere esse arquivo para qualquer número de outros destinos e, em seguida, aplica o lote a cada um desses destinos usando --read-batch
.
Se você mantiver uma cópia local do último estado rsynced (ou seja, uma cópia do que os espelhos parecem agora) na mesma máquina que o mestre, você pode gerar este "patch" no master sem sequer entrar em contato com qualquer espelho :
No mestre:
rsync --write-batch=my-batch.rsync /master/data /current/mirror
Adicione as outras opções desejadas. Isso fará duas coisas:
- Isso fará com que
/current/mirror
mude para refletir /master/data
- Ele criará um arquivo de patch binário (ou arquivo em lote) chamado
my-batch.rsync
para uso posterior.
Transfira o arquivo my-batch.rsync
do mestre para todos os seus espelhos e, em seguida, nos espelhos, aplique o patch , por assim dizer:
rsync --read-batch=my-batch.rsync /local/mirror
Benefícios desta abordagem:
- o mestre não está sobrecarregado
- não há necessidade de coordenar / ter acesso ao master / mirror (s) ao mesmo tempo
- pessoas diferentes com privilégios diferentes podem fazer o trabalho no mestre e no (s) espelho (s).
- não há necessidade de ter um canal TCP (ssh, netcat, seja o que for; o arquivo pode ser enviado via e-mail ;-))
- espelhos off-line podem ser sincronizados mais tarde (basta colocá-los on-line e aplicar o patch)
- todos os espelhos são idênticos (já que aplicam o mesmo "patch")
- todos os espelhos podem ser atualizados simultaneamente (já que o
--read-batch
é apenas cpu / io intensivo no próprio espelho)