Heim  >  Artikel  >  Backend-Entwicklung  >  rsync+inotify realisiert Echtzeit-Dateisynchronisierung zwischen Servern im Linux-System

rsync+inotify realisiert Echtzeit-Dateisynchronisierung zwischen Servern im Linux-System

高洛峰
高洛峰Original
2017-02-07 16:40:491446Durchsuche

Ich habe zuvor ein technisches Dokument zum Thema „SSH Trust und SCP Automatic Transfer Script“ erstellt. Diese Lösung wird im Unternehmen als Backup-Methode verwendet, aber im tatsächlichen Betrieb, da der Hauptserver die Übertragung an den Backup-Server durchführt Hauptserver Die Dateien, die der Server sichern muss, werden in Echtzeit generiert. Daher wissen wir nicht, wie viele Dateien der Hauptserver auf den Sicherungsserver übertragen hat. Die Gründe dafür sind Für die Sicherung gilt: Eines dient dazu, die Dateien zu behalten, und die andere besteht darin, das Problem des Hauptservers zu lösen. Die Festplatte ist voll, aber da wir nicht wissen, wie viele Dateien der Sicherungsserver empfangen hat, wagen wir es nicht, sie zu löschen die Dateien auf dem Hauptserver (wenn wir sie ohne Sicherung löschen, wird das Problem schwerwiegend. Dies ist ein Regierungsprojekt und die Dateien auf dem Server. Die Dateien sind alle wichtig. Wenn Sie die falsche löschen, verlassen Sie ~~ ~~(>_Das Folgende ist das technische Backup-Dokument, das ich für den Betrieb und die Wartung des Unternehmens erstellt habe. Ich hoffe, es wird für alle hilfreich sein.

Lassen Sie mich zunächst rsync und inotify vorstellen, die beide online gefunden wurden. Lassen Sie mich zunächst erklären, dass die folgende Einführung in rsync und inotify nicht von mir geschrieben wurde.

1. rsync

Im Vergleich zu herkömmlichen cp- und tar-Sicherungsmethoden bietet rsync die Vorteile einer hohen Sicherheit und einer schnellen Sicherung und unterstützt inkrementelle Sicherungen. Rsync kann die Echtzeitanforderungen erfüllen Sicherungsanforderungen, wie regelmäßige Sicherung von Dateiserverdaten auf Remote-Servern, regelmäßige Datenspiegelung lokaler Festplatten usw.
Da der Umfang der Anwendungssysteme weiter zunimmt, werden immer höhere Anforderungen an die Datensicherheit und Zuverlässigkeit gestellt. Rsync hat nach und nach viele Mängel in High-End-Geschäftssystemen aufgedeckt. Erstens benötigt Rsync alle Dateien werden gescannt und für die differenzielle Übertragung verglichen. Wenn die Anzahl der Dateien Millionen oder sogar mehrere zehn Millionen erreicht, ist das Scannen aller Dateien sehr zeitaufwändig. Und was sich ändert, ist oft nur ein sehr kleiner Teil davon, was eine sehr ineffiziente Methode ist. Zweitens kann rsync die Daten nicht in Echtzeit überwachen und synchronisieren. Obwohl es die Synchronisierung über den Linux-Daemon auslösen kann, muss zwischen den beiden auslösenden Aktionen ein Zeitunterschied bestehen, was zu möglichen Inkonsistenzen in den Server- und Clientdaten führt und den Abschluss unmöglich macht Datenwiederherstellung im Falle eines Anwendungsausfalls. Aus den oben genannten Gründen erschien die Kombination aus rsync + inotify!
2. inotify
Inotify ist ein leistungsstarker, feinkörniger, asynchroner Mechanismus zur Überwachung von Dateisystemereignissen. Ab 2.6.13 bietet der Linux-Kernel Unterstützung für hinzugefügte, gelöschte und gelöschte Dateien. Modifikation, Bewegung und andere subtile Ereignisse: Mithilfe dieser Kernel-Schnittstelle kann Software von Drittanbietern verschiedene Änderungen in Dateien im Dateisystem überwachen, und inotify-tools ist eine solche Software von Drittanbietern.
Im obigen Kapitel haben wir erwähnt, dass rsync eine ausgelöste Dateisynchronisierung erreichen kann. Wenn dies jedoch über den Crontab-Daemon ausgelöst wird, unterscheiden sich die synchronisierten Daten von den tatsächlichen Daten, und inotify kann verschiedene Änderungen im Dateisystem überwachen. Wenn sich eine Datei ändert, wird die Rsync-Synchronisierung ausgelöst, wodurch lediglich das Problem der Echtzeitsynchronisierung von Daten gelöst wird.

Beginnen wir mit der Installation, Konfiguration und dem Testen von rsync und inotify.

Das Folgende ist die Struktur der beiden Server: Hostname, IP, Status, Kernel, Anzahl der Bits, Synchronisationsverzeichnis, und beide Server sind Redhat5.4-Release-Version.

rsync+inotify realisiert Echtzeit-Dateisynchronisierung zwischen Servern im Linux-System

1. Hauptserver (serverseitig, hier ist Nginx)

Der Hauptserver muss rsync und inotify installieren und der Hauptserver dient als Server an den Backup-Server-Client überträgt Dateien

1. Installieren Sie 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. Erstellen Sie eine Passwort-Authentifizierungsdatei

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

wo rsync-pwd kann alleine verwendet werden. Legen Sie das Passwort fest. Sie können den Namen rsync.passwd auch selbst festlegen.

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

Sei es aus Sicherheitsgründen oder um die folgenden Fehler zu vermeiden, muss die Passwortdatei angegeben werden 600 Berechtigungen

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

3. Inotify installieren

[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. Rsync-Kopierskript erstellen

Diese Funktion dient hauptsächlich dem Kopieren des Inhalts Wenn es auf der Serverseite geändert wird (ob Dateien hinzugefügt, geändert oder gelöscht werden), kann es über inotify überwacht und über rsync in Echtzeit mit dem Verzeichnis /tmp synchronisiert werden .

#!/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

Hinweis: Nach den Aufforderungen im ersten Stock habe ich festgestellt, dass ich Ihnen empfehle, dies zu tun, wenn Sie rsync.log in tmp (Sicherungsverzeichnis) ablegen oder Kopien senden. Die rsync-Protokolle werden in anderen Verzeichnissen abgelegt (nicht in Sicherungsverzeichnissen).
Wobei host die IP des Clients ist, src das Verzeichnis ist, das in Echtzeit auf der Serverseite überwacht werden soll, des der Name des Authentifizierungsmoduls ist, der mit dem Client übereinstimmen muss, und user der authentifizierte Benutzer im Passwort ist Datei.
Nennen Sie dieses Skript rsync.sh, legen Sie es im überwachten Verzeichnis ab, zum Beispiel würde ich es unter /tmp ablegen, und geben Sie ihm 764-Berechtigungen

[root@nginx tmp]# chmod 764 rsync. sh

und dann dieses Skript ausführen

[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 realisiert Echtzeit-Dateisynchronisierung zwischen Servern im Linux-System

下面是client端tmp的文件情况

rsync+inotify realisiert Echtzeit-Dateisynchronisierung zwischen Servern im Linux-System

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

rsync+inotify realisiert Echtzeit-Dateisynchronisierung zwischen Servern im Linux-System

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

rsync+inotify realisiert Echtzeit-Dateisynchronisierung zwischen Servern im Linux-System

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

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

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

更多rsync+inotify realisiert Echtzeit-Dateisynchronisierung zwischen Servern im Linux-System相关文章请关注PHP中文网!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn