NAS PN401的試用過程


重新回想為什要開始觀注NAS?
其實是想要解決長久以來的困擾,硬碟掛掉資料漏失的問題,所以開始找尋各家NAS
很感謝的,詮力科技願意商借一台PN401來測試,但是因為忙碌於其它工作,拖了半個月才開始進行。
為什麼當初會聯繫詮力科技?最重要的就是她們發表了一篇實做ITE2 NAS 建置Mail Server的文章,因為我個人用的是Linux,它讓我有解放的感覺。
在查看各家NAS功能的同時,發現各家幾乎都有各自客製化的OS,各種功能完善的同時,也代表二件事:
  1. 購買者必須為NAS客製化的OS買單
  2. 一般的Linux用戶(如我),想要安裝Linux的額外的功能,不知道會不會受到限制
從第一點來說,客製化的OS不是不好,如果你缺的就是他所提供的功能,那就是物有所值,如果買的是一堆用不上的功能,那就是在資助她們研究更多包山包海的功能-您可能用不到。
早期我待過一家公司,買M$ Office只買Excel,因為除了試算表的功能,也可以拿來寫報告,但是Excel 2016可以單買,但是價格直逼整套全買,更不用說後面的版本就沒有單賣了。

第二點是當我買了一台機器,我想要如何利用這臺機器?
首先我確定一點,買NAS的人,這台NAS不會是購買者的唯一電腦,所以我幾方面來思考不同的需求:

個人與家庭:

說穿了,就是拿來儲存許多的音樂或是影片,所以至少要有Torrent與串流的功能。
Torrent最好能透過遠端管理(人不在家,照樣下載),以在Github上面隨便一找,web-based就有像transmission-web-control或是WebTorrent這類的工具,可惜在她的ubuntumate有看到 transmission,但是沒有提供遠端管理的整合功能。
另外一個就是串流的功能了,最早一開機執行的就是XBMC,從網路上找到的資訊來看,Android/IOS App的功能好像只是拿來作遙控器用的,不知道能不能用KODI直接連上去看?畢竟xbmc/kodi都是同一家基金會出的,如果詮力能夠整合一下,並來個教學會更好。

小企業:

說這個之前,必須再想一下,為什小企業需要NAS?segate這樣說的:
  • 容易操作,通常不需要專門的 IT 專業人員
  • 成本更低(我最認可這一點了,大量的OpenSource降低了售價)
  • 可輕易用於備份資料,方便您在有需要時隨時可以存取
  • 擅長以安全可靠的方式集中儲存資料
可以說PN401基本上都滿足了上述所需的功能,但我不得不小小抱怨2下:
  1. 硬碟壞了誰知道
  2. 為什Linux不裝minimal版本,要裝Desktop版本,SSD裝置的空間幾無剩下
就第1點來說,大部分公司買了大概就不會有人天天去看這臺機器了(一般是丟到腳落看不到的地方),硬碟壞了會不會叫我不知道,但您至少寄封信到Gmail或是Yahoo告訴我一下吧?這邊有個簡單的解決方式,但是可惜詮力並沒有把這個簡單的功能做進來(我手動設定,還不斷地把mdadm.conf刷新蓋掉)
2點就是系統沒有足夠的更新空間更新Linux,不能純粹地Linux Server+Web Manage就好了?Linux雖說不容易被駭客入侵,但最好還是能更新就更新。能要求小企業進UbuntuMate自已搞嗎?Linux熟練者來說,也只要有個ssh console就夠了,實在想不通Desktop存在的理由。

中型企業以上:

我的想法,中型以上就是有人能夠自建與設定Server,回到一開頭的說明,我困擾的就是硬碟無預警的掛點.雖然每台主機都加裝了smarttools,每天每週定時的檢查與寄信通知(跟上述寄信一樣,非mail主機我也是用msmtp),但是還是不能避免硬碟壞了要處理,而傳統處理就是關機換硬碟,對線上服務來說停機真的是很麻煩(如果是對外的Web服務,還可以用nginx load balancing來解決這個問題),所以Raid幾乎就是唯一的解決方案了。
Raid 不外乎硬體與軟體(還分為純軟與firmware)
Hardware Raid 想當然爾,有專屬的硬體(處理器、硬碟控制器、BIOS與快取),無論是sync或是rebuild速度都遠高於Software Raid,所以才有另外一種處理方式,就是把軟體寫到BIOS裡,透過晶片組的幫助來加速,這裡有一篇組電腦的問題,裡面有詳細的回答。
但是硬體Raid,有一點必須要注意的是,大部份的錯誤控制採用time-limited error recovery (TLER),一般磁碟陣列控制卡允許修復的時間僅為7~15秒,超出則視為故障,所以硬碟的錯誤recovery時間不可超出這個時間,所以才常常發生在 rebuild 新硬碟時,老舊的那顆受不了,發生錯bits時來不及處理,連帶造成第二顆掛掉,所以硬碟的好壞在採用Hardware raid也是要加以考量的。
既然硬體Raid好處這麼多,當然價格也不便宜,前陣子看了一下HP ProLiant DL360 G5,動輒報價逼近40w,幾乎不是中小型企業可以承受。
另外一種考慮就是firmware raid,像Intel@RST,就是PN401採用的方式(市面上有些用Intel主機直接支援Raid大多是這種)
最後是最近才發現的另外一種解法,Raid硬碟外接盒,從字面上的意義來看就是一個硬碟外接裝置,盒子本身就有Raid控制器,透過esatathunderbolt3或是usb3的連線方式來達成Raid,優點是不貴,缺點佔用空間,還要用一條線連到主機,像是早期的Linux不支援mount usb3外接碟也是要注意的。
而且硬體Raid不是怕硬碟壞掉,而是怕控制器壞了,所以平時還是要備份,而且硬碟拔到另一台新的機器也不知是是否有辦法重建回來。
對像我們這種中型公司(自已有人)來說,老實說NAS不是那麼重要,重要的是要它的Raid儲存功能,所以只直用掛載了4WD 紅標2TB進行測試。

開始測試

基本上LinuxSoftRaid是使用mdadm 這支程式去做,網路的教學很多,可以自行去看。只是配合Intel®RST,使用外部管理硬碟的metadata,所以指令稍稍有點不同。
外部管理metadata使用container的管理方式,也就是說先把硬碟集合成一個管理集團,再由這個container來建立raid
可以先用指令lsblk看看有那些硬碟代號(一般會是 sdb,sdc,sdd,sde四顆),我們先用前3顆建Raid5,然後第4顆做為 spare disk
#建一個管理container
$mdadm -C /dev/md/imsm /dev/sd[b-d] -n 3 -e imsm
#建一個raid
$mdadm -C /dev/md/vol0 /dev/md/imsm -n 3 -l 5
#加入一最後一顆硬碟當Spare
$mdadm -a /dev/md/imsm /dev/sde
#若是把其中一顆硬碟標記為fail,則備用碟自動掛上
$mdadm -f /dev/md/vol0 /dev/sdd
#把失敗的硬碟移出container,拔出硬碟,然後插入新硬碟後再如上面再加一顆硬碟
$mdadm -r /dev/md/imsm /dev/sdd
#看一下組好的Raid
$lsblk
sdb 8:16 0 1.8T 0 disk
└─md126 9:126 0 5.5T 0 raid5
sdc 8:32 0 1.8T 0 disk
└─md126 9:126 0 5.5T 0 raid5
sdd 8:48 0 1.8T 0 disk
└─md126 9:126 0 5.5T 0 raid5
sde 8:64 0 1.8T 0 disk
└─md126 9:126 0 5.5T 0 raid5
因為我的目標是在硬碟年限到時可以抽換硬碟,所以要想辦法先辨識卡匣對應的硬碟代號,從測試結果來看,PN401從上而下的硬碟對應為 1:/dev/sde2:/dev/sdd3:/dev/sdc4:/dev/sdb
#在硬碟沒有工作時,想辦法從硬碟讀取資料,讓硬碟燈一直亮個不停來判斷對應硬碟
$dd if=/dev/sdb of=/dev/null bs=1M count=1024
我們要將Raid讓其它的機器所掛載可以考慮的有 方式有NFS或是iScsi,我比較傾向採用iScsiNFS只是一種檔案分享協定,背後要有主機存在;而iscsi直接將scsi over internet,讓掛載的機器直接以為掛載的就是真實硬碟,也許那天老X有錢直接把iscsi換成sandisk
現在我們要將Raid iScsi讓這個Raid變成target以便讓其它機器所掛載(記得防火牆開放TCP/3260)PN401預先裝的是tgt,因為CentOS7以後改用 targetcli,所以我把原先的tgt停用,改上targetcli,但是因為不熟ubuntumateService機制,發現它無法在mdadmService之後啟動,以致於開完機後我得重上一次targetcli的服務才有辦法將Raid變成iscsitarget,在使用時要特別注意服務啟動之相依性。
我的機器組成架構如下(兩台VM都在不同的Host)
 
