Memo

メモ > サーバ > 各論: エトセトラ > rsync(一方向同期)

■rsync(一方向同期)
※web1サーバの /var/www/html/rsync の内容を、web2サーバの /var/www/html/rsync に同期 ※rsyncが同期のためのコマンド。ただし手作業でコマンドを実行する必要がある lsyncdを使うと、ほぼリアルタイムに自動同期させることができる という関係性みたい 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
■同期元サーバ:lsyncdインストール
# yum -y install epel-release # yum install --enablerepo=epel lsyncd
以下で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 ■同期元サーバ:自動同期設定
# 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