はじめに
■rsyncコマンドとは
サーバ間でファイル、ディレトリを同期させることが出来るコマンド
■コマンド書式
# rsync [option] SOURCE1 [SOURCE2]... DEST
※SOURCE は 複数選択可能
※SOURCE で指定するディレクトリ名の最後にスラッシュを付けた場合、ディレクトリ内をコピーする。スラッシュを付けない場合は、ディレクトリごとコピーする。
※DEST で指定したディレクトリが存在しない場合は、自動的に作成される。
■今回の目的
rsync を デーモンモードで動作させ、rsyncサーバとして利用する
rsync を デーモンモードで動作させ、rsyncサーバとして利用する
■参考サイト様
rsync でディレクトリの同期(バックアップ)
rsyncによるファイル/ディレクトリの同期 - Server World
環境
■構成(AWS EC2)
用途 | ホスト名 | Private IP |
---|---|---|
rsyncサーバ | Mitzi-veri | 10.0.1.108 |
rsyncクライアント | Mitzi-dev | 10.0.2.138 |
■ミドルウェア
- CentOS 6.5
- rsync 3.0.6
- xinetd 2.3.14
①rsyncサーバ側(同期元) の 設定
■セキュリティグループ
互いが所属するネットワークアドレス に対して、rsyncデーモンモードのデフォルトLISTENポート873番を開放する。
今回だと、 10.0.0.0/16
TCP 873
を開放する
■ xinetdとrsyncを導入
# yum install xinetd rsync
■設定
▽xinetd経由でrsyncを起動する設定
# vi /etc/xinetd.d/rsync
--------------------
# default: off
# description: The rsync server is a good addition to an ftp server, as it \
# allows crc checksumming etc.
service rsync
{
disable = no ←変更
flags = IPv6
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
▽rsyncの設定ファイルを新規作成
# vi /etc/rsyncd.conf
--------------------
#--------------
# Global options
#--------------
uid = root
gid = root
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 10.0.0.0/16
hosts deny = *
dont compress = *.gz *.tgz *.zip *.pdf *.sit *.sitx *.lzh *.bz2 *.jpg *.gif *.png
#--------------
# Module options
#--------------
[tmp]
comment = rsync server
path = /tmp/mitzi
use chroot = true
auth users = rsync_user1, rsync_user2
secrets file = /etc/rsyncd.secrets
read only = false
exclude = *.mp
include = *.mp30
■各モジュールオプションの説明:
オプション | 説明 |
---|---|
uid/gid | rsyncをデーモンモードで起動する時の UID/GIDを指定 |
log file/pid file | rsyncデーモンの動作ログと、PID ファイルを指定 |
hosts allow | 接続を許可するクライアントのホスト名とIPアドレスのパターンを指定。スペース区切りで複数指定 |
hosts deny | 接続を拒否するリスト。 ※"hosts allow"、"hosts deny"どちらにもマッチしなかった場合、その接続元は接続許可 |
dont compress | 転送の際に圧縮したくないファイル名を指定 (既に圧縮されたファイルを指定するのが有効) |
[] | 上記だと[tmp]の箇所をモジュールといい、rsync プロトコルのマウントポイントのようなもの。複数設定可能 |
path | モジュールのルートにするパス(マウントポイント)を指定(コピー先) |
use chroot | デフォルト"true"。その場合、ファイル転送する前に "path" で chroot |
read only | クライアントがファイルをアップロードできるかどうかを設定。"true"ならばアップロード出来ない |
auth users、secrets file | ユーザ認証する場合,slave側に設定する(ユーザ名とパスワード設定ファイルを指定する) |
exclude | 除外リストを指定 |
include | 除外すべきでないリストを指定 |
■ユーザ認証をする場合 | |
▽上記で設定した認証リストファイルを作成する |
# vi /etc/rsyncd.secrets
--------------------
rsync_user1:password
rsync_user2:password
# chmod 600 /etc/rsyncd.secrets
※01. /etc/rsyncd.secrets ファイルの所有者は rsync デーモンを実行するユーザーに設定し(rsyncd.conf の uid)さらに、ファイルのパーミッションを 600にする必要がある。
そのように設定していないと、rsyncコマンド実行時に以下エラーが発生する。
@ERROR: auth failed on module tmp
rsync error: error starting client-server protocol (code 5) at main.c(1503) [receiver=3.0.6]
※02. passwordに設定には文字数制限があるようです。 【2016/03/29 追記】
・公式ドキュメント(日本語版)より
http://www.infoscience.co.jp/technical/rsync/rsyncd_conf.html
パスワードには様々な文字が 入りますが、多くの OS ではクライアントが入力するパスワード長を制限しています。おそらく 8 文字以上 では認証できません。
■xinetd自動起動設定、スタート
# chkconfig xinetd on
# service xinetd start
※この状態で、"xinetd"を起動すると、"rsync"がデーモンモードで利用できるようになります。
②rsyncクライアント側(同期先) の 設定
■rsyncのインストール
# yum install rsync
■ユーザ認証をする場合
▽rsyncサーバに認証接続するときのパスワードファイルを設定
# vi /etc/rsync.passwd
--------------------
password
※パスワードのみ記述する
# chmod 600 /etc/rsync.passwd
※/etc/rsync.passwd ファイルの所有者は rsync を実行するユーザーに設定しさらに、ファイルのパーミッションを 600にする必要がある。
そのように設定していないと、rsyncコマンド実行時に上述したものと同様のエラーが発生する。
③動作確認
▽rsyncクライアントより下記コマンド実行
# rsync -avz --password-file=/etc/rsync.passwd rsync://rsync_user1@10.0.1.108/tmp /var/www/test
※rsyncサービスを起動しておく必要はない
▽結果
[root@Mitzi-dev www]# pwd
/var/www
[root@Mitzi-dev www]# ll
合計 16
drwxr-xr-x 2 root root 4096 7月 23 23:18 2014 cgi-bin
drwxr-xr-x 3 root root 4096 9月 4 15:42 2014 error
drwxr-xr-x 2 root root 4096 7月 23 23:18 2014 html
drwxr-xr-x 3 root root 4096 9月 4 15:43 2014 icons
[root@Mitzi-dev www]# rsync -avz --password-file=/etc/rsync.passwd rsync://rsync_user1@10.0.1.108/tmp /var/www/test
receiving incremental file list
created directory /var/www/test
./
rsync-test.html
sent 82 bytes received 173 bytes 510.00 bytes/sec
total size is 12 speedup is 0.05
[root@Mitzi-dev www]# ls -l /var/www/test/
合計 4
-rw-r--r-- 1 root root 12 9月 8 17:32 2014 rsync-test.html
(testディレクトリと配下のファイルがコピーされた)
④定期的に同期するよう設定
例としてrootアカウントのcrontabに設定してみます。
# crontab -e
-------------
*/5 * * * * /usr/bin/rsync -avz --password-file=/etc/rsync.passwd rsync://rsync_user1@10.0.1.108/tmp /var/www/test
※5分毎に同期する設定
※同期元にないファイルを削除したい場合は、「--delete」オプションを付与
※--exclude-from=/etc/rsync_exclude.lst のように設定し、除外リストを作成することも可能
まとめ
これでサーバ間の同期処理が出来るようになりました。
次回はlsyncdを利用したリアルタイム同期を整理してみたいと思います。
以上になります。