73日目 rsyncリモート同期

rsync の概要

rsync の概要

rsync (Remote Sync、リモート同期) は、オープンソースの高速バックアップ ツールです。これは、異なるホスト間でディレクトリ ツリー全体をミラーリングおよび同期でき、増分バックアップをサポートし、リンクと権限を維持し、最適化された同期アルゴリズムを使用して送信前に圧縮を実行します。 、そのため、リモートバックアップ、ミラーサーバー、その他のアプリケーションに非常に適しています。

rsync の公式 Web サイトの URL はrsync.samba.org/で、最新バージョンは 3.1.3 で、Wayne Davison によって管理されています。最も一般的に使用されるファイル バックアップ ツールの 1 つである rsync は、多くの場合、Linux および UNIX システムにデフォルトでインストールされる基本コンポーネントの 1 つです。

rsync機能

接続ファイル、デバイスなどの特殊なファイルのコピーをサポートします。

パッケージングコマンド tar の除外機能と同等の、指定したファイルまたはディレクトリの同期を除外する機能を持たせることができます。

元のファイルまたはディレクトリの権限、時間、ソフト リンクとハード リンク、所有者、グループ、およびその他の属性を変更しないようにすることができます。

インクリメンタル同期、つまり変更されたデータのみを同期することが実現できるため、データ伝送効率が非常に高くなります(tar-N)。

rcp、rsh、ssh などを使用してファイルを転送できます (rsync 自体はデータを暗号化しません)。

ファイルとデータ (サーバーとクライアント) はソケット (プロセス モード) を介して転送できます。

匿名ライブ認証(システムユーザー不要)プロセスモード送信をサポートし、便利で安全なデータバックアップとミラーリングを実現できます

rsync 同期ソースサーバー

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

  • ダウンリンク同期 (ダウンロード) では、同期ソースはドキュメントの元の場所を提供する責任があり、開始者はその場所への読み取りアクセス権を持っている必要があります。

  • アップストリーム同期 (アップロード) では、同期ソースはドキュメントのターゲットの場所を提供する責任があり、開始者はその場所への書き込みアクセス権を持っている必要があります。

 rsync ダウンリンク同期 (タイミング同期) を構成する

ソースサーバー: 192.168.137.10

クライアント (開始者): 192.168.137.20

ソースサーバーを構成する


 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.41.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


イニシエータの構成

基本フォーマット:

 rsync  [选项]  原始位置  目标位置

一般的なオプション:

オプション 関数
-r 再帰モード。ディレクトリおよびサブディレクトリ内のすべてのファイルが含まれます。
-l シンボリック リンクの場合、ファイルはシンボリック リンク ファイルとしてコピーされます。
-v 同期プロセスに関する詳細情報を表示します。
-z ファイルを転送するときに圧縮します。
-a アーカイブ モード。ファイルのアクセス許可、属性、その他の情報を保持します。これは、オプション「-rlptgop」を組み合わせたものと同等です。
-p ファイルの許可フラグを保持する
-t ファイルのタイムスタンプは保持されます。
-g ファイルのグループ フラグを保持します (スーパーユーザーのみ)。
-o ファイルの所有権を保持します (スーパーユーザーのみ)。
-H ハードリンクされたファイルを保持します。
-A ACL 属性情報を保持します。
-D デバイスファイルとその他の特別なファイルを保持します
- 消去 ターゲットの場所には存在するが、元の場所には存在しないファイルを削除します。
--チェックサム (ファイル サイズや変更時間ではなく) チェックサムに基づいてファイルをスキップします。

構成:

 #将指定的资源下载到本地/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

rsync リアルタイム同期 (アップリンク同期)

定期的な同期が不十分

  • バックアップの実行時間が固定されており、遅延が明らかであり、リアルタイム パフォーマンスが低い
  • 同期元が長期間変更されない場合、集中的な定期タスクが不要

 リアルタイム同期の利点

  • 同期ソースが変更されたらすぐにバックアップを開始します
  • 同期ソースに変更がない限り、バックアップは実行されません。

Linux カーネルの inotify メカニズム

  • バージョン 2.6.13 以降で利用可能
  • ファイルシステム内の変更を監視し、通知に応答できます
  • 補助ソフトウェア: inotify-tools

イニシエータ構成 rsync+Inotify

  • inotify 通知インターフェイスを使用すると、ファイル アクセス、削除、移動、変更など、ファイル システム内のさまざまな変更を監視できます。このメカニズムを使用すると、ファイル変更アラーム、増分バックアップを実現し、ディレクトリまたはファイルの変更にタイムリーに対応するのに非常に便利です。

  • inotify メカニズムと rsync ツールを組み合わせることで、トリガーされたバックアップ (リアルタイム同期) を実現できます。つまり、元の場所にあるドキュメントが変更されている限り、増分バックアップ操作はすぐに開始され、それ以外の場合はサイレント状態になります。待機状態。

  • inotify 通知メカニズムは Linux カーネルによって提供されるため、主にローカル監視に使用され、トリガーされたバックアップに適用される場合はアップストリーム同期により適しています。

rsync リアルタイム同期 (アップリンク同期) を構成する

イニシエータは rsync+Inotify を設定する必要があります

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

イニシエータ、inotify カーネルパラメータを調整してください

Linux カーネルでは、デフォルトの inotify メカニズムは 3 つの制御パラメータを提供します。

  • max_queue_events (イベント キューを監視、デフォルト値は 16384)、
  • max_user_instances (監視インスタンスの最大数、デフォルト値は 128)、
  • max_user_watches (インスタンスごとの監視対象ファイルの最大数、デフォルト値は 8192)

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

 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

イニシエーター、inotify-tools をインストールします

inotify メカニズムを使用するには、変更を監視および要約するための inotifywait および inotifywatch 補助ツール プログラムを提供する inotify-tools をインストールする必要があります。

  • inotifywait:modify(変更)、create(作成)、move(移動)、delete(削除)、attrib(属性変更)などの様々なイベントを監視し、変更があった場合に即座に結果を出力することができます。 。

  • inotifywatch: ファイル システムの変更を収集し、操作終了後に変更の概要を出力するために使用できます。

 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”:简化输出信息


イニシエーター、トリガー同期スクリプトを作成します

別の端末でトリガー同期スクリプトを作成します (スクリプト名に rsync 文字列を含めることはできないことに注意してください。そうしないと、スクリプトが有効にならない可能性があります)。


 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 &
 ​
 #之后在发起端创建文件,查看源服务器中是否新增了

同期するファイルが比較的大きく、同期が比較的遅いため、後続のファイルと同期が失敗する場合は、スクリプトにメッセージ キューまたはバッファを追加する必要があります。

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


同期効果を検証する

上記のスクリプトは、ローカル マシンの /data ディレクトリの変更を検出するために使用されます。更新があると、rsync 同期操作がトリガーされ、バックアップがサーバー 192.168.137.10 の wwwroot 共有ディレクトリにアップロードされます。

トリガーされたアップリンク同期の検証プロセスは次のとおりです。

(1) /opt/inotify.sh スクリプト プログラムをローカルで実行します。

(2) ローカルマシンの /data/ ディレクトリに移動し、ファイルの追加、削除、変更などの操作を行います。

(3) リモート サーバーの wwwroot ディレクトリの変更を表示します。

rsync を使用して大量のファイルをすばやく削除する

/usr/local/nginx/proxy_temp の nginx キャッシュなど、100 万、1,000 万などの大量のファイルを Linux 上で削除したい場合、 rm -rf * は使いにくいかもしれません。待ち時間が長いからです。

この場合、rsync を使用して適切に処理できます。

rsync は実際には置換原理を使用します

 #先建立一个空的文件夹:
 mkdir /home/blank
 ​
 #用rsync删除目标目录:
 rsync --delete-before -a -H -v --progress --stats /home/blank/ /usr/local/nginx/proxy_temp
 
 #这样目标目录很快就被清空了

オプションの説明:

オプション 効果
--前に削除 受信機は送信中に削除操作を実行します
-a アーカイブ モード。ファイルを再帰的に転送し、すべてのファイル属性を保持します。
-H ハードリンクされたままのファイル
-v 詳細出力モード
- 進捗 転送中に転送の進行状況を表示する
--統計 特定のファイルの転送ステータスを表示します

おすすめ

転載: blog.csdn.net/weixin_57560240/article/details/131040721