◆ サーバー時刻の合わせ方
複数マシンの時刻合わせには、通常NTP(Network Time Protocol)デーモンを利用します。NTPデーモンは、ネットワーク内のタイムサーバーを参照し、自分のマシンの時刻をそれに合わせて修正します。同じタイムサーバーを参照するように設定すれば、すべてのノードが同一時刻になります。
マシン時刻の同期によりRACサーバーダウン!
インターネット上で通信販売をしているあるオンライン会員システムでは、Oracle9i Database Real Application Clusters(以下、RAC)を使用しています。そのなかの懸賞プレゼント応募受付システムにおいて、各ノードの時刻が正確に一致していないと「締切時間間際に同時に2人が申し込んだ場合、片方が締切に間に合ったのにもう片方は締切に間に合わなかった」という事態が起こり得るため、ノード間の時刻を正確に同期させていました。このRACシステムで、システムが突然ダウンしてしまいました...。
次のようにNTPデーモンを運用することで、今回の問題は解決されたのでした。 1) 各ノードのシステム起動時にntpdateコマンドを-bオプションで実行
最初にsettimeofdayを使用してNTPサーバーの時刻に合わせます。 2) NTPデーモンを-xオプションで起動
-xオプション※2は、時刻のずれ幅に拘わらずadjtimexを使って時刻を合わせます。これにより、各ノードでの時刻逆向はなくなります。
※2 Red Hat Advanced Server 2.1のNTPデーモンは、-xオプションが有効にならないという不具合がありますので、アップデートをしてください。 3) NTPデーモン起動後にOracleインスタンスを起動
1)の処理の前にOracleを起動すると時刻が逆向する可能性があるので、この起動順序はかならず守ってください。
以上の手順により、時刻が狂うことも、Oracleが異常終了することもありません。
現在では、時刻が逆向してもOracleが異常終了しないような改良がRAC側に施されましたが、ミラクル・リナックスの調査・サポートにより、RACの修正を待たずして早急に問題解決できました。ミラクル・リナックスは、ミラクル・リナックス社製品のサポートとはもとより、Linux版Oracleに関するコンサルティング/サポートに関しては、他社のLinux製品の場合でも対応いたします。
Oracle on Linuxでお困りの際は、ミラクル・リナックスにぜひご相談ください。