把對象存儲轉爲文件存儲,到底香不香?

目前開源的文件存儲有很多,譬如NFS、GlusterFS、CephFS等,但實話實話這些文件存儲都存在一定的問題,譬如NFS的多集羣要折騰、GlusterFS的小文件存儲性能差、CephFS的運維複雜度和穩定性不高。結合公司的業務場景:圖片、pdf、文檔 存儲的特性,在公司內部主推的是對象存儲。
但在推廣對象存儲的時候,也面臨一些老系統的改造壓力,這些老系統之前都是使用商業NAS,如果遷移到對象存儲需要改造的點有很多,而且還需要考慮歷史數據的讀取。如果對象存儲能夠保持和之前商業NAS一樣的有個文件系統,通過目錄和文件的方式讀寫那就可以快速的幫助業務遷移到對象存儲。
我們都知道Fuse文件系統,它是linux提供的用戶態文件系統,曾幫助我們解決docker的proc文件系統問題,這次我第一個想到的也是它。能不能通過Fuse對接到S3對象存儲上面呢?搜索了一下,還真有很多相關的實現,happy。趕緊拿來測試一下。

首先打包一個s3fs的Docker鏡像

FROM  xx.xx.xx/basic/centos:7.5.1804 
RUN  yum install epel-release -y && yum install s3fs-fuse -y

如果是Docker直接啓動

# docker run -it   --privileged  

然後在容器內執行掛載前需要將s3的祕鑰寫入passwd-s3fs

#  echo ACCESS_KEY:SECRET_KEY > ${HOME}/.passwd-s3fs&&chmod 600 ${HOME}/.passwd-s3fs
# s3fs   bucketname /abc/   -o url=http://s3.xx.xx/ -o use_path_request_style  -o endpoint=default

掛載成功後便可以像操作本地文件系統一樣的讀寫數據了。

sh-4.2# cd /abc
sh-4.2# ls
aa  abc.txt  bb  cc  kk

可以看到和我們對象存儲裏面的內容是保持一致的(截圖來着我們team自研的對象存儲管理頁面)
在這裏插入圖片描述
是不是很香,如果是在kubernetes的環境中,需要先開啓策略

      containers:
      - name: my-container
        securityContext:
          privileged: true
          capabilities:
            add:
              - SYS_ADMIN

這種使用方式相對於常規的容器掛載文件系統的好處有兩點:
第一是避免業務改造代碼
第二是可以避免主機掛載,如果是主機掛載NAS,當NAS出現故障後,會導致容器無法刪除、Docker hang住等問題。
但這種方式也不是萬能的,畢竟的它的後端還是一個對象存儲,對象存儲的最佳實踐就是一次寫入,後續都是讀請求。如果有個業務的研發誤用,將s3掛載的目錄用於記錄日誌,那麼無疑是打開了潘多拉的魔盒,一直PUT對象。所以我們需要監控每個bucket的讀寫次數並設置告警,避免誤用。所以這樣看來它又並不是那麼香了。
所有的技術都是有適用場景的,沒有銀彈,沒有銀彈,沒有銀彈,重要的事情說三遍。

補充說明:

  • 如果上面s3掛載沒有成功,也不會報錯,可以通過mount命令查看是否掛載成功
    可以通過追加“-o dbglevel=info -f -o curldbg”查看debug信息。

  • 如果是window或則mac也支持掛載,不過看了幾款都是收費(可以試用30天)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章