Rsync を使用して 2 つの Apache Web サーバー/Web サイトを同期する方法
Web 上には、さまざまな方法で Web ファイルをミラーリングしたりバックアップしたりするためのチュートリアルがたくさんあります。ここでは将来の参考のためにこの記事を作成し、 ここではLinux の非常にシンプルで汎用性の高いコマンドを使用します。ウェブサイトのバックアップを作成します。このチュートリアルは、「Rsync」を使用して 2 つの Web サーバー間でデータを同期するのに役立ちます。
Rsync を使用してウェブ サーバーのミラーを作成する目的は、メインのウェブ サーバーに障害が発生した場合に、バックアップ サーバーが引き継いでウェブサイトのダウンタイムを削減できることです。 Web サーバーのバックアップを作成するこの方法は、中小規模の Web ビジネスにとって非常に優れており、効果的です。
Web サーバーを同期する利点
rsync を使用して Web サーバーのバックアップを作成する主な利点は次のとおりです。
- Rsync は、変更されたデータのバイトとブロックのみを同期します。
- Rsync には、メイン Web サーバーから削除されたファイルとディレクトリをバックアップ サーバーで確認して削除する機能があります。
- データをリモートでコピーする際に、権限、所有権、特別な属性を処理します。
- また、暗号化された方法でデータを転送する SSH プロトコルもサポートしているため、すべてのデータが安全であることが保証されます。
- Rsync は、データ転送中に圧縮および解凍方法を使用するため、帯域幅の消費が少なくなります。
2 つの Apache Web サーバーを同期する方法
Web サーバーのミラーを作成するための rsync の設定に進みましょう。ここでは 2 つのサーバーを使用します。
メインサーバー
- IP アドレス: 192.168.0.100
- ホスト名: webserver.example.com
バックアップサーバー
- IP アドレス: 192.168.0.101
- ホスト名: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 パスワードレスログインについて詳しく知りたい場合は、それに関する記事をご覧ください。
- 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 分です。必要に応じて、時間とフォルダーの場所の構成を変更できます。 Rsync と Cron コマンドを使ってよりクリエイティブにカスタマイズするには、以下の詳細な記事をご覧ください。
- Linux でファイル/フォルダーを同期するための 10 の Rsync コマンド
- 11 Linux での Cron スケジュールの例