メモ > サーバ > 各論: エトセトラ > rsync(双方向同期)
rsync(双方向同期)
※web1サーバとweb2サーバの /var/www/html/rsync が双方向に同期したい場合、
「rsync(一方向同期)」の設定を、同期元と同期先を逆にして追加設定する。
※ただしそれだけだと、意図しないファイルの削除や復元が発生する場合がある。
以下の設定を追加することで対応する。
※ロードバランサー経由で複数のWebサーバへアクセスしている際に、同期されるまでのタイムラグが問題になる場合、
スティッキーセッションを使うなどしてアクセスされるサーバを固定するといい。
ただしcurl経由でのリクエストなど、Cookieが扱えずにスティッキーセッションが機能しない場合があるので注意。
lsyncdで双方向同期するなら、delete='running' がいい
http://iga-ninja.hatenablog.com/entry/2015/02/28/230014
rsyncとlsyncdを使ったディレクトリの双方向同期
http://qiita.com/kaihei777/items/5bb4f381c6b4c31be055
lsyncdでサーバ間ファイルを同期をさせてみた
https://www.didgedil.li/2016/07/17/lsyncd/
# vi /etc/lsyncd.conf
sync {
default.rsync,
source = "/var/www/html/rsync",
target = "rsync@10.0.1.17:/var/www/html/rsync",
delay = 2,
delete = "running", … 追加。(意図しないファイルの削除を避ける。)
init = false, … 追加。(意図しないファイルの復元を避ける。)
exclude = {
"*.swp"
},
rsync = {
archive = true,
compress = false,
rsh = "ssh -p 10022"
}
}
# service lsyncd restart
… lsyncdを再起動。
※rsyncに「owner = true」「group = true」を設定すると所有者を含めて複製されるらしいが、反映されなかった。
「同じグループのユーザからはファイルの読み書きを許可する」のような指定ができないことになり、これだと問題がある。
仮に「web-userでアップロード&web-userで同期」としても
PHPが作成したファイルやディレクトリは所有者apacheとなり、同期によってやはり所有者が変わることになる。
同期はrsyncユーザで行い、「FTPでアップロードするのはweb1のみで、web2には原則としてアップロードしない」なら運用できるかも。
※上の解決策。前提として所有者は含めない方が、アップロードされたファイルなのか同期されたファイルなのかが明確になって良さそう。
代わりに
chmod g+s /var/www/html/rsync
として、rsyncディレクトリ内で作成されたファイル・ディレクトリのグループを親ディレクトリのグループに合わせると良さそう。
そうすればファイルの読み書きに支障はなくなるし、アップロードされたのか同期されたのかも明確になる。
Advertisement