あちこちにある客先のファイルサーバのデータをデータセンタにあるバックアップサーバにバックアップしたい。
やりたいこと
rdiff-backupで世代バックアップしているので、そのバックアップフォルダをバックアップサーバ側にrsync。バックアップサーバから実行する。(Pull方式)
リモート側で『PermitRootLogin yes』したくない。
→リモートでrsyncコマンドをsudo実行するユーザを限定→『–rsync-path』オプションでリモート側のrsyncをsudoで実行する。
リモート側はADSL回線なので、動的IP。(DDNSで名前解決出来るようにした。)
リモート側サーバでやったこと
バックアップサーバIPのssh接続を許可。
公開鍵認証でバックアップサーバからhogehogeがssh接続出来るようにしておく。
sudersに追加
# visudo hogehoge ALL=(ALL) NOPASSWD: /usr/bin/rsync #追記
sudoするスクリプトを準備
$ cat /home/hogehoge/scripts/rsync.sh #!/bin/sh /usr/bin/sudo /usr/bin/rsync $*
バックアップサーバ側
サーバ『fuga.kyoyu-kun.example.co.jp』の『/media/backup/backup/』を『/mnt/disk/6/kyoyukun_backup/fuga/rsync』にrsyncするコマンド。
# /usr/bin/rsync -auvz -e ssh --rsync-path="/home/hogehoge/scripts/rsync.sh" --delete --dry-run hogehoge@fuga.kyoyu-kun.example.co.jp:/media/backup/backup/ /mnt/disk/6/kyoyukun_backup/fuga/rsync
はまったところ。
リモート側でroot権限で読み取る方法はこちら(sudo + rsync on CentOS 5@(・∂/Sheeplogh.)から参考にさせていただきましたが、『–rsync-path=”sudo rsync”』とすると、シェルスクリプト内で実行すると下記のようなエラーになった。(コマンドラインで実行は問題ない。)
Unexpected remote arg: hogehoge@fuga.kyoyu-kun.example.co.jp:/media/backup/backup/ rsync error: syntax or usage error (code 1) at main.c(1201) [sender=3.0.6]
最終的なシェルスクリプトはこんな感じ。
https://github.com/furu-nob/pull_rsync/blob/master/pull_rsync.sh
あとでみるメモ。
上り回線がボトルネックになるので問題なさそうだけど、リモート側で負荷を調整したい場合。
rsyncの負荷を抑える方法@理想未来はどうなった?