分布式存儲Ceph技術


分布式存儲介紹

大規模分布式存儲系統的定義如下:

“分布式系統是大量普通的PC通過網絡互連,對外提供一個整體的存儲服務”。

分布式存儲系統有以下的特性:

可擴展性:分布式存儲系統可以擴展到幾百台的集群規模,而且隨着集群規模的增長,系統的整體性能呈線性增長;
低成本:分布式存儲系統的自動容錯、自動負載均衡機制使其可以構建在普通的PC機器上,另外,線性擴展的能力也使得增加、減少機器非常的方便,可以實現自動運維;
高性能:無論是針對整個集群還是單台服務器,都要求分布式存儲系統具備高性能;
易用:分布式存儲系統需要對外提供易用的接口,另外,也要求具備完善的運維、監控工具,並可以方便的和系統進行集成。

分布式存儲系統的主要挑戰在於數據、狀態信息的持久化,要求在自動遷移、自動容錯、並發讀寫的過程中保證數據的一致性。分布式存儲涉及的技術主要來自兩個領域:分布式系統以及數據庫,如下所示:

數據分布:如何將數據分布到多台機器上並保證數據分布均勻?數據分布到多台服務器之后如何實現跨服務器讀寫操作?
一致性:如何將數據的多個副本復制到多台服務器,即使在異常的清空下,也能夠保證數據在不同副本之間的一致性
容錯:如何檢測到服務器故障?如何自動將出現故障的機器上的數據和服務遷移到別的機器上?
負載均衡:新增服務器和集群正常運行的過程中如何實現自動負載均衡?數據遷移的過程中如何保證不影響已有的服務?
事務和並發控制:如何設計對外接口使得系統更容易使用?如何設計監控系統並將系統的內部系統狀態以方便的形式暴露給運維人員?
壓縮、解壓縮算法:如何根據數據的特點設計合理的壓縮和解壓縮算法?如何平衡壓縮算法節省的空間存儲和對CPU資源的消耗?

存儲
    分類
        本地存儲
            系統級文件系統  ext4 xfs ntfs
            
        網絡存儲
            網絡級文件系統  共享的都是文件系統  
                    nfs           網絡文件系統
                    hdfs          分布式網絡文件系統
                    glusterfs     分布式網絡文件系統
                   
                    
            共享的是裸設備  
                    塊存儲 cinder  ceph(塊存儲  對象存儲  網絡文件系統-分布式)
                    SAN(存儲區域網)
         分布式
             集群

                            client
                                |
                            namenode          元數據服務器    
                                |
                ------------------------------------
                |               |                  |
              datanode        datanode            datanode

分布式存儲種類及其對比

Hadoop HDFS(大數據分布式文件系統)

Hadoop分布式文件系統(HDFS)是一個分布式文件系統,適用於商用硬件上高數據吞吐量對大數據集的訪問的需求。

該系統仿效了谷歌文件系統(GFS),數據在相同節點上以復制的方式進行存儲以實現將數據合並計算的目的。

該系統的主要設計目標包括:容錯,可擴展性,高效性和可靠性。

HDFS采用了MapReduce,不遷移數據而是以將處理任務遷移到物理節點(保存數據)的方式降低網絡I/O。HDFS是Apache Hadoop的一個子項目並且安裝Hadoop。

OpenStack的對象存儲Swift

OpenStack Swift提供一個類似Amazon S3的對象存儲。其主要特點為:

  1. 所有的存儲對象都有自身的元數據和一個URL,這些對象在盡可能唯一的區域復制3次,而這些區域可被定義為一組驅動器,一個節點,一個機架等。

  2. 開發者通過一個RESTful HTTP API與對象存儲系統相互作用。

  3. 對象數據可以放置在集群的任何地方。

  4. 在不影響性能的情況下,集群通過增加外部節點進行擴展。這是相對全面升級,性價比更高的近線存儲擴展。

  5. 數據無需遷移到一個全新的存儲系統。

  6. 集群可無宕機增加新的節點。

  7. 故障節點和磁盤可無宕機調換。

  8. 在標准硬件上運行,例如戴爾,HP和Supermicro。

公有雲對象存儲

公有雲大都只有對象存儲。例如,谷歌雲存儲是一個快速,具有可擴展性和高可用性的對象存儲。而且雲存儲無需一種模式也就是圖像,視頻文件就可以存儲海量數據。

Amazon類似產品就是S3: http://aws.amazon.com/s3;

微軟類似產品Azure Bolb:http://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-blobs/;

阿里類似的有OSS:https://www.aliyun.com/product/oss/;

Facebook用於圖片存儲的Haystack

Facebook Haystack擁有大量元數據,適用於圖片的對象存儲,采用每張圖片一個文件的方式取代NFS文件系統。

http://cse.unl.edu/~ylu/csce990/notes/HayStack_Facebook_ShakthiBachala.ppt;

此外,Facebook着眼於長尾服務,因此傳統緩存和CDN(內容發布網絡)的表現並不甚佳。一般正常的網站有99%CDN點擊量,但Facebook只有約80%CDN點擊率。

f4: Facebook的暖性BLOB存儲

Haystack最初是用於Facebook圖片應用的主要存儲系統。到2016年已有近8年的歷史。

這期間它通過比如減少磁盤數設法讀取一個BLOB到1,跨地理位置通過復制(3個復制因子即文件副本數)實現容錯等更多優化而運作良好。在此期間Facebook雖然服務良好但依然進行了演變。

截止2014年2月,Haystack存儲了約4000億張圖片。

https://www.usenix.org/system/files/conference/osdi14/osdi14-paper-muralidhar.pdf

目前,f4存儲了超過65PB的本地BLOB,而且將其有效復制因子從3.6降低到任意2.8或2.1。

f4提供低延遲,可恢復磁盤,主機,機櫃和數據中心故障並為暖性BLOB提供足夠的吞吐量。

PS:f4僅存儲“暖性”圖片

OpenStack塊存儲Cinder

OpenStack(類似商業雲)還可以作為一個Linux訪問的文件系統提供傳統塊存儲。Cinder能虛擬化塊存儲設備池並向需要和消費這些資源的終端用戶提供一個自助服務API,而無需了解存儲部署的實際位置或是存儲設備的類型。

OpenStack Cinder類似於亞馬遜EBS(Elastic Block Storage )和微軟Azure Files以及谷歌Persistent Storage。

Lustre

Lustre是一個並行分布式文件系統,通常用於大規模集群計算。??它的名字取自Linux和cluster(集群)的組合詞。Lustre文件系統軟件遵循GPL2認證協議並為(各類規模)計算機集群提供高性能文件系統。

因為Lustre文件系統擁有高性能的能力和開放式認證,所以經常應用於超級計算機。

Lustre文件系統具有可擴展性,可支持在數百台服務器上配置數萬客戶端節點,PB級容量的多個計算機集群,並超出TB級聚合I/O吞吐量。

這讓Lustre文件系統受到擁有大型數據中心企業的青睞,其中也包括例如氣象,虛擬,石油天然氣,生命科學,多功能媒體和金融行業。Lustre曾輾轉過幾家企業,最近的三個所有者(時間先后排序)依次為甲骨文,Whamcloud和英特爾。

Gluster

http://www.gluster.org/http://en.wikipedia.org/wiki/Gluster

GlusterFS遵循Infiniband RDMA或TCP/IP協議創建塊集中存儲,在單一全局命名空間內集中磁盤和內存資源並管理數據。

對於公有雲部署,GlusterFS提供了一個AWS AMI(亞馬遜機器鏡像)。它不是在物理服務器上部署,而是在Elastic Compute Cloud (EC2)實例上部署,並且地層存儲空間是Amazon的Elastic Block Storage(EBS)。

在這樣的環境里,容量通過部署更多EBS存儲設備進行擴展,性能則通過部署更多EC2實例進行增強,而可用性通過AWS可用區域之間進行多方復制來提升。

FUSE(Filesystem in Userspace 用戶空間文件系統)

FUSE GPL/LGPL認證是一個操作系統機制,針對類Unix計算操作系統,讓用戶無需編輯內核代碼即可構建自身文件系統。這雖然是通過在用戶空間內運行文件系統代碼實現,但FUSE模塊僅提供了一個到達真正內核接口的一架“橋梁”。

FUSE最初是作為一個可加載的核心模塊來實現的,通過GlusterFS使用,尤其適用於編寫虛擬文件系統。但與傳統文件系統,尤其是可存儲數據和從磁盤上檢索數據的系統不同,虛擬文件系統檢索實際上無法存儲自身數據。它們充當一個現有文件系統或存儲設備的視圖或翻譯。

Ceph

Ceph是紅帽的,Ceph是一個遵循LGPL協議的存儲平台,它可以在單個分布式節點上同時支持對象存儲,塊存儲和文件存儲。

Cphe主要設計的初衷是變成一個可避免單節點故障的分布式文件系統,EB級別的擴展能力,而且是一種開源自由軟件,許多超融合的分布式文件系統都是基於Ceph開發的,作為開源軟件在超融合商業領域的應用,Ceph因為性能等問題被詬病,但不乏許多廠商在Ceph上不斷優化和努力。

IBM General Parallel File System(GPFS通用並行文件系統)

這個專有GPFS是一個由IBM開發的高性能集群文件系統。它可以在共享磁盤或非共享分布式並行模式中進行部署。

GPFS-SNC,其中SNC代表Shared Nothing Cluster(非共享集群),它是2012年12月正式發布的GPFS 3.5版本,如今被稱為GPFS-FPO(文件配置優化)。這讓GPFS可以在一個聯網服務器的集群上采用本地連接磁盤,而不需要配置共享磁盤的專用服務器(例如使用SAN),GPFS-FPO可充當HDFS兼容的文件系統。

GPFS時常通過調用計算集群上的MPI-IO(Message Passing Interface)進行訪問。功能包括:

分布式元數據處理。包括目錄樹。沒有單獨的“目錄控制器”或“索引服務器”管理文件系統。

對非常大的目錄進行高效索引目錄項。很多文件系統被限制在單一目錄(通常, 65536或類似的小二進制數)中的少數文件內,而GPFS並沒有這樣的限制。

分布式鎖定。該功能考慮了完整的Posix文件系統語義,包括鎖定文件進行獨占訪問。

Global Federated File System(GFFS全局聯合文件系統)

XSEDE文件系統在美國弗吉尼亞大學Genesis II項目的一部分。

GFFS的出現是源於一個對諸如文件系統的資源以一種聯合,安全,標准化,可擴展和透明化的方式進行訪問和遠程操作的需求,而無需數據所有者或應用程序開發者和用戶改變他們存儲和訪問數據的任何方式。

GFFS通過采用一個全局基於路徑的命名空間實現,例如/data/bio/file1。

在現有文件系統中的數據,無論它們是否是 Windows文件系統, MacOS文件系統,AFS,Linux或者Lustre文件系統都可以導出或鏈接到全局命名空間。

例如,一個用戶可以將它 “C” 盤上一個本地根目錄結構,C:\work\collaboration-with-Bob導出到全局命名空間,/data/bio/project-Phil,那么用戶 “C” 盤\work\collaboration-with-bob 內的文件和目錄將會受到訪問限制,用戶可以通過/data/bio/project-Bob路徑在 GFFS上訪問。

最后談一下,最常見的GPFS和HDFS有什么區別?

GPFS和Hadoop的HDFS系統對比起來相當有趣,它設計用於在商用硬件上存儲類似或更大的數據——換言之就是,不配置 RAID 磁盤的數據中心和一個SAN。

HDFS還將文件分割成塊,並將它們存儲在不同的文件系統節點內。

HDFS對磁盤可靠性的依賴並不高,它可以在不同的節點內存儲塊的副本。保存單一副本塊的一個節點出現故障是小問題,可以再復制該組其它有效塊內的副本。相較而言,雖然GPFS支持故障節點恢復,但它是一個更嚴重的事件,它可能包括數據(暫時性)丟失的高風險。

GPFS支持完整的Posix文件系統語義。 HDFS和GFS(谷歌文件系統)並不支持完整的Posix語義。

GPFS跨文件系統分布它的目錄索引和其它元數據。相反, Hadoop將它們保留在主要和次要Namenode中,大型服務器必須在RAM內存儲所有的索引信息。

GPFS將文件分割成小塊。Hadoop HDFS喜歡64MB甚至更多的塊,因為這降低了Namenode的存儲需求。小塊或很多小的文件會快速填充文件系統的索引,因此限制了文件系統的大小。

說到分布式文件系統,不得不提到許多超融合廠商,一部分是基於Ceph的,還有一部分是完全自主研發的。

為什什么要用Ceph

高擴展性
高性能
無單點的分布式⽂文件存儲系統
可用於對象存儲,塊設備存儲和⽂文件系統存儲
讀寫速度快利利於共享

Ceph存儲種類及其應用場景

塊存儲

典型設備: 磁盤陣列,硬盤

主要是將裸磁盤空間映射給主機使用的。

優點:

通過Raid與LVM等手段,對數據提供了保護。
多塊廉價的硬盤組合起來,提高容量。
多塊磁盤組合出來的邏輯盤,提升讀寫效率。
缺點:

采用SAN架構組網時,光纖交換機,造價成本高。
主機之間無法共享數據。

使用場景:

Docker容器、虛擬機磁盤存儲分配。
日志存儲。
文件存儲。

文件存儲

典型設備: FTP、NFS服務器
為了克服塊存儲文件無法共享的問題,所以有了文件存儲。
在服務器上架設FTP與NFS服務,就是文件存儲。

優點:

造價低,隨便一台機器就可以了。
方便文件共享。

缺點:

讀寫速率低。
傳輸速率慢。

使用場景:

日志存儲。
有目錄結構的文件存儲。

對象存儲

為什么需要對象存儲?

首先,一個文件包含了屬性(術語叫metadata,元數據,例如該文件的大小、修改時間、存儲路徑等)以及內容(以下簡稱數據)。

例如FAT32這種文件系統,存儲過程是鏈表的形式。

而對象存儲則將元數據獨立了出來,控制節點叫元數據服務器(服務器+對象存儲管理軟件),里面主要負責存儲對象的屬性(主要是對象的數據被打散存放到了那幾台分布式服務器中的信息),而其他負責存儲數據的分布式服務器叫做OSD,主要負責存儲文件的數據部分。當用戶訪問對象,會先訪問元數據服務器,元數據服務器只負責反饋對象存儲在哪些OSD,假設反饋文件A存儲在B、C、D三台OSD,那么用戶就會再次直接訪問3台OSD服務器去讀取數據。

這時候由於是3台OSD同時對外傳輸數據,所以傳輸的速度就加快了。當OSD服務器數量越多,這種讀寫速度的提升就越大,通過此種方式,實現了讀寫快的目的。

另一方面,對象存儲軟件是有專門的文件系統的,所以OSD對外又相當於文件服務器,那么就不存在文件共享方面的困難了,也解決了文件共享方面的問題。

所以對象存儲的出現,很好地結合了塊存儲與文件存儲的優點。

典型設備: 內置大容量硬盤的分布式服務器(Swift, S3)
多台服務器內置大容量硬盤,安裝上對象存儲管理軟件,對外提供讀寫訪問功能。

優點:

具備塊存儲的讀寫高速。
具備文件存儲的共享等特性。

使用場景: (適合更新變動較少的數據)

圖片存儲。
視頻存儲。

Ceph 工作原理及集群部署

ceph數據的存儲過程

如下圖:

  無論使用哪種存儲方式(對象、塊、掛載),存儲的數據都會被切分成對象(Objects)。Objects size大小可以由管理員調整,通常為2M或4M。每個對象都會有一個唯一的OID,由ino與ono生成,雖然這些名詞看上去很復雜,其實相當簡單。ino即是文件的File ID,用於在全局唯一標示每一個文件,而ono則是分片的編號。比如:一個文件FileID為A,它被切成了兩個對象,一個對象編號0,另一個編號1,那么這兩個文件的oid則為A0與A1。Oid的好處是可以唯一標示每個不同的對象,並且存儲了對象與文件的從屬關系。由於ceph的所有數據都虛擬成了整齊划一的對象,所以在讀寫時效率都會比較高。

  但是對象並不會直接存儲進OSD中,因為對象的size很小,在一個大規模的集群中可能有幾百到幾千萬個對象。這么多對象光是遍歷尋址,速度都是很緩慢的;並且如果將對象直接通過某種固定映射的哈希算法映射到osd上,當這個osd損壞時,對象無法自動遷移至其他osd上面(因為映射函數不允許)。為了解決這些問題,ceph引入了歸置組的概念,即PG。

  PG是一個邏輯概念,我們linux系統中可以直接看到對象,但是無法直接看到PG。它在數據尋址時類似於數據庫中的索引:每個對象都會固定映射進一個PG中,所以當我們要尋找一個對象時,只需要先找到對象所屬的PG,然后遍歷這個PG就可以了,無需遍歷所有對象。而且在數據遷移時,也是以PG作為基本單位進行遷移,ceph不會直接操作對象。

  對象時如何映射進PG的?還記得OID么?首先使用靜態hash函數對OID做hash取出特征碼,用特征碼與PG的數量去模,得到的序號則是PGID。由於這種設計方式,PG的數量多寡直接決定了數據分布的均勻性,所以合理設置的PG數量可以很好的提升CEPH集群的性能並使數據均勻分布。

  最后PG會根據管理員設置的副本數量進行復制,然后通過crush算法存儲到不同的OSD節點上(其實是把PG中的所有對象存儲到節點上),第一個osd節點即為主節點,其余均為從節點。

名詞介紹

Ceph核心組件及概念介紹

Monitor

一個Ceph集群需要多個Monitor組成的小集群,它們通過Paxos同步數據,用來保存OSD的元數據。

OSD --

OSD全稱Object Storage Device,也就是負責響應客戶端請求返回具體數據的進程。一個Ceph集群一般都有很多個OSD。

MDS

MDS全稱Ceph Metadata Server,是CephFS服務依賴的元數據服務。

Object --

Ceph最底層的存儲單元是Object對象,每個Object包含元數據和原始數據。

PG --

PG全稱Placement Grouops,是一個邏輯的概念,一個PG包含多個OSD。引入PG這一層其實是為了更好的分配數據和定位數據。

RADOS

RADOS全稱Reliable Autonomic Distributed Object Store,是Ceph集群的精華,用戶實現數據分配、Failover等集群操作。

Libradio

Librados是Rados提供庫,因為RADOS是協議很難直接訪問,因此上層的RBD、RGW和CephFS都是通過librados訪問的,目前提供PHP、Ruby、Java、Python、C和C++支持。

CRUSH --

CRUSH是Ceph使用的數據分布算法,類似一致性哈希,讓數據分配到預期的地方。

RBD --

RBD全稱RADOS block device,是Ceph對外提供的塊設備服務。

RGW

RGW全稱RADOS gateway,是Ceph對外提供的對象存儲服務,接口與S3和Swift兼容。

CephFS --

