在本章的的快照一開始就一直說明了 Snapshot 與 LVM 有很大的關係,首先我們必需瞭解 Gluster 使用了 LVM 的一些特殊功能。
假設有一間金控公司開了一間銀行其資本額為 100 億的實收金額,甲公司借了 60 億、乙公司借了 60 億、丙公司借了 40 億。
銀行雖然資本只有 100 億,但是一共借出了 160 億元的帳面金額給不同公司,因為不是每間公司一下就需要使用到這些金額,這是合法,但不安全的作法。
當三家公司同時間要將錢取出時,可以發現銀行並沒有足夠的金額轉出,因此會發生兩個情況:
以上說明指出了 LVM Thin Provisioning 的大致作業情況。
在 LVM 的 Thin Provisioning 就有點像是銀行(LV Group)、借款公司(LV Brick)、與金錢(空間大小)。
你可以在 Thin Provisioning 中規劃出一個 Pool,然後在 Pool 中切出不同的 Brick 要使用的 LV。然而一開始所有的 Brick 並不會存放足量的資料,大部份都是漸進式的使用,所以您可以在 Pool 中切出的 LV 總量可以超過自己的全部總額。
但是總有一天會資料量會佔滿所指定的大小,此時若 Pool 容量不足時,該 LV 就會被系統強制停用,若不處理的話則會讓資料無法存取(違約);或是將該 Pool 加大空間(向金控母公司要求更多金額),讓各個 LVM 可以繼存有足夠的空間儲存。
lvs
指令查看每個節點伺服中 Brick Pool 的 Data 使用量,在接近 80% 的時候應該要立即採取應變作業。在 Thin Provisioning 中,假設 Pool 為 10GB、LV 為 8GB,此時 LV 實際使用空間為 7GB,那麼其 Snapshot 也會從 Pool 佔用 8GB 的空間設定為快照使用。
所以當您的 Pool 沒有空間,其所影響的範圍會是全面性的,若是在 Gluster 中,該 Brick 就會失效下線。
fstrim
將 LV 重新整理,並適放沒有使用的空間給 Pool。fstrim
釋放容間至 Pool 中。lvs
檢查 Pool 的 Data 使用量。