Super prático! ! rsync distribuído + inotify monitorando sincronização em tempo real

1. Introdução à sincronização rsync

.Uma ferramenta de backup incremental rápida

  • Sincronização remota, sincronização remota
  • Suporta replicação local ou sincroniza com outros SSH, hosts rsync
  • Site oficial: http://rsync.samba.org

1. Introdução de software

  • Rsync é uma ferramenta de sincronização de dados remota que pode sincronizar rapidamente arquivos entre vários hosts via LAN / WAN.
  • O Rsync era originalmente uma ferramenta para substituir o scp e atualmente é mantido por Rsync.samba.org.
  • O Rsync usa o chamado "algoritmo Rsync" para sincronizar os arquivos entre os hosts locais e remotos. Este algoritmo apenas transfere as diferentes partes dos dois arquivos em vez de enviar o arquivo inteiro a cada vez, portanto a velocidade é bastante rápida.
  • A máquina que executa o servidor Rsync também é chamada de servidor de backup. Um servidor Rsync pode fazer backup dos dados de vários clientes ao mesmo tempo; vários servidores Rsync também podem fazer backup dos dados de um cliente.

2. Princípio Rsync

  • O Rsync pode usar o modo daemon. O servidor Rsync abrirá um canal de serviço (porta) 873 e aguardará a conexão Rsync.
  • Ao conectar, o servidor Rsync verificará se a senha corresponde e, se a senha for verificada, a transferência do arquivo pode ser iniciada.
  • Quando a primeira conexão for concluída, todo o documento será transmitido uma vez e, na próxima vez, apenas a diferença entre os dois documentos será transmitida.

Rsync suporta a maioria dos sistemas do tipo Unix. A instalação da interface gráfica CentOS7.0 basicamente instalou o software Rsync, que pode ser instalado com o yum

3. Os recursos básicos do Rsync são os seguintes:

  • Toda a árvore de diretório e sistema de arquivos podem ser espelhados e salvos;
  • É fácil manter as permissões do arquivo original, hora, links físicos e virtuais, etc .;
  • Pode ser instalado sem permissão especial;
  • Processo otimizado, alta eficiência de transferência de arquivos;
  • Você pode usar rcp, ssh, etc. para transferir arquivos, é claro, você também pode usar uma conexão de soquete direta;
  • Suporte a transmissão anônima.

4. Uso do comando rsync

Formato: rsync [Opções] Opções comuns para o local original e local de destino

Opções usar
-uma Modo de arquivo, recursivo e preserva os atributos do objeto, equivalente a -rlptgoD
-V Exibir informações detalhadas (verbosas) sobre o processo de sincronização
-com Compactar ao transferir arquivos (compactar) -H: Manter os arquivos com link físico
-UMA Manter as informações do atributo ACL
-excluir Exclua arquivos no local de destino, mas não no local original
–Checksum Decida se deseja pular arquivos com base na soma de verificação do objeto

5. Duas maneiras de sincronizar a fonte

Formato 1: rsync [opções] nome de usuário @ endereço do host :: local de destino do nome do módulo compartilhado
Formato 2: rsync [opções] rsync: // nome de usuário @ endereço do host / local de destino do nome do módulo compartilhado

Dois, configure o servidor Rsync

Fonte de sincronização Rsync (refere-se ao servidor remoto da operação de backup, também conhecido como fonte de backup)
Insira a descrição da imagem aqui

1. Ideias básicas

  • Estabelecer o arquivo de configuração rsyncd.conf e o arquivo de conta independente
  • Ativar modo rsync --daemon
    A função do processo daemon é que, mesmo se o serviço não solicitar o serviço, o número da porta do serviço ainda estará aberto.
    Exemplo de aplicação
  • Backup do usuário, permitindo a sincronização de downlink
  • O diretório operacional é / var / www / html /

Passos experimentais

  1. Arquivo de configuração /etc/rsyncd.conf
  2. Configurar arquivo de conta rsync
  3. Iniciar serviço rsync
  4. Verifique para outro servidor

[Configuração do servidor 1 (extremidade da fonte rsync)]

1. Modifique o arquivo de configuração rsync

[root@oracle ~]# vi /etc/rsyncd.conf
uid = nobody   ##主账号为匿名
gid = nobody   ##组账号匿名
use chroot = yes   ##家目录锁定,锁定家目录后无法使用cd命令进入其他目录
address = 192.168.10.10   ##本地rsync源端地址
max connections = 4     ##最大连接数为4
pid file = /var/run/rsyncd.pid  ##pid文件位置
log file = /var/log/rsyncd.log   ##日志文件位置
port = 873     ##监听端口873
hosts allow = 192.168.10.0/24     ##允许访问的网段

[wwwroot]     ##共享模块的名称
path = /var/www/html   ##共享目录
comment = ww.bai.com   ##描述信息,自定义
read only = yes    ##只读模式
auth users = backuper    ##授权的虚拟用户为backuper(不需要系统创建)
secrets file = /etc/rsyncd_user.db   ##认证密码存放文件
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2    ##不进行压缩的文件格式类型

2. Edite o arquivo de log do usuário e inicie o rsync

[root@oracle ~]# vi /etc/rsyncd_user.db  ##编写用户数据文件
backuper:abc123   ##每一行为一个用户记录,格式为——用户名:密码
[root@oracle ~]# chmod 600 /etc/rsyncd_user.db   ## 600权限,不允许其他用户读取
[root@oracle ~]# rsync --daemon ##启动守护进程
[root@oracle ~]# netstat -anupt |grep 873   ##查看端口状态
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      12109/rsync         
tcp6       0      0 :::873                  :::*                    LISTEN      12109/rsync        

3. Crie um teste de arquivo no diretório compartilhado

[root@oracle html]# vi abc
abc
[root@oracle html]# cat abc 
this abc

[Servidor 2 (Iniciador)]

1. Vá para o iniciador para testar e visualizar os arquivos no diretório / var / www / html

[root@squid ~]# cd /var/www/html
[root@squid html]# ls    ##查看不到文件,为空
[root@squid html]# 

2. Execute a sincronização rsync com o servidor 1 (extremidade de origem)

[root@squid html]# rsync -avz rsync://backuper@192.168.10.10/wwwroot /var/www/html
##rsync -avz backuper@192.168.10.10::wwwroot /var/www/html ###该命令效果一样
Password:    ##输入密码
receiving incremental file list
./
abc
sent 46 bytes  received 118 bytes  36.44 bytes/sec
total size is 9  speedup is 0.05
[root@squid html]# ls    ##在此查看,发现源端的文件同步到发起端了
abc

3. Configure a interação livre

[root@squid html]# rm -rf abc      ##先删除abc文件,方便测试
[root@squid html]# ls
[root@squid html]# 
[root@squid html]# vi /etc/server.password    ##编写免交互密码存放文件
abc123                      ##写入rsync指定的虚拟用户backuper的密码
[root@squid html]# chmod 600 /etc/server.password          ##同样设置600权限,只允许主人查看
[root@squid html]# vi /etc/server.password
[root@squid html]# rsync -az --delete --password-file=/etc/server.password backuper@192.168.10.10::wwwroot /var/www/html     ##免交互同步,--delete会删除本端与源端文件名不相同的文件,--password-file指定存放密码的文件位置
[root@squid html]# ls
abc
[root@squid html]# cat abc   ##同步成功
this abc

4. Você pode especificar tarefas agendadas periódicas e sincronizar regularmente

[root@oracle ~]# crontab -e   ##设置每晚10点执行同步
*/30 22 * * *  rsync -az --delete --password-file=/etc/server.password backuper@192.168.10.10::wwwroot /var/www/html
[root@oracle ~]# crontab -l
*/30 22 * * *  rsync -az --delete --password-file=/etc/server.password backuper@192.168.10.10::wwwroot /var/www/html

Três, rsync + inotify sincronização em tempo real

Contar apenas com o rsync combinado com tarefas agendadas periódicas tem grandes limitações e não pode ser atualizado em tempo real, então o inotify foi criado para resolver esse gargalo.

1.rsync sincronização em tempo real

  1. Insuficiência da sincronização regular
    ◆ O tempo para realizar o backup é fixo, o atraso é óbvio e o desempenho em tempo real é ruim
    ◆ Quando a fonte de sincronização não muda por um longo tempo, tarefas regulares intensas são desnecessárias
  2. Vantagens da sincronização em tempo real
    ◆ Assim que a fonte de sincronização mudar, inicie imediatamente o backup
    ◆ Desde que a fonte de sincronização não mude, nenhum backup será executado

2. Sobre o inotify

  • O mecanismo inotify do kernel do Linux
    ◆ Disponível a partir da versão 2.6.13
    ◆ Ele pode monitorar as mudanças do sistema de arquivos e fazer notificações
    ◆ Software auxiliar de resposta: ferramentas inotify

Insira a descrição da imagem aqui

3. Projeto experimental

Instalar ferramentas auxiliares do inotify-tools

inotifywait: para monitoramento contínuo, resultados de saída em tempo real
inotifywatch: para monitoramento de curto prazo, os resultados serão produzidos após a tarefa ser concluída

Dois servidores são necessários: servidor 1 (extremidade de origem rsync), servidor 2 (extremidade de inotify)

  1. Ajuste os parâmetros do kernel exigidos pelo inotify
  2. Instale o software inotify
  3. Modifique os parâmetros do arquivo de configuração no lado do servidor rsync 1 no experimento acima: somente leitura = não
  4. Ajuste as permissões do diretório compartilhado html entre os dois servidores para 777
  5. Use comandos integrados do inotify para testar
  6. Editar script de monitoramento em tempo real
  7. Verifique a disponibilidade do script

Rsync distribuído + inotify monitoramento em tempo real, sincronização em tempo real

[Servidor 2 (lado da notificação)]

1. Modifique os parâmetros do kernel

[root@oracle ~]# vi /etc/sysctl.conf 
fs.inotify.max_queued_events = 16384     
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
[root@oracle ~]# sysctl -p   ##生效
fs.inotify.max_queued_events = 16384    ##监控事件的队列大小
fs.inotify.max_user_instances = 1024     ##监控的最大实例数
fs.inotify.max_user_watches = 1048576   ##每个实例被监控的最大文件数

2. Instale o software inotify

[root@oracle ~]# ls    ##查看inotify软件包
 inotify-tools-3.14.tar.gz 
[root@oracle inotify-tools-3.14]# yum -y install gcc gcc-c++ make  ##安装环境
[root@oracle ~]# tar zxvf inotify-tools-3.14.tar.gz -C /opt/   ##解压软件包
[root@oracle ~]# cd /opt/inotify-tools-3.14/
[root@oracle inotify-tools-3.14]# ./configure   ##直接配置
[root@oracle inotify-tools-3.14]# make && make install   ##安装软件
[root@oracle ~]# inotifywait -mrq -e modify,create,move,delete /var/www/html  &  ##后台执行监控

3. Teste de monitoramento

[root@oracle ~]# cd /var/www/html   ##进入html目录创建文件
[root@oracle html]# touch test.txt     ##创建文件
[root@oracle ~]# 
/var/www/html/ CREATE test.txt   ##这里后台会有监控提示,创建了test.txt文件
[root@oracle html]# rm -rf test.txt    ## 删除test.txt文件
[root@oracle ~]# 
/var/www/html/ CREATE test.txt
/var/www/html/ DELETE test.txt    ##后台出现新的提示,删除了test.txt文件

4. Configure o script de monitoramento

[root@oracle opt]# vim /opt/inotify.sh  ##编写监控脚本
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,move,attrib,delete /var/www/html/"
RSYNC_CMD="rsync -az --delete --password-file=/etc/server.password /var/www/html/ [email protected]::wwwroot/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
  do
    if [ $(pgrep rsync | wc -l) -le 0 ]
    then
      $RSYNC_CMD
    fi
done

5. Ajuste as permissões do diretório compartilhado html para 777

[root@oracle opt]# chmod +x inotify.sh    ##给执行权限
[root@oracle opt]# chmod 777 /var/www/html/    ##给/var/www/html最高权限,可供读写
[root@oracle opt]# ll /var/www/
total 0
drwxrwxrwx. 2 root root 17 Oct 23 22:13 html

[Servidor 1 (fim de fonte rsync)]

### 1.修改/etc/rsyncd.conf中[wwwroot]共享模块配置
[root@oracle opt]# vi /etc/rsyncd.conf 
……省略部分
[wwwroot]
path = /var/www/html
comment = ww.bai.com
read only = no  ##将这里的yes改为no,需要能写
……省略部分

2. Ajuste as permissões do diretório compartilhado html para 777

[root@squid html]# chmod 777 /var/www/html    ##同样给与最高权限
[root@squid html]# ll /var/www/
drwxrwxrwx   2 root  root    17 Oct 23 19:16 html

3. Feche o processo rsync para ter efeito

[root@oracle ~]# netstat -anupt |grep 873
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      12109/rsync         
[root@oracle ~]# pkill -9 rsync     ##关闭进程,重启生效
[root@oracle ~]# netstat -anupt |grep rsync  ##进程关闭了
[root@oracle ~]# rsync --daemon    ##启动守护进程
 error:failed to create pid file /var/run/rsyncd.pid: File exists  ##会提示报错,pid文件存在
[root@oracle ~]# rm -rf /var/run/rsyncd.pid   ##删除pid文件即可
[root@oracle ~]# rsync --daemon  ##再次启动守护进程

verificação

1. Primeiro, insira arquivos diferentes no diretório compartilhado dos dois servidores, causando um fenômeno que não é sincronizado

[Servidor 1 (fim de fonte rsync)]

[root@oracle ~]# cd /var/www/html/
[root@oracle html]# touch test.txt
[root@oracle html]# ls
test.txt
[root@oracle html]# 

[Servidor 2 (lado da notificação)]

[root@squid ~]# cd /var/www/html/
[root@squid html]# touch abc.txt
[root@squid html]# ls
abc.txt
[root@squid html]# 

Os arquivos nos diretórios compartilhados dos dois servidores são inconsistentes

2. Execute o script para verificar

[Servidor 2 (lado da notificação)]

[root@squid opt]# ./inotify.sh &   ##后台运行脚本
[1] 10901
[root@squid opt]# cd /var/www/html/
[root@squid html]# touch 123.txt    ##在共享目录中添加新的文件
[root@squid html]# rsync: failed to set times on "/." (in wwwroot): Operation not permitted (1)
rsync: chgrp "/.123.txt.BUNMxZ" (in wwwroot) failed: Operation not permitted (1)
rsync: chgrp "/.abc.txt.cVZqbR" (in wwwroot) failed: Operation not permitted (1)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
rsync: failed to set times on "/." (in wwwroot): Operation not permitted (1)
rsync: chgrp "/.123.txt.wa4qcd" (in wwwroot) failed: Operation not permitted (1)
rsync: chgrp "/.abc.txt.33vNF5" (in wwwroot) failed: Operation not permitted (1)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
 ###注意,这里的failed提示并不是同步失败,而是因为rsync服务器那一端修改了read only = no的参数,rsync程序默认是yes,因此会提示失败,实际上并不影响

[Servidor 1 (fim de fonte rsync)]

[root@oracle html]# ls     ##原本的test.txt文件被删除,新增了inotify端的文件,完全一致状态
123.txt  abc.txt

Acho que você gosta

Origin blog.csdn.net/CN_LiTianpeng/article/details/109243868
Recomendado
Clasificación