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はシンプルな虫眼鏡効果を実装します

推薦する

Linux の wget コマンドの詳細な紹介

目次まずwgetをインストールするヘルプマニュアルを見る1. wgetを使用して単一のファイルをダウ...

ボタンに醜い灰色の枠線が付いています。これを削除するにはどうすればよいですか?

ダイアログをクロージャで使用し、右上隅の向こう側に閉じるボタンがあるダイアログを描画しました。ボタン...

JS でカルーセル画像を実装するいくつかの方法

カルーセル主なアイデアは次のとおりです。大きなコンテナには、コンテナの幅の整数倍の非常に長いテーブル...

Webデザイナーの成長体験

<br />まず最初に、私はこのグループの中では完全な新人だということを述べなければなり...

JavaScript でドラッグ スライダー パズルの検証機能を実装します (html5、canvas)

導入:スライダー ドラッグ検証は現在、多くの場所で使用されています。週末に 1 つ作成しようと思い、...

CSS で垂直方向の中央揃えを実装するいくつかの方法の概要

フロントエンドのレイアウト プロセスでは、水平方向の中央揃えを実現するのは比較的簡単で、通常は ma...

Linux Crontab シェル スクリプトを使用して第 2 レベルのスケジュールされたタスクを実装する方法

1. シェルスクリプトcrontab.shを書く #!/bin/bash step=1 #ステップ間...

HTML メタの説明

導入メタタグは、HTML言語のHEAD領域にある補助タグです。 meta は、ページの説明、キーワー...

IDEA で Docker プロジェクトをデプロイする手順

現在、ほとんどのプロジェクトが Docker 上にデプロイされ始めていますが、デプロイのプロセスはま...

Vue フィルターの実装と適用シナリオの詳細な説明

1. 簡単な紹介Vue.js を使用すると、一般的なテキストの書式設定に使用できる独自のフィルターを...

JavaScript に関する 6 つの奇妙で便利な点

目次1. 解体のヒント2. デジタルセパレーター3. try...catch...finally が...

入力テキスト ボックスと画像検証コードの位置合わせの問題 (画像は常に入力より 1 つ上になります)

Web ページ制作では、input と img が同じ行に配置されることが多く、img タグが常に ...

W3C チュートリアル (11): W3C DOM アクティビティ

ドキュメント オブジェクト モデル (DOM) は、プログラムがドキュメントのコンテンツ、構造、およ...

Dockerコンテナを終了した後も実行を継続する方法

現象:イメージを実行します (例: ubuntu14.04)。 docker run -it --r...

HTMLの水平線注釈とコードコメントの使い方をマスターするだけです

水平線<hr /> タグを使用して、現在の位置に水平の分割線を描画します。例: XML/...