LinuxはRsync+Inotifyを使用してローカルとリモートのデータのリアルタイム同期を実現します。

LinuxはRsync+Inotifyを使用してローカルとリモートのデータのリアルタイム同期を実現します。

0x0 テスト環境

本社本番サーバーと支社バックアップサーバーはリモートデータバックアップが必要です。環境は以下の通りです。

**セントロス6.5**
本番サーバーディレクトリ: /home/zytest/files
バックアップサーバディレクトリ: /home/zytest/files
ユーザー名/パスワード: zytest/zytest

0x1 本番サーバー環境構築

0x1.1 gccコンパイラとrsyncをインストールする

yum インストール gcc rsync -y

0x1.2 inotifyをサーバーにコピーして解凍する

cd /root
tar xfvz inotify-tools-3.13.tar.gz

0x1.3 インストールするinotifyディレクトリを入力してください

 inotify-tools-3.13 をインストールします
 ./configure
 作る
 インストールする     
 
 /usr/local/bin/inotifywait ##インストールが成功したかどうかを確認します

0x2 バックアップサーバ環境構築

0x2.1 xinetdとrsyncをインストールする

yum xinetd rsync をインストール -y

0x3 次のコンテンツは2つのサーバー間で同期されます

ユーザー追加 -u 600 zytest 
 パスワード zytest    
 ジテスト
 su - zytest -c 'mkdir /home/zytest/files' ##同期ディレクトリを作成する

0x4 バックアップサーバーでrsyncdを構成する

0x4.1 /etc/xinetd.d/rsyncを編集し、以下の内容に変更します。

無効にする = はい ==> 無効にする = いいえ
フラグ = IPv6 ==> フラグ = IPv4
server_args = --daemon ==> server_args = --daemon --config=/etc/rsyncd.conf

0x4.2 /etc/rsyncd.confを編集し、次のスクリプト情報を追加します。

uid = ルート
gid = ルート
chroot を使用する = いいえ
最大接続数 = 1000
厳密モード = はい
ポート = 873
pid ファイル = /var/run/rsyncd.pid 
ロックファイル = /var/run/rsyncd.lock 
ログファイル = /var/log/rsyncd.log
# ユーザー「zytest」の場合は以下、他のユーザーの場合は変更
[ザイテスト]
パス = /home/zytest
エラーを無視する
認証ユーザー =zytest
シークレットファイル = /home/rsync-dst.ps
読み取り専用 = いいえ
リスト = 偽

Ps: rsyncd設定ファイルはxinetd上にあるため、バックアップサーバーはxinetdをインストールします。

0x4.3 呼び出されたパスワードファイルにパスワードを書き込み、権限を付与する

echo zytest:zytest >> /home/rsync-dst.ps
chmod 600 /home/rsync-dst.ps

0x4.4 xinetd経由でrsyncを開始する

 /etc/rc.d/init.d/xinetd を再起動

0x5 プライマリサーバー上のinosyncスクリプトファイルを構成する

0x5.1 ** ##/root/inosync を編集し、スクリプト コードを追加します**

#!/bin/sh
#chkconfig: 3 78 10

#このファイルはコンパイル時から存在します
[ ! -f /usr/local/bin/inotifywait ] の場合
それから
 echo "開始できません。ファイル inotifywait が存在しません!"
 出口
フィ

#このファイルは実行可能なシェルスクリプトです
[ ! -f /usr/local/bin/inosync.so.1 ]の場合
それから
 echo "管理者に連絡してください。inosync.so.1 が存在しません!"
 出口
フィ

ケース「$1」
 '始める')
 /usr/local/bin/inosync.so.1 &
;;

'停止')
 pid=`ps -ef | grep -v grep | grep "inotifywait" | awk '{print $2}'`
 キル -9 $pid 2>&1
;;

'再起動')
 $0 ストップ
 0ドルからスタート
;;

エサック

0x5.2 スクリプトの権限を付与し、起動時に開始するように設定する

chmod a+x /root/inosync
 cp /root/inosync /etc/rc.d/init.d

0x5.3 構成呼び出しメインスクリプトファイル /root/inosync.so.1

rhost=**バックアップサーバのIP**
ユーザー=zytest
src=/home/zytest/ファイル
dst=zytest
#dst は、dst サーバーのファイル /etc/rsyncd.conf 内の [zytest] に対応します。
ログ=/root/inosync.log
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M:%S' --format '%T %w%f %e' -e close_write,create,move,delete,attrib $src | ファイルの読み取り中
 する
 エコー == rsync 開始 == >> $log
 rsync -avP --password-file=/home/rsync-src.ps --delete $src $user@$rhost::$dst >> $log 2>&1
 エコー -- rsyncd -- >> $log
 日付 >> $log
 echo "${files} が rsync されました " >> $log 2>&1
 終わり

PS: %T の後にスペースがあり、%f と %e の間にもスペースがあります

0x5.4 inosync.so.1 スクリプトに権限を与え、/usr/local/bin にコピーします。

chmod a+x /root/inosync.so.1
cp /root/inosync.so.1 /usr/local/bin

0x5.5 呼び出されたパスワードファイルにパスワードを書き込み、権限を付与する

echo zytest >> /home/rsync-src.ps
 chmod 600 /home/rsync-src.ps

0x6 ターゲットサーバーはinosyncを自動的に開始するように設定し、inosyncサービスをオンにします

chkconfig --level 3 inosync オン
/etc/rc.d/init.d/inosync 開始

0x7 テスト終了

運用サーバーの /home/zytest/files ディレクトリにファイルとフォルダを作成し、バックアップ ストレージでもファイルとフォルダが同期されているかどうかを確認します。同期されている場合は、同期は成功しています。

プロセスはログを通じて確認できます

末尾 -f /root/inosync.log

要約する

Linux で Rsync+Inotify を使用してローカルとリモートのデータをリアルタイムで同期する方法について説明したこの記事はこれで終わりです。rsync+inotify を使用してリモートのリアルタイム同期を実現する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Linux で rsync を使用する方法
  • Rsync は他のすべてのバックアップ ツールよりも優れています。特定のディレクトリを手動でブロックできますか?
  • サーバー間の Python rsync フォルダー同期スクリプト
  • Python+rsyncは指定されたフォーマットでファイルを正確に同期します
  • BrowserSyncで自動更新が開始されます
  • Centos7 での Rsync+crontab 定期同期バックアップ
  • Rsync を使用して Linux で自動バックアップを実行する
  • Java Rsync 同時データ移行と検証の詳細な説明

<<:  Alibaba Cloud ESC に MYSQL8.0 をインストールするチュートリアル

>>:  Vueはシンプルな虫眼鏡効果を実装します

推薦する

CSS でフローティングにより親要素の高さが崩れる問題を解決するいくつかの方法

以前は、フロートはレイアウトによく使用されていましたが、フローティングレイアウトを使用すると親要素の...

vue $http の get および post リクエストのクロスドメイン問題を解決する

Vue $http get および post リクエストのクロスドメイン問題まずconfig/ind...

CSS スタッキングと Z インデックスのサンプルコード

カスケードとカスケードレベルHTML 要素は 3 次元の概念です。水平方向と垂直方向に加えて、「Z ...

Linux の一般的な Java プログラム起動スクリプトのコード例

シェルを起動する頻度は非常に低いですが。 。 。しかし、書くたびに、多くの jar ファイル パスを...

MySQL 8.0 の binlog の詳細な説明

1 はじめにバイナリ ログは、データを持つ、またはデータを変更する可能性がある SQL ステートメン...

SQL GROUP BYの詳細な説明と簡単な例

GROUP BY ステートメントは、Aggregate 関数と組み合わせて使用​​され、1 つ以上の...

ChromeはCookieの変更を監視し、値を割り当てます

次のコードは、Chrome による Cookie の変更の監視を導入しています。コードは次のとおりで...

クールなページング効果を実現するネイティブJS

この記事では、次のような効果を持つ JS ページング効果の例を紹介します。クールだと思いませんか? ...

Linux と最もよく使用されるコマンドの紹介 (習得は簡単ですが、問題の 95% 以上を解決できます)

Linux は現在最も広く使用されているサーバー オペレーティング システムです。Unix をベー...

Mongodb の GUID 表示の問題の詳細な分析

問題を見つける最近、プログラムのストレージを Mongodb に移行したところ、Guid 型が書き込...

Vue の自動書式設定の改行保存の詳細な説明

ネットで変更方法をいろいろ調べたのですが、うまくいきませんでした。後で大物から見て削除しました。フォ...

さまざまな環境での Docker Compose のインストール方法

1. オンラインインストール現在、Linux x86アーキテクチャのオンラインインストールのみを試し...

子コンポーネントで vue activated を使用する詳細

ページ: ベース: <テンプレート> <div class="タブコンテ...

CentOS 7.5 に Docker をインストールする詳細なチュートリアル

Docker入門Docker は、アプリケーションをより速く配信するのに役立つオープンソースのコンテ...

CSS での配置の使用方法の詳細な研究 (要約)

CSS における位置指定の概要position属性は英語で位置を意味し、 CSSでの主な機能は要素...