rsyncでWEBサイトを複製してみよう
はじめに
こんにちは、技術部のtuouraです。
突然ですが、再帰的って言葉、知っていますでしょうか?
よく使われるコマンドとして、ファイルの所有者やパーミッションを変更する際、配下のディレクトリやファイルを含め適用したい時、この様なコマンドで作業されていると思います。
# chown -R netassist.ftpgroup /home/netassist/ftp_dir/
chown/chmodは-Rの代わりに–recursiveでも同じ作業が可能です。
# chown --recursive netassist.ftpgroup /home/netassist/ftp_dir/
このrecursiveは、日本語では再帰的となります。
recursiveとは
主な意味 再帰的、帰納的、回帰的、再帰、リカーシブ、再起的
出典:weblio辞書 recursiveの意味
私はネットアシストに入社するまで、再帰的という言葉は使ったことがありませんでした・・・が、今回は再帰的な複製、つまりディレクトリ・配下のファイルを含めたWEBサイトの複製について、ブログを書かせて頂こうと思います。
※CentOS7系環境での利用を想定しています
作業の前に
WEBサイトを丸ごと複製させたい時、FTPソフトを使ってローカルPCにダウンロードしてしまうと、ダウンロード・アップロードに時間がかかるのは勿論、パーミッションや所有者の情報は複製先に反映されない事が多々あります。
また環境によってはタイムスタンプも情報が反映されません。
[root@source ~]# ll /var/www/html/ 合計 20 -rw-r--r--. 1 user01 grpwww 85 9月 16 14:50 2016 index.html drwxr-xr-x 3 apache apache 4096 10月 7 16:19 2016 mt drw-------. 2 root root 4096 9月 16 06:40 2016 pass drwxr-xr-x 3 user02 grpwww 4096 9月 28 17:54 2016 user drwxr-xr-x. 5 user01 grpwww 4096 10月 12 13:39 2016 wordpress
[root@destination ~]# ll /var/www/html/ 合計 20 -rw-r--r--. 1 user01 user01 85 7月 10 15:20 2016 index.html drwxr-xr-x 3 user01 user01 4096 7月 10 15:20 2016 mt drwxr-xr-x. 2 user01 user01 4096 7月 10 15:20 2016 pass drwxr-xr-x 3 user01 user01 4096 7月 10 15:20 2016 user drwxr-xr-x. 5 user01 user01 4096 7月 10 15:20 2016 wordpress
rsyncを使う事により、パーミッション・所有者・タイムスタンプ情報そのままにファイルを複製させる事が可能です。
今回は例にあった/var/www/html/を複製させようと思います。
rsyncの準備
rsyncが入っていない時は、先に導入しておきましょう。
# yum -y install rsync
また、rsyncは所有者情報を含め複製してくれますが、複製先にユーザ名やグループ名が存在しないときは、名前では無くユーザID(UID)とグループ(GID)で複製されてしまいます。
[root@destination ~]# ll /var/www/html/ 合計 20 -rw-r--r--. 1 user01 10011 85 9月 16 14:50 2016 index.html drwxr-xr-x 3 apache apache 4096 10月 7 16:19 2016 mt drw-------. 2 root root 4096 9月 16 06:40 2016 pass drwxr-xr-x 3 10010 10011 4096 9月 28 17:54 2016 user drwxr-xr-x. 5 user01 10011 4096 10月 12 13:39 2016 wordpress
複製先でも、事前に複製元と同じユーザ・グループを作っておきましょう。
※必要であれば、所属グループも移行元と同じように調整しましょう。
[root@destination ~]# useradd user01 [root@destination ~]# useradd user02 [root@destination ~]# groupadd grpwww
rsyncをテスト・実行
それでは、複製先からrsyncを行う前に「ドライラン」を行いましょう。
いわゆる事前テストです。
[root@destination ~]# rsync -azvn foo@192.168.1.162:/var/www/html/ /var/www/html/ sent 13844685530 bytes received 1326762 bytes 36528.85 bytes/sec total size is 14212942038 speedup is 6127.37 (DRY RUN)
ドライランで複製内容に問題が無ければ、引数からnを外し、実際に複製してみましょう!
[root@destination ~]# rsync -azvn foo@192.168.1.162:/var/www/html/ /var/www/html/ sent 13844685530 bytes received 1326762 bytes 11289043.86 bytes/sec total size is 14212942038 speedup is 1.03
これで複製完了です!
ファイルのパーミッション・所有ユーザ・タイムスタンプ全てが同期・複製されました。
[root@source ~]# ll /var/www/html/ 合計 20 -rw-r--r--. 1 user01 grpwww 85 9月 16 14:50 2016 index.html drwxr-xr-x 3 apache apache 4096 10月 7 16:19 2016 mt drw-------. 2 root root 4096 9月 16 06:40 2016 pass drwxr-xr-x 3 user02 grpwww 4096 9月 28 17:54 2016 user drwxr-xr-x. 5 user01 grpwww 4096 10月 12 13:39 2016 wordpress [root@destination ~]# ll /var/www/html/ 合計 20 -rw-r--r--. 1 user01 grpwww 85 9月 16 14:50 2016 index.html drwxr-xr-x 3 apache apache 4096 10月 7 16:19 2016 mt drw-------. 2 root root 4096 9月 16 06:40 2016 pass drwxr-xr-x 3 user02 grpwww 4096 9月 28 17:54 2016 user drwxr-xr-x. 5 user01 grpwww 4096 10月 12 13:39 2016 wordpress
注意として、制限をしない限りrsyncはお互いのサーバ同士を最高速度で複製させます。
ファイル数が膨大な際は、長時間相当なネットワーク負荷がかかりますので、bwlimitオプションで帯域制限をかけましょう。
[root@destination ~]# rsync --bwlimit=125 -azvn foo@192.168.1.162:/var/www/html/ /var/www/html/
またrsyncコマンドでディレクトリを指定する際、ディレクトリの指定方法を間違うと、同名ディレクトリに同名のディレクトリが作成されるという恥ずかしい失敗が起こるので、こちらも注意しましょう。
[root@destination ~]# rsync -azvn foo@192.168.1.162:/var/www/html /var/www/html/ sent 13844685530 bytes received 1326762 bytes 11289043.86 bytes/sec total size is 14212942038 speedup is 1.03 [root@destination ~]# ll /var/www/html/ 合計 4 drwxr-xr-x. 2 root root 4096 7月 10 14:34 2017 html
最後に
いかがでしょうか?以外に簡単にWEBサイトの複製が行えたのではないでしょうか。
ただし、サーバーOSや環境が違う際に、今回の方法で全てのWEBサイトが複製出来るわけではありませんので、ご注意頂けますと幸いです。
もしサイトを移行したい・移行が出来るか相談をしたい、という方がいらっしゃれば、是非ネットアシストにお問い合わせください。
様々なお客様のサーバー移設を行った実績から、最適なご提案が出来るかと存じます。
最後までお読み頂き、ありがとうございました。