転載・引用について

ユーザ用ツール

サイト用ツール


tweet:2018:0730_01

WordPressをUnisonで同期する

WordPressをFreeBSD上で稼働させている。 このWordPressはサービスサイトなので、可能な限りサービスを停止したくない。

こういう時には、冗長構成を取りたいのだが、WordPressの場合、記事はDBで管理しているので分散は簡単なのだが、ファイルはWordPressのwp-contentsに配置されているため、迂闊なことをすると破損する可能性がある。

しかし、今回の場合、幸いなことに、Realtime Synchronizationを行う必要はないので、unisonで同期することにする。

なお、もし Realtime Syncをしたいのならば、Linuxでlsyncdを利用して頑張るしかないので、かなり辛いことになる。

基本構成

FreeBSD上にNGINX+PHP-FPM+MariaDBを利用してWordPressを構築していることとする。

MariaDBの同期に関しては、Semi-Sync Replicationを利用しているが、これに関してはすでに本サイト上に記事があるのでそちらを確認のこと。

/data/www/wordpress にすでにWordPress環境が構築されているものとする

UnisonのInstall

もちろんGUIなんて必要ないので、pkg install unison-nox11を導入する。

unisonで同期したいファイルは、nginxの実効UIDになるので確認すると、www:wwwだった。従って、~wwwを作成する必要がある。

vipwを利用して、~www関連の設定をする。

  • sudo vipw
    • HomeDir : /home/www
    • login shell : /bin/sh
  • sudo mkdir ~www;chown www:www ~www
  • passwd www
    • www用のpasswordを設定すること
  • su www
    • ssh-keygen -t ed25519
      • 自動での作業になるので、passphraseは設定しないこと

UNISONの設定

現代のWordPressは自動で自身を更新する機能があり、その結果、迂闊にUNISONで同期すると、同期に失敗することがある。なので、WordPress本体は同期せず、wp-content のみを同期する方針で進める。

Wordpressの準備

  1. まず、1台、WordPressをClean Installする
  2. 最小限の動作確認
  3. /data/www/wordpressをClone先のマシンに転送して展開

Unisonで同期

  1. wwwになって、以下のコマンドを実行し、wp-content を同期する
    • /usr/local/bin/unison -batch -confirmbigdel=false /data/www/wordpress/wp-content ssh:www@targetdata/www/wordpress/wp-content
    • これで、target側でDirectoryが同期されていることを確認する。
  2. 逆方向も確認する。
    • /usr/local/bin/unison -batch -confirmbigdel=false /data/www/wordpress/wp-content ssh:www@originaldata/www/wordpress/wp-content
    • 逆方向で、何も置き換えが発生しなければOK

shell scriptの設置

設定をunisonの設定ファイル (~/.unison/default.prf) に記述することも可能だが、どうせUNISONをcronで起動するので、いっそshell scriptにする。

unison.sh
/usr/local/bin/unison -batch -confirmbigdel=false /data/www/wordpress/wp-content ssh://www@target//data/www/wordpress/wp-content

このunison.sh~www/binに設置する

UnisonをCronで動作させる

Unisonで同期する際には、同期時刻がかぶらないようにしておくべきである。 (特に問題が発生するという情報はないが、問題になりかねない状況は作らない方が良い)

また、今回のサイトは更新頻度が低いので、同期頻度を5分程度にする。 Unisonは基本的に双方向同期なので、

  • Original: 05,15,25,35,45,55
  • Target : 00,10,20,30,40,50

でcronからshell scriptを呼び出すものとする。

  • wwwになる
  • crontab -e で以下の設定を投入
    • Original
      SHELL=/bin/sh
      PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
       
      #minute	hour	mday	month	wday	command
      5,15,25,35,45,55  * *   *       *       /bin/sh /home/www/bin/syncwp.sh
    • Target
      SHELL=/bin/sh
      PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
       
      #minute	hour	mday	month	wday	command
      0,10,20,30,40,50  * *   *       *       /bin/sh /home/www/bin/syncwp.sh

これで、/var/log/cron.logにShellscriptの実効logが出ればOK

このウェブサイトはクッキーを使用しています。 Webサイトを使用することで、あなたはあなたのコンピュータにクッキーを保存することに同意します。 また、あなたはあなたが私たちのプライバシーポリシーを読んで理解したことを認めます。 同意しない場合はウェブサイトを離れてください。クッキーに関する詳細情報
tweet/2018/0730_01.txt · 最終更新: 2018/07/30 17:12 by seirios

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki