ウェブサイト検索

Rsync を使用して 2 つの Apache Web サーバー/Web サイトを同期する方法


Web 上には、さまざまな方法で Web ファイルをミラーリングしたりバックアップしたりするためのチュートリアルがたくさんあります。ここでは将来の参考のためにこの記事を作成し、 ここではLinux の非常にシンプルで汎用性の高いコマンドを使用します。ウェブサイトのバックアップを作成します。このチュートリアルは、「Rsync」を使用して 2 つの Web サーバー間でデータを同期するのに役立ちます。

Rsync を使用してウェブ サーバーのミラーを作成する目的は、メインのウェブ サーバーに障害が発生した場合に、バックアップ サーバーが引き継いでウェブサイトのダウンタイムを削減できることです。 Web サーバーのバックアップを作成するこの方法は、中小規模の Web ビジネスにとって非常に優れており、効果的です。

Web サーバーを同期する利点

rsync を使用して Web サーバーのバックアップを作成する主な利点は次のとおりです。

  1. Rsync は、変更されたデータのバイトとブロックのみを同期します。
  2. Rsync には、メイン Web サーバーから削除されたファイルとディレクトリをバックアップ サーバーで確認して削除する機能があります。
  3. データをリモートでコピーする際に、権限、所有権、特別な属性を処理します。
  4. また、暗号化された方法でデータを転送する SSH プロトコルもサポートしているため、すべてのデータが安全であることが保証されます。
  5. Rsync は、データ転送中に圧縮および解凍方法を使用するため、帯域幅の消費が少なくなります。

2 つの Apache Web サーバーを同期する方法

Web サーバーのミラーを作成するための rsync の設定に進みましょう。ここでは 2 つのサーバーを使用します。

メインサーバー
  1. IP アドレス: 192.168.0.100
  2. ホスト名: webserver.example.com
バックアップサーバー
  1. IP アドレス: 192.168.0.101
  2. ホスト名:backup.example.com

ステップ 1: Rsync ツールをインストールする

この場合、webserver.example.com の Web サーバー データは backup.example.com にミラーリングされます。まず、次のコマンドを使用して両方のサーバーにRsync をインストールする必要があります。

[root@tecmint]# yum install rsync        [On Red Hat based systems]
[root@tecmint]# apt-get install rsync    [On Debian based systems]

ステップ 2: Rsync を実行するユーザーを作成する

root ユーザーを使用して rsync をセットアップできますが、セキュリティ上の理由から、メイン Web サーバー (webserver.example.com など) に特権のないユーザーを作成して rsync を実行することもできます。

[root@tecmint]# useradd tecmint
[root@tecmint]# passwd tecmint

ここではユーザー「tecmint」を作成し、ユーザーにパスワードを割り当てました。

ステップ 3: Rsync セットアップをテストする

バックアップ サーバー (backup.example.com など) で rsync 設定をテストします。テストするには、次のコマンドを入力してください。

[root@backup www]# rsync -avzhe ssh [email :/var/www/ /var/www
サンプル出力
[email 's password:

receiving incremental file list
sent 128 bytes  received 32.67K bytes  5.96K bytes/sec
total size is 12.78M  speedup is 389.70

rsync が完全に正常に動作し、データを同期していることがわかります。転送には「/var/www」を使用しました。必要に応じてフォルダーの場所を変更できます。

ステップ 4: SSH パスワードなしログインによる同期の自動化

これで rsync のセットアップは完了しました。次は rsync 用のcronをセットアップします。 SSH プロトコルで rsync を使用するので、ssh は認証を要求し、cron にパスワードを提供しないと機能しません。 cron をスムーズに動作させるには、rsync 用にパスワードなしの ssh ログインを設定する必要があります。

この例ではファイルの所有権も保持するためにルートとして実行していますが、代替ユーザーでも実行できます。

まず、バックアップ サーバー (backup.example.com など) で次のコマンドを使用して公開キーと秘密キーを生成します。

[root@backup]# ssh-keygen -t rsa -b 2048

このコマンドを入力するときは、rsync cron がデータの同期にパスワードを必要としないように、パスフレーズを指定せずに空のパスフレーズを入力して Enter をクリックしてください。

サンプル出力
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
9a:33:a9:5d:f4:e1:41:26:57:d0:9a:68:5b:37:9c:23 [email 
The key's randomart image is:
+--[ RSA 2048]----+
|          .o.    |
|           ..    |
|        ..++ .   |
|        o=E *    |
|       .Sooo o   |
|       =.o o     |
|      * . o      |
|     o +         |
|    . .          |
+-----------------+

これで公開キーと秘密キーが生成されました。メイン Web サーバーがこのバックアップ マシンを認識してログインできるように、それをメイン サーバーと共有する必要があります。データの同期中にパスワードを要求されることはありません。

[root@backup html]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email 

次に、「ssh ‘[email ‘」を使用してマシンにログインし、 .ssh/authorized_keys をチェックインしてみます。

[root@backup html]# [email 

これでキーの共有は完了です。 SSH パスワードレスログインについて詳しく知りたい場合は、それに関する記事をご覧ください。

  1. 5 つの簡単なステップで SSH パスワードなしでログイン

ステップ 5: Cron をスケジュールして同期を自動化する

このために cron を設定しましょう。 cronを設定するには、次のコマンドでcrontabファイルを開いてください。

[root@backup ~]# crontab –e

/etc/crontab ファイルが開き、デフォルトのエディタで編集できます。この例では、データを同期するために 5 分ごとに実行する cron を作成しています。

*/5        *        *        *        *   rsync -avzhe ssh [email :/var/www/ /var/www/

上記の cron および rsync コマンドは、「/var/www/」をメインのウェブ サーバーからバックアップ サーバーにすべてのサーバーに同期するだけです。 5 分です。必要に応じて、時間とフォルダーの場所の構成を変更できます。 RsyncCron コマンドを使ってよりクリエイティブにカスタマイズするには、以下の詳細な記事をご覧ください。

  1. Linux でファイル/フォルダーを同期するための 10 の Rsync コマンド
  2. 11 Linux での Cron スケジュールの例