レンタルサーバー・自宅サーバー設定・構築のヒント
レンタルサーバー・自宅サーバー設定・構築のヒント - レンタルサーバー・自宅サーバーの設定・構築情報を公開しています。

rsync + ssh でファイルの同期をとる

2011年1月13日 2014年1月16日
rsync

今回は、サーバー間でのファイルの同期についてです。

ウェブサーバーを複数立ち上げて分散化を図った場合、ページ更新するにしても、全ての立ち上げたウェブサーバーへ更新ファイルをアップロードしないといけません。
こんなとき、rsync + ssh を使ってサーバー間のファイル(ディレクトリを含む)の同期をとっておくと便利です。

同期をとるように設定しておけば、マスターとなるウェブサーバーに対してのみ更新ファイルのアップロードを行えば、 時間経過とともに、全ての立ち上げたウェブサーバーが更新されていきますから、非常に楽ですよね。

では、早速、その手順を簡単に解説してみます。

通常、CentOS , ScientificLinux では、すでにインストールされているので、そのまま利用することができます。
最新版が良い場合は、http://rsync.samba.org/download.htmlからrpmをダウンロードし、インストールすることもできます。

デフォルトでは、以下のディレクトリにインストールされています。
$ which rsync
/usr/bin/rsync

また、Debian , Ubuntu では、デフォルトでインストールされていないことがあります。もしインストールされていないようなら、aptでインストールしましょう。 ( CentOS , ScientificLinux では、yum でインストールしましょう。)
$ aptitude install rsync
...

ここでは、SSHコマンドも使用します。
もし、SSHコマンドがインストールされていない場合は、インストールしておきます。
CentOS , ScientificLinux
$ yum install openssh-clients
...
Debian , Ubuntu
$ aptitude install openssh-client
...

rsyncを使ってみる

まずは、rsyncを手動で使ってみましょう。
以下の例では、
コピー元サーバーは、自サーバー、
コピー先サーバーは、IPアドレス: 111.122.133.144 としています。

$ rsync -auz --delete -e ssh /var/www/html/ ruser@111.122.133.144:/var/www/html/ 
上記のコマンドイメージでは、

コピー元サーバー のディレクトリ /var/www/html/

コピー先サーバー(IPアドレス : 111.122.133.144)
ディレクトリ /var/www/html/ へコピーします。

コピーするために、sshでコピー先サーバーへユーザ名:ruserでログインします。
コピー先サーバーには、ruserというユーザが、既に登録されていなければなりません。
ユーザ登録コマンドイメージ
$ useradd ruser
$ passwd ruser
Changing password for user ruser.
New UNIX password:return
Retype new UNIX password:return
passwd: all authentication tokens updated successfully.
$ 

ファイルをコピーする場合、以下の条件に従います。(オプションの意味です)
-u : 更新日時を確認して、コピー先サーバーのファイルが古い場合は、コピーします。
–delete : コピー元サーバーに存在しないファイルが、コピー先サーバーで見つかった場合、そのファイルは削除します。

また、
-z : 転送時圧縮して転送します。

その他、オプションは、以下のようなものが存在します。
 -v, --verbose               転送情報を詳しく表示
 -q, --quiet                 転送情報を表示しない
 -c, --checksum              常にチェックサムを行う
 -a, --archive               アーカイブモード(-rlptgoD オプションと同義)
 -r, --recursive             ディレクトリで再帰的に実行する
 -R, --relative              相対パス名を使う
 -b, --backup                バックアップを作成する (デフォルトで ~ が付く)
     --suffix=SUFFIX         バックアップのサフィックスを変更
 -u, --update                アップデートのみ許可 (上書き禁止)
 -l, --links                 ソフトリンクを維持する
 -L, --copy-links            ファイルのようにソフトリンクを扱う
     --copy-unsafe-links     送信側ツリー外のリンクをコピー
     --safe-links            受信側ツリー外のリンクを無視
 -H, --hard-links            ハードリンクを維持する
 -p, --perms                 パーミッションを維持する
 -o, --owner                 オーナーを維持する (root のみ)
 -g, --group                 グループを維持する
 -D, --devices               デバイスを維持する (root のみ)
 -t, --times                 タイムスタンプを維持する
 -S, --sparse                密度の低いファイルを効率的に扱う
 -n, --dry-run               実行時の動作だけを表示
 -W, --whole-file            rsync アルゴリズムを使わない
 -x, --one-file-system       再帰的に実行された時にファイルシステムの境界を横断しない
 -B, --block-size=SIZE       rsync アルゴリズムのチェックサムブロックサイズの制御(default 700)
 -e, --rsh=COMMAND           rsh の代替を指定
     --rsync-path=PATH       リモートのマシーンで rsync のコピーへのパスを指定
 -C, --cvs-exclude           システム間で転送したくない広範囲のファイルを除外(CVSの方法と同じ)
     --delete                送信側にないファイルを削除
     --delete-excluded       受信側にある exclud ファイルも削除
     --partial               転送途中のファイルを保存します
     --force                 ディレクトリが空でなくても削除
     --numeric-ids           ユーザとグループの id 番号を転送して、転送後にマッピング
     --timeout=TIME          IO タイムアウトを設定(秒)
 -I, --ignore-times          タイムスタンプとファイルサイズのチェックをしない
     --size-only             タイムスタンプのチェックをしないで、ファイルサイズのチェックだけをする
 -T  --temp-dir=DIR          tmp ファイルのディレクトリを指定
     --compare-dest=DIR      受信側のファイルと比較するための追加ディレクトリ
 -z, --compress              受信ファイルを圧縮compress file data
     --exclude=PATTERN       パターン一致するファイルを除外
     --exclude-from=FILE     ファイルに記述されたパターンと一致するファイルを除外
     --include=PATTERN       パターン一致するファイルを除外しない
     --include-from=FILE     ファイルに記述されたパターンと一致するファイルを除外しない
     --version               rsync のバージョンを表示する
     --daemon                rsync をデーモンとして走らせる
     --config=FILE           別の rsyncd.conf ファイルを指定
     --port=PORT             別の rsync ポート番号を指定
     --stats                 rsync アルゴリズムの転送効率を表示
     --progress              転送中の情報を表示
     --log-format=FORMAT     ログフォーマットを指定
     --password-file=FILE    ファイルからパスワードを得る
 -h, --help                  このヘルプを表示する

sshのポート番号がデフォルトの22でない場合は、以下のように指定します。
以下の例では、ポート番号が10022の場合としています。

$ rsync -auz --delete -e "ssh -p 10022" /var/www/html/ ruser@111.122.133.144:/var/www/html/ 

この後、パスワード確認があるので、パスワードを入力し、処理を続行します。

$ rsync -auz --delete -e ssh /var/www/html/ ruser@111.122.133.144:/var/www/html/ 
The authenticity of host '111.122.133.144 (111.122.133.144)' can not be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)? yesreturn
Warning: Permanently added '111.122.133.144' (RSA) to the list of known hosts.
ruser@111.122.133.144's password:return

$ 

Are you sure you want to continue connectingは、yesを入力しリターンします。
ruser@111.122.133.144’s password:は、ruserのパスワードを入力しリターンします。

ログインできれば、ファイルの同期が実施されます。
最初は、ファイル数にもよりますが、多少時間がかかります。

2回目以降は、新規作成、更新、削除したファイルのみが制御されますので、通常は、すぐに終わります。

rsyncを使って自動で同期をとるようにする

ここまでで、rsyncを手入力することで、ファイルの同期をとることができました。
続けて、これを自動化しようと思います。

自動化といえば、cronですね、

ただ、cronを使うには、パスワード入力などのコンソールにおける対話をなしにする必要がありますね。
sshでは、rsaを使った公開キーファイル、秘密キーファイルを元にログインを自動化することができます。

sshの自動ログインの手順を簡単に解説します。
(参照 : TeraTermで 公開鍵認証(鍵交換)を使ってSSH 接続してみる )

  1. コピー元サーバーでrsyncのcronを実行するユーザでログインします

    cronを実行するためのユーザをここでは、ouserとしています。

    ここでは、説明をわかりやすくするためにouserruserを使い分けていますが、 ほとんどの場合、同じユーザ名になるでしょう。
    $ su ouser
    password:
    $ 

  2. ouserのホームディレクトリに.sshの名前でディレクトリを作成します
    $ cd ~
    $ pwd
    /home/ouser
    $ mkdir .ssh
    $ 

    この例では、/home/ouser/.ssh というディレクトリが作成されたことになります。


  3. ouserでrsaを使った公開キーファイル、秘密キーファイルを作成します
    $ ssh-keygen -t rsa
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/ouser/.ssh/id_rsa):return
    Enter passphrase (empty for no passphrase):return
    Enter same passphrase again:return
    Your identification has been saved in /home/ouser/.ssh/id_rsa.
    Your public key has been saved in /home/ouser/.ssh/id_rsa.pub.
    The key fingerprint is:
    xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx ouser@example.com
    
    $ cd .ssh
    $ ls
    id_rsa  id_rsa.pub

    全てのEnter …. : の箇所では、何も入力せずにリターンでOKです。

    id_rsa.pub : 公開キーファイル
    id_rsa : 秘密キーファイル

    となります。


  4. コピー先サーバーruserのホームディレクトリに.sshというディレクトリを作成します
    $ su ruser
    password:
    $ cd ~
    $ pwd
    /home/ouser
    $ mkdir .ssh
    $ 

  5. コピー元サーバーで作成したid_rsa.pub : 公開キーファイルコピー先サーバーruserのホームディレクトリ/.sshへアップロードします。
    $ scp id_rsa.pub ruser@111.122.133.144:~/.ssh/
    The authenticity of host '111.122.133.144 (111.122.133.144)' can not be established.
    RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
    Are you sure you want to continue connecting (yes/no)? yesreturn
    Warning: Permanently added '111.122.133.144' (RSA) to the list of known hosts.
    ruser@111.122.133.144's password:return
    id_rsa.pub                                              100%  404     0.4KB/s   00:00
    
    $ 
    scpもsshと同じポートを使います。そのためsshで22番ポートを使っていない場合は、-Pオプションを使います。
    以下の例では、ポート番号が10022の場合としています。
    $ scp -P 10022 id_rsa.pub ruser@111.122.133.144:~/.ssh/ 

  6. コピー先サーバーへアップロードされたid_rsa.pub : 公開キーファイルのファイル名をauthorized_keysへ変更します
    $ cd .ssh
    $ mv id_rsa.pub authorized_keys
    $ 

    これで完了。
    コピー元サーバーから、コピー先サーバーへsshでログインしてみましょう。

    $ ssh ruser@111.122.133.144

    パスワードを聞かれずにログインできればOKです。

    sshのポート番号がデフォルトの22でない場合は、以下のように指定します。
    以下の例では、ポート番号が10022の場合としています。
    $ ssh -p 10022 ruser@111.122.133.144

最後に、コピー元サーバーでcronに登録して完了です。

$ crontab -e
...

*/5 * * * * rsync -auz --delete -e ssh /var/www/html/ ruser@111.122.133.144:/var/www/html/ > /var/log/rsync 2>&1
...

この例では、5分間隔で同期をとるようにしています。
また、複数のサーバーと同期をとりたい場合は、ここまでの手順と同じようにユーザの設定を行い、ここのcronの設定にサーバー分列挙することになります。

ざっとこんな感じです。

この同期設定を行っておくと、サーバーの分散化が楽になるでしょう。
まずは、お試しあれ。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない検索ができないことがあります。


関連記事 :

lftp + sftp(ssh) でファイルの同期をとる

以前に rsync + ssh でファイルの同期をとる にて rsync + ssh を利用してファイルの同期をとる 方法について簡単に解説しま ...

rsync + ssh でファイルの同期をとる(2) マスターサーバー(コピー元サーバー)でないサーバーへファイルをアップロードした時のリカバリの仕方

以前のrsync + ssh でファイルの同期をとるでサーバー間でのファイルの同期について話をしました。 rsyncを使うと1回のFTPア ...

sshpassを使ってパスワード指定のSSH接続を行ってみる(パスワード指定自動ログイン)

今回は、SSHです。 sshpass( Non-interactive ssh password authentication ) を使う ...

SSHコマンドで 公開鍵認証(鍵交換)を使ってSSH 接続してみる

以前に、TeraTermで 公開鍵認証(鍵交換)を使ってSSH 接続してみる でTeraTerm を使った公開鍵認証(鍵交換認証)を ...

ConoHa VPS, お名前.com VPS で提供される SSH Private Keyは、使わない方が良い理由

ConoHa VPS, お名前.com VPS では、SSH Private Key のダウンロードができます。 これは、以下の目 ...


5 件 コメントがあります。 コメントを投稿する
  1. […] […]

  2. […] via rsync + ssh でファイルの同期をとる http://sakura.off-soft.net/centos/rsync-ssh.html […]

  3. Hiroon
    2012年10月25日, 8:40 AM

    実行例にある、111.222.333.444 という IPv4 アドレスはあり得ないので、修正された方がよいと思います.重要な情報がわかりやすくかかれているのに、これでは「画竜点睛を欠く」だと思います。

  4. 管理人
    2012年10月25日, 1:33 PM

    Hiroon さん、

    管理人です。
    コメントありがとうございます。おっしゃるとおりかもしれませんね。例だとしても、知っている人にとっては、ちょっと違和感有りですかね。

    とりあえず、最大値255を下回るように、
    111.222.333.444 → 111.122.133.144 に変更してみました。

    でも、このパターンの記事がいっぱいありますので、ぼちぼち修正していきます。

    ご指摘ありがとうございました。また、何かあれば、ご指摘くださいませ。

  5. […] […]


コメントを投稿 :

お名前 *

メールアドレス *
( メールアドレスが公開されることはありません。)

サイトアドレス

コメント *

* 印の項目は、入力が必要な項目です。




最近投稿の記事

[ 画像提供元 : Amazon ] 先日、1TBのディスクの入れ替え時にバックアップをとろうとディスクコピーを行いました。 その際 ...

Windows で Linux ファイルシステム Ext4 のディスクをマウントするには? Ext3Fsd が、おそらく、最も簡単なツール ...

今回は、Windows で Compass を使ってみました。 Compass とは、 Sass(サス、Syntactica ...

今回は、Anti Adblock を使ってみました。 Anti Adblock とは、 そもそも Adblock という ウェブ ...

デスクトップ環境でない サーバーで、Webページのキャプチャー画像をコマンドで撮る には、wkhtmltoimage, CutyCapt ...


さくらのVPS 全プラン リニューアルです。(石狩(北海道)も選択可)


root権限ありで ¥685 / 月 ~ と非常にリーズナブルな CPU 1(core)の 512 プランから、 最高 CPU 10(core), メモリ 32(GB), SSD容量 800(GB) までとプランが充実。
ディスクは、SSDとHDDの選択が可能になった他、データセンターは人気の東京、石狩(北海道)となりました。

また、どのプランでも好きなOSが選べます
( CentOS, Fedora, Scientific Linux, FreeBSD, Ubutu, Debian )

管理人もおすすめのVPSです。
試用期間がありますから、一度、お試しを!!

詳しくは、http://vps.sakura.ad.jp/さくらのVPSのサイトへ へどうぞ!!

カテゴリ


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。
最近、スワップにも対応した Serverman@VPS は、かなりリーズナブルかもです。

  • メモリ1GB~2GBのEntryプラン :月額:490円
  • メモリ2MB~4GBのStandardプラン :月額:980円
  • メモリ4GB~8GBのProプラン :月額:1,980円

新規申し込みで1ヶ月間完全無料となるキャンペーンを実施中です。
Serverman@VPSの特徴は、安さとIPv6対応です。また、初期設定費0円もポイントです。

IPv6でちょっと遊んでみたい方には、おすすめかもしれませんね。最低利用期間もありませんから、気に入らないときは即解約もできます。

Serverman@VPSの詳細については、 http://dream.jp/vps/ Serverman@VPSのサイトへへどうぞ。



KVM採用 ConoHa VPSは、時間単位で借りれる便利なVPSです。


ConoHa VPS は、初期設定費0円最低利用期間無し時間単位で清算可能、 さらに、Web APIを使って自動化を図ることもできる便利なVPSです。

海外サーバー設置も可能で、ローカル接続にも対応と、かなり、機能豊富なサーバーです。

新規ユーザ登録で、クーポンもらえますから、まずは、お試しですね。

ConoHa VPSの詳細については、
http://www.conoha.jp/ へどうぞ。

KVM採用 お名前.com VPS(KVM) 2G プラン 初期設定費無料 キャンペーン 実施です。


メモリ2GBプラン CPU:3core、Disk:200GB
月額:1,153円から (初期設定:1,680円0円)

さくらのVPSがリニューアルされてもなんのその。
1GBメモリ / 2Core を ¥834 – の格安価格で提供中です!
間違いなくスペックからすると割安感ありです。
年間割引時の途中解約で返金がないのは、 ちょっと残念ですが、それでもこの割安感は魅力です。

まずは、お試しですね。

お名前.com VPS(KVM)の詳細については、
http://www.onamae-server.com/vps/ へどうぞ。(お試し期間が15日あります。)



  • ソーシャルブックマーク

  • はてなブックマークへ追加するはてな登録数
ページトップへ
Time : 0.2267 [s]