実用的なRsyncバックアップツールと構成rsync + inotifyLinux環境でのリアルタイム同期

実用的なRsyncバックアップツールと構成rsync + inotifyLinux環境でのリアルタイム同期

著者:JackTian
マイクロチャネル公開番号:ITのJiege旅行(ID:Jake_Internet)

1. Rsyncとは何ですか?
Rsyncはオープンソースの高速バックアップツールです。LinuxおよびUNIXオペレーティングシステムにデフォルトでインストールされるコンポーネントの1つです。異なるホスト間でディレクトリ全体をミラーリングおよび同期でき、増分バックアップファイル転送をサポートし、リンクとアクセス許可を維持し、最適化されたものを使用します。同期アルゴリズム。、送信前に圧縮を実行します。リモートバックアップ、ミラーサーバー、その他のアプリケーションに適しています。

Rsyncの公式ウェブサイトアドレス:https//rsync.samba.org/

実用的なRsyncバックアップツールと構成rsync + inotifyLinux環境でのリアルタイム同期

2. rsyncソースサーバーの構成
リモート同期タスクでは、rsync同期操作の開始を担当するクライアントはイニシエーターと呼ばれ、クライアントからのrsync同期操作への応答を担当するサーバーは同期ソースと呼ばれます。

同期プロセス中、同期ソースはドキュメントの元の場所を提供する責任があり、イニシエーターはこの場所への読み取り権限を持っている必要があります。

実用的なRsyncバックアップツールと構成rsync + inotifyLinux環境でのリアルタイム同期

iptablesファイアウォールとselinuxをオフにします。

# service iptables stop
# setenforce 0

rsyncソースサーバーとrsyncクライアントの/ etc / hosts構成ファイルが同じになるように分析し、次のように構成します。


# tail -2 /etc/hosts
192.168.31.108  linuxserver.com
192.168.31.226  linuxclient.com

/etc/rsyncd.confファイルを構成します

# vi /etc/rsyncd.conf 

### This is rsyncd.conf 
### By 微信公众号:杰哥的IT之旅(ID:Jake_Internet)
uid = rsync                                      // 使用的用户
gid = rsync                                      // 使用的用户
use chroot = no                                  // 是否使用根目录锁   如果"use chroot"指定为true,那么 rsync 在传输文件以前首先 chroot 到 path 参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要以 roots 权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下 chroot 值为 true。
max connections = 2000                           // 指定该模块的最大并发连接数量以保护服务器,超过限制的连接请求将被告知随后再试,默认值是 0,也就是没有限制。
timeout = 600                                    // 通过该选项可以覆盖客户指定的IP超时时间。通过该选项可以确保rsync服务器不会永远等待一个崩溃的客户端。超时单位为秒钟,0表示没有超时定义,这也是默认值。对于匿名rsync服务器来说,一个理想的数字是600。
pid file = /var/run/rsyncd.pid                   // 存放进程 ID 的文件位置
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log                   // 日志文件位置
ignore errors
read only = false                                // 是否为只读
list = false
hosts allow = 192.168.31.0/24                    // 允许访问的客户端 IP 地址范围
hosts deny = 0.0.0.0/32                          // 拒绝访问的客户端 IP 地址范围
auth users = rsync_backup                        // 授权账户
secrets file = /etc/rsync.password               // 存放账户信息的数据文件
#################################
[backup]
path = /backup

rsyncサービスを開始します

このとき、rsyncサービスを開始すると、上記のようなエラーが表示されます。

# rsync --daemon
failed to create pid file /var/run/rsyncd.pid: File exists

解決策:/var/run/rsyncd.pidファイルを削除し、rsyncサービスを再起動します

# rm -rf /var/run/rsyncd.pid                     // 删除 rsyncd.pid 文件
# rsync --daemon                                 // 再重新启动 Rsync 服务

/etc/rsync.passwordファイルを作成します

# echo “rsync_backup:123456”  >/etc/rsync.password 

/etc/rsync.passwordファイルが成功したかどうかを確認し、ファイルのアクセス許可を調整します。

cat /etc/rsync.password

rsync_backup:123.com

chmod 600 /etc/rsync.password

リスニングサービスポート。

# pgrep rsync
5081
5125
# netstat -lntup|grep rsync
tcp        0      0 192.168.31.108:873          0.0.0.0:*                   LISTEN      5081/rsync          
tcp        0      0 :::873                      :::*                        LISTEN      5125/rsync    

rsyncに適切な実際のユーザーを作成する

# useradd -s /sbin/nologin -M rsync
# id rsync
uid=500(rsync) gid=500(rsync) 组=500(rsync)

rsyncプッシュに必要なディレクトリを作成する

# mkdir /backup
# chown -R rsync.rsync /backup/

3.Rsyncバックアップツールを
使用したrsyncコマンドの基本的な使用法

ほとんどのバックアッププログラムでは、元の場所とターゲットの場所を指定する必要があります。rsyncコマンドは実際にはcpコマンドに似ています。

