エントリー

AIRI

早速、新しいサーバ "愛莉(AIRI)" に FreeBSD 9.1-RELESE をインスコして、現在はユーザーランドのセットアップ中です。

以下、新しいサーバの紹介や、OSインスコ、サーバーセットアップ時に気づいたことや、淡々とした作業のメモ書き。

新しいサーバマシンのスペック

CPU - 2.6GHz (Dual Core)
socket0: Intel Pentium 1403 @ 2.60GHz (2 Core)
socket1: none
物理メモリ - 10GB
slot0: DDR3-1333/PC3-10600 240pin ECC DIMM 8GB
slot1: DDR3-1333/PC3-10600 240pin ECC DIMM 2GB
slot2: none
slot3: none
slot4: none
slot5: none
HDD - 9.5TB
mount0: Seagate Constellation ES - ST500NM0011 500GB
mount1: Western Digital Red (AF) - WDC WD30EFRX-68AX9N0 3.0TB
mount2: Western Digital Red (AF) - WDC WD30EFRX-68AX9N0 3.0TB
mount3: Western Digital Red (AF) - WDC WD30EFRX-68AX9N0 3.0TB
ネットワーク - Gigabit Ethernet * 3
bge0: Broadcom NetXtreme Gigabit Ethernet 1000baseT
bge1: Broadcom NetXtreme Gigabit Ethernet 1000baseT
em0: Intel PRO/1000 Network Connection 1000baseT
電源 - 350W
slot0: 350W (80PLUS SILVER)
slot1: none

 

OS - FreeBSD 9.1-RELEASE (AMD64)

FreeBSD公式サイトから、amd64版のbootonly.isoをDLして、CDへイメージ書き込み。

そのCDを使って、インスコしようとするも、DVDドライブが不良品(?)なのか、すぐにディスクに傷が付いて、リードエラーになってしまった・・・。

仕方なく、USBメモリにイメージを書き込んで、USBブートを試みたところ、難なくインストールが完了。

久方ぶりにFreeBSDのインスコ作業を行ったためか、インストーラが見慣れたsysinstallではなく、bsdinstallになっていて、少し戸惑ったが、かゆいところに手が届かないインストーラになってしまったなーという印象を持っただけで、特に問題はなかった。

いまどきのパーティション設定は、boot領域とswap領域の他が、「 / 」だけになっているようで、びっくり。
「 / 」と「 /var 」、「 /tmp 」、「 /usr 」を用意するのは、かなりレガシーなレイアウトになってしまったみたい。時代の流れって、早いもんだなぁ。

ルートファイルシステムを、ZFSにしようかとも迷ったが、まだ様子をみて、安牌でUFSにした。

 

ネットワーク設定作業

新しいサーバのIPアドレスとして、192.168.11.111 netmask 255.255.255.0 を払い出し。

FQDNは、airi.chsmea.net を設定。

続いて、古い方のDNSサーバに、正引きと逆引きのレコードを登録して、airi の名前解決を完了。

 

ユーザーランドのインストールや設定作業

Portsコレクションの管理ソフト - portupgrade

私は portupgrade 派なので、それをインストール。

#> cd /usr/ports/ports-mgmt/portupgrade/ && make && make install

依存関係に Ruby があるので、この際に Ruby もコンパイルされて、自動的にインスコされる。

 

HDDの初期不良チェック - smartmontools

まずは、いちばん気になるHDDの健康状態チェック。
smartmontools をインストール。

#> portinstall sysutils/smartmontools

さっそく smartctl -i /dev/ada0 を打ち込んでみたところ、マシンにプリインストールされていたHDDで、読み書きエラーが頻発しまくっていることが発覚。

サポート(保守)に連絡するも、日本語がほとんど伝わらず、ほぼ中国語だったので、面倒になって交換依頼を諦める。さすが、デルのサポートは(サポートしている人口率的な意味で)手厚いな。

S.M.A.R.T.テストが pass できなくなったら、すぐさま、WDのRedシリーズかBlackシリーズあたりの 500GB 以上のHDDを購入して、丸々 dump & restore 作業をしようと思う。

 

冗長性のある大容量ディスク領域の作成 - RAID Z

WD Red シリーズの 3.0TB HDD を 3枚 挿したので、それを、最低限の冗長性のある 1枚の大容量ディスクとして取り扱うことに。

ハードウェア側で、RAID 0, RAID 1, RAID 0+1, RAID 1+0, RAID 5 あたりに対応していたが、挿したHDDが3枚ということで・・・:

  • RAID 0 だと、9.0TB すべての容量の使えて、かつ超高速になるのは、魅力的だけれども、どれか1台でも壊れれば、すべてのデータが吹っ飛ぶので、とてもファイルサーバ用途には向かない。
  • RAID 1 だと、同時に2台壊れても復旧できるけど、9.0TB 分のHDDを挿しているのに、容量が 3.0TB しか使えない。
  • RAID 01 は、障害耐性の面で、難があるので、そもそも選択肢から外す。
  • RAID 10 は、比較的簡単に構築できる上に、障害耐性も高いので、選択したいところだが、最低でも4枚のHDDが必要なので、今回は無理。

・・・というわけで、ハードウェアRAIDを使うのならば、1枚の障害まで耐えられて、6.0TB の容量が使える、RAID 5 という選択肢しか残らないわけなのだが、シングルパリティ分散方式の RAID 5 は、パリティ書き込み時に失敗した時に、サイレントクラッシュという致命的なデータ不整合状態が生じてしまうので、せめて保険のために、2枚までの障害かつ1回のサイレントクラッシュに耐えられる、ダブルパリティ分散方式の RAID 6 にしておきたいところ・・・。

かといって、RAID 6 には、最低限 4枚 のHDDが必要・・・。

そんなわけで、ハードウェアRAIDを使わず、ソフトウェアRAIDの RAID Z を採用することにした。

RAID Z には、シングルパリティの RAID Z1、ダブルパリティの RAID Z2、トリプルパリティの RAID Z3 があるが、HDDの枚数と性能面を鑑みて、今回は RAID Z1 を選択。シングルパリティなので、1枚までの障害に耐えられ、今回の構成だと、6.0TB の容量が使える感じ。さらに、RAID 5 や RAID 6 のように ブロックごとの書き込みではなく、ストライプ幅が可変となるので、障害耐性が上がり、また、ZFSのコピーオンライト機構で、サイレントクラッシュを完全に回避することができるという利点があるので、かなり安心。ただ、パフォーマンスがシビアになるが、そこは、トレードオフかと。

HDDが、物理4Kセクタ&論理512Bセクタのものだったので、geometryの設定をどうしようか迷ったが、一応念のため、4Kセクタで gpart してみた。

そして、4Kセクタでディスク全体をスライスした3枚のディスクスライスを、zpool で RAID Z1 化してみた。

#> zpool create pool-asuka raidz ada1p1 ada2p1 ada3p1

RAID Z な プール を作成したら、第2レベルに、データセット を作成してみた。

#> zfs set mountpoint=none pool-asuka
#> zfs create -o mountpoint=/raidz-asuka pool-asuka/raidz-asuka-set0
#> zfs create -o mountpoint=/backup-asuka pool-asuka/backup-asuka-set0

この作業だけで、こんな風にマウントされた。簡単すぎ!

#> df -h
Filesystem                      Size    Used   Avail Capacity  Mounted on
/dev/ada0p2                     446G    8.7G    402G     2%    /
devfs                           1.0k    1.0k      0B   100%    /dev
pool-asuka/backup-asuka-set0    5.3T     40k    5.3T     0%    /backup-asuka
pool-asuka/raidz-asuka-set0     5.3T     40k    5.3T     0%    /raidz-asuka
192.168.11.9:/exports           1.8T    635G    1.0T    38%    /karin-exports

 

コンパネアプリのインスコ - webmin, usermin

GUIである程度の設定ができると色々と便利なので、WebminUsermin をインストール。

アクセスは、同一セグメント内に制限。
暗号化については、ひとまずは、オレオレ証明書で。

 

LAN内ファイル共有 - Samba
インストール

Samba 3.6 をインスコ。

#> cd /usr/ports/converters/libiconv && make WITH_EXTRA_PATCHES=yes && make install
#> portinstall samba36

設定ファイルは、旧環境のをほとんど使い回し。

ベンチマーク

Crystal Disk Mark (x64) を使って、ベンチマークをとってみた。

ベンチマーク結果スクショ

グラフにまとめると、下のような感じ。

黄色が、旧環境(KARIN鯖上Samba、HDDは Seagete の2008年製)。
そして、赤色が、新環境(AIRI鯖上Samba、HDDは WD Red、RAID-Zアレイで RAID 5 相当)。
あと参考までに、青色が、内蔵SSD(LUAクライアントマシン、SSDは Intel SSD 520)。

ベンチマーク結果グラフ

新環境では、残念なことに旧環境と比べて読み込み速度が向上しなかった。けれど、シーケンシャル書き込みが100MB/sの壁を超えられたので、満足な結果。細かいファイルの大量書き込みの速度もだいぶ向上していて、RAIDの恩恵を確認。

 

BAMP環境 - Apache, MySQL, Perl, PHP, Python

BAMP環境を構築。

BAMP環境のクリーンインストール

細かいインストール作業は、あとにして、とりあえず、主役をどんどんインストールしていく。

まずは、Apache HTTP Server のインスコ。

せっかくなのでこの期に、Apache HTTP Server 2.4 をインストール。
・・・FreeBSDでちゃんとサードパーティのモジュールまで含めて、しっかりとportsが整備されている2.2系ではなく、背伸びをして2.4系を入れてしまったことに、(あまりの情報の無さや、コンパイルエラー、実行エラーなどで)あとから後悔することになるのであった。。。

#> cd /usr/ports/www/apache24/ && make -SUEXEC_DOCROOT=/home -DIAMADEVELOPER && make install -DIAMADEVELOPER 

いままで、prefork版しか使ったことが無かったけれども、今回は、event版にしてみた。この背伸びしたMPMの選択も、今後変な挙動を示すフラグを立ててるかもしれない・・・。

つづいて、MySQL Server 5.6 をインストール。

#> portinstall databases/mysql56-*

さいごに、各種LL言語をインスコ。

Perl 5.16PHP 5.4Python 2.7 (現行サーバから移行するプログラムの互換性の都合上、Pythonだけはレガシーなバージョンを選択) をインストール。

#> portinstall perl-5.16
#> portinstall php5
#> portinstall php5-extensions
#> portinstall python27
Apache HTTP Serverの各種設定

さて、背伸びをして、Apache HTTP Server 2.4 をインスコしてしまったがために、ちゃんと動作する環境構築のための設定作業に難航してしまった。

そもそも、www/apache24 を、ふつーに make する際に、次のようなエラーが出るという事自体、開発中段階のもので、完全に自己責任なものであることを、しっかりと肝に銘じておくべきだったのかも。

#> cd /usr/ports/www/apache24/ && make
===>  apache24-2.4.4_1 to build the develop/example modules specify -DIAMADEVELOPER on the command line. Do not use the this modules in production environment.
*** [all] Error code 1

Stop in /usr/ports/www/apache24.

この時点で、身を引いて、慣れた www/apache22 を選択しておけば、必要なモジュールをインスコした後に、現行のサーバから設定ファイルを持ってくるだけで完了だったところ、背伸びをして www/apache24 に手を出してしまったために、次のような問題が発生。

・・・まぁ、なんとなく予想はしていたのだが、やっぱりPHPが動作しないwww。PHPの導入、ほんと繊細な作業すぎる・・・。
 でもこれは当然で、そもそも www/apache24lang/php5make config 時に、mod_php5 を選択しなかったから。
 というのも、構築しているのが、自分だけが使う専用サーバではなく、共用サーバであるので、セキュリティ上の観点から、PHPは モジュールモード ではなく、suExec環境下での PHP-CGIモード での運用を考えているから。
 もちろん、suPHP という便利なものもあって、PHPをまるで suExec がかかったCGIであるかのように、良きに計らってくれる便利なサードパーティのパッケージもあるが、そもそも suPHP は www/apache22 までのサポートで、公式では www/apache24 には全く対応しておらず、もちろんコンパイルエラーとなった。
 そこで、正攻法でPHPをCGIモードで動作させるとなると、php を cgi でラップして、それを mod_fcgid か mod_fastcgi あたりに投げて、処理担当ハンドラーとして php-cgi を呼び出してやる必要が。
 まず手軽な mod_fcgid ルートから攻めて見るも、なんか FastCGI サーバ (fcgid) が Fatal Error になってしまい、core dump を吐いてしまう。
 仕方なく、mod_fastcgi ルートで攻めることにするが、mod_fastcgi を Ports 経由で make してみたものの、www/apache24 に対応してないって怒られて、コンパイルエラー。
 mod_fastcgi の公式サイトをみてみるとどうも、しばらく更新がなくて、www/apache24 への公式対応がないみたい。
 情報を探しに探したところ、バイトインターネット社が、www/apache24 対応版として fork しているリポジトリを発見 : https://github.com/ByteInternet/libapache-mod-fastcgi
 ここの、byte-compile-against-apache24.diffの内容を、/usr/ports/www/mod_fastcgi/work/mod_fastcgi-SNAP-0910052141/ ディレクトリに対して、パッチ適用をして、make し、/usr/ports/www/mod_fastcgi/ ディレクトリに戻って、make install することにより、なんとか、導入に成功。
 しかしながら、残念なことに、なぜか suExec がかからず、正攻法での攻略は失敗。
 そこで、楽して suExec っぽく振舞ってくれる suPHP を、なんとか、なんとか、なんとか、www/apache24 でも動作できる方法を追求する方へ切り替えて、情報を探しにさがしに探してみたところ、非常に有用な記事を発見 : http://www.sudosu.in/2013/05/compile-apache-24x-php-54x-suphp-071.html
 Linux環境下でのインストール方法の記事であったが、FreeBSD環境下でも、意味を読み解きながら似たような手順(ソースコードの取得、パッチ適用、環境固有の設定、ヘッダーファイルの配置、ソースコードのコンパイル、正常コンパイル後にバイナリのインストール、サーバ設定)を確実に踏んでいったところ、やっとのことで導入に成功!
 あとはいつもどおりに、suPHPの設定を書くだけで、うまくいった。

 

・・・続きは、また書く。

ページ移動

トラックバック

  • トラックバックはまだありません。

トラックバックURL

http://chsmea.net/~mioproject/freo/trackback/183

コメント

  • コメントはまだありません。

コメント登録

  • コメントを入力してください。
登録フォーム
名前 *
URL
コメント *
閲覧制限 *
【スパム対策】 2 × 2 × 2 = ? (半角数字で)

ユーティリティ

user profile

calendar

042024/0506
S M T W T F S
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -

tag cloud