『壹』 什麼是虛擬文件系統優點是什麼linux常用的文件系統是什麼
你好
虛擬文件系統(vfs)是由sun
icrosystems公司在定義網路文件系統(nfs)時創造的。它是一種用於網路環專境的分布式屬文件系統,是允許和操作系統使用不同的文件系統實現的介面。
優點是:
vfs使linux同時安裝、支持許多不同類型的文件系統成為可能。vfs擁有關於各種特殊文件系統的公共界面,如超級塊、inode、文件操作函數入口等。實際文件系統的細節,統一由vfs的公共界面來索引,它們對系統核心和用戶進程來說是透明的。
linux
中經常使用
reiserfs
文件系統
『貳』 NFS網路文件系統配置
配置流程適用於DebianUbuntu等的衍生發行版
Server:Armbian192.168.2.225
Client:Deepin192.168.2.222
增添一行
將 /root/share 共享給192.168.2.222 ,客戶端許可權rw
其中共享對象可以用通配符,比如 * 代表所有地址。
rw: 讀寫
ro :只讀
fsid=0 : 指定/root/share為nfs的根目錄
sync:將數據同步寫入內存緩沖區與磁碟中,效率低,但可以保證數據的一致性;
async:是大數據時使用,是先寫到緩存區,必要時再寫到磁碟里。
all_squash:所有訪問用戶都映射為匿名用戶或用戶組;
no_all_squash(默認):訪問用戶先與本機用戶匹配,匹配失敗後再映射為匿名用戶或用戶組;
root_squash(默認):將來訪的root用戶映射為匿名用戶或用戶組;
no_root_squash:來訪的root用戶保持root帳號許可權;
wdelay(默認):檢查是否有相關的寫操作,如果有則將這些寫操作一起執行,這樣可以提高效率;
no_wdelay:若有寫操作則立即執行,應與sync配合使用;
subtree_check :若輸出目錄是一個子目錄,則nfs伺服器將檢查其父目錄的許可權;
no_subtree_check(默認):即使輸出目錄是一個子目錄,nfs伺服器也不檢查其父目錄的許可權,這樣可以提高效率;
看到最後有 192.168.2.225:/ 15G 9.3G 5.2G 65% /mnt
不能寫入,沒有密碼
『叄』 基於mogileFS搭建分布式文件系統--海量小文件的存儲利器
1.簡介
分布式文件系統(Distributed File System)是指文件系統管理的物理存儲資源不一定直接連接在本地節點上,而是通過計算機網路與節點相連。分布式文件系統的設計基於客戶機/伺服器模式。一個典型的網路可能包括多個供多用戶訪問的伺服器。另外,對等特性允許一些系統扮演客戶機和伺服器的雙重角色。例如,用戶可以「發表」一個允許其他客戶機訪問的目錄,一旦被訪問,這個目錄對客戶機來說就像使用本地驅動器一樣。
當下我們處在一個互聯網飛速發展的信息 社會 ,在海量並發連接的驅動下每天所產生的數據量必然以幾何方式增長,隨著信息連接方式日益多樣化,數據存儲的結構也隨著發生了變化。在這樣的壓力下使得人們不得不重新審視大量數據的存儲所帶來的挑戰,例如:數據採集、數據存儲、數據搜索、數據共享、數據傳輸、數據分析、數據可視化等一系列問題。
傳統存儲在面對海量數據存儲表現出的力不從心已經是不爭的事實,例如:縱向擴展受陣列空間限制、橫向擴展受交換設備限制、節點受文件系統限制。
然而分布式存儲的出現在一定程度上有效的緩解了這一問題,之所以稱之為緩解是因為分布式存儲在面對海量數據存儲時也並非十全十美毫無壓力,依然存在的難點與挑戰例如:節點間通信、數據存儲、數據空間平衡、容錯、文件系統支持等一系列問題仍處在不斷摸索和完善中。
2.分布式文件系統的一些解決方案
Google Filesystem適合存儲海量大個文件,元數據存儲與內存中
HDFS(Hadoop Filesystem)GFS的山寨版,適合存儲大量大個文件
TFS(Taobao Filesystem)淘寶的文件系統,在名稱節點上將元數據存儲與關系資料庫中,文件數量不在受限於名稱節點的內容空間,可以存儲海量小文件LustreOracle開發的企業級分布式系統,較重量級MooseFS基於FUSE的格式,可以進行掛載使用MogileFS
擅長存儲海量的小數據,元數據存儲與關系型資料庫中
1.簡介
MogileFS是一個開源的分布式文件系統,用於組建分布式文件集群,由LiveJournal旗下DangaInteractive公司開發,Danga團隊開發了包括 Memcached、MogileFS、Perlbal等不錯的開源項目:(註:Perlbal是一個強大的Perl寫的反向代理伺服器)。MogileFS是一個開源的分布式文件系統。
目前使用 MogileFS 的公司非常多,比如國外的一些公司,日本前幾名的公司基本都在使用這個.
國內所知道的使用 MogileFS 的公司有圖片託管網站 yupoo又拍,digg, 土豆, 豆瓣,1 號店, 大眾點評,搜狗,安居客等等網站.基本很多網站容量,圖片都超過 30T 以上。
2.MogileFS特性
1) 應用層提供服務,不需要使用核心組件
2)無單點失敗,主要有三個組件組成,分為tracker(跟蹤節點)、mogstore(存儲節點)、database(資料庫節點)
3)自動復制文件,復制文件的最小單位不是文件,而是class
4)傳輸中立,無特殊協議,可以通過NFS或HTTP實現通信
5)簡單的命名空間:沒有目錄,直接存在與存儲空間上,通過域來實現
6)不用共享任何數據
3.MogileFS的組成
1)Tracker--跟蹤器,調度器
MogileFS的核心,是一個調度器,mogilefsd進程就是trackers進程程序,trackers的主要職責有:刪除數據、復制數據、監控、查詢等等.這個是基於事件的( event-based ) 父進程/消息匯流排來管理所有來之於客戶端應用的交互(requesting operations to be performed), 包括將請求負載平衡到多個"query workers"中,然後讓 mogilefs的子進程去處理.
mogadm,mogtool的所有操作都要跟trackers打交道,Client的一些操作也需要定義好trackers,因此最好同時運行多個trackers來做負載均衡.trackers也可以只運行在一台機器上,使用負載均衡時可以使用搞一些簡單的負載均衡解決方案,如haproxy,lvs,nginx等,
tarcker的配置文件為/etc/mogilefs/mogilefsd.conf,監聽在TCP的7001埠
2)Database--資料庫部分
主要用來存儲mogilefs的元數據,所有的元數據都存儲在資料庫中,因此,這個數據相當重要,如果資料庫掛掉,所有的數據都不能用於訪問,因此,建議應該對資料庫做高可用
3)mogstored--存儲節點
數據存儲的位置,通常是一個HTTP(webDAV)伺服器,用來做數據的創建、刪除、獲取,任何 WebDAV 伺服器都可以, 不過推薦使用 mogstored . mogilefsd可以配置到兩個機器上使用不同埠… mogstored 來進行所有的 DAV 操作和流量,IO監測, 並且你自己選擇的HTTP伺服器(默認為 perlbal)用來做 GET 操作給客戶端提供文件.
典型的應用是一個掛載點有一個大容量的SATA磁碟. 只要配置完配置文件後mogstored程序的啟動將會使本機成為一個存儲節點.當然還需要mogadm這個工具增加這台機器到Cluster中.
配置文件為/etc/mogilefs/mogstored.conf,監聽在TCP的7500埠
4.基本工作流程
應用程序請求打開一個文件 (通過RPC 通知到 tracker, 找到一個可用的機器). 做一個 「create_open」 請求.
tracker 做一些負載均衡(load balancing)處理,決定應該去哪兒,然後給應用程序一些可能用的位置。
應用程序寫到其中的一個位置去 (如果寫失敗,他會重新嘗試並寫到另外一個位置去).
應用程序 (client) 通過」create_close」 告訴tracker文件寫到哪裡去了.
tracker 將該名稱和域命的名空間關聯 (通過資料庫來做的)
tracker, 在後台, 開始復制文件,知道他滿足該文件類別設定的復制規則
然後,應用程序通過 「get_paths」 請求 domain+key (key == 「filename」) 文件, tracker基於每一位置的I/O繁忙情況回復(在內部經過 database/memcache/etc 等的一些抉擇處理), 該文件可用的完整 URLs地址列表.
應用程序然後按順序嘗試這些URL地址. (tracker』持續監測主機和設備的狀態,因此不會返回死連接,默認情況下他對返回列表中的第一個元素做雙重檢查,除非你不要他這么做..)
1.拓撲圖
說明:1.用戶通過URL訪問前端的nginx
2.nginx根據特定的挑選演算法,挑選出後端一台tracker來響應nginx請求
3.tracker通過查找database資料庫,獲取到要訪問的URL的值,並返回給nginx
4.nginx通過返回的值及某種挑選演算法挑選一台mogstored發起請求
5.mogstored將結果返回給nginx
6.nginx構建響應報文返回給客戶端
2.ip規劃
角色運行軟體ip地址反向代理nginx192.168.1.201存儲節點與調度節點1
mogilefs192.168.1.202存儲節點與調度節點2
mogilefs192.168.1.203資料庫節點
MariaDB192.168.1.204
3.資料庫的安裝操作並為授權
關於資料庫的編譯安裝,請參照本人相關博文http://wangfeng7399.blog.51cto.com/3518031/1393146,本處將不再累贅,本處使用的為yum源的安裝方式安裝mysql
4.安裝mogilefs. 安裝mogilefs,可以使用yum安裝,也可以使用編譯安裝,本處通過yum安裝
5.初始化資料庫
可以看到在資料庫中創建了一些表
6.修改配置文件,啟動服務
7.配置mogilefs
添加存儲主機
添加存儲設備
添加域
添加class
8.配置192.168.1.203的mogilefs 。切記不要初始化資料庫,配置應該與192.168.1.202一樣
9.嘗試上傳數據,獲取數據,客戶端讀取數據
上傳數據,在任何一個節點上傳都可以
獲取數據
客戶端查看數據
我們可以通過任何一個節點查看到數據
要想nginx能夠實現對後端trucker的反向代理,必須結合第三方模塊來實現
1.編譯安裝nginx
2.准備啟動腳本
3.nginx與mofilefs互聯
查看效果
5.配置後端truckers的集群
查看效果
大功告成了,後續思路,前段的nginx和資料庫都存在單點故障,可以實現高可用集群
『肆』 兩台linux伺服器想共享一個磁碟分區,怎麼做
1、首先打開電腦的虛擬機,再打開物理機的虛擬網卡。
『伍』 Ceph:一個 Linux PB 級分布式文件系統
Ceph 最初是一項關於存儲系統的 PhD 研究項目,由 Sage Weil 在 University of California, Santa Cruz(UCSC)實施。但是到了 2010 年 3 月底,您可以在主線 Linux 內核(從 2.6.34 版開始)中找到 Ceph 的身影。雖然 Ceph 可能還不適用於生產環境,但它對測試目的還是非常有用的。本文探討了 Ceph 文件系統及其獨有的功能,這些功能讓它成為可擴展分布式存儲的最有吸引力的備選。
「Ceph」 對一個文件系統來說是個奇怪的名字,它打破了大多數人遵循的典型縮寫趨勢。這個名字和 UCSC(Ceph 的誕生地)的吉祥物有關,這個吉祥物是 「Sammy」,一個香蕉色的蛞蝓,就是頭足類中無殼的軟體動物。這些有多觸角的頭足類動物,提供了一個分布式文件系統的最形象比喻。
開發一個分布式文件系統需要多方努力,但是如果能准確地解決問題,它就是無價的。Ceph 的目標簡單地定義為:
不幸的是,這些目標之間會互相競爭(例如,可擴展性會降低或者抑制性能或者影響可靠性)。Ceph 開發了一些非常有趣的概念(例如,動態元數據分區,數據分布和復制),這些概念在本文中只進行簡短地探討。Ceph 的設計還包括保護單一點故障的容錯功能,它假設大規模(PB 級存儲)存儲故障是常見現象而不是例外情況。最後,它的設計並沒有假設某種特殊工作負載,但是包括適應變化的工作負載,提供最佳性能的能力。它利用 POSIX 的兼容性完成所有這些任務,允許它對當前依賴 POSIX 語義(通過以 Ceph 為目標的改進)的應用進行透明的部署。最後,Ceph 是開源分布式存儲,也是主線 Linux 內核(2.6.34)的一部分。
現在,讓我們探討一下 Ceph 的架構以及高端的核心要素。然後我會拓展到另一層次,說明 Ceph 中一些關鍵的方面,提供更詳細的探討。
Ceph 生態系統可以大致劃分為四部分(見圖 1):客戶端(數據用戶),元數據伺服器(緩存和同步分布式元數據),一個對象存儲集群(將數據和元數據作為對象存儲,執行其他關鍵職能),以及最後的集群監視器(執行監視功能)。
如圖 1 所示,客戶使用元數據伺服器,執行元數據操作(來確定數據位置)。元數據伺服器管理數據位置,以及在何處存儲新數據。值得注意的是,元數據存儲在一個存儲集群(標為 「元數據 I/O」)。實際的文件 I/O 發生在客戶和對象存儲集群之間。這樣一來,更高層次的 POSIX 功能(例如,打開、關閉、重命名)就由元數據伺服器管理,不過 POSIX 功能(例如讀和寫)則直接由對象存儲集群管理。
另一個架構視圖由圖 2 提供。一系列伺服器通過一個客戶界面訪問 Ceph 生態系統,這就明白了元數據伺服器和對象級存儲器之間的關系。分布式存儲系統可以在一些層中查看,包括一個存儲設備的格式(Extent and B-tree-based Object File System [EBOFS] 或者一個備選),還有一個設計用於管理數據復制,故障檢測,恢復,以及隨後的數據遷移的覆蓋管理層,叫做 Reliable Autonomic Distributed Object Storage (RADOS)。最後,監視器用於識別組件故障,包括隨後的通知。
了解了 Ceph 的概念架構之後,您可以挖掘到另一個層次,了解在 Ceph 中實現的主要組件。Ceph 和傳統的文件系統之間的重要差異之一就是,它將智能都用在了生態環境而不是文件系統本身。
圖 3 顯示了一個簡單的 Ceph 生態系統。Ceph Client 是 Ceph 文件系統的用戶。Ceph Metadata Daemon 提供了元數據伺服器,而 Ceph Object Storage Daemon 提供了實際存儲(對數據和元數據兩者)。最後,Ceph Monitor 提供了集群管理。要注意的是,Ceph 客戶,對象存儲端點,元數據伺服器(根據文件系統的容量)可以有許多,而且至少有一對冗餘的監視器。那麼,這個文件系統是如何分布的呢?
早期版本的 Ceph 利用在 User SpacE(FUSE)的 Filesystems,它把文件系統推入到用戶空間,還可以很大程度上簡化其開發。但是今天,Ceph 已經被集成到主線內核,使其更快速,因為用戶空間上下文交換機對文件系統 I/O 已經不再需要。
因為 Linux 顯示文件系統的一個公共界面(通過虛擬文件系統交換機 [VFS]),Ceph 的用戶透視圖就是透明的。管理員的透視圖肯定是不同的,考慮到很多伺服器會包含存儲系統這一潛在因素(要查看更多創建 Ceph 集群的信息,見 參考資料 部分)。從用戶的角度看,他們訪問大容量的存儲系統,卻不知道下面聚合成一個大容量的存儲池的元數據伺服器,監視器,還有獨立的對象存儲設備。用戶只是簡單地看到一個安裝點,在這點上可以執行標准文件 I/O。
Ceph 文件系統 — 或者至少是客戶端介面 — 在 Linux 內核中實現。值得注意的是,在大多數文件系統中,所有的控制和智能在內核的文件系統源本身中執行。但是,在 Ceph 中,文件系統的智能分布在節點上,這簡化了客戶端介面,並為 Ceph 提供了大規模(甚至動態)擴展能力。
Ceph 使用一個有趣的備選,而不是依賴分配列表(將磁碟上的塊映射到指定文件的元數據)。Linux 透視圖中的一個文件會分配到一個來自元數據伺服器的 inode number(INO),對於文件這是一個唯一的標識符。然後文件被推入一些對象中(根據文件的大小)。使用 INO 和 object number(ONO),每個對象都分配到一個對象 ID(OID)。在 OID 上使用一個簡單的哈希,每個對象都被分配到一個放置組。 放置組 (標識為 PGID)是一個對象的概念容器。最後,放置組到對象存儲設備的映射是一個偽隨機映射,使用一個叫做 Controlled Replication Under Scalable Hashing (CRUSH)的演算法。這樣一來,放置組(以及副本)到存儲設備的映射就不用依賴任何元數據,而是依賴一個偽隨機的映射函數。這種操作是理想的,因為它把存儲的開銷最小化,簡化了分配和數據查詢。
分配的最後組件是集群映射。 集群映射 是設備的有效表示,顯示了存儲集群。有了 PGID 和集群映射,您就可以定位任何對象。
元數據伺服器(cmds)的工作就是管理文件系統的名稱空間。雖然元數據和數據兩者都存儲在對象存儲集群,但兩者分別管理,支持可擴展性。事實上,元數據在一個元數據伺服器集群上被進一步拆分,元數據伺服器能夠自適應地復制和分配名稱空間,避免出現熱點。如圖 4 所示,元數據伺服器管理名稱空間部分,可以(為冗餘和性能)進行重疊。元數據伺服器到名稱空間的映射在 Ceph 中使用動態子樹邏輯分區執行,它允許 Ceph 對變化的工作負載進行調整(在元數據伺服器之間遷移名稱空間)同時保留性能的位置。
但是因為每個元數據伺服器只是簡單地管理客戶端人口的名稱空間,它的主要應用就是一個智能元數據緩存(因為實際的元數據最終存儲在對象存儲集群中)。進行寫操作的元數據被緩存在一個短期的日誌中,它最終還是被推入物理存儲器中。這個動作允許元數據伺服器將最近的元數據回饋給客戶(這在元數據操作中很常見)。這個日誌對故障恢復也很有用:如果元數據伺服器發生故障,它的日誌就會被重放,保證元數據安全存儲在磁碟上。
元數據伺服器管理 inode 空間,將文件名轉變為元數據。元數據伺服器將文件名轉變為索引節點,文件大小,和 Ceph 客戶端用於文件 I/O 的分段數據(布局)。
Ceph 包含實施集群映射管理的監視器,但是故障管理的一些要素是在對象存儲本身中執行的。當對象存儲設備發生故障或者新設備添加時,監視器就檢測和維護一個有效的集群映射。這個功能按一種分布的方式執行,這種方式中映射升級可以和當前的流量通信。Ceph 使用 Paxos,它是一系列分布式共識演算法。
和傳統的對象存儲類似,Ceph 存儲節點不僅包括存儲,還包括智能。傳統的驅動是只響應來自啟動者的命令的簡單目標。但是對象存儲設備是智能設備,它能作為目標和啟動者,支持與其他對象存儲設備的通信和合作。
從存儲角度來看,Ceph 對象存儲設備執行從對象到塊的映射(在客戶端的文件系統層中常常執行的任務)。這個動作允許本地實體以最佳方式決定怎樣存儲一個對象。Ceph 的早期版本在一個名為 EBOFS 的本地存儲器上實現一個自定義低級文件系統。這個系統實現一個到底層存儲的非標准介面,這個底層存儲已針對對象語義和其他特性(例如對磁碟提交的非同步通知)調優。今天,B-tree 文件系統(BTRFS)可以被用於存儲節點,它已經實現了部分必要功能(例如嵌入式完整性)。
因為 Ceph 客戶實現 CRUSH,而且對磁碟上的文件映射塊一無所知,下面的存儲設備就能安全地管理對象到塊的映射。這允許存儲節點復制數據(當發現一個設備出現故障時)。分配故障恢復也允許存儲系統擴展,因為故障檢測和恢復跨生態系統分配。Ceph 稱其為 RADOS(見 圖 3 )。
如果文件系統的動態和自適應特性不夠,Ceph 還執行一些用戶可視的有趣功能。用戶可以創建快照,例如,在 Ceph 的任何子目錄上(包括所有內容)。文件和容量計算可以在子目錄級別上執行,它報告一個給定子目錄(以及其包含的內容)的存儲大小和文件數量。
雖然 Ceph 現在被集成在主線 Linux 內核中,但只是標識為實驗性的。在這種狀態下的文件系統對測試是有用的,但是對生產環境沒有做好准備。但是考慮到 Ceph 加入到 Linux 內核的行列,還有其創建人想繼續研發的動機,不久之後它應該就能用於解決您的海量存儲需要了。
Ceph 在分布式文件系統空間中並不是唯一的,但它在管理大容量存儲生態環境的方法上是獨一無二的。分布式文件系統的其他例子包括 Google File System(GFS),General Parallel File System(GPFS),還有 Lustre,這只提到了一部分。Ceph 背後的想法為分布式文件系統提供了一個有趣的未來,因為海量級別存儲導致了海量存儲問題的唯一挑戰。
『陸』 在Linux下怎樣配置NFS(網路文件系統的配置和實現文件共享)
方法/步驟
首先確認自己的伺服器上面是否有portmap和nfs包,一般情況下都會有.
查詢命令:
rpm
-qa
|
grep
portmap
rpm
-qa
|
grep
nfs
如果有就接著向下走
啟動portmap和nfs,但是portmap的先於nfs啟動,因為portmap為nfs動態分配埠
查看是有啟動正常用如下命令
prcinfo
-p
如果看到portmap和nfs表示啟動正常
設置你要共享的文件和目錄
編輯vi
/etc/exports
格式如下:
共享目錄
允許訪問的主機ip(許可權)
輸出共享目錄和文件
1.要不重啟nfs服務
2.使用exportfs
-rv命令
接著到另一台伺服器上面去掛載nfs伺服器輸出的文件和目錄
1.新建你要掛載的目錄
2.查看nfs伺服器的輸出目錄
showmount
-e
nfs的ip
掛載目錄或文件
格式如下:
mount
nfs伺服器地址:/usr/local/web
/mnt/websites
查看掛載結果
df
-h
測試共享時候成功,在web1上面下面的掛載目錄下面新建一個文件然後隨便寫點東西看web2上面時候同步
卸載目錄的命令:
umount
/mnt/websites
『柒』 linux vfs是什麼什麼原理
VFS(Virtual Filesystem Switch
他表示虛擬文件系統,只有在系統運行時才存在。
所謂VFS就是Virtual File System虛擬文件系統,也稱為虛擬文件系統開關( Filesystem Switch).
這是Linux檔案系統對外的介面。任何要使用檔案系統的程序都必須經由這層介面來使用它。 VFS是一個異構文件系統之上的軟體粘合層(註:有時也把VFS稱為可堆疊的文件系統(Stackable Filesystem),因為VFS可以無縫地使用多個不同類型的文件系統,就像把多個文件系統堆疊在一起一樣,故而得名)。通過VFS,可以為訪問文件系統的系統調用提供一個統一的抽象介面。
VFS最早由Sun公司提出以實現NFS(Network FileSystem,網路文件系統)。但是現在很多Unix系統都採用了VFS(包括Linux、FreeBSD、Solaris等)。
Linux下的VFS:
VFS的作用就是採用標準的Unix系統調用讀寫位於不同物理介質上的不同文件系統。VFS是一個可以讓open()、read()、write()等系統調用不用關心底層的存儲介質和文件系統類型就可以工作的粘合層。在古老的DOS操作系統中,要訪問本地文件系統之外的文件系統需要使用特殊的工具才能進行。而在Linux下,通過VFS,一個抽象的通用訪問介面屏蔽了底層文件系統和物理介質的差異性。
每一種類型的文件系統代碼都隱藏了實現的細節。因此,對於VFS層和內核的其它部分而言,每一種類型的文件系統看起來都是一樣的。
在Linux中,VFS採用的是面向對象的編程方法。