メモ > サーバ > 各論: エトセトラ > rsync(一方向同期)
rsync(一方向同期)
※web1サーバの /var/www/html/rsync の内容を、web2サーバの /var/www/html/rsync に同期。
rsyncとlsyncdでEC2サーバーを同期する
http://qiita.com/katsukii/items/5c2cbd8f69ffd7cb213f
lsyncとrsyncを使ったリアルタイム同期
https://systemexpress.co.jp/centos/lsyncrsync.html
CentOSにおけるファイル同期(lsyncd+rsync) | 静岡県浜松市・関東 -Web制作・開発なら株式会社WETCH(ウェッチ)
https://www.wetch.co.jp/note/centos%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%95%E3%82%A1%E3%82%A4%E...
ポートや鍵のファイルを指定
http://ikm.hatenablog.jp/entry/2013/05/27/140336
■同期元サーバ:キーを作成
※rootユーザ、保存先はデフォルトのまま、パスワードなしで作成する場合。
# ssh-keygen -t rsa
# cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAA 〜略〜 93ciNXZFZSlzXfqfZwD/7809G7 root@web1.refirio.net
■同期先サーバ:ユーザを作成
※rsyncが配置したファイルだと分かるように、同期用にrsyncユーザを作成する場合。
# useradd rsync
# usermod -G wheel rsync
# usermod -a -G apache rsync
# visudo
■同期先サーバ:キーの設定
※同期用ユーザが接続できるようにする
# %wheel ALL=(ALL) ALL
%wheel ALL=(ALL) ALL … コメント解除していなければ解除。
# mkdir -p /home/rsync/.ssh … 公開鍵格納用ディレクトリを作成。
# chmod 700 /home/rsync/.ssh … 公開鍵格納用ディレクトリのパーミッションを変更。
# vi /home/rsync/.ssh/authorized_keys … 公開鍵をauthorized_keysに保存。
■同期元サーバ:接続確認
同期元サーバから同期先サーバへSSH接続を確認。
接続できなければ、鍵ファイルやや上位ディレクトリの所有者とパーミッションを確認する。
(rsyncユーザから読み込めるようにする。)
ssh-rsa xxxxxxxxxx … 作成した公開鍵の内容を全てコピーして貼り付ける。
# chmod 600 /home/rsync/.ssh/authorized_keys … authorized_keysのパーミッションを変更。
# chown -R rsync:rsync /home/rsync … ユーザディレクトリの所有者を変更。
# ssh -p 10022 rsync@10.0.1.17
以下でrsyncコマンドの動作を確認できる。
# rsync -e "ssh -p 10022" -avz --delete /var/www/html/rsync rsync@10.0.1.17:/var/www/html
「rsync error: some files/attrs were not transferred」のエラーが表示される場合、以下のようにすれば表示されないみたい。
# rsync -e "ssh -p 10022" -avzO --delete /var/www/html/rsync rsync@10.0.1.17:/var/www/html
「O」は「ディレクトリのタイムスタンプを保持しない」みたい。
rsyncでエラーが出たけどコピーはできてる - ごずろぐ
http://gozuk16.hatenablog.com/entry/2014/09/30/224900
■同期元サーバ:lsyncdインストール
# yum -y install epel-release
# yum install --enablerepo=epel lsyncd
# vi /etc/lsyncd.conf … 自動同期設定
■同期元サーバ:動作確認
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.stat",
maxProcesses = 2,
statusInterval = 1,
insist = 1
}
sync {
default.rsync,
source = "/var/www/html/rsync",
target = "rsync@10.0.1.17:/var/www/html/rsync",
delay = 2,
exclude = {
"*.swp"
},
rsync = {
archive = true,
compress = false,
rsh = "ssh -p 10022"
}
}
# service lsyncd start … lsyncdを起動。
# chkconfig --add lsyncd
# chkconfig lsyncd on … lsyncdの自動起動を設定。
# tail /var/log/lsyncd/lsyncd.log … 同期されるたびにログが記録される。
何も記録されていない場合、以下で設定ファイルの文法チェックをするといい。
# lsyncd -nodaemon -log scarce /etc/lsyncd.conf
以下で指定したファイルは、環境によってはあらかじめ作成しておく必要があるかも?
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.stat",
lsyncdでサーバ間のファイルを双方向に同期させる
https://2017.l2tp.org/archives/314
以下のようなエラーが表示される場合、ディレクトリやファイルのパーミッションを確認する。
直上のディレクトリのパーミッションが大丈夫でも、さらに上位のディレクトリのパーミッションも影響する。
rsync: ERROR: cannot stat destination "/home/centos/html": Permission denied (13)
rsync error: errors selecting input/output files, dirs (code 3) at main.c(565) [Receiver=3.0.9]
rsync: connection unexpectedly closed (9 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]
今回の場合、以下のように「centos」のパーミッションが原因で同期できなかった。
「chmod 0775 centos」とすれば同期できるようになった。(アクセスをグループで制御しているものとする。)
パーミッション最後のピリオドは、SELinuxに由来するもので関係ない。
# cd /home
# ll
合計 0
drwx------. 3 centos centos 133 12月 5 15:34 centos
drwx------ 3 rsync rsync 95 12月 2 21:46 rsync