ファイルサーバーを作成してみた。

家の点在しているストレージを統合し、どの端末からでもアクセスできるようにするため、現在使用中のサーバーにファイルサーバーも担うことを計画
現在、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
#ashiftが12になっているのを確認。9の場合、512k sectorとして認識されているのでやり直し。
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に異常があればメールが飛んでくるようになる。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください