Présentation de rsync
Présentation de rsync
rsync (Remote Sync, synchronisation à distance) est un outil de sauvegarde rapide open source, qui peut mettre en miroir et synchroniser l'intégralité de l'arborescence de répertoires entre différents hôtes, prend en charge la sauvegarde incrémentielle et maintient les liens et les autorisations, et utilise un algorithme de synchronisation optimisé pour effectuer la compression avant transmission , il est donc très approprié pour la sauvegarde à distance, le serveur miroir et d'autres applications.
L'URL du site Web officiel de rsync est rsync.samba.org/ , et la dernière version est 3.1.3, qui est maintenue par Wayne Davison. En tant que l'un des outils de sauvegarde de fichiers les plus couramment utilisés, rsync est souvent l'un des composants de base installés par défaut sur les systèmes Linux et UNIX.
fonctionnalités de synchronisation
Prend en charge la copie de fichiers spéciaux, tels que les fichiers de connexion, les périphériques, etc.
Il peut avoir la fonction d'exclure la synchronisation de fichiers ou de répertoires spécifiés, ce qui équivaut à la fonction d'exclusion de la commande de packaging tar.
Cela peut être fait pour conserver inchangés les autorisations, l'heure, les liens symboliques et physiques, le propriétaire, le groupe et d'autres attributs du fichier ou du répertoire d'origine - p.
Une synchronisation incrémentielle peut être réalisée, c'est-à-dire que seules les données modifiées sont synchronisées, de sorte que l'efficacité de transmission des données est très élevée (tar-N).
Vous pouvez utiliser rcp, rsh, ssh, etc. pour transférer des fichiers (rsync lui-même ne crypte pas les données).
Les fichiers et les données (serveur et client) peuvent être transférés via socket (mode processus).
Il prend en charge la transmission en mode processus d'authentification en direct anonyme (aucun utilisateur système requis), ce qui peut réaliser une sauvegarde et une mise en miroir pratiques et sûres des données.
serveur source de synchronisation rsync
Dans une tâche de synchronisation à distance, le client chargé de lancer l'opération de synchronisation rsync est appelé l'initiateur, et le serveur chargé de répondre à l'opération de synchronisation rsync depuis le client est appelé la source de synchronisation.
-
Dans la synchronisation de liaison descendante (téléchargement), la source de synchronisation est chargée de fournir l'emplacement d'origine du document, et l'initiateur doit avoir un accès en lecture à l'emplacement.
-
Dans une synchronisation en amont (téléchargement), la source de synchronisation est chargée de fournir l'emplacement cible du document, et l'initiateur doit avoir un accès en écriture à cet emplacement
Configurer la synchronisation de liaison descendante rsync (synchronisation temporelle)
Serveur source : 192.168.137.10
Client (initiateur) : 192.168.137.20
Configurer le serveur source
systemctl stop firewalld
setenforce 0
rpm -q rsync #一般系统已默认安装rsync
#建立/etc/rsyncd.conf配置文件
vim /etc/rsyncd.conf #添加以下配置项
uid = root
gid = root
use chroot = yes #禁锢在源目录
address = 192.168.137.10 #监听地址
port = 873 #监听端口tcp/udp 873,可通过cat /etc/services | grep rsync查看
log file = /var/1og/rsyncd.1og #日志文件位置
pid file = /var run/rsyncd.pid #存放进程ID的文件位置
hosts allow = 192.168.137.0/24 #允许访问的客户机地址。多个地址以空格分隔
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z #同步时不再压缩的文件类型
[wwwroot] #共享模块名称
path = /var/www/html #源目录的实际路径
comment = Document Root of www.cxk.com #备注
read only = yes #是否为只读。yes表示客户端只能读取目录内容,不能写入。只允许下行,不允许上行。
auth users = backuper #授权账户,多个账号以空格分隔。授权用户,允许读取的用户名。
secrets file = /etc/rsyncd_users.db
#存放授权账户信息的数据文件
#如采用匿名的方式,只要将其中的“auth users"和“secrets file"配置项去掉即可。
#为备份账户创建数据文件。
vim /etc/rsyncd_users.db
backuper:abc123 #无须建立同名系统用户。backuper为用户名,abc123为密码。
chmod 600 /etc/rsyncd_users.db
#保证所有用户对源目录/var/www/html都有读取权限
chmod +r /var/ www/ html/
ls -ld /var/www/html/
#启动rsync服务程序
rsync --daemon #启动rsync 服务,以独立监听服务的方式(守护进程)运行
netstat -anpt | grep rsync
#关闭rsync 服务
kill $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid
Configuration de l'initiateur
Format de base :
rsync [选项] 原始位置 目标位置
Options communes :
choix | Fonction |
---|---|
-r | Mode récursif, incluant tous les fichiers du répertoire et des sous-répertoires. |
-l | Les fichiers avec des liens symboliques sont toujours copiés en tant que fichiers de liens symboliques. |
-v | Afficher des informations détaillées sur le processus de synchronisation. |
-z | Compresser lors du transfert de fichiers. |
-un | Mode d'archivage, conservant les autorisations de fichiers, les attributs et d'autres informations, ce qui équivaut à l'option combinée "-rlptgop". |
-p | Les indicateurs d'autorisation pour les fichiers sont conservés. |
-t | Les horodatages des fichiers sont conservés. |
-g | Préserve les drapeaux de groupe du fichier (uniquement pour les super-utilisateurs). |
-o | Conserver la propriété du fichier (uniquement pour les super-utilisateurs). |
-H | Conservez les fichiers liés en dur. |
-UN | Conserve les informations d'attribut ACL. |
-D | Conservez les fichiers de l'appareil et les autres fichiers spéciaux. |
--supprimer | Supprimez les fichiers qui existent à l'emplacement cible mais pas à l'emplacement d'origine. |
--somme de contrôle | Ignorer les fichiers en fonction de la somme de contrôle (et non de la taille du fichier, de l'heure de modification). |
Configuration:
#将指定的资源下载到本地/opt目录下进行备份。密码abc123
格式一: #用户名@主机地址::共享模块名
rsync -avz [email protected]::wwwroot /opt/ #wwwroot为共享模块名,密码abc123
#backuper指的是我在同步的时候用的哪个用户身份
#wwwroot代表的是模块,模块下面会写同步的默认路径和一些特性,所以我们只需要写模块就好了
#/opt/指的是同步到本地的目录
格式二: #rsync:/用户名@主机地址/共享模块名
rsync -avz rsync://[email protected]/wwwroot /opt/
#免交互格式配置:
echo "abc123" > /etc/server.pass
chmod 600 /etc/server.pass #密码文件权限必须为600,即除了属主,其他人都没有查看权限。
rsync -avz --password-file=/etc/server.pass [email protected]::wwwroot /opt/ #免密同步
#定时同步
crontab -e
30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt/
#为了在同步过程中不用输入密码,需要创建一个密码文件,保存backuper用户的密码,如/etc/server.pass。 在执行rsync 同步时使用选项"--password-file=/etc/server.pass"指定即可。
systemctl restart crond
systemctl enable crond
synchronisation en temps réel rsync (synchronisation de liaison montante)
Synchronisation régulière insuffisante
- Le temps d'exécution de la sauvegarde est fixe, le retard est évident et les performances en temps réel sont médiocres
- Les tâches périodiques intensives sont inutiles lorsque la source de synchronisation ne change pas pendant une longue période
Le mécanisme inotify du noyau Linux
- Disponible depuis la version 2.6.13
- Peut surveiller les changements dans le système de fichiers et répondre aux notifications
- Logiciel auxiliaire : inotify-tools
Configuration de l'initiateur rsync+Inotify
-
L'interface de notification inotify peut être utilisée pour surveiller divers changements dans le système de fichiers, tels que l'accès aux fichiers, la suppression, le mouvement, la modification, etc. En utilisant ce mécanisme, il est très pratique de réaliser des alarmes de changement de fichier, des sauvegardes incrémentielles et de répondre aux changements de répertoires ou de fichiers en temps opportun.
-
La combinaison du mécanisme inotify avec l'outil rsync peut réaliser une sauvegarde déclenchée (synchronisation en temps réel), c'est-à-dire que tant que le document dans l'emplacement d'origine change, l'opération de sauvegarde incrémentielle sera lancée immédiatement ; sinon, ce sera en mode silencieux état d'attente.
-
Étant donné que le mécanisme de notification inotify est fourni par le noyau Linux, il est principalement utilisé pour la surveillance locale et convient mieux à la synchronisation en amont lorsqu'il est appliqué dans une sauvegarde déclenchée.
Modifier le fichier de configuration du serveur source rsync
vim /etc/ rsyncd. conf
read only = no #关闭只读,上行同步需要可以写
#之后重启
kill $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid
rsync --daemon
netstat -anpt | grep rsync
#创建一个同步目录,并修改权限
mkdir /data
chmod 777 /data
Initiateur, ajustez les paramètres du noyau inotify
Dans le noyau Linux, le mécanisme inotify par défaut fournit trois paramètres de contrôle :
- max_queue_events (surveiller la file d'attente des événements, la valeur par défaut est 16384),
- max_user_instances (le nombre maximum d'instances de surveillance, la valeur par défaut est 128),
- max_user_watches (le nombre maximum de fichiers surveillés par instance, la valeur par défaut est 8192).
Lorsque le nombre de répertoires et de fichiers à surveiller est important ou change fréquemment, il est recommandé d'augmenter la valeur de ces trois paramètres.
cat /proc/sys/fs/inotify/max_queued_events
cat /proc/sys/fs/inotify/max_user_instances
cat /proc/sys/fs/inotify/max_user_watches
vim /etc/sysctl.conf #内核参数都在该文件中修改
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
sysctl -p
Initiateur, installez inotify-tools
Pour utiliser le mécanisme inotify, vous devez installer inotify-tools afin de fournir les programmes d'outils auxiliaires inotifywait et inotifywatch pour surveiller et résumer les modifications.
-
inotifywait : Il peut surveiller divers événements tels que modifier (modifier), créer (créer), déplacer (déplacer), supprimer (supprimer), attrib (attrib (changement d'attribut), etc., et afficher le résultat immédiatement en cas de changement .
-
inotifywatch : il peut être utilisé pour collecter les modifications du système de fichiers et afficher les modifications récapitulatives une fois l'opération terminée.
tar zxvf inotify-tools-3.14.tar.gz -C /opt/
cd /opt/inotify-tools-3.14
./configure
make && make install
#可以先执行“inotifywait”命令,然后另外再开启一个新终端向 /data 目录下添加文件、移动文件,在原来的终端中跟踪屏幕输出结果。
inotifywait -mrq -e modify,create,move,delete /data
#选项“-e”:用来指定要监控哪些事件
#选项“-m”:表示持续监控
#选项“-r”:表示递归整个目录
#选项“-q”:简化输出信息
Initiateur, écriture du script de synchronisation du déclencheur
Écrivez un script de synchronisation de déclencheur dans un autre terminal (notez que le nom du script ne peut pas contenir la chaîne rsync, sinon le script pourrait ne pas prendre effet)
vim /opt/inotify.sh
#!/bin/bash
#定义inotifywait监控/data目录中文件事件的变量。attrib表示属性变化。
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /data"
#定义执行 rysnc 上行同步的变量。--delete保证两边目录内容一致,可以不加。
RSYNC_CMD="rsynC -azH --delete --password-file=/etc/server .pass /data [email protected]::backupdir/"
#使用while、read持续获取监控结果,根据结果可以作进一步判断是否读取到输出的监控记录
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
#如果rsync未在执行,则立即启动
if[ $(pgrep rsync | wc -l) -le 0 ];then
$RSYNC_CMD
fi
done
chmod +8 /opt/inotify.sh
chmod +x /etc/rc.d/rc.local #开机自启脚本文件
echo '/opt/inotify.sh' >> /etc/rc.d/rc.local #加入开机自动执行
#之后运行脚本(后台运行)
cd /opt/
./inotify.sh &
#之后在发起端创建文件,查看源服务器中是否新增了
Si le fichier à synchroniser est relativement volumineux et que la synchronisation est relativement lente, ce qui entraîne l'échec des fichiers et de la synchronisation suivants, vous devez ajouter une file d'attente de messages ou un tampon dans le script.
#!/bin/bash
#定义inotifywait监控目录中文件事件的变量
INOTIEY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /data/"
#定义执行rsync上行同步的变量
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /data/ [email protected]::backupdir/"
#使用while、read持续获取监控结果,根据结果可以进一步判断是否读取到输出的监控记录
$INOTIEY_CMD | while read DIRECTORY EVENT FILE
do
#小于等于0,则等待它执行完再去同步其他文件
until [ $(pgrep rsync | wc -l) -le 0 ]
do
sleep 1
done
$RSYNC_CMD
done
Vérifier l'effet de synchronisation
Le script ci-dessus est utilisé pour détecter les changements dans le répertoire /data de la machine. Une fois qu'il y a une mise à jour, l'opération de synchronisation rsync sera déclenchée et la sauvegarde sera téléchargée dans le répertoire partagé wwwroot du serveur 192.168.137.10.
Le processus de vérification de la synchronisation de liaison montante déclenchée est le suivant :
(1) Exécutez le programme de script /opt/inotify.sh localement.
(2) Basculez vers le répertoire /data/ de la machine locale et effectuez des opérations telles que l'ajout, la suppression et la modification de fichiers.
(3) Afficher les modifications dans le répertoire wwwroot du serveur distant
Supprimez rapidement un grand nombre de fichiers avec rsync
Si vous souhaitez supprimer un grand nombre de fichiers sous linux, comme 1 million, 10 millions, comme le cache nginx de /usr/local/nginx/proxy_temp, etc., alors rm -rf * peut ne pas être facile à utiliser, car c'est long à attendre.
Dans ce cas, nous pouvons utiliser rsync pour le gérer proprement.
rsync utilise en fait le principe de remplacement.
#先建立一个空的文件夹:
mkdir /home/blank
#用rsync删除目标目录:
rsync --delete-before -a -H -v --progress --stats /home/blank/ /usr/local/nginx/proxy_temp
#这样目标目录很快就被清空了
Descriptif des options :
choix | effet |
---|---|
--delete-avant | Le récepteur effectue une opération de suppression dans la transmission |
-un | Mode archive, ce qui signifie transférer des fichiers de manière récursive et conserver tous les attributs de fichier |
-H | Fichiers qui restent liés en dur |
-v | mode de sortie détaillé |
--progrès | Afficher la progression du transfert pendant le transfert |
--Statistiques | Donne le statut de transfert de certains fichiers |