月別: 2013年12月

VagrantやVirtualBoxの共有フォルダ機能で静的ファイルが更新されない

VagrantVirtualBoxの共有ディレクトリ機能を使っていた時に起こった問題です。

VagrantVirtualBoxの共有ディレクトリ機能を使っていて、さらそのマウントポイントをApacheのドキュメントルートとしている場合、静的ファイルの更新が反映されない(バグる)問題の対応方法。
結論から言えばApacheが問題で以下の設定を追加すればOKでした。

<Directory /path/to/public_html>
EnableMMAP Off
EnableSendfile Off
</Directory>

(参考)
Virtualbox上のApacheでホストマシンと共有している静的ファイル(CSSなど)の更新が検知されない問題を解決する方法

開発環境

VirtualBoxで作成した仮想のLinuxサーバーを開発環境としています。
FTPとかSCPで何度もアップロードするのは面倒だった為、VirtualBoxの共有フォルダ機能を使っています。VirtualBoxの共有フォルダ機能は、ホストOS側の任意のディレクトリを、ゲストOS側でマウントする事ができるようになる機能です。この機能を利用してIDEのプロジェクトディレクトリを共有し、ゲストOSのApacheのドキュメントルートとする事で開発を進めていました。ホストOSがゲストOSのディレクトリを(sambaなどで)マウントしてくるよりも安定していて、非常に使い勝手がいいのでおすすめです。

静的ファイルが反映されない問題が発生

イイカンジに使っていたんですがCSSやJSなどの静的ファイルが更新されない問題が発覚しました。ゲストOS側ではファイルの更新が反映されているのですが、Apache経由でブラウザから見ると更新されていなかったり、たまにバグって表示されてエラーとなったりします。

Apacheが原因でした

そこで調べた所、冒頭の2個の機能がこの問題を引き起こしていました。

<Directory /path/to/public_html>
EnableMMAP Off
EnableSendfile Off
</Directory>

EnableMMAP
EnableSendfile

詳しくはApacheのドキュメントを参照するといいのですが、Apacheでは実際にデータを送信するまでの途中に処理が入らないファイル、つまり静的ファイルはsendファイルとして保存し、それをそのまま送信する事で性能を向上しているようですが、ネットワーク経由のマウント(NFSやSMB、そして今回の共有フォルダ機能)した領域ではファイル変更検知がうまくできずに、sendファイルの更新が行われないようです。

(余談)EnableMMAP Offで転送速度があがる?

いろいろ調べていた所、EnableMMAPをOffにする事で性能があがったという記事をいくつか見つけました。
EnableMMAP でも「マルチプロセッサシステムの中にはメモリマッピングをすると httpd の 性能が落ちるものがあります。」という記述があります。(今はほとんどの環境がマルチコアですよね)
このあたりの詳細はわかりませんでしたが、ファイルシステムやOS側でのキャッシュが実装されている場合は間違いなくApache側と2重でキャッシュしそうな気がしますのでEnableMMAPはOffの方が性能はあがりそうです。
静的ファイルの転送が極端に遅いときなどはOffにしてみるといいかもしれません。

HP ProLiant Gen8サーバーにCentOS6.4(64bit)を入れる

HPのサーバーをCentOSで使いたい事が出てきてインストールにいろいろ試行錯誤したので備忘録です。
今回やりたい事はCentOS6.4でDynamic Smart Arrayを使ってRAID1を構築し、管理したいという内容となります。
HP ProLiant DL320e Gen8 v2に入れてみました

準備

・CentOS6.4(64bit)のCD
・光学ドライブがないのでUSBの外付けCDドライブ
・USBメモリ
・その他管理ツールのパッケージをHPのサポートページからダウンロード

HP ProLiant本体のRAID設定

HP ProLiant DL320e Gen8 v2はHP Dynamic Smart Array B120iコントローラが標準でついているので、これを使ってRAIDを組みます。

コントローラーの有効化

起動時にF9を押してRBSUなるメニューを開きます。
[システム オプション]>[SATAコントローラーオプション]>[内蔵SATA設定]>[ダイナミックHP SmartアレイB120i RAIDサポートを有効]の順に選択。

参考
HP Dynamic SmartアレイRAIDコントローラー ユーザー ガイド

RAID1の構築

起動時にF5を押してアレイ設定ツールを開く
ウィザードのタブから、ディスクを選択して、ミラーリングの設定をする

CentOSのインストール

上記作業でRAID構築は完了したはずなのですが、
通常通りインストールを行おうと思ってもSmart Arrayコントローラが認識されず、HDDが2個と認識されてしまいます。
これはCentOSにSmart Arrayのドライバが存在しない事が原因なのでOSインストール時にドライバを読み込ませる必要があります。

Smart Arrayのディスケットドライバの入手

まずはSmart ArrayのディスケットドライバをHPサポートセンター のページから入手します。
ちなみにHP Dynamic Smart Array B120iのものはこちらから入手できました。

今回はCentOS6.4ですのでRHEL6 update4 のディスケットドライバをダウンロードします。
この記事を書いている2013/12/06時点ではhpvsa-1.2.6-27.rhel6u4.x86_64.dd.gz というファイルでした。
ドライバをダウンロードしたら解凍します。dd.imgというファイルが出来たのでそちらをUSBメモリにコピーします。

CentOSインストール時にディスケットドライバの読み込み

さきほどのディスケットドライバを保存したUSBをサーバーに刺し、CentOSのインストールCDからブートを行います。
CentOSのインストールメニューが出たら、「ESC」キーを押してインストール起動パラメータを入力します。

linux dd blacklist=ahci

としてエンターを押します。
※上記のような起動パラメータでインストールしないと、カーネルがAHCIのモジュールを自動で読み込みPanicを起こします。

ドライバの読み込みするか?といった質問が出るのでyesを選択し、[sda]か何かを開きます。
USBの中身がメニューが出ますので保存していたディスケットドライバを選択します。
※ここのメニューでHDDがいっぱい認識されていればインストール起動パラメータが間違っているかもです。

あとは普通にインストールを行えばOKです。
変なとこにインストールしないように任意のタイミングでUSBは抜くといいとおもいます。

HPのユーティリティインストール

CentOSが起動してからの作業です。
以下のredhat用パッケージをHPサポートセンター のページから入手します。
kmod-hpsa hp-health hpsmh hp-smh-templates cpqacuxe hpacucli hp-snmp-agents hpdiags のパッケージを入手します。rhel6u4でx86_64のものを選択します。

ユーティリティの入手

今回使用しているHP ProLiant DL320e Gen8 v2(Dynamic Smart Array B120i)では以下のページにて入手できました。
cpqacuxe 及び hpacucliについてはDynamic Smart Array B120i用ドライバ のページから入手し、
その他のパッケージはHP Service Pack for ProLiantのisoファイル内の/hp/swpackages 内に存在しました。

これらのファイルをインストールしたCentOSサーバーに転送します。

CentOS側ではhp のユーティリティインストールで、CentOS をRHELとして認識させる為に以下の変更を行います。

mv /etc/redhat-release /etc/redhat-release.old
echo "Red Hat Enterprise Linux Server release 6.4 (Santiago)" > /etc/redhat-release

また、ユーティリティソフトはsnmpを必要とする為、snmpパッケージをインストールしておき、簡単な設定を行っておきます。

yum install net-snmp net-snmp-libs
echo "dlmod cmaX /usr/lib64/libcmaX64.so" >> /etc/snmp/snmpd.conf
echo "rwcommunity private 127.0.0.1" >> /etc/snmp/snmpd.conf
echo "rocommunity public 127.0.0.1" >> /etc/snmp/snmpd.conf

ユーティリティのインストール

ダウンロードしたユーティリティのディレクトリに移動し、以下のようにインストールします。

yum localinstall kmod-hpsa-3.4.2-4.rhel6u4.x86_64.rpm \
cpqacuxe-9.40-12.0.x86_64.rpm \
hpacucli-9.40-12.0.x86_64.rpm \
hp-health-9.40-1602.44.rhel6.x86_64.rpm \
hpsmh-7.2.2-8.x86_64.rpm \
hp-smh-templates-9.4.0-1327.37.noarch.rpm \
hp-snmp-agents-9.40-2506.37.rhel6.x86_64.rpm \
hpdiags-9.5.0-938.linux.x86_64.rpm \
hponcfg-4.2.0-0.x86_64.rpm

snmpの設定を設定し、hp-snmp-agentsを起動します。

/etc/init.d/snmpd restart
sed -i 's/^exclude/exclude\ cpqriisd\ cmarackd/' /opt/hp/hp-snmp-agents/cma.conf
/etc/init.d/hp-snmp-agents restart

確認作業

まずはCLIが動作しているか確認します。

# hpacucli
HP Array Configuration Utility CLI 9.40.12.0
Detecting Controllers...Done.
Type "help" for a list of supported commands.
Type "exit" to close the console.
=> ctrl slot=0 show config
Dynamic Smart Array B120i RAID in Slot 0 (Embedded)
array A (SATA, Unused Space: 0  MB)
logicaldrive 1 (1.8 TB, RAID 1, OK)
physicaldrive 1I:1:1 (port 1I:box 1:bay 1, SATA, 2 TB, OK)
physicaldrive 1I:1:2 (port 1I:box 1:bay 2, SATA, 2 TB, OK)
=>

ちゃんとOKのステータスが確認できました。

引数の指定の仕方がすごい違和感ですが
ctrl slot=0 show configでコントローラ スロット0の設定を見る って感じみたいですね。

続いてWEBUIを確認します。
Smart Array 設定ツール (WEBUI)のリモート接続を許可します。
こちらはCentOSの起動時に自動実行させるようにしておいてもよいかもしれません。

cpqacuxe -R

以下のようなURLで接続する事でsystems management homepageが開きます。

https://[ホスト名 or IP]:2381/

うまくインストールできていればログイン画面が出ます。
Linuxのrootユーザーでログインします。

ログインが成功し、さらにcpqacuxeのインストールが成功していれば、ストレージメニューに「アレイコンフィギュレーションユーティリティ」のメニューがあるので、そちらをクリックします。

Smart Array (RAIDコントローラ)の設定が可能なWEBIUが開きます。

hpacucliが使えない時

WEBUIのSmartArrayを起動するとこんな感じのエラーが出てhpacucliは使用できなくなります。

# hpacucli
HP Array Configuration Utility CLI 9.40.12.0
Detecting Controllers...
Error: Another instance of ACU is already running (possibly a service). Please
terminate the ACU application before running the ACU CLI. Press ENTER to
exit.

CLIを使用する際はcpqacuxe をストップして下さい。

cpqacuxe -stop

確認

# hpacucli
HP Array Configuration Utility CLI 9.40.12.0
Detecting Controllers...Done.
Type "help" for a list of supported commands.
Type "exit" to close the console.
=>

webUIを使用の際は起動は同じくこちらのコマンドで。

cpqacuxe -R

© SEEDS Co.,Ltd.