ウェブサイト検索

rsyncでウェブサイトをミラーリングする


rsyncでウェブサイトをミラーリングする

このページで

  1. 1 rsyncをインストールする
  2. server1.example.comに特権のないユーザーを作成する
  3. 3 テスト rsync
  4. 4 mirror.example.comでキーを作成します
  5. 5 サーバー1.example.comを設定する
  6. 6 テスト rsync は mirror.example.com で行います
  7. 7 クロンクロージョブを作成する
  8. 8リンク

このチュートリアルでは、メインのウェブサーバーからバックアップサーバーにウェブサイトをミラーリングする方法を示します。メインサーバーが障害時に引き継ぐことができるバックアップサーバーです。このためにrsyncというツールを使用し、ミラーに更新が必要かどうかを確認するcronジョブを通じて実行します。したがって、バックアップサーバーは通常、引き継ぐ必要がある場合に最新の状態であるべきです。

rsyncは変更されたファイルだけを更新するため、rsyncを実行するたびに5GBのデータを転送する必要はありません。新しい/変更されたファイルのみをミラーリングし、メインサーバーで削除されたファイルをミラーから削除することもできます。それに加えて、ミラーリングされたファイルやディレクトリの権限や所有権を保持することができ、所有権を保持するために、ここではrsyncをrootとして実行する必要があります。メインサーバーで権限や所有権が変更された場合、rsyncはバックアップサーバーでもそれらを変更します。

このチュートリアルでは、rsyncをSSHでトンネリングする方法を説明します。これはより安全です。また、rsyncのためにファイアウォールで別のポートを開く必要がないことを意味します - ポート22(SSH)が開いていればそれで十分です。しかし、SSHはログインするためにパスワードを必要とするため、cronジョブとしてrsyncを実行したい場合には好ましくありません。パスワードが必要であるため、人間の操作が求められ、これは私たちが望むものではありません。

しかし幸いなことに、解決策があります:公開鍵の使用です。私たちはキーのペアを作成します(バックアップサーバー mirror.example.com で)、そのうちの1つはリモートシステム (server1.example.com) のファイルに保存されます。これ以降、rsyncを実行する際にパスワードを求められることはありません。これは、私たちが正に望んでいるcronジョブも含まれています。

すでに私がこれまで書いた内容から推測できるかもしれませんが、概念は server1.example.com のミラーリングを mirror.example.com から直接開始するということです; server1.example.com はミラーリングされるために何もする必要はありません。

ここで次のセットアップを使用します:

  • メインサーバー: server1.example.com (server1) - IPアドレス: 192.168.0.100
  • ミラー/バックアップサーバー: mirror.example.com (ミラー) - IPアドレス: 192.168.0.175
  • ミラーリングされるウェブサイトは、server1.example.comの/var/wwwにあります。

rsyncはファイルとディレクトリをミラーリングするためのものであり、MySQLデータベースをミラーリングしたい場合は、MySQLのミラーリング/複製を使用してください。

最初に言いたいのは、これがこのようなシステムを設定する唯一の方法ではないということです。目標を達成する方法はいくつかありまが、私が選ぶのはこの方法です。

最初のステップは、システムにログインするか、ルートユーザーになることです。DebianおよびCentOSでは、次を使用します:

su -

ルートとは異なるユーザーとしてログインしている場合。Ubuntuでは、次を使用します:

sudo -s

その代わりに。

1 rsyncをインストールする

まず、server1.example.comとmirror.example.comの両方にrsyncをインストールする必要があります。DebianおよびUbuntuシステムの場合、これは次のようになります:

サーバー1/ミラー:

(私たちはこれをルートとして行います!)

apt install rsync

他のLinuxディストリビューションでは、rsyncをインストールするためにyum/dnf(Fedora/CentOS)またはyast(SuSE)を使用します。

CentOS/Rocky Linux または AlmaLinux では、次のようにします:

dnf install rsync

server1.example.comに特権のないユーザーを作成する

現在、server1.example.com に someuser という特権のないユーザーを作成します。このユーザーは mirror.example.com で rsync に使用され、/var/www ディレクトリをミラーリングします(もちろん、someuser は server1.example.com 上の /var/www に対して読み取り権限を持っている必要があります)。

サーバー1:

(私たちはこれをルートとして行います!)

sudo useradd -d /home/someuser -m -s /bin/bash someuser

これにより、ユーザー someuser が作成され、ホームディレクトリは /home/someuser、ログインシェルは /bin/bash になります(someuser に有効なログインシェルがあることが重要です - /bin/false のようなものは機能しません!)。次に、someuser にパスワードを設定します:

passwd someuser

3 テスト rsync

次に、mirror.example.comでrsyncをテストします。rootとしてこれを行います。

鏡 :

rsync -avz -e ssh [email :/var/www/ /var/www/

これと似たようなものが見えるはずです。はいと答えてください:

The authenticity of host 'server1.example.com (192.168.0.100)' can't be established.
RSA key fingerprint is 32:e5:79:8e:5f:5a:25:a9:f1:0d:ef:be:5b:a6:a6:23.
Are you sure you want to continue connecting (yes/no)?
<-- yes

その後、someuserのパスワードを入力すると、server1.example.comの/var/wwwディレクトリがmirror.example.comの/var/wwwにミラーリングされているのが確認できるはずです。

両方のサーバーでこのように確認できます:

サーバー1/ミラー:

ls -la /var/www

すべてのファイルとディレクトリが mirror.example.com にミラーリングされていることを確認する必要があります。ファイルとディレクトリは server1.example.com と同じ権限と所有権を持っているべきです。

4 mirror.example.comでキーを作成する

今、mirror.example.comで秘密鍵と公開鍵のペアを作成します:

鏡 :

(私たちはこれをルートとして行います!)

mkdir /root/rsync
ssh-keygen -t dsa -b 1024 -f /root/rsync/mirror-rsync-key

あなたはこのようなものを見るでしょう:

Generating public/private dsa key pair.
Enter passphrase (empty for no passphrase): [press enter here]
Enter same passphrase again: [press enter here]
Your identification has been saved in /root/cron/mirror-rsync-key.
Your public key has been saved in /root/cron/mirror-rsync-key.pub.
The key fingerprint is:
68:95:35:44:91:f1:45:a4:af:3f:69:2a:ea:c5:4e:d7 root@mirror

パスフレーズを入力しないことが重要です。そうしないと、ミラーリングは人間の操作なしでは機能しませんので、単に エンター を押してください!

次に、私たちは公開鍵をserver1.example.comにコピーします:

鏡 :

(それでも、私たちはこれをルートとして行います。)

scp /root/rsync/mirror-rsync-key.pub [email :/home/someuser/

公開鍵 mirror-rsync-key.pub は、サーバー server1.example.com の /home/someuser に現在利用可能であるべきです。

5 サーバー1.example.comを設定する

今、server1.example.comでsomeuserとしてSSHでログインし、これを行ってください。

サーバー1:

(これをsomeuserとして行ってください!)

mkdir ~/.ssh
chmod 700 ~/.ssh
mv ~/mirror-rsync-key.pub ~/.ssh/
cd ~/.ssh
touch authorized_keys
chmod 600 authorized_keys
cat mirror-rsync-key.pub >> authorized_keys

これにより、mirror-rsync-key.pubの内容をファイル/home/someuser/.ssh/authorized_keysに追加しました。/home/someuser/.ssh/authorized_keysは以下のようになるはずです:

サーバー1:

(まだsomeuserのままです!)

vi /home/someuser/.ssh/authorized_keys
ssh-dss AAAAB3NzaC1kc3MAAA[...]lSUom root@
mirror

今、mirror.example.comからの接続のみを許可し、接続するユーザーはrsyncのみを使用できるようにするために、追加します。

command="/home/someuser/rsync/checkrsync",from="mirror.example.com",no-port-forwarding,no-X11-forwarding,no-pty

/home/someuser/.ssh/authorized_keysの最初の部分:

サーバー1:

(まだsomeuserのままです!)

vi /home/someuser/.ssh/authorized_keys
command="/home/someuser/rsync/checkrsync",from="mirror.example.com",no-port-forwarding,no-X11-forwarding,no-pty ssh-dss AAAAB3NzaC1kc3MAAA[...]lSUom root@
mirror

自動ミラーリングが機能しないため、from=の後にIPアドレスの代わりにmirror.example.comのようなFQDNを使用しなければなりません!

今、私たちはすべてのコマンドを拒否し、rsyncのみを許可するスクリプト /home/someuser/rsync/checkrsync を作成します。

サーバー1:

(私たちはまだこれをします、someuserとして!)

mkdir ~/rsync
vi ~/rsync/checkrsync
#!/bin/sh
case "$SSH_ORIGINAL_COMMAND" in
        *\&*)
                echo "Rejected"
                ;;
        *\(*)
                echo "Rejected"
                ;;
        *\{*)
                echo "Rejected"
                ;;
        *\;*)
                echo "Rejected"
                ;;
        *\<*)
                echo "Rejected"
                ;;
        *\`*)
                echo "Rejected"
                ;;
        rsync\ --server*)
                $SSH_ORIGINAL_COMMAND
                ;;
        *)
                echo "Rejected"
                ;;
esac
chmod 700 ~/rsync/checkrsync

6 テスト rsync は mirror.example.com で行います

今、mirror.example.com で server1.example.com を someuser のパスワードを求められずにミラーできるかテストしなければなりません。私たちはこれを行います:

鏡 :

(私たちはこれをルートとして行います!)

rsync -avz --delete --exclude=**/stats --exclude=**/error --exclude=**/files/pictures -e "ssh -i /root/rsync/mirror-rsync-key" [email :/var/www/ /var/www/

(--deleteオプションは、server1.example.comで削除されたファイルもmirror.example.comで削除されるべきことを意味します。--excludeオプションは、これらのファイル/ディレクトリがミラーリングされないべきことを意味します。例えば、--exclude=**/errorは「/var/www/errorをミラーリングしない」という意味です。複数の--excludeオプションを使用することができます。これらのオプションを例としてリストしました; あなたのニーズに応じてコマンドを調整できます。

man rsync

詳細については.)

今、ミラーリングが行われていることがわかるはずです:

receiving file list ... done
sent 71 bytes  received 643 bytes  476.00 bytes/sec
total size is 64657  speedup is 90.56

パスワードを要求されることなく!これが私たちが望んでいたことです。

7 クロンクロージョブを作成する

ミラーリングを自動化したいので、mirror.example.com上にcronジョブを作成します。rootとしてcrontab -eを実行してください:

鏡 :

(私たちはこれをルートとして行います!)

crontab -e

そして、このようなCronジョブを作成します:

*/5 * * * * /usr/bin/rsync -azq --delete --exclude=**/stats --exclude=**/error --exclude=**/files/pictures -e "ssh -i /root/rsync/mirror-rsync-key" [email :/var/www/ /var/www/ 

これは5分ごとにrsyncを実行します; あなたのニーズに合わせて調整してください(見てください)

man 5 crontab

ここではrsyncへのフルパス(/usr/bin/rsync)を使用しています。これはcronがrsyncの場所を確実に見つけられるようにするためです。あなたのrsyncの場所は異なるかもしれません。実行してください。

鏡 :

(私たちはこれをルートとして行います!)

which rsync

あなたのがどこにあるのかを見つけるために。

8リンク

  • rsync: https://rsync.samba.org/

関連記事: