Magnolia CMS でページが公開できない

Magnolia

Magnolia CMS の 編集用 ( Author ) インスタンスで記事を書き、公開 ( publish ) したのですが、記事が公開できない状態に陥りました。
上記問題の原因と対策に関して記しておきます。

はじめに

さっきの地震にはびっくりしたずら。
そういえば、地震の後にこんな事があったずら。。。

J : にいさん。さっき記事公開してみたんだが、公開されてないずら。
S : ちゃんとやったずらか!?
J : もちろんずら。やった後 「公開しました。」 って出てくるずら。
S : 何回やってもだめずらか?
J : おらにはよくわかんねんだけど、だめみたいずら。
S : もんげー。記事公開できないとこまってしまうずらー!!

※妖怪ウォッチ ( こまさん & こまじろう ) 風にはじめてみました。読みにくかったらすいません。

事象

弊社では Magnolia CMS の利用において、編集用 ( Author ) インスタンスで記事を編集し、内容や表示を確認してから公開用 ( Public ) インスタンスに公開 (publish) するという運用を行っているのですが、先ほど公開しても記事が公開されない問題に遭遇しました。

管理画面から、公開するコンテンツを選択して 「公開する」 を実行すると、「公開しました」とメッセージが表示されるのですが、実際はコンテンツの状態は非公開のまま ( ステータス表示が赤丸のまま )で、実際に公開インスタンス上のURLでアクセスしても 404 (NOT FOUND) 状態になってしまっています。

調査方法

Magnolia CMS においては、管理作業中に発生したエラーはエラーダイアログで表示され、管理画面上のPulseという機能から確認できるのですが、この問題に関してはエラーダイアログ等の表示も行われませんでした。

アプリケーションサーバのログを確認する

こういった場合、Magnolia CMS が稼働している Tomcat ( あるいは他のアプリケーションサーバ ) のログファイルを確認する事で問題が発見できる場合が多いです。

今回の場合は、公開 ( Public ) インスタンスが稼働しているTomcat のログを確認してみると、以下のような例外がログ出力されていました。

2014-09-16 12:53:04,484 ERROR info.magnolia.module.activation.ReceiveFilter : Activation refused due to request arriving too late or time not synched between author and public instance. Please contact your administrator to ensure server times are synced or the tolerance is set high enough to counter the differences. java.lang.SecurityException: Activation refused due to request arriving too late or time not synched between author and public instance. Please contact your administrator to ensure server times are synced or the tolerance is set high enough to counter the differences.

エラー内容からすると、以下の何れかでエラーが発生したようです。

  • 編集用インスタンスから公開インスタンスへリクエストが届くのが遅い
  • 編集用インスタンス、及び、公開インスタンスの時間がずれている

先日まで問題なく動作していた事、及び、公開インスタンスへのアクセスが遅いわけではない(ページアクセスは問題ない) 事を考えると、時間がずれているために発生した可能性が高いです。

対策

コンピュータの時刻確認

編集用インスタンス ( CentOS )、及び、公開インスタンス ( Amazon Linux ) の時刻を確認したところ、それぞれ次のようになりました。

編集用インスタンス

$ date
2014年  9月 16日 火曜日 12:47:32 JST

公開インスタンス

$ date
2014年  9月 16日 火曜日 12:53:45 JST

思いっきりずれてました。。。
編集用インスタンスは、ntp の設定をしていませんでした。。。。。

時刻を調整する

編集用インスタンスが起動している CentOS ( KVMゲスト ) が ntp サーバを見にゆくように設定を行います。
  1. /etc/ntp.conf を編集します。
    弊社ではntpサーバを一台構築し、このサーバのみ公開 ntp を参照するようにしています。(他サーバはこの内部のntpサーバを参照する )。
    $ sudo vi /etc/ntp.conf
    
    以下内容で編集 ( 抜粋 )。
    ※初期設定の参照先 ntp サーバはコメントアウトし、実際に参照する ntp サーバの設定を記述。
    #server 3.centos.pool.ntp.org iburst
    server <ntpサーバ名>
    

    ※上記 server 設定以外は CentOSの標準設定のまま。

  2. ntpd の自動起動設定を行う。
    OS 起動時に ntpd が自動起動するように設定します。
    $ sudo chkconfig ntpd on
    
  3. 時刻合わせ ( 即時 ) を行う
    ntpdを起動して暫く放置しておけば時刻合わせが行われますが、以下で即時刻合わせを行います。
    $ sudo ntpdate <ntpサーバ名>
    
  4. ntpd を起動する。
    今回はOS再起動させたくないため、自動起動設定後、ntpdを手動で起動します。
    $ sudo /etc/rc.d/init.d/ntpd start
    

公開インスタンス ( Amazon Linux ) 自体はもともと ntp を参照するように設定が行われています。これで、二つのインスタンス共に ntp サーバを参照する設定にしたので、大きく時刻が狂う事はないでしょう。

動作確認

時刻合わせを行った後、再度コンテンツを公開し、無事に公開される事を確認しました。

まとめ

Magnolia CMS では 編集用インスタンスのコンテンツを公開用インスタンスに公開する場合に、時刻チェックを行っているようです。

先週までは問題なく公開されていた事を考えると、5分程度以上の誤差が発生した場合に今回のエラーが発生するものと思われます。

本来、ntpによる時刻設定を行うべきところを忘れていたのがエラーの原因だったわけですが、、、、

 

複数のコンピュータが連動するようなシステムを利用する場合、各コンピュータがどのようなシーケンスで動作するかを検証する必要が生じる事があります。
こういった事態が発生した場合、それぞれのコンピュータの時刻が同じになっている事は重要です。

サーバの構築においては ntp の設定も忘れずに行うようにしたいものです。