家の点在しているストレージを統合し、どの端末からでもアクセスできるようにするため、現在使用中のサーバーにファイルサーバーも担うことを計画
現在、Web・Mail・MySQLも動作中なのでどこまでパフォーマンスが出るか心配。
SMB, AFP, HTTPS, WebDAV, FTP, AFP, NFSなど様々なプロトコルでアクセスさせることが最終目標。
とりあえずSMBとHTTPSでアクセスできるようにさせる。
やりたいことはFreeNASでもできるのだけれど、予算とサーバーを増やしたくないので却下。
OS
FreeBSD 9-STABLE r23918 GENERIC amd64
サーバースペック
CPU Q9550
MB P5Q-E
MEM 16GB
電源 ENERMAX EMD525AWT
ストレージ
HDD WD3200AAKS-00B3A0 350GB (システム用)
SSD INTEL SSDSA2CW120G3 (SWAP L2ARC ZIL MySQL用)
HDD WD30EZRX x 5台 (ファイルサーバー用)
NICは intel PRO/1000 GT Desktop Adapter (em0)とMarvell Yukon 88E8056 Gigabit Ethernet(msk0)をlacpでlagg0にしている。
今回は3TB 5台でraidz2を作成
プール名はz2。
SSDは128GB しかないため、L2ARCは16GB、ZILは8GBとした。
#WD30EZRXはAFT 4K sectorなので、作成時にgnopで一時的に仮デバイスを作成 gnop create -S 4096 ada2 gnop create -S 4096 ada3 gnop create -S 4096 ada4 gnop create -S 4096 ada5 gnop create -S 4096 ada6 #raidz2作成 zpool create z2 raidz2 ada2.nop ada3.nop ada4.nop ada5.nop ada6.nop #一度エクスポート zpool export z2 #poolを作成ができれば用済みなので削除 gnop destroy ada2.nop gnop destroy ada3.nop gnop destroy ada4.nop gnop destroy ada5.nop gnop destroy ada6.nop
zdb -C z2|grep ashift
#改めてインポート zpool import z2
#とりあえずアクセスタイム無効と自動拡張を有効にする。 zfs set atime=off z2 zpool set autoexpand=on z2 #poolにL2ARCとZILを追加 zpool add z2 cache gpt/L2ARC zpool add z2 log gpt/ZIL その他ZFSのパラメーターは全てデフォルト
完成
# zpool status pool: z2 state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM z2 ONLINE 0 0 0 raidz2-0 ONLINE 0 0 0 ada2 ONLINE 0 0 0 ada3 ONLINE 0 0 0 ada4 ONLINE 0 0 0 ada5 ONLINE 0 0 0 ada6 ONLINE 0 0 0 logs gpt/ZIL ONLINE 0 0 0 cache gpt/L2ARC ONLINE 0 0 0 errors: No known data errors
SAMBA設定
samba36を使用
smb.confのglobalは以下の通り
[global] max protocol = SMB2 netbios name = samba disable netbios = yes workgroup = WORKGROUP server string = samba domain master = yes preferred master = yes security = user bind interfaces only = yes interfaces = lagg0 hosts allow = 192.168.0.0/16 127.0.0.1 hosts deny = all max connections = 10 socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536 deadtime = 15 load printers = no printing = bsd printable = no syslog = 1 syslog only = yes encrypt passwords = yes printcap name = /etc/printcap dns proxy = no strict sync = no sync always = no display charset = UTF-8 unix charset = UTF-8 dos charset = cp932 follow symlinks = yes wide links = yes unix extensions = no aio read size = 1 aio write size = 1
apache設定
aliasで共有フォルダーを公開し、Options Indexes FollowSymLinks MultiViewsを設定
IndexOptionsを以下のように設定
IndexOptions FancyIndexing HTMLTable VersionSort SuppressDescription NameWidth=* charset=UTF-8
ベンチマーク
とりあえずベンチマークを取ってみた。
SSD
raidz2
ボトルネックを知るためにSSDのディレクトリーもSAMBAで公開し、差を見ることとしたが、そんなに大きな差がなかった。
CPU負荷は数パーセントで、HDD側の負荷も6~7割程度なのでネットワーク側にまだ改善の余地がありそう。
sambaで100MB/s以上出ている人もいるようだし。
家の点在したHDDを統合してもまだ3TB位余裕があるので、当分は心配はいらないし、
今まで単一HDDにそれぞれ保存していたデータをraidz2にしたことにより、耐障害性が増したのは大きなメリット。
現時点でもUSB2.0接続よりは速いので少し満足だがやはり、GbE限界まで速度を上げたい。
ゆくゆくは10GbEを構築したいが、マザーボードにオンボードで載るくらい普及しないとコスト的に導入は厳しい。
後は複数の様々なデバイスから様々なプロトコルでアクセスできるようにすれば完成。
AFP, WebDAV, FTP, AFP, NFSの設定は後日設定予定。
zpoolの監視
以前gstripe + gmirrorを使用していた時に使っていたsysutils/geomWatchを利用
rc.confに1行追加
geomwatch_enable="YES"
/usr/local/etc/geomWatch.confの設定
zpool="z2" # ZFS pool to monitor (multiple allowed) interval="30" # seconds to sleep between checks from="GEOM Watch <geomwatch@example.com>" # FROM e-mail field recipient="送りたいメアド" # e-mail address to send notifications to (multiple allowed) smtpServer="localhost:25" # address and port of SMTP server smtpAuth="0" # 1 to enable SMTP authentication smtpUser="username" # SMTP username, if SMTP AUTH is enabled smtpPassword="password" # SMTP password, if SMTP AUTH is enabled
service geomWatch startすればpoolに異常があればメールが飛んでくるようになる。