CentOS7變成initiator後,立馬多了一顆硬碟 /dev/sdb ,趁著尚未格式化硬碟之前先試一下寫入/讀出速度如何
#寫入測試
CentOS$dd if=/dev/zero of=/dev/sdb bs=128k count=8192
1073741824 bytes (1.1 GB) copied, 94.4693 s, 11.4 MB/s
#讀出測試(在此用了hdparam,如果沒有就用 dd 也可以,參考之前讓硬碟指示燈亮的方式)
CentOS$hdparm -t --direct /dev/sdb
Timing O_DIRECT disk reads: ^[z 34 MB in 3.08 seconds = 11.06 MB/sec
每秒約11M的速度有點差強人意,我們把/dev/sdb格式化後掛載上來
CentOS$msfs.xfs /dev/sdb && mkdir /data && mount -o noatime,_netdev,sync /dev/sdb /data
再來準備直接在CentOSPostgreSQL資料庫,
#安裝資料庫
CentOS$yum -y install postgresql postgresql-server postgresql-contrib
#修改目錄屬性
CentOS$chown postgres:postgres /data && chcon -t postgresql_db_t /data
#建立Symbol Link
CentOS$rmdir /var/lib/pgsql/data/ && su - postgres -c "ln -s /data /var/lib/pgsql/data"
#切換用戶
CentOS$su - postgres
#初始化資料庫
CentOS$initdb -D ./data
#修改資料庫密碼與設定後回到root 開放防火牆
CentOS$….
#修改postgresql service 在遠端硬碟掛載後([Unit]段落內加入二行)才能啟動服務
CentOS$cat database /lib/systemd/system/postgresql.service
[Unit]
Wants=iscsid.service
RequiresMountsFor=/data

#變動設定
CentOS$systemctl daemon-reload
#啟動資料庫
CentOS$service postgresql start
這段過程中發現:原本初始化約1秒的動作(這把這臺CentOS Mount 另外一個VM Raid(沒有出現在上圖架構內)測的結果),在這裡居然花了 5 5(925 13:25:02 CST 2017 ~ 925 13:30:07 CST 2017),原本PN401上本來就有許多服務,因為是借的機器,我也沒有重新整機做Minimal 安裝,不知道最小安裝能否優化她的速度。
另外我準備了一臺Manjaro,打算利用HammerDB打搥打一下這臺資料庫,步驟照著這裡的指示進行,按著CPU Cores數量建立了40個倉庫,用了4個虛擬用戶來跑測試,測試結果如下:
#每分鐘達成307交易,128新訂單
$Vuser 1:TEST RESULT : System achieved 307 PostgreSQL TPM at 128 NOPM
同樣地我也對另外一台虛擬機(要強調環境無法造成對比,只是因數量差距大拿出來一觀)
$Vuser 1:TEST RESULT : System achieved 1363 PostgreSQL TPM at 775 NOPM
再來也對了我的本機(ManjaroHost,i7-3770K CPU @ 3.50GHz 8cores,8GRam)做了同樣測試
$Vuser 1:TEST RESULT : System achieved 4171 PostgreSQL TPM at 2001 NOPM

據詮力的工程師告訴我,10月底會會出一款硬體更強悍的NAS,希望能達到中型企業所需要的標準。

留言

這個網誌中的熱門文章

企業人員的統一管理-FreeIPA學習筆記

證交所最佳五檔的程式解析

Postgresql HA