Linuxサーバー間のリアルタイムファイル同期の実現

Linuxサーバー間のリアルタイムファイル同期の実現

使用シナリオ

既存のサーバー A と B の場合、サーバー A の指定されたディレクトリ (たとえば、 /home/paul/rsync/ ) の内容が変更されると (追加、削除、変更、属性の変更)、これらの変更はサーバー B のターゲット ディレクトリ (たとえば、 /home/paul/rsync/ ) にリアルタイムで同期されます。

データミラーリングバックアップツール Rsync

Rsync は非常に高速かつ柔軟なファイルコピー ツールです。ローカル マシンとリモート サーバー間のファイルのコピーをサポートします。 Rsync はデルタ転送アルゴリズムを使用します。このアルゴリズムでは、ソース ファイルとターゲット ファイル間の差分のみを転送する必要があるため、ネットワーク帯域幅の消費とコピーにかかる時間が大幅に削減されます。 Rsync は主にデータのバックアップとミラーリングに使用されます。

Rsync は、ファイル サイズまたは最終変更時刻の変更を比較して、ファイルを同期する必要があるかどうかを判断する高速チェック アルゴリズムを使用します。

Rsync を使用してリモート ホストに接続するには、ssh を使用する方法と rsync デーモンを使用する方法の 2 つがあります。ここでは、リモート ファイルのバックアップを実装するために Rsync が使用されます。

Rsyncのインストールと操作

Rsyncをインストールする

サーバー A とサーバー B のターミナルでそれぞれ実行します。

sudo yum rsyncをインストールします

インストールが完了すると、rsync 構成ファイルが etc/rsyncd.conf にあることがわかります。このファイルは、デーモンを同期に使用する場合に必要ですが、ここでは紹介されていません。

サーバーAとB間のパスワードなしのログインを構成する

サーバーAは次を実行します:

sshキー生成
ssh-copy-id サーバーBのIPアドレス

ソースディレクトリとターゲットディレクトリを作成する

サーバーAの場合:

mkdir /home/paul/rsync

サーバーBの場合:

mkdir /home/paul/rsync

サーバーAにテストファイルを作成する

echo "サーバー A からこんにちは" >> /home/paul/rsync/demo.txt

ファイル転送コマンドを実行する

サーバー A で以下を実行します。

#(1)
rsync -avPz --progress /home/paul/rsync 192.168.100.130:/home.paul/rsync
#(2)
rsync -avPz --delete --progress /home/paul/rsync 192.168.100.130:/home.paul/rsync

サーバー B の /home/paul/rsync ディレクトリにも demo.txt が表示されます。

コマンド分析:

(1)サーバーAの/home/paul/rsyncディレクトリにあるファイルをサーバーB(192.168.100.130)の/home.paul/rsyncにコピーします。

(2)ターゲット側のファイルとソース側のファイルを比較します。ターゲット側のファイルがソース側に存在しない場合は、ターゲット側のファイルを削除します。

Rsync の問題

Rsync は単なるファイル コピー ツールであり、ソース ファイルの追加、削除、変更操作を監視することはできません。ソース側で変更を行った後、rsync コマンドを実行して変更をターゲット側に同期する必要があります。

Rsync は、各同期の前にディレクトリ全体をスキャンする必要があります。ソースディレクトリに多数のファイルがある場合、スキャンに時間がかかることがあります。
リアルタイム監視の要件を満たすには、inotify という別のツールを導入する必要があります。

ファイルシステムイベント監視ツール inotify

inotify-tools は、inotify へのシンプルなインターフェースを提供します。これは C 言語で書かれたライブラリであり、コマンドライン ツールも含まれています。

inotify-tools の詳細な紹介については、こちらをクリックしてください: https://github.com/rvoicilas/inotify-tools/wiki

inotify-toolsのインストール

Centos7 システムの場合は、次の順番で実行します。

yum インストール -y epel-release
yum --enablerepo=epel で inotify-tools をインストールします

inotifywaitコマンドを使用してイベントを監視する

監視スクリプトは次のとおりです (inotifywait-rsync.sh)。

inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e 変更、削除、作成、属性 /home/paul/rsync/ | ファイルの読み取り中
する
rsync -avPz --progress /home/paul/rsync/ 192.168.100.130:/home/paul/rsync/
rsync -avPz --delete /home/paul/rsync/ 192.168.100.130:/home/paul/rsync/
echo "${file} が同期されました"
終わり

パラメータ解析

  • -m は監視を続けます。このパラメータが設定されていない場合、inotifywait は 1 つのイベントを監視した後に終了します。
  • -r ディレクトリを再帰的に監視します。
  • -q 静音モード、出力を少なくします。
  • --timefmt は時間の出力形式を指定します。
  • --format イベント出力の形式を指定します。
  • -e 監視するイベント タイプを設定します。ここでは、追加、削除、変更、メタデータの変更を監視します。

トリガーされたリスニング時間ごとに、inotifywait は do と done の間のコードを実行します。ここでは、前述の rsync コマンドを呼び出してファイルを同期します。

監視スクリプトをcrontabに追加する

crontab -e
* * * * * sh /home/paul/inotifywait-rsync.sh

参考文献
https://rsync.samba.org
https://github.com/rvoicilas/inotify-tools/wiki

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Linuxはscpコマンドを使用してファイルをローカルコンピュータにコピーし、ローカルファイルをリモートサーバーにコピーします。
  • Linux サーバーでフォルダー、ファイル、解凍コマンドを削除する方法
  • Samba を使用して Linux サーバー上で共有ファイル サービスを構築する方法
  • Linux サーバーと Windows システム間でファイルをアップロードおよびダウンロードする方法
  • PythonはLinuxサーバー上のファイルを読み取る
  • SSH経由でLinuxサーバーにファイルやフォルダをアップロードする方法
  • Linux ローカルとサーバー間でファイルを転送し、Linux サーバー上でファイルをアップロードおよびダウンロードするためのコマンドを記述する方法
  • 2 つの Linux サーバー間の自動ファイル同期

<<:  jQueryはシンプルなコメントエリアを実装します

>>:  MySQLは1つのテーブルからデータをクエリし、それを別のテーブルに挿入する実装方法

推薦する

Docker ベースの MySQL マスタースレーブレプリケーション環境を構築するための実装手順

1. はじめに以前のプログラム アーキテクチャは次の形式になります。プログラムのサイズが大きくなると...

ウェブページサイズに関する調査

<br />統計によると、Web ページの平均サイズは 2003 年以降 3 倍に増加し...

CSS スタイルを HTML 外部スタイルシートにインポートする方法

リンクインスタイルとは、すべてのスタイルを 1 つ以上の外部スタイルシート ファイルに配置することで...

Ubuntu でパスワードを変更し、パスワードの複雑さのポリシーを設定する方法

1. パスワードを変更する1. 一般ユーザーのパスワードを変更する パスワード現在のパスワードを入力...

Innodb で MySQL の 2T テーブルをすばやく削除する方法の例

序文この記事は主に、MySQL の Innodb で 2T の大きなテーブルをすばやく削除する方法に...

Dockerコンテナでルート権限を取得する方法

まず、コンテナが稼働している必要がありますコンテナのCONTAINER IDは、sudo docke...

Docker で MySQL データベースを使用して LAN アクセスを実現する

1. MySQLイメージを取得する docker pull mysql:5.6注: mysql5.7...

SSH ポート転送、ローカル ポート転送、リモート ポート転送、動的ポート転送の詳細

パート 1 SSH ポート転送の概要カフェで無料Wi-Fiを利用しているとき、誰かがあなたのパスワー...

シンプルなウェブデザインコンセプトのカラーマッチング

(I)ウェブページのカラーマッチングの基本概念(1)白黒の言葉は永遠のテーマです。誰もそれを悪く言う...

ウェブ標準学習リソースの素晴らしいコレクション

これらの仕様は、下位互換性のあるドキュメントを Web 上で公開し、できるだけ幅広いユーザーがアクセ...

MySQL 8.0.17 解凍版のインストールと設定方法のグラフィックチュートリアル

インストール中に遭遇した問題を記録しておきますので、皆様のお役に立てれば幸いです。 1. ダウンロー...

MySQL の簡単な分析 - MVCC

バージョンチェーンInnoDB エンジン テーブルでは、クラスター化インデックス レコードに 2 つ...

MySQL 5.7.17 圧縮パッケージのインストールと設定方法のグラフィックチュートリアル

インターネット上にはMySQL 5.7.17のインストールチュートリアルがほとんどなく不十分なので、...

MySQL インデックスの正しい使い方とインデックスの原理の詳細な説明

1. はじめになぜインデックスが必要なのでしょうか?一般的なアプリケーション システムでは、読み取り...

HTML テーブル タグ チュートリアル (36): テーブル ヘッダーの背景色属性 BGCOLOR

<TH> タグは、テーブル内のヘッダーのプロパティを設定するために使用されます。以下の...