CephFS全稱Ceph File System,是Ceph對外提供的文件系統服務。
部署ceph集群
注意版本更新非常快,有問題看官方文檔
官方文檔:
    http://docs.ceph.com/docs/master/start/

目錄
    部署luminous(ceph12.2.10的版本代號)
    配置dashboard
    客戶端使用rbd
======================================
部署環境
系統版本:centos7.5 x86_64 server
ceph版本:ceph 12.2.10(luminous)
硬件配置:5台vm,1核1G內存,每台node角色的機器至少掛載1塊為osd准備的空閑盤
    主機名             ip                                  role
    admin            192.168.245.135          admin
    node1            192.168.245.136          mon / mgr / osd 
    node2            192.168.245.137          osd
    node3            192.168.245.138          osd
    client             192.168.245.10
======================================
1 准備工作
1.1 開啟網絡(所有節點,root用戶)
1.2 修改主機名/互相解析(所有節點,root用戶)
1.3 創建用戶(所有節點,root用戶)
    在所有節點上執行如下操作:
    1)創建用戶名:cephu,設置密碼:
    # useradd cephu
    # passwd  cephu
    
    2)修改visudo文件,否則提示cephu不再sudoer列表中的錯誤。
    命令行輸入visudo,在root ALL=(ALL) ALL下面添加:
    cephu  ALL=(ALL) ALL
    
    3)切換至cephu用戶,為該用戶增加root權限:
    $ echo "cephu ALL=(root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephu
    $ sudo  chmod 0440 /etc/sudoers.d/cephu

1.4 實現ssh無密碼登錄(admin節點)
    1)cephu用戶下,生成秘鑰: 
            $ ssh-keygen
    2)cephu用戶下,把生成的密鑰拷貝到各Ceph節點:
            $ ssh-copy-id cephu@node1
            $ ssh-copy-id cephu@node2
            $ ssh-copy-id cephu@node3
    3)root用戶下,添加~/.ssh/config配置文件,並進行如下設置:
            Host node1
            Hostname node1
            User cephu

            Host node2
            Hostname node2
            User cephu

            Host node3
            Hostname node3
            User cephu
            
1.5 添加下載源,安裝ceph-deploy(admin節點,root用戶)
    1)添加ceph源:
        # cat >/etc/yum.repos.d/ceph.repo
            [ceph-noarch]
            name=Ceph noarch packages
            baseurl=https://download.ceph.com/rpm-luminous/el7/noarch
            enabled=1
            gpgcheck=1
            type=rpm-md
            gpgkey=https://download.ceph.com/keys/release.asc
        ctrl + d 保存

    2)更新源,安裝ceph-deploy:
        # sudo yum makecache
        # sudo yum update
        
        # vim /etc/yum.conf
            keepcache=1
            
        # sudo yum install ceph-deploy -y

1.6 設置TTY(所有節點)
      注意:此設置由官方文檔指出,但是並未在這里找不到此配置行,不用做此步
        # sudo visudo   找到 Defaults requiretty 注釋掉

1.7 關閉selinux(所有節點)

1.8 安裝ntp(所有節點)
    選擇任何一台機器當ntp時間服務器,其他的節點當時間服務器的客戶端跟服務器同步時間
    
    admin上:
    # yum install -y ntp    
    # vim /etc/ntp.conf //有4行server的位置,把那4行server行注釋掉,填寫以下兩行
    server 127.127.1.0     # local clock
    fudge  127.127.1.0 stratum 10    
    
    # systemctl start ntpd 
    # systemctl status ntpd  //確認打開NTP服務
    
    其他所有節點:
    # yum install ntpdate  -y
    # ntpdate  時間服務器ip
======================================
2 部署ceph集群
沒有特別說明以下所有操作均是在admin節點,cephu用戶下執行
2.1 創建ceph操作目錄:
    $ mkdir my-cluster  //切記不可用sudo創建
    $ cd my-cluster       //之后,所有ceph-deploy命令操作必須在該目錄下執行

