GNU/Linux >> Linux の 問題 >  >> Linux

rsyncを使用してWebサイトをミラーリングする

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

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

このチュートリアルでは、より安全なSSHを介してrsyncをトンネリングします。また、rsyncのためにファイアウォールで別のポートを開く必要がないことも意味します。ポート22(SSH)が開いていれば十分です。問題は、SSHがログインにパスワードを必要とすることです。これは、rsyncをcronジョブとして実行する場合には適切ではありません。パスワードが必要な場合は、人間との対話が必要ですが、これは私たちが望んでいることではありません。

しかし幸いなことに、解決策があります。公開鍵を使用することです。 。キーのペアを作成します(バックアップサーバー 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
  • ミラーリングされるWebサイトは、server1.example.comの/ var/wwwにあります。

rsyncはファイルとディレクトリのミラーリング専用です。 MySQLデータベースをミラーリングする場合は、代わりにMySQLミラーリング/レプリケーションを使用してください。

まず、このようなシステムを構築する方法はこれだけではありません。この目標を達成する方法はたくさんありますが、これが私のやり方です。

1rsyncをインストールします

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

server1 / mirror:

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

apt-get install rsync

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

2server1.example.comで非特権ユーザーを作成

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

server1:

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

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

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

passwd someuser

3テストrsync

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

ミラー:

rsync -avz -e ssh [email protected]:/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にミラーリングされていることがわかります。

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

server1 / mirror:

ls -la /var/www

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

4mirror.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 [email protected]

パスフレーズを入力しないことが重要です。入力しないと、人間の操作なしではミラーリングが機能しないため、入力を押すだけです。 !

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

ミラー:

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

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

これで、公開鍵mirror-rsync-key.pubがserver1.example.comの/ home/someuserで利用できるようになります。

5server1.example.comを構成します

次に、server1.example.comに(rootではなく)someuserとしてSSH経由でログインし、次のようにします。

server1:

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

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は次のようになります:

server1:

(まだ誰かのユーザーとして!)

vi /home/someuser/.ssh/authorized_keys
ssh-dss AAAAB3NzaC1kc3MAAA[...]lSUom [email protected]
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の先頭:

server1:

(まだ誰かのユーザーとして!)

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 [email protected]
mirror

from =の後にIPアドレスの代わりにmirror.example.comのようなFQDNを使用することが重要です。そうしないと、自動ミラーリングが機能しません!

次に、rsyncを除くすべてのコマンドを拒否するスクリプト/ home / someuser / rsync/checkrsyncを作成します。

server1:

(私たちはまだ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

6mirror.example.comでrsyncをテストします

ここで、誰かのパスワードの入力を求められることなくserver1.example.comをミラーリングできるかどうか、mirror.example.comでテストする必要があります。これを行います:

ミラー:

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

rsync -avz --delete --exclude=**/stats --exclude=**/error --exclude=**/files/pictures -e "ssh -i /root/rsync/mirror-rsync-key" [email protected]:/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

パスワードの入力を求められることなく!これが私たちが望んでいたことです。

7cronジョブを作成する

ミラーリングを自動化したいので、mirror.example.comでそのためのcronジョブを作成します。ルートとして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 protected]com:/var/www/ /var/www/ 

これは5分ごとにrsyncを実行します。ニーズに合わせて調整してください(

を参照)
man 5 crontab

)。ここでrsyncへのフルパス(/ usr / bin / rsync)を使用して、cronがrsyncの場所を認識していることを確認します。 rsyncの場所は異なる場合があります。実行

ミラー:

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

which rsync

あなたがどこにいるかを知るために。

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

Linux
  1. SELinuxでコンテナを保護する

  2. Debian8上のGlusterFSを使用した高可用性ストレージ-2つのストレージサーバー間でミラーリング

  3. CentOS7上のGlusterFSを使用した高可用性ストレージ-2つのストレージサーバー間でミラーリング

  1. Ubuntu16.04でサイトコピーを使用してリモートWebサイトを維持する

  2. Ubuntu12.10上のGlusterFS3.2.xを使用した2つのストレージサーバー間での自動ファイルレプリケーション(ミラーリング)

  3. CentOS6.3上のGlusterFS3.2.xを使用した高可用性ストレージ-2つのストレージサーバー間での自動ファイルレプリケーション(ミラーリング)

  1. Debian WheezyでのGlusterFS3.2.xによる高可用性ストレージ-2つのストレージサーバー間での自動ファイルレプリケーション(ミラー)

  2. 正規表現の使用を開始する:例

  3. tcpdumpを使用してネットワークのトラブルシューティングを行う