Memo

メモ > サーバ > 各論: エトセトラ > 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-rsa xxxxxxxxxx … 作成した公開鍵の内容を全てコピーして貼り付ける。
# chmod 600 /home/rsync/.ssh/authorized_keys … authorized_keysのパーミッションを変更。 # chown -R rsync:rsync /home/rsync … ユーザディレクトリの所有者を変更。
■同期元サーバ:接続確認 同期元サーバから同期先サーバへSSH接続を確認。 接続できなければ、鍵ファイルやや上位ディレクトリの所有者とパーミッションを確認する。 (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

Advertisement