2.2 創建集群:
    $ ceph-deploy new node1
    創建成功會有三個文件:ceph.conf, ceph.mon.keyring, and a log file
    
2.3 安裝luminous(12.2.9): 
      目標:在node1,node2,node3三個節點上安裝ceph和ceph-radosgw主包

    方法1:利用官方腳本全自動安裝
    腳本會幫助node1,node2,node3創建epel源和ceph源,並且自動安裝ceph和ceph-radosgw主包
    $ ceph-deploy install --release luminous node1 node2 node3
    這一步實際上是給3個節點安裝兩個軟件:如果ceph和ceph-radosgw安裝不上,則采用方法2
    在千鋒做實驗要注意epel的源(切記)   

    測試是否安裝完成:分別在node1 node2 node3中確認安裝版本為12.2.9
    $ ceph --version
    
    方法2:手動部署安裝
    1)安裝epel源
    2)創建Ceph源,內容如下:
        [Ceph]
        name=Ceph packages for $basearch
        baseurl=http://download.ceph.com/rpm-luminous/el7/$basearch
        enabled=1
        gpgcheck=1
        type=rpm-md
        gpgkey=https://download.ceph.com/keys/release.asc
        priority=1

        [Ceph-noarch]
        name=Ceph noarch packages
        baseurl=http://download.ceph.com/rpm-luminous/el7/noarch
        enabled=1
        gpgcheck=1
        type=rpm-md
        gpgkey=https://download.ceph.com/keys/release.asc
        priority=1

        [ceph-source]
        name=Ceph source packages
        baseurl=http://download.ceph.com/rpm-luminous/el7/SRPMS
        enabled=1
        gpgcheck=1
        type=rpm-md
        gpgkey=https://download.ceph.com/keys/release.asc
        priority=1
    3)分別在node1,node2,node3節點執行下面命令安裝軟件
可以完全手動安裝,但需要yum的ceph緩存目錄結構
    $sudo yum install ceph ceph-radosgw  -y    
    如果因為速度慢導致安裝失敗可以按ctrl+c,利用它創建的yum緩存目錄,手動把安裝包下載下來保存到緩存目錄/var/cache/yum/x86_64/Ceph/packages目錄下

    再次執行安裝命令:
    $sudo yum install ceph ceph-radosgw  -y

    分別在node1 node2 node3中確認安裝版本為12.2.1:
    $ ceph --version

2.4 初始化mon:
    $ ceph-deploy mon create-initial
    
2.5 賦予各個節點使用命令免用戶名權限:
    $ ceph-deploy admin node1 node2 node3

2.6 安裝ceph-mgr:只有luminous才有,為使用dashboard做准備
    $ ceph-deploy mgr create node1   

2.7 添加osd:
    注意:各個節點上提供存儲空間的磁盤大小不能太小,最好5G以上

     $ ceph-deploy osd create --data /dev/sdb node1(12.2.10版本是這條命令,分開給各節點安裝)
     $ ceph-deploy osd create --data /dev/sdb node2
     $ ceph-deploy osd create --data /dev/sdb node3
     
    命令中/dev/sdb是在各個節點上為osd准備的空閑磁盤(無需分區格式化,如果有分區需要指定具體分區),通過如下命令查看:
    $ ssh node1 lsblk -f    
    
    最后通過如下命令查看集群狀態:
    $ ssh node1 sudo ceph -s
    如果顯示health_ok,3個osd up就成功了

======================================
3 Dashboard的配置:在node1上操作
把ceph-mgr和ceph-mon安裝在同一個主機上,最好只有一個ceph-mgr

3.1 創建管理域秘鑰:
    $ sudo ceph auth get-or-create mgr.node1 mon 'allow profile mgr' osd 'allow *' mds 'allow *'

3.2 開啟 ceph-mgr 管理域:
    $ sudo ceph-mgr -i node1

3.3 查看ceph的狀態:
    $ sudo ceph status
    確認mgr的狀態為active

3.4 打開dashboard模塊:
    $ sudo ceph mgr module enable dashboard

3.5 綁定開啟dashboard模塊的ceph-mgr節點的ip地址:
        $ sudo ceph config-key set mgr/dashboard/node1/server_addr 192.168.245.136
    ip地址為mgr節點的ip地址

3.6 web登錄:
    瀏覽器地址欄輸入:
        mgr地址:7000
======================================

4 配置客戶端使用rbd:
創建塊設備之前需要創建存儲池,存儲池相關命令需要在mon節點執行

4.1 創建存儲池:
    $ sudo ceph osd pool create rbd 128 128

4.2 初始化存儲池:
    $ sudo rbd pool init rbd

4.3 准備客戶端client:
    另備一台主機,系統centos7用來作為client。主機名為client,ip:192.168.245.10。修改hosts文件實現和admin節點的主機名互通。
1)升級client內核到4.x,方法在子目錄中
Centos7升級內核
更新前,內核版本為:
    #uname -r  
    3.10.0-327.10.1.el7.x86_64

升級方法
導入key:  
    #rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org  

安裝elrepo的yum源:  
    #rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

安裝內核:
    #yum --enablerepo=elrepo-kernel install  kernel-ml-devel kernel-ml         
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
當前為4.4.4:
============================================================
 Package        架構                版本                       源                          大小
============================================================
正在安裝:
kernel-ml   x86_64     4.4.4-1.el7.elrepo elrepo-kernel  38M
kernel-ml-devel x86_64 4.4.4-1.el7.elrepo elrepo-kernel  10M

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


    查看默認啟動順序  
    #awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg  
    CentOS Linux (4.4.4-1.el7.elrepo.x86_64) 7 (Core)  
    CentOS Linux (3.10.0-327.10.1.el7.x86_64) 7 (Core)  
    CentOS Linux (0-rescue-c52097a1078c403da03b8eddeac5080b) 7 (Core)

    默認啟動的順序是從0開始,新內核是從頭插入(目前位置在0,而4.4.4的是在1),所以需要選擇0。
    #grub2-set-default 0  

    然后reboot重啟,使用新的內核,下面是重啟后使用的內核版本:
    #uname -r  
    4.4.4-1.el7.elrepo.x86_64  

5、刪除舊的內核  
    #yum remove kernel  
    
2)為client安裝ceph:
 參考2.3           在做2.3之前先在client上做1.3的三步
 還要做着一步 否則報錯  #yum  -y install python-setuptools

3)配置client防火牆(直接關閉):
$ sudo firewall-cmd --zone=public --add-service=ceph --permanent
$ sudo firewall-cmd --reload

4)在admin節點賦予client使用命令免用戶名權限:
    $ ceph-deploy admin client

5)修改client下該文件的讀權限:
    $ sudo chmod +r /etc/ceph/ceph.client.admin.keyring

6)修改client下的ceph配置文件:這一步是為了解決映射鏡像時出錯問題
    $ sudo vi /etc/ceph/ceph.conf   在global section下添加:
    rbd_default_features = 1

4.4 client節點創建塊設備鏡像:單位是M,這里是4個G
    $ rbd create foo --size 4096 

4.5 client節點映射鏡像到主機:
    $ sudo rbd map foo --name client.admin

4.6 client節點格式化塊設備:
    $ sudo mkfs.ext4 -m 0 /dev/rbd/rbd/foo

4.7 client節點mount塊設備:
    $ sudo mkdir /mnt/ceph-block-device
    $ sudo mount /dev/rbd/rbd/foo /mnt/ceph-block-device
    $ cd /mnt/ceph-block-device

客戶端重起之后,設備需要重新作映射,不然可能會卡死

自建ceph源的方法

https://blog.csdn.net/michaelwoshi/article/details/94183198


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM