Memo

メモ > サーバ > 各論: Ansible > Ansibleでrsyncの双方向同期を行う方法

■Ansibleでrsyncの双方向同期を行う方法
rsyncでの双方向同期環境をAnsibleで構築する ■準備 Vagrantで3台のサーバを起動 controllerから他2台のサーバにSSH接続できることを確認
# vi /etc/ansible/hosts
[webservers] 192.168.33.11 192.168.33.12
2台のサーバが対象となるので、両方のサーバを指定する
$ ansible all -m ping $ ansible webservers -m ping
の結果は2台分表示される Playbookを実行する前のこの時点で、 同期元&同期先でrsyncユーザの「ユーザを作成」「キーを作成」「キーの設定」「接続確認」を行っておくと良さそう
$ cd /var/code/apache_php7_mysql_for_rsync/ $ ansible-playbook site.yml --check $ ansible-playbook site.yml
の結果は2台分表示される。1台ずつ順番に…ではなく同時に実行される http://192.168.33.11/ http://192.168.33.12/ それぞれのサーバにブラウザからアクセスできるようになる ■rsync ※ユーザの作成と疎通確認は手動で行っている ※詳細な作業内容は Etcetera.txt の「rsync(一方向同期)」を参考に すでに同期元&同期先で「ユーザを作成」などができている場合はもちろん作業不要 Ansible: rsyncをインストール Ansible: 作業領域を作成 同期元&同期先: ユーザを作成 同期元&同期先: キーを作成 同期元&同期先: キーの設定 同期元&同期先: 接続確認(ポート番号は環境に応じて調整する)
# ssh -p 22 rsync@192.168.33.11 $ exit # rsync -e "ssh -p 22" -avz --delete /var/www/test/html/sync rsync@192.168.33.11:/var/www/test/html
「rsync error: some files/attrs were not transferred」のエラーが表示されるが、以下のようにすれば表示されないみたい
# rsync -e "ssh -p 22" -avzO --delete /var/www/test/html/sync rsync@192.168.33.11:/var/www/test/html
「O」は「ディレクトリのタイムスタンプを保持しない」みたい rsyncでエラーが出たけどコピーはできてる - ごずろぐ http://gozuk16.hatenablog.com/entry/2014/09/30/224900 以下でApacheユーザになって /var/www/test/html/sync 内にファイルを作成し、 rootユーザに戻って rsync コマンドで同期して、双方向に手動同期できることを確認する Ansible: rsyncで双方向自動同期ができるように設定 ■補足 必要に応じて、以下などでファイル作成時の権限を調整するといい
# mkdir /var/www/test/html/sync/wordpress # chown apache. /var/www/test/html/sync/wordpress # chmod 777 /var/www/test/html/sync/wordpress # chmod g+s /var/www/test/html/sync/wordpress
Apacheになってファイルの作成確認などをしたい場合、以下でApacheになれる
# su -s /bin/bash - apache
環境によって差はあるかもしれないが、apacheユーザが作成したファイルの初期パーミッションは 644 となる この状態だと双方向同期先のユーザがファイルを編集できない可能性がある VagrantのCentOS7.2環境で確認すると、umaskの初期値は
$ umask … vagrantユーザで実行 0002 $ umask … apacheユーザで実行 0022 # umask … rootユーザで実行 0022
となっている apacheユーザの状態で以下を実行
$ umask 0002
これにより、以下の状態になる
$ umask … apacheユーザで実行 0002
これでapacheユーザが作成したファイルの初期パーミッションは 664 となる(グループに書き込み権限が与えられる) 「{{ inventory_hostname }}」を参照すればサーバのホスト名を取得でき、これをもとにサーバごとに処理を分岐できる Ansible マジック変数の一覧と内容 - Qiita https://qiita.com/h2suzuki/items/15609e0de4a2402803e9

Advertisement