傳統磁碟陣列(RAID)的衰落與新一代檔案系統 ZFS 之興起

pctine wrote:
插花的, 因為我也...(恕刪)


ZFS 有它的優異之處,只不過看著看著好像變成了無限上綱。
好不好用、實不實用又是另一回事

>>現今 file system 是否如此不堪
Fat 不就很慘,Fat32 也沒好到哪
有些儲存媒體都還在用 Fat

NTFS 相當穩定,可惜MS不肯共享、分享,Fat 倒是肯分享、共享。
可以期待MS ReFS ,畢竟人人都可用的到,只要是使用MS系統,
至於會不會取代 NTFS 就不知道了,至少現在不可能。NTFS也改版過
幾次。


題外話:
寫入時來不及回存(快取),只要是採取記憶體快取(揮發性)
都有機會發生資料毀損、遺失。這種問題任何環境下都會發生。

硬碟壓根就內建快取,當然可以關閉該快取以達到安全性增加,只不過性能
更加緩慢,碰到SSD 呢,SSD 快取又更大。
古老硬碟沒有,最先有的是 SCSI 之後 IDE 才內建快取... 好像變成考古。

寫入階段只要發生中斷,在任何環境下該檔案都會毀損,未完成的檔案結構
當然是不能用。檔案算不算是資料,分割表也視為資料,硬碟上也只不過 0/1的
不同罷了。

對於 RAID ... 一分錢一分貨


有時候變成雞蛋裡挑骨頭,挑也挑不完,徹底偏向某一邊才慘。


>>根本沒有設排程去執行 check consistency
的確如此

早些年 Intel 內建陣列時還沒有 check consistency 該項功能,
這些年就開始有了,只不過有開啟的又有幾位。

有些高階陣列卡預設值也沒開啟。

開啟了會導致性能會稍慢。check consistency 早些年很有用,這些年拜
科技所賜,錯誤率幾乎是不可能發生(針對中高階,高階就更不必談)。


有時候硬碟插著極少讀寫反而容易壞
JQJQ wrote:
.... 先說聲抱歉
--- 吐槽 ---
1. 樓主玩陣列嗎?
我會這麼問是因為,有些樓主所寫的文字很怪
好,跑重建時當遇到系統重新開機(死當)甚至主機直接斷電會發生甚麼事,
重新開機其重建接著繼續跑完,不會怎麼樣。
就算同顆硬碟再次拉拔也只不過重建得重新來過。
另一個問題,UPS 才多少錢,光大容量企業版的硬碟都可買台 On-Line UPS,
更別提廉價的 Off-Line UPS。
RAID 沒有那麼不堪,不要扯到用爛硬碟、爛周邊所發生的問題等同視之。
..... 其他的問題就不提了,總之很怪,怎麼會跟 分割表扯上邊。
先跟檔案格式扯上邊,接著是分割表,一頭霧水。
2. 樓主對於 ZFS 熟嗎?
其實 ZFS 出了挺久的,要是那麼神老早周邊產品其格式就會是ZFS格式,
如今ZFS格式卻很少看到市售應用這一塊。
ZFS如果那麼神,搞不好有驅動程式可掛載於 Microsoft 系統使其讀寫 ZFS
格式硬碟。
有網友問 ZFS 能掉幾顆硬碟,只不過沒看到有人回答,有玩過應該能回答得出來才對。
我對於 ZFS 不熟,以前就看過類似討論最後不了了之,畢竟Microsoft
系統佔絕對多數,就算遠端儲存系統使用,其實也感受不到實際操作。
上網看文件與實際操作有很大的不同,光看文件講一堆是沒有用的,給人有種
空洞感。
反之
ZFS 熟,何不測試拉掉幾顆硬碟會發生甚麼事情,線上直接安插硬碟又會怎麼樣,
拉插硬碟後直接斷電又會怎麼樣,容量填滿能直接拉掉幾顆碟.....種種。
惡搞 一番反而能知道很多文件上所沒提到的事情。( 好像有點怪,我把軟硬搞在一塊 )
我玩的不多,無法了解樓主所寫的。


不要緊,我其實只是有感近年看到不少 server 陣列掛了(我工作的數據中心有過萬台 server),然後看到新的技術似乎都針對一些問題對症下藥才有感而發(我也是這幾個月才開始玩 ZFS)

ZFS 驅動,或是掛載這些,拜 Oracle 所賜,很難,因為 Oracle 只願意開放框架但源代碼卻不肯公開(正如 Linux/Mac 掛載 NTFS 也還是只建議讀取不要寫入),所以只有 BSD/Solaris 才有最正宗的 ZFS,Linux 的也是「學著做」,不過 linux 上也在發展 BtrFS

你說的惡搞,其實我也想試(反正都是測試機,胡亂放數據再試試也不錯),反正這個就是有點軟件 + 硬件混合的意味,所以我也明白你指的軟硬搞在一塊的感覺。

ZFS 能掉幾個硬碟(抱歉沒看到這個問題),也要看做甚麼類型陣列,它也有 Strip/Mirror(像 RAID 0/1),RAID-Z/Z2/Z3(就像 RAID 5/6/7),所以這樣應該會比較易明白?掉的硬盤數多於可容許的,有甚麼神器也回天乏術,我的重點只是在現有的系統基礎上進一步穩固資料的 consistency

MS 也有 ReFS,為的也是想增加儲存空間的 consistency,我也期待各家都有自己的工具去做好這件事,畢竟在於用戶層,能抓到老鼠的就是好貓,對吧。
pctine wrote:
感謝分享.小弟並未...(恕刪)

JQJQ wrote:
check consistency 早些年很有用,這些年拜
科技所賜,錯誤率幾乎是不可能發生(針對中高階,高階就更不必談)。
有時候硬碟插著極少讀寫反而容易壞


錯誤率其實只是一個機率,但最終會發生的可能性就取決於實際數量而定。

例如 HDD 發生錯誤機率是 10^14,那麼大約讀寫 100 TB 數據就可能出現一次錯誤,從前硬碟不大,要到 100TB 真的很不容易
但現在一顆 SATA 硬碟,主流都已經 2-4TB,看上去隨便都能組合出一個 10TB 的儲存空間,那麼就真的很接近錯誤發生的地步(當然這只是紙上計算),而 RAID rebuild 就是要整顆硬碟重做所以概念上會較易出問題)。所以為穩固,我還是希望有 consistency check



有時候硬碟插著極少讀寫反而容易壞 <-- 這是真的,我有幾顆舊 server 硬盤放著不動,就壞了,但是一台 9 年前開始用的 server,裡頭的 250GB 硬碟還在跑(真的不可思議)

pctine wrote:
RAID 資料在寫入時, 如大大所言, 突然中斷, 那麼到底是 data bit 未完全寫入 or parity bit 未完全寫入, 這是不可預知的, 總之資料就是未真正寫入硬碟, 但小弟的想法很簡單, 對於 Journal file system 而言, 它就像一個 transaction log, 在資料寫入前, 會註記接下來要做的動作(或者是影響到的磁區), 然後做資料寫入, 寫入完成後再去做一個類似 commit 的動作, 表示資料已安全寫入(這是小弟猜測的).
那麼在中途斷電, transaction 並未完成, 系統重新開機時, 會先去看看到底 '交易中' 的 log 是否為 clean, 如果不是 clean 表示在寫入時一定發生問題了, 此時再 rollback 回未寫入前的狀態就好了, 當然這筆資料並未真正寫入, 但後續的問題已經是應用程式必須處理的, 在系統層面已經完成它的工作了.
所以整體看來, 在每個層面都各自有它 '資料驗證' 的機置, 如 RAID/File system/Application 每一層都有, 大家各司其職, 並非單一層面出現錯誤時就會 100% 造成資料毀損或是發生交易錯誤.
其實小弟了解 fakeman 兄所要提的狀況, 不過 write hole 會發生影響之處, 並不是在重建時才會產生, 既然資料寫入已有誤, 在下次讀取時, 資料就是錯的 (因為不會只有 parity 有寫入錯誤的可能, data 也會發生), 但前面提過, 透過一些現有的技術是可以糾出這種錯誤的.


大大說的也對,現在問題也有一些外來的辦法可以協助偵測問題

或許我這篇是寫得有點誇張,過於杞人憂天,但討論過後小弟也獲益不少,多謝各大大的耐心回覆與指正

fakeman1999 wrote:
大大說的也對,現在...(恕刪)


標題確實是太聳動了些 ...
畢竟 備援 跟 備份 是兩回事, RAID 也只是 Zero downtime 一個環節
不管你挑何種 儲存設備 跟 檔案系統,備份依然該做
System Engineer
ZFS 本來就是要取代 硬體 RAID 而設計的

標題並沒有聳動, 小弟(其實我算是老頭子了)使用 zfs on production environment 已經 3年了. ZFS 是一種檔案格式 file system 沒有錯, 但是它也是 software define raid. 現在在什麼都是 Software Define 的年代就是爲什麼 zfs 越來越紅 (跟以前比較). software define computing 是 vm. Software Define Storage 是 zfs, vmware vSAN 或是 Openstack Swift Object Storage . Software Define Network - pfsense, openswitch 等等. 現在什麼都是 SD 了, 這個就是雲最重要的基礎, 不靠特殊硬體.

第一如果硬體 raid card 壞掉, 那麼你只能用相同晶片的 raid card 修復, 不然資料永久遺失.
ZFS 的 software define raid SDR 的架構是寫入到每一顆 HD 的 superblock 的 所以你使用 5顆 hd 做出 raidz1 的 zfs pool 只要帶着跑, 在隨便一臺有 zfs.ko 的系統上都可以看見 不管是 centos, ubuntu, freebsd.

第二 zfs 是 muitl-tier auto-tier 的檔案伺服器 第一層的 cache 是使用 RAM (純讀取, 沒有寫入, 因爲怕資料遺失當斷電的時候), 原本自定應使用 ram 的容量是系統的 50%, 但是可以透過 zfs_arc_max 這個 kernel 參數修改使用多大的記憶體. 再來如果 zfs 不開 dedup 的話, 記憶體不會使用那麼多. zfs 的第二層 cache 是 ssd, 透過 ssd 來作 寫入以及讀取, ssd 作爲寫入, 那麼就不怕突然斷電造成資料遺失, 而硬體 RAID 爲了避免這樣子的情況是在它卡上加電池讓斷電時, 在 raid card 上面的 RAM 可以繼續維持資料, 等開機後再寫入 hd. 但是電池會壞的... 而且時間也只有2個小時

第三 zfs 把系統 cpu 當作 raid 的晶片, 所以只要是它支援的 cpu x86, arm, ppc, spark 全部都可以, 不會被特定一家廠商鎖死綁住.

第四 zfs 是 128-bit file system, 它可以容下 1.84 × 1019 更多倍數的資料跟 64-bit systems 如 Btrfs 相比, 所以在作大型的 SAN 動不動就 20 PB (不是 TB 喲) 的資料時, zfs 是唯一選擇 64 bit 根本無法支援, 同時在這個大數據的時代, 20 PB 的資料已經變成普通

第五 zfs 這樣龐大的數據容量, 它的備份方式跟其它檔案格式一定不一樣, 它的 snapshot 的時間是在一秒內完成的, 它所有的資料都是以 0 跟 1 的 block 模式去看待, 所以備份時, 差異比較時(checksum), 以及使用 lz4 壓縮資料時, 速度超級快, 以及幾乎不花 cpu 的資源.

第六 zfs 非常重視資料安全性, 它的 stripe mirror 模式 = raid 1+ 0, raidz1 = raid5, raidz2 = raid6 然後 raidz3 = raid7 (目前硬體卡還沒有廣泛支援這個格式吧) ... 再來它可以設定一個檔案在單一個 pool 儲存幾個 copy 來避免 data corruption (當你沒有 ecc ram 或是很爛的 hd 時不是 wd 黑標時, 這個設定就很方便)

第七 zfs 效能在沒有 ssd 的加速下, Software Raid 1+0 不輸 Hardware Raid1+0 不管是 sequence read+write 或是 random read+write. 當加上 ssd 加速時, HW Raid 是完敗, google 一下啊 zfs performance 其實太多了, http://www.zfsbuild.com/ 有不錯的 benchmark 而且我的硬體系統架構就是模仿他的. 寫入跟讀取的速度隨便都是超過 1000 mb/s iops 都是破兩萬的 (記住那是在沒有高端 NVMe SSD 的年代, 大部分的 ssd 只有 300mb 的寫入速度時)

第八 zfs 它的實用性? 每天 3 TB 的備份 10秒完成, 同點異機備份 4分鐘內完成, 遠端異機備份30分鐘內完成, 所有的備份都馬上可以由 vmware vsphere, virtual box 或 kvm 的 vm 直接開啓, 不需要任何的還原. 是馬上可以使用的 HD (block 的概念太棒了). 備份 oracle db 或是 mssql db 根本不用從伺服器端去作, 而是直接從 HD block level 去做, 直接 snapshot. 而且 snapshot 只儲存差異的資料而已, 所以所佔的空間是很小的, 更不用說所有的資料都是 lz4 壓縮過的 (現在所有的 cpu 使用 lz4 跟根本不吃什麼資源) 我現在連家裏的 nas 都是自建的 zfs server.

第九 全部使用 all ssd 作爲 zfs 是不對的, ssd 的讀取速度在 sequence read 是很差的, 它的強項是在 random read and write. 然後使用 all ssd 作 hardware raid 是找死, ssd 本身現在就已經跑 hardware raid 了 而且都是 raid 0, 你在 raid 上面再跑 raid, 都是找死.

我最近打算更新我的 SAN, 只換 ZIL zfs write SSD 跟 L2ARC zfs read SSD 變成 Intel NVMe SSD, 那個時候我在 po 一些簡單的數據.
Oneplus 8 Pro• Thinkpad T480s• PVE6+OMV4+NextCloud
容錯式磁碟陣列(RAID, Redundant Array of Independent Disks)
我個人理解RAID就是一種概念
用獨立RAID卡或所謂的CPU式軟RAID來達到SERVER不停機以及資料的保全問題&效能提升
軟硬或各家廠商在部分技術上都有其些微差異,就不細說


獨立RAID卡
優:
不耗CPU效能,讓SERVER CPU能避免資源調度等問題
有自家寫的韌體程式再跑,優化或其他特殊功能
缺:
卡壞了要同系列或同晶片的卡才能回復
中高階以上價位$$$不是一般人可以負荷的

軟RAID
優:
不用浪費錢買獨立RAID卡
硬體壞了,只要在其他X86硬體上差不多的系統環境,就能還原
省下一筆RAID卡的開銷
缺:
各家軟RAID技術不一,效果效能不一
各家軟RAID設定方式不同指令不同,硬RIAD就進它開機程式設定或WIN程式裡設定即可

現在都職位分明了,檔案系統歸檔案系統,前端SERVER歸前端SERVER
那怕軟RAID來搶CPU效能,都嘛過剩


說我個人經驗
之前幫公司(已離職)用Freebsd 10.1 建儲存系統,比較過
UFS花40幾G存儲
ZFS只花了26G左右儲存
檔案都是office或PDF檔為主,ZFS壓縮預設是LZ4,其他壓縮比聽說效果差不多但更花CPU,所以用預設就好
或許大部分是文件檔案所以壓縮結果不錯,影像或圖片就沒細比較了


自己家用是用freenas 9.3 32G 建立儲存系統
用10G網卡時,也都至少有3-400MB再跑
後來10G網卡賣掉用1G網卡,就感覺明顯慢多了
至於為什麼賣掉,是因為感覺是山寨卡,效能不到500MB,等有錢了再買正版卡

ZFS的
優點:
快速的snapshot備份
L2ARC記憶體加速(現在記憶體也很便宜了)
L2ARC SSD加速(不如直接加記憶體來的有用,但也是種方式)
重建速度,之前 1T*8 RAID Z2重建幾分鐘就好了(當時嚇到),而且是2.5吋
x86簡單暴力做純檔案SERVER還是非常夠力的,有些底子的人因該都能學習並設定
缺點:
擴容要一顆一顆換,或組同樣的陣列來並行擴充,<-這點還沒實際用過,我也不太清楚,有請大神講解


樓上還有人問ZFS能壞幾個?
稍微溝狗下不就知了...

RAID 0 沒有容錯
RAID 1 n-1個容錯
RAID Z1 一個容錯 = RAID5
RAID Z2 兩個容錯 = RAID6
RAID Z3 三個容錯 = RAID7?
這個是我的 zfs server... 純脆當 SAN 使用, 既然是 SAN, 它所有的 data 都不是走 ethernet... 全部都是走 40gbps 的 infiniband

root@san:~# zpool status -v
pool: vmdisk
state: ONLINE
action scan: scrub repaired 0 in 20h8m with 0 errors on Sun Sep 27 20:28:04 2015
config:

NAME STATE READ WRITE CKSUM
vmdisk ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
scsi-350014ee3001663b8 ONLINE 0 0 0
scsi-350014ee3aac10540 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
scsi-350014ee3556bbba4 ONLINE 0 0 0
scsi-350014ee3aac10e2c ONLINE 0 0 0
mirror-2 ONLINE 0 0 0
scsi-350014ee3556bbb04 ONLINE 0 0 0
scsi-350000c0f01f1c1ec ONLINE 0 0 0
mirror-3 ONLINE 0 0 0
scsi-350014ee3556bb534 ONLINE 0 0 0
scsi-350000c0f01f1c200 ONLINE 0 0 0
logs
mirror-4 ONLINE 0 0 0
ata-INTEL_SSDSA2VP024G3_CVHA2382009B024BGN ONLINE 0 0 0
ata-INTEL_SSDSA2VP024G3_CVHA23820012024BGN ONLINE 0 0 0
cache
ata-INTEL_SSDSC2CW240A3_CVCV2526005Z240CGN ONLINE 0 0 0
ata-INTEL_SSDSC2CW240A3_CVCV2215001E240CGN ONLINE 0 0 0

我是走 4個 RAID 1+0 的 stripe. 這個不知道怎麼算... 基本上 最壞的情況下, 我可以壞 4個 HD 然後不會有影響, 但是倒楣的話, 壞兩個 HD 在同一個 udev 下面的話, 我就慘了.

主要的 pool 的是 8顆 WD 黑標 4TB 的 SAS HD 做出 16TB 的容量, 然後目前搭配 4顆 ssd 加速, 兩個做 write log, 兩個做 read cache.

明年 2016 已經有預算了, 將會把 write log 跟 read cache ssd 換成 2個 NVMe SSD, 然後開機碟 將會直接安裝到 zpool 上面, 這樣子我就會多出 6個 HD slot, 那個時候就會把 pool 作成 7個 RAID 1+0 的 stripe, 總容量爲 28 TB.

基本上它是透過 infiniband + RDMA 的模式把 zfs pool 做出一個虛擬 block device 給前端 Vsphere Esxi 6.0 的 server 當作 vm 的 HD. 所以所有的備份只要在 san 上面作就好了 (vsphere 的 backup 超級糟糕) infiniband + rdma 跟 zfs 的搭配是很合的. 因爲 iscsi 的效能真的太糟糕了, 這部分應該需要開另外一個 po 來討論才對.

cpu: Intel(R) Xeon(R) CPU E5-1620 0 @ 3.60GHz

root@san:~# cat /proc/meminfo
MemTotal: 132003840 kB (128GB)
MemFree: 59416444 kB

我的 infiniband network 4 nodes, 每一個 nodes 都是 dual port 搭配一個 36 port 的 ib switch
root@san:~# ibnodes
Ca : 0x0002c90300f7a990 ports 2 "vm-ha HCA-1"
Ca : 0x0002c903009f4240 ports 2 "idc-vm HCA-1"
Ca : 0x0002c90300a0b670 ports 2 "nas HCA-1"
Ca : 0x0002c903009f4480 ports 2 "san HCA-1"
Switch : 0x0008f1050020056c ports 36 "Mellanox 4036 # 4036-056C" enhanced port 0 lid 1 lmc 0

我的 idc-VM上面是有 4顆 16 core AMD Opteron™ 6378 processors + 256 GB 的 RAM 跑 VMware exsi 6.0

上述這些伺服器 (supermicro)跟 infiniband 配置我總共花了 75萬構建.

如果是要購買 oracle 的伺服機配置的話, 大概要 400多萬... 然後效能完全不輸原廠. 但是 oracle 的 zfs rpool 版本是 32. 而且支援 realtime encryption. 而我的 zfs pool 版本是 28, 沒有加密功能, 從 28版本後的 zfs 的代碼, oracle 就不再開源了 (邪惡的公司, 買下了 open office 後, 就給它死, 再送給 apache, 買下了 mysql 後, 就不給它增加新功能或是任何企業級需要的功能如 cursor or store procedure, 避免威脅到它的 oracle database 12c, 買下了 Sun 以後, 拿走它的 Solaris 系統跟 ZFS 後, 就封閉了 open solaris, 所以現在 big data 的 database 首選都不是 mysql... 因爲 oracle 就是不給它新功能或是效能)

因爲現在是 production enviroment 我無法跑測試數據... 不能影響到公司的服務阿! 只有明年在更新時, 把所有的服務移到備用伺服器上時, 我才能跑測試. 基本上我 vm guest 上硬碟讀跟寫 都是 破 1000mb/s (vmkernel 的極限), 所以我從來沒有去測試它真正的極限值. 大部分的時候我都還要限制住 io 的速度在 300 mb/s 以下.

JQJQ wrote:
ZFS 有它的優異...(恕刪)
Oneplus 8 Pro• Thinkpad T480s• PVE6+OMV4+NextCloud

EluSiOn wrote:
這個是我的 zfs...(恕刪)



infiniband switch 好像很貴....

你是用OpenSolaris還是其他系統建置的?
我個人是因之前工作接觸較多freebsd,所以用較多bsd家族的系統如freenas

vgbjack wrote:
infiniband...(恕刪)


我的 switch 是 Mellanox 4036 Grid Director, 從 google shopping 上面搜尋新品的價格是 24000 美金 Nextwarehouse 但是我是從 ebay 上面買其它人從 idc 淘汰掉的舊品, 才 900美金一臺, 因爲怕壞掉所以買了兩個, 另外一個當備品, 但是也用了兩年頭好壯壯的.

我的系統是 Ubuntu 14.04.3 LTS (GNU/Linux 3.19.5-031905-generic x86_64) 安裝的是 http://www.zfsonlinux.org 的 kernel space 的 driver. 不是透過 FUSE 喲. 它的 zfs 是完整的, 它的做法是使用 linux 的 kernel 去模擬 Solaris 的 kernel 的 api. 不過目前 oracle 完全把 open solaris 弄死了, 新的 open indiana 不成氣候, 從 2012年10月以後就沒有任何的更新... 現在大家對 zfs 怕的一點就是不知道它會不變成一個 dead project. 但是就目前來看, 未來3~5年還不會, 因爲它的功能效能來說, 還沒有其它的 file system 比它更強 (Sun 真是厲害的公司, 發明了 java, 跟 2004 年發明了 zfs, 這家公司死後, 到現在它的智慧財產還是繼續遺愛人間.)
Oneplus 8 Pro• Thinkpad T480s• PVE6+OMV4+NextCloud
文章分享
評分
評分
複製連結
請輸入您要前往的頁數(1 ~ 9)

今日熱門文章 網友點擊推薦!