iSCSI Target 請改用:
具備 HA 雙機複寫容錯能力的 Storage
(不是備援喔, 是要:複寫+容錯; 光有備援功能, 上面的 VM 還是會死)
如果你要用 Windows Server 來當 iSCSI Target HA 的話, 唯一的辦法是安裝 S2D+iSCSI:
https://www.informaticar.net/create-iscsi-target-cluster-on-windows-server-2019/
(文章第一行說到的前置作業要先做好)
https://getsysadminblog.com/2019/09/18/building-a-highly-available-iscsi-target-utilizing-s2d/
如果不會維運 S2D, 或者懷疑他效能的話 (你的硬體不夠力?), 請考慮直接購買如: Dell EMC, NetApp, 3Par, Nexenta...這類專業廠商的 Storage, 以免你自己被搞死掉...
上面的 VM 還是會死。
請教雷大,像我跟GCP租了一台VM,有沒有可能某天google來跟我說,因為某種原因,我那台VM死了,上頭的資料都不見啦?
gcp的平台介面上,除了快照外,也沒有我們可以自行備份VM檔的選項,做為承租戶,我們能很放心嗎?
我那台VM死了,上頭的資料都不見啦?
當然會啦, 所有公雲業者在服務條款內都有公開免責聲明:
資料備份是客戶的責任, 雲業者不擔保資料永續性
你可以去查他們的 SLA, 最多 99.5~99.9%, 沒有人敢擔保 100%
而且 GCP 的比利時機房, 也真的發生過資料被清除事件:
https://www.computerworld.com/article/2973600/google-cloud-loses-data-belgium-itbwcw.html
所以, GCP 對於 Persistent Disk (PD) 有提供高可用性 (Regional PD) 選項讓你買啊:
https://cloud.google.com/compute/docs/disks/high-availability-regional-persistent-disk
至少在同一個 Region 內可以自動跨 Zone 容錯 Failover
--- 但若整個 Region 掛掉, 也是全部備援的 PD 都死掉
(不過整個 Region 掛掉如果低於 99.5% SLA 的話是可以減收月租啦)....
而且萬一你買的不是 PD, 而是 Local SSD 的話, 那就連 Region HA 的選項都沒有, 掛了就是掛了, 資料雲飛煙滅....(以上原則, 所有的雲都相同)
所以在雲上面要如何自保?
- 對於 Data 本身 (例如 SQL Data):
你要有對應的備份機制, 能夠在 Instance 故障的時候, 還能取回某個時間點的資料. SQL 的話就是要定期將 Data 轉存到更可靠的儲存體上 (例如: S3, 在GCP=Cloud Storage), 以便在 Instance/PD 全毀的狀況下, 還能保有最後的資料 (要根據你商業上的 RPO 政策來決定備份週期)
或者你也可以在雲上面買多個 node, 自建成分散式 Storage 如: Ceph, GlusterFS, DRBD...等給你的 VM 使用, 避免單一磁碟掛掉的風險, 降低 RPO/RTO; 看看國外論壇, 很多人討論這些做法. 最簡單的做法, 你也可以買多顆 PD/Local SSD 掛在同一個 VM 裡, 然後用 OS 來做 Software RAID1, 確保一顆死了還有另外一顆可用.
快照並不可靠!! 因為通常 Parent(Master) Disk 掛掉或刪掉之後, 從他產生出來的快照鏈也有可能隨之故障或消失, 無法取回 (不同雲業者作法會不同); 這是快照技術上的限制, 不論地端或者雲端都相同, 不會因為上了雲, 快照就突然變成無敵不死鳥.
- 對於 Instance 本身, 你要有死而復生的能力:
比較可靠的方式是將執行中的 Instance 定期轉成 Custom Image. 雲業者都有提供 Instance VM 轉成 Image 的方法, Image 是獨立儲存的, 跟快照的儲存沒有關係, 而且你還可以將 Image 轉存到更可靠的 S3 去; 但通常這個方法都需要關機才能實施, 所以你必須告知用戶 Downtime 或者 Maintenance Window.
事前把 VM 做成 Container 是另外一個方法, Container Image 存放在 Registry 裡面, 這通常可以放在不同業者的儲存體內, 要用的時候去 Pull 回來然後透過 Dockerfile 重建就可以恢復到預期的功能, 根本不用擔心原本的 VM 掛掉. (當然, 這是只有 Compute 的功能, 他執行時不能回存異動資料, 所以變動性資料你還是得寫到別的儲存體去, 然後自己備份)
至於 Compute VM 永續性, 可以透過雲業者提供的 Auto-Scale 功能, 確保某一個 node 死掉之後, 雲平台可以自動從你指定的 Image/Container 再起一個相同的 VM 來服務. 當然, 前提是: 你的應用軟體必須寫成: 可以忍受這樣的死而復生之後, 還能夠繼續執行下去才行. 否則雲平台幫你復活了 VM, 但你的應用軟體卻卡在上次死掉的點上面, 那也是沒用的.
軟體服務層級的 HA 要靠你自己來做, 例如: SQL 要自己建三個 node 放在不同 Zone 做 Master/Master Cluster, ELK/Redis/MongoDB 也是要把多個 node 分散放在不同的 Zone 裡面自己做 Cluster (當然, 已經有些雲業者提供上述各 PaaS 現成的 HA 功能, 也可以直接買它們的---如果你懶得自己動手維運 HA 的話, 就是無限黑卡拿出來, 用力給他買下去!!)
以上功能都綜合起來的話, 結論可能會讓你選擇: K8S, 這是目前在雲上面自己做 HA 最規格化的方式 (至少你不用自己想破頭去設計架構), 還可以做到跨地/跨雲遷移....
所有的備份概念都跟地端沒啥不同, 地怎麼做雲也一樣做...
(總之, 在雲上面要讓資料更可靠, 就是要付更多錢給業者..)
十分感恩雷大指點,把我嚇出一身冷汗啦。
sql的資料和我自己寫的程式碼我都有十足的備份,但對於整顆VM的保全,您提到的幾個方法,好像不太容易掌握,也太專業了,對於只會租用,不會管理的半吊子的我,有些困難。
我在在想,雲平台為何不肯提供讓用戶下載VM的iso檔呢?若能下戴下來,萬一它壞掉了,我們再自行上傳掛進去,不就簡單多了嗎?
錢和安全的問題,當然是讓使用者加價買廠商設計好的備份備援機制,或者是第三方軟體如Veeam for GCP,但一樣還是錢的問題(Veeam license)
雲平台為何不肯提供讓用戶下載VM的iso檔呢?
他有啊:
https://cloud.google.com/compute/docs/images/export-image
只是過程比較複雜:
VM -> Custom Image > S3 (Cloud Storage) > Download....
(這樣他才能順便多收你一道 S3 的儲存費用)
感恩雷大
只是過程比較複雜
還真不是普通的複雜,不就只是想下載iso檔嗎?弄得百轉千迴,很折騰。假如我寫的erp要讓客戶下載某個文件,也這樣迂迴曲折的話,不被客戶打死才怪。
也感恩mathewkl,其實,我覺得花錢還是小事,方便省時才重要,最好是點一下按鈕就download整個 vm 的 image 檔。
看完之後,只有一個感想...
真是他媽的花錢堆出來的...
感謝雷大精闢的解說
Target一樣準備兩台
這是很基本的常識...,所有設備皆準備兩台以上,含網路設備
錢的問題而已...
另實務上,Target通常是「Storage」擔任