連載
» 2007年06月13日 00時00分 公開

RAC構築に不可欠なLinux OSの設定ポイントOracle SE RACで手軽に高可用性システム(2)(2/3 ページ)

[松下雅,株式会社コーソル]

SELinuxの注意点

 注意点をお話しする前に、SELinuxという単語をご存じでしょうか。Security-Enhanced Linuxの略称で、Linuxカーネルのセキュリティ拡張モジュールのことです。RHELやSUSE Linuxなどの、ディストリビューションの名称ではありません。

 RHELではセキュアOSを実装するための機能として、バージョン4.0から標準搭載されました。商用LinuxとしてサポートされるSELinuxとしては初となります。RHEL 4.0のリリースにより、SELinuxを利用するサイトの規模は広がったといえます。

 RHELでSELinuxを有効にするのは非常に容易ですが、SELinux環境にRACを構築する際には注意が必要です。Oracle ClusterwareはOS起動時に自動起動するよう、/etc/init.d配下にスクリプトを用意していますが、SELinuxの仕様上、スクリプトが途中で停止することがあります。

 原因は、スクリプトで使用しているsuコマンドです。SELinuxでは、非常に細かな単位でアクセス権限を設定することが可能です。そのためsuコマンドを実行する際、複数の権限が使用可能であれば、どの権限を選択するか対話形式で入力が求められます。そして/etc/init.d配下で実行するスクリプトの場合、多くの権限が選択可能なため、入力を求められ停止するのです。

図2 SELinux無効/有効でのOS起動時の違い 図2 SELinux無効/有効でのOS起動時の違い

 この現象は、suコマンドがPAM認証を通るために発生するので、回避策としてPAM認証を通らないコマンドを使用する方法もあります。しかし、そのためにはスクリプトを編集する必要があるため推奨されません。そこで、ここではSELinuxを使用しない方法について説明します。SELinuxの設定は、/etc/selinux/configファイルを編集することで可能です(リスト3)。

SELINUX=disabled
リスト3 /etc/selinux/configファイルの編集

 ファイルを編集したら、OSを再起動することで設定が反映されます。確認するには、リスト4のコマンドを使用します。

# getenforce
リスト4 getenforceコマンドの実行

 SELinuxが無効になっていれば、「Disable」と表示されます。「Permissive」や「Enforcing」と表示されたら、設定を見直します。

カーネルモジュールのload 〜hangcheck-timer

 RHELにRACを導入する際、「hangcheck-timer」という機能を使用します。hangcheck-timerは、システムの破損につながる可能性のあるOSの長期停止(ハングアップなど)を一定間隔で確認しており、検出した際にOSを再起動する機能です。RHELのカーネルモジュールとして提供されており、RAC環境ではサーバの可用性や信頼性を高めるために使用します。

 hangcheck-timerはinsmodコマンドを用いて使用しますが、このinsmodコマンドの使い方が、バージョンによって異なります。それぞれのバージョンの使用方法は、リスト5のようになります。

RHEL 3.0まで
# /sbin/insmod hangcheck-timer hangcheck_tick=10 hangcheck_margin=40

RHEL 4.0
# /sbin/insmod /lib/modules/`uname -r`/kernel/drivers/char/hangcheck-timer.ko hangcheck_tick=10 hangcheck_margin=40
リスト5 insmodコマンドを使ったhangcheck-timerの設定

 「hangcheck-timerという機能を使用する」と宣言していたRHEL 3.0までと比べ、RHEL 4.0では「hangcheck-timerを提供するオブジェクト・ファイル」を指定する必要があります。これが大きな違いです。

 オプションで指定しているパラメータは、それぞれ以下の設定をしています。

hangcheck_tick
hangcheck-timerが「システムが正常に稼働しているか?」を確認する間隔を秒で指定します。

hangcheck_margin
hangcheck-timerが「カーネルからの応答をどの程度待つか?」を秒で指定します。hangcheck-timerは、カーネルと会話をすることで「システムが正常に稼働しているか?」を確認しています。話し掛けて、応答がなければ異常と判断するわけです。しかしカーネルは、正常に稼働していてもhangcheck-timerの問い掛けにすぐ応えられないタイミングもあります。そういったときに、OSを再起動させないように待つためのパラメータです。

 この2つのパラメータから、カーネルが最大(hangcheck_tick+hangcheck_margin)秒応答しなかった場合に、hangcheck-timerがOSを再起動させることになります。リスト5の例では、50秒応答がなかった場合にOSが再起動します。この設定は常に必要となりますので、OS起動時に実行されるファイル、/etc/rc.d/rc.localに追記します(リスト6)。

/sbin/insmod /lib/modules/`uname -r`/kernel/drivers/char/hangcheck-timer.ko hangcheck_tick=10 hangcheck_margin=40
リスト6 /etc/rc.d/rc.localの編集

 設定したらOSを再起動して、hangcheck-timerが稼働しているか確認します。確認には、リスト7のコマンドを使用します。

# lsmod | grep hang
リスト7 hangcheck-timerの稼働確認(RHELバージョン共通)

 hangcheck-timerが稼働していれば「hangcheck_timer 4697 0」のように結果が表示されます。何も表示されずにプロンプトが返ってきたら、設定を見直します。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。