例:ファイル/ etc / fstabとディレクトリ/ boot / grubを/ optディレクトリに同期的にバックアップします。

-r:オプションはディレクトリ全体を再帰することを意味し、-l:オプションはリンクされたファイルをバックアップすることを意味します。

# rsync /etc/fstab /opt
# rsync -rl /etc/fstab /boot/grub /opt

rsyncコマンド形式

基本フォーマット:rsync [オプション]元の場所ターゲットの場所

rsyncコマンドの一般的なバックアップオプション

-r:ディレクトリおよびサブディレクトリ内のすべてのファイルを含む再帰モード。

-l:シンボリックリンクファイルをシンボリックリンクファイルとしてコピーします。

-v:同期プロセスに関する詳細情報を表示します。

-a:アーカイブモード、ファイルのアクセス許可、属性、その他の情報を保持します。組み合わせオプションは-rlptgoDと同じです。

-z:ファイル転送時に圧縮します。

-p:ファイルの許可マークを保持します。

-t:ファイルのタイムスタンプを保持します。

-g:ファイルのグループマークを保持します。(スーパーユーザーのみ)

-o:ファイルの所有者マークを保持します。(スーパーユーザーのみ)

-H:ハードリンクされたファイルを保持します。

-A:ACL属性情報を保持します。

-D:デバイスファイルおよびその他の特別なファイルを保持します。

--delete:元の場所ではなく、ターゲットの場所にあるファイルを削除します。

--checksum:チェックサムに基づいてファイルをスキップするかどうかを決定します(ファイルサイズ、変更時間ではありません)。

構成ソースの表現

リモート同期タスクを実行する場合、rsyncコマンドは同期ソースサーバー内のリソースの場所を指定する必要があります。

2つの表現方法

  • Username @ Host Address ::共有モジュール名(2つのコロンで区切られます)

  • rsync:// username @ host address / shared module name(URLアドレス形式)

実際のユーザーを使用してrsyncサービスをテストする

sshポートを変更する場合は、ポートを追加する必要があります。

コマンド形式:rsync -parameter file -e'ssh -p port number 'username @ip:directory path


# rsync -avz abc '-e ssh -p 22' [email protected]:/tmp     // 实操命令格式
[email protected]'s password:                              //输入 linuxserver 设备的 root 密码
sending incremental file list
abc

sent 64 bytes  received 31 bytes  27.14 bytes/sec
total size is 0  speedup is 0.00
# ll /tmp                                                    // 查看同步结果
总用量 52
-rw-r--r--. 1 root root    0 12月 30 07:25 abc

通常、実際の実稼働環境でのバックアップ作業は繰り返し行われるため、スケジュールされたタスクを設定してバックアップ操作を完了することができます。例:毎朝04:00にサーバーのtmp共有モジュールを同期し、ローカルの/ mnt / jacktianディレクトリにダウンロードして、crondサービスを介して完了します。

この同期プロセスでは、パスワードを入力したくないので、rsync_backupユーザーのパスワードを保存するためのパスワードファイルを作成する必要があります。

# cat /etc/rsync.password 
rsync_backup:123.com
# chmod 600 /etc/rsync.password 
# ll /etc/rsync.password 
-rw-------. 1 root root 21 12月 30 08:04 /etc/rsync.password

オプション--password-file = / etc / rsync.passwordを使用して、rsync同期を実行するときに指定します。

# crontab -e
00 04 * * * /usr/bin/rsync -az --delete --password-file=/etc/rsync.password@[email protected]::tmp /mnt/jacktian
# service crond restart
# chkconfig crond on

4. rsync + inotifyリアルタイム同期を構成します

実用的なRsyncバックアップツールと構成rsync + inotifyLinux環境でのリアルタイム同期
Linuxは、カーネルバージョン2.6.13以降、ファイルアクセス、削除、移動、変更など、ファイルシステムのさまざまな変更を監視するためのinotify通知インターフェイスを提供しています。このメカニズムを使用すると、ファイル変更の警告、増分バックアップ、およびディレクトリまたはファイルの変更に対するタイムリーな応答を実現できます。

rsync + inotifyはトリガーされたバックアップを実現できます。ドキュメントの元の場所が変更されている限り、増分バックアップはすぐに開始されます。それ以外の場合は、サイレント待機状態になり、バックアップ時のサイクルの遅延と過密度が回避されます。一定のサイクルでアップします。

Inotifyは主にローカル監視に使用され、トリガーされたバックアップアプリケーションでのアップリンク同期に適しています。

inotifyメカニズムは3つの制御パラメーターを提供します

max_queued_events:監視イベントキューを示します

max_user_instances:監視対象インスタンスの最大数

max_user_watches:インスタンスごとの監視対象ファイルの最大数

# cat /proc/sys/fs/inotify/max_queued_events
16384
# cat /proc/sys/fs/inotify/max_user_instances 
128
# cat /proc/sys/fs/inotify/max_user_watches 
8192

inotifyカーネルパラメーターを調整します

監視対象のディレクトリに多数のファイルがある場合や頻繁に変更される場合は、これら3つのパラメータの値を増やすことをお勧めします。

# vi /etc/sysctl.conf 
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024              
fs.inotify.max_user_watches = 1048576
# sysctl -p

inotify-toolsをインストールする

inotify-toolsのインストールは、主にinotifywait、inotifywatch、および変更を監視および要約するための他のツールを提供します。


# tar zxf inotify-tools-3.14.tar.gz 
# cd inotify-tools-3.14
# ./configure && make && make install

監視Webサイトディレクトリ/ var / www / htmlを例にとると、inotifywaitコマンドを実行した後、別の端末の/ var / www / htmlディレクトリの内容を変更します。

-e:監視するイベントを指定します

-m:継続的な監視を示します

-r:ディレクトリ全体を再帰的に表します

-q:簡略化された出力情報


# mkdir /var/www/html -p
# inotifywait -mrq -e modify,create,move,delete /var/www/html/

別の端末:/ var / www / html /ディレクトリにファイルを追加し、ファイルを移動し、画面の出力結果を追跡します。


# mkdir /var/www/html/a
# mkdir /var/www/html/b
# mv /var/www/html/b /var/www/html/bb
# rm -rf /var/www/html/a

inotifywaitは、modify(modify)、create(create)、move(move)、delete(delete)、attrib(attribute change)などのさまざまなイベントを監視し、変更があった場合はすぐに結果を出力できます。実行後にシステム変更を収集し、要約変更を出力するために使用できます。

# inotifywait -mrq -e modify,create,move,delete /var/www/html/
fy,create,move,delete /var/www/html/
/var/www/html/ CREATE,ISDIR a
/var/www/html/ CREATE,ISDIR b
/var/www/html/ MOVED_FROM,ISDIR b
/var/www/html/ MOVED_TO,ISDIR bb
/var/www/html/ DELETE,ISDIR a

トリガーされた同期スクリプトを作成する

inotifywaitが出力するモニタリング結果では、レコードの各行にディレクトリ、イベント、ファイルが含まれており、変更を識別できます。変更が検出される限り、rsyncアップリンク同期操作が実行されます。

注:更新が頻繁に行われる場合は、rsyncバックアップの同時実行を避けてください.rsyncプロセスがすでに存在する場合は、この同期を無視するか、rsyncプロセスの数に応じて同期するかどうかを決定してください

このスクリプトは、ローカルの/ var / www / htmlディレクトリの変更をテストするために使用されます。更新されると、rsync同期操作がトリガーされ、サーバー192.168.31.108の/ var / www / htmlディレクトリにアップロードされます。

トリガーされたアップリンク同期検証プロセス


1.rsyncツールを使用してアップリンク同期を実行します。2。マシンでbak_transfer.shスクリプトを実行します。3。マシン
の/ var / www / htmlディレクトリで作成、削除、変更、およびその他の操作を行います
。4。表示します。 / var / www / htmlディレクトリ内のサーバーの変更。

# vi bak_transfer.sh   
# This is bak_transfer.sh
# 微信公众号:杰哥的IT之旅(ID:Jake_Internet)
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,move,attrib,delete /var/www/html/"
RSYNC_CMD="rsync -azH --delete /var/www/html/ [email protected]:/var/www/html"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
        if [ $(pgrep rsync | wc -l) -le 0 ]
        then
                $RSYNC_CMD
        fi
done

# chmod +x bak_transfer.sh
# ./bak_transfer.sh
# echo "/bin/bash /root/bak_transfer.sh" >> /etc/rc.local 

Rsync起動例外ソリューションの概要
エラー:pidファイル/var/run/rsyncd.pidの作成に失敗しました:ファイルが存在します
ソリューション:rm /var/run/rsyncd.pid
サービス開始:rsync --daemon --config = / etc / rsyncd。 conf

エラー:rsync:IPアドレスへの接続に失敗しました:接続が拒否されました(111)
rsyncエラー:clientserver.c(124)のソケットIO(コード10)でエラーが発生しました[receiver = 3.0.5]
解決策:サービスを開始します:rsync-デーモン--config = / etc / rsyncd.conf

エラー:rsync:IPアドレスへの接続に失敗しました:接続がタイムアウトしました(110)
rsyncエラー:clientserver.c(124)のソケットIO(コード10)でエラーが発生しました[receiver = 3.0.5]
解決策:次の原因が考えられます。 iptablesファイアウォールがオンになっている通信できません。ポート873を許可するか、ファイアウォールを直接閉じるルールを設定できます。

エラー:@ERROR:chrootが失敗しました
rsync:接続が予期せず閉じられました(これまでに75バイトが読み取られました)
rsyncエラー:io.c(150)でのrsyncプロトコルデータストリーム(コード12)のエラー
解決策:rsync.confで設定されたパスが存在します。新しいディレクトリを作成する必要があります。

おすすめ

転載: blog.51cto.com/15067236/2605030