Maison >développement back-end >tutoriel php >rsync inotify réalise la synchronisation de fichiers en temps réel entre les serveurs du système Linux

rsync inotify réalise la synchronisation de fichiers en temps réel entre les serveurs du système Linux

高洛峰
高洛峰original
2017-02-07 16:40:491523parcourir

J'ai préalablement réalisé un document technique sur "SSH Trust et SCP Automatic Transfer Script". Cette solution est utilisée comme méthode de sauvegarde dans l'entreprise, mais en fonctionnement réel, car le serveur principal transmet au serveur de sauvegarde, notre serveur principal Les fichiers que le serveur doit sauvegarder sont générés en temps réel et en continu. Par conséquent, nous ne savons pas combien de fichiers le serveur principal a transférés vers le serveur de sauvegarde. L'espace disque est si volumineux. pour effectuer une sauvegarde : l'une consiste à conserver les fichiers et l'autre à résoudre le problème du serveur principal. Le disque est plein, mais comme nous ne savons pas combien de fichiers le serveur de sauvegarde a reçu, nous n'osons pas les supprimer. les fichiers du serveur principal (si nous les supprimons sans sauvegarde, le problème sera grave. Il s'agit d'un projet gouvernemental, et les fichiers du serveur Les fichiers sont tous importants. Si vous supprimez le mauvais, vous partirez ~~ ~~(>_Ce qui suit est le document technique de sauvegarde que j'ai réalisé pour le fonctionnement et la maintenance de l'entreprise. Je le partage avec vous. J'espère qu'il sera utile à tout le monde.

Permettez-moi d'abord de vous présenter rsync et inotify, tous deux trouvés en ligne. Permettez-moi d'abord de déclarer que l'introduction suivante à rsync et inotify n'a pas été écrite par moi.

1. rsync

Par rapport aux méthodes de sauvegarde traditionnelles cp et tar, rsync présente les avantages d'une haute sécurité, d'une sauvegarde rapide et prend en charge la sauvegarde incrémentielle qui peut résoudre l'exigence de données modérées en temps réel. exigences de sauvegarde, telles que la sauvegarde régulière des données du serveur de fichiers sur des serveurs distants, la mise en miroir régulière des données des disques locaux, etc.
À mesure que l'échelle des systèmes d'application continue de croître, de meilleures exigences sont proposées en matière de sécurité et de fiabilité des données. Rsync a progressivement révélé de nombreuses lacunes dans les systèmes d'entreprise haut de gamme. Tout d'abord, lorsque rsync synchronise les données, il a besoin de tous les fichiers. sont scannés et comparés pour la transmission différentielle. Si le nombre de fichiers atteint des millions, voire des dizaines de millions, l'analyse de tous les fichiers prendra beaucoup de temps. Et ce qui change ne représente souvent qu’une très petite partie du changement, ce qui est très inefficace. Deuxièmement, rsync ne peut pas surveiller et synchroniser les données en temps réel. Bien qu'il puisse déclencher la synchronisation via le démon Linux, il doit y avoir un décalage horaire entre les deux actions de déclenchement, ce qui entraîne d'éventuelles incohérences dans les données du serveur et du client, rendant impossible l'exécution. récupération de données en cas de panne d'application. Sur la base des raisons ci-dessus, la combinaison rsync inotify est apparue !
2. inotify
Inotify est un mécanisme de surveillance des événements du système de fichiers asynchrone, puissant et précis. À partir de la version 2.6.13, le noyau Linux a ajouté la prise en charge d'Inotify, vous pouvez surveiller les fichiers ajoutés, la suppression, modification, mouvement et autres événements subtils, en utilisant cette interface du noyau, un logiciel tiers peut surveiller diverses modifications dans les fichiers sous le système de fichiers, et inotify-tools est un tel logiciel tiers.
Dans le chapitre ci-dessus, nous avons mentionné que rsync peut réaliser une synchronisation de fichiers déclenchée, mais si elle est déclenchée via le démon crontab, les données synchronisées seront différentes des données réelles, et inotify peut surveiller divers changements dans le système de fichiers. , lorsqu'il y a un changement dans le fichier, la synchronisation rsync est déclenchée, ce qui résout simplement le problème de la synchronisation des données en temps réel.

Commençons l'installation, la configuration et les tests de rsync et inotify.

Ce qui suit est la structure des deux serveurs, qui sont le nom d'hôte, l'adresse IP, l'état, le noyau, le nombre de bits, le répertoire synchronisé, et les deux serveurs sont la version Redhat5.4.

linux系统中rsync inotify实现服务器之间文件实时同步

1. Serveur principal (côté serveur, voici nginx)

Le serveur principal doit installer rsync et inotify, et le serveur principal sert de serveur principal. du serveur vers le client du serveur de sauvegarde transfère les fichiers

1. Installez rsync

[root@nginx ~]# cd /usr/src/
[root@nginx src]# ll
total 16
drwxr-xr-x 2 root root 4096 Jan 26 2010 debug
drwxr-xr-x 2 root root 4096 Jan 26 2010 kernels
[root@nginx src]# wget http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz
[root@nginx src]# tar zxvf rsync-3.0.9.tar.gz
[root@nginx src]# cd rsync-3.0.9
[root@nginx rsync-3.0.9]# ./configure --prefix=/usr/local/rsync
[root@nginx rsync-3.0.9]# make
[root@nginx rsync-3.0.9]# make install

2. Créez un fichier d'authentification par mot de passe

[root@nginx rsync-3.0.9]# cd /usr/local/rsync/ 
[root@nginx rsync]# echo "rsync-pwd" >/usr/local/rsync/rsync.passwd

où. rsync-pwd peut être utilisé seul. Définissez le mot de passe Vous pouvez également définir vous-même le nom rsync.passwd

[root@nginx rsync]# chmod 600 rsync.passwd

Que ce soit pour des raisons de sécurité ou pour éviter les erreurs suivantes, le fichier de mot de passe doit être fourni. 600 autorisations

password file must not be other-accessible 
continuing without password file

3. Installer inotify

[root@nginx rsync]# cd /usr/src/
[root@nginx src]# wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
[root@nginx src]# tar zxvf inotify-tools-3.14.tar.gz
[root@nginx src]# cd inotify-tools-3.14
[root@nginx inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify
[root@nginx inotify-tools-3.14]# make
[root@nginx inotify-tools-3.14]# make install

4. Créer un script de copie rsync

Cette fonction sert principalement à copier le contenu. du répertoire /tmp côté serveur. S'il est modifié (que ce soit l'ajout, la modification ou la suppression de fichiers), il peut être surveillé via inotify et synchronisé avec le /tmp du client en temps réel via rsync. .

#!/bin/bash
host=192.168.10.221
src=/tmp/    
des=web
user=webuser
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \
| while read files
do
/usr/bin/rsync -vzrtopg --delete --progress --password-file=/usr/local/rsync/rsync.passwd $src $user@$host::$des
echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
done

Remarque : après les invites au 1er étage, j'ai découvert que si vous mettez rsync.log dans tmp (répertoire de sauvegarde) ou envoyez des copies, je vous suggère de le faire. Les journaux rsync sont placés dans d'autres répertoires (pas dans des répertoires de sauvegarde).
Où host est l'IP du client, src est le répertoire à surveiller en temps réel côté serveur, des est le nom du module d'authentification, qui doit être cohérent avec le client, et user est l'authentifié. utilisateur dans le fichier de mots de passe.
Nommez ce script rsync.sh, placez-le dans le répertoire surveillé, par exemple, placez le mien sous /tmp et donnez-lui les autorisations 764

[root@nginx tmp]# chmod 764 rsync<.>

puis exécutez ce script

[root@nginx tmp]# sh /tmp/rsync.sh &

请记住,只有在备份服务器client端的rsync安装并启动rsync之后,在启动rsync.sh脚本,否则有时候会满屏出现:

rsync: failed to connect to 192.168.10.221: Connection refused (111)  
rsync error: error in socket IO (code 10) at clientserver.c(107) [sender=2.6.8] 

我们还可以把rsync.sh脚本加入到开机启动项里

[root@nginx tmp]# echo "/tmp/rsync.sh" >> /etc/rc.local 二、备份服务器(client,我这里为nginx-backup)

1、安装rsync(备份服务器只安装rsync)

[root@nginx-backup ~]# cd /usr/src/
[root@nginx-backup src]# ll
total 16
drwxr-xr-x 2 root root 4096 Jan 26 2010 debug
drwxr-xr-x 2 root root 4096 Jan 26 2010 kernels
[root@nginx-backup src]# wget http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz
[root@nginx-backup src]# tar zxvf rsync-3.0.9.tar.gz
[root@nginx-backup src]# cd rsync-3.0.9
[root@nginx-backup rsync-3.0.9]# ./configure --prefix=/usr/local/rsync
[root@nginx-backup rsync-3.0.9]# make
[root@nginx-backup rsync-3.0.9]# make install

  

2、建立用户与密码认证文件

[root@nginx-backup rsync-3.0.9]# echo "webuser:rsync-pwd" > /usr/local/rsync/rsync.passwd

请记住,在server端建立的密码文件,只有密码,没有用户名;而在备份服务端client里建立的密码文件,用户名与密码都有。

[root@nginx-backup rsync]# chmod 600 rsync.passwd 需要给密码文件600权限

3、建立rsync配置文件

uid = root
gid = root
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[web]
path = /tmp/
comment = web file
ignore errors
read only = no
write only = no
hosts allow = 192.168.10.220
hosts deny = *
list = false
uid = root
gid = root
auth users = webuser
secrets file = /usr/local/rsync/rsync.passwd

其中web是server服务端里的认证模块名称,需要与主服务器里的一致,以上的配置我的自己服务器里的配置,以供参考。

把配置文件命名为rsync.conf,放到/usr/local/rsync/目录里

启动rsync
[root@nginx-backup rsync]# /usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsync.conf

如果出现以下问题:

/usr/local/rsync/bin/rsync: error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory,

可以采用下面方法解决

[root@nginx-backup rsync]# whereis libiconv.so.2 
libiconv.so: /usr/local/lib/libiconv.so.2 /usr/local/lib/libiconv.so

找到所需模块所在的目录,然后把此目录添加到/etc/ld.so.conf里,并更新库文件

[root@nginx-backup rsync]# echo "/usr/local/lib/" >> /etc/ld.so.conf  
 [root@nginx-backup rsync]# ldconfig

我们可以把rsync脚本加入到开机启动项里

[root@nginx-backup rsync]# echo "/usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsync.conf" >> /etc/rc.local

现在rsync与inotify在server端安装完成,rsync在备份服务器client端也安装完成
下面是server端的tmp文件情况

rsync inotify réalise la synchronisation de fichiers en temps réel entre les serveurs du système Linux

下面是client端tmp的文件情况

rsync inotify réalise la synchronisation de fichiers en temps réel entre les serveurs du système Linux

接下来我们来做一下测试,在server里创建个test-rsync文件,看看client是否能收到

rsync inotify réalise la synchronisation de fichiers en temps réel entre les serveurs du système Linux

在看client端是否有test-rsync文件,同时client端的tmp目录文件是否与server端的文件完全一致

rsync inotify réalise la synchronisation de fichiers en temps réel entre les serveurs du système Linux

可以看到在client端,已经收到了test-rsync文件,而且client的tmp里的文件与server里tmp的文件完全相同、文件数目一致。

现在rsync与inotify的搭建与配置完成了,并实现了服务器直接数据的实时同步;大家可以根据自己的需要来进行相应的配置。

BTW:在rsync+inotify这种备份方法的时候,我公司遇到了一个问题,那就是主服务已经给备用服务同步完数据了,但主服务器磁盘看见满了,需要把已经备份的文件删除,但同时在备份服务器里保留主服务器里的文件,也就是说主服务器里删除文件的时候,备份服务器里不跟着删除文件,我查看了很多英文文档,测试了很多遍,最后找到了一个解决方法,那就是在主服务器里,把rsync.sh这个脚本里第9行的--delete参数给去掉,就可以解决这个问题。

更多rsync inotify réalise la synchronisation de fichiers en temps réel entre les serveurs du système Linux相关文章请关注PHP中文网!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn