Ceph

ceph概述
基礎知識
NAS、SAN、DAS這些是共享文件系統

什麼是分佈式文件系統(DFS)
如果局域網中有多臺服務器,並且共享文件夾也分佈在不同的服務器上,這就不利於管理員的管理和用戶的訪問。而使用分佈式文件系統,系統管理員就可以把不同服務器上的共享文件夾組織在一起,構建成一個目錄樹。這在用戶看來,所有共享文件僅存儲在一個地點,只需訪問一個共享的DFS根目錄,就能夠訪問分佈在網絡上的文件或文件夾,而不必知道這些文件的實際物理位置。
分佈式文件系統是指文件系統管理的物理存儲資源不一定直接連接在本地節點上,而是通過計算機網絡與節點相連
分佈式文件系統的設計基於客戶機/服務器模式

分佈式是指將不同的業務分佈在不同的地方。 而集羣指的是將幾臺服務器集中在一起,實現同一業務。

分佈式中的每一個節點,都可以做集羣。 而集羣並不一定就是分佈式的。

而分佈式,從窄意上理解,也跟集羣差不多,但是它的組織比較鬆散,不像集羣,有一個組織性,一臺服務器垮了,其它的服務器可以頂上來。

分佈式的每一個節點,都完成不同的業務,一個節點垮了,那這個業務就不可訪問了。

分佈式是以縮短單個任務的執行時間來提升效率的,而集羣則是通過提高單位時間內執行的任務數來提升效率

好的設計應該是分佈式和集羣的結合,先分佈式再集羣,具體實現就是業務拆分成很多子業務,然後針對每個子業務進行集羣部署,這樣每個子業務如果出了問題,整個系統完全不會受影響。

集羣是個物理形態,分佈式是個工作方式。
分佈式:一個業務分拆多個子業務,部署在不同的服務器上
集羣:同一個業務,部署在多個服務器上

常用分佈式文件系統
Lustre
Hadoop大數據
FastDFS
Ceph(被紅帽收購了,單獨做成了一個鏡像,需要自己買,也可以到網上去找開源的)
GlusterFS

什麼是ceph
ceph是一個分佈式文件系統
具有高擴展、高可用、高性能的特點
ceph可以提供對象存儲、塊存儲、文件系統存儲
ceph可以提供PB級別的存儲空間PB>TB>GB

ceph組件
OSDs
存儲設備
Monitors
集羣監控組件(監控磁盤剩餘的空間等)
MDSs
存放文件系統的元數據(元數據:數據信息,就是文件的信息就是用ls -ld查看文件的信息的那些信息。MDS存儲文件的信息)對象存儲和塊存儲不需要該組件
Client
ceph客戶端

什麼叫Ceph的元數據服務器(metadata)?

任何文件系統中的數據分爲數據和元數據。數據是指普通文件中的實際數據,而元數據指用來描述一個文件的特徵的系統數據,諸如訪問權限、文件擁有者以及文件數據塊的分佈信息(inode…)等等。在集羣文件系統中,分佈信息包括文件在磁盤上的位置以及磁盤在集羣中的位置。用戶需要操作一個文件必須首先得到它的元數據,才能定位到文件的位置並且得到文件的內容或相關屬性。

Ceph OSD: 全稱Obiect Storage Device,主要存儲ceph中的數據,以及處理數據的複製、恢復、回補、平衡數據落盤分佈,Ceph集羣中OSD進程通過心跳來檢測,一個Ceph存儲集羣中的數據默認是兩副本。副本數是可以調整的,這個需要根據項目需求來定。

需要注意:Ceph集羣中的OSD進程可以是後端物理存儲中一塊磁盤或者一個分區

Ceph Monitor :Ceph集羣的監控器,主要負責維護監控整個集羣的健康狀態,包含Monitor map 、OSD map 、PG map 、CRUSH map

Ceph MDS: 即是Ceph Metadata Server,主要保存的是Ceph文件系統的元數據

特別注意:

Ceph的塊存儲和Ceph對象存儲都不需要Ceph MDS

OSD(object storage daemon)
1、osd的意思是
對象存儲設備
2、osd的作用
1、負責存儲實際用戶數據(數據將會以對象的形式存儲在osd中)
2、負責響應客戶端讀操作請求

通常一個osd守護進程僅與ceph集羣中的一個磁盤綁定

三、ceph monitor(MON)
1、mon的意識是
監控
2、mon的作用
1、通過一系列map跟蹤整個集羣的健康狀態,監控整個集羣的監控狀況
2、map是指這幾個組件的map:osd/mon/pg/crush,所有的集羣節點都向mon節點報告狀態,並分享每一個狀態變化的信息
3、一個mon爲每一個組件維護一個獨立的map,mon不存儲實際的數據,這是osd的工作

四、librados庫
1、作用
1、是一種用來簡化訪問rados的方法
2、支持php,ruby,python,java,c/c++
3、librados支持直接訪問rados
4、開發者能夠創建自己的接口來訪問ceph存儲集羣

部署ceph集羣

安裝部署軟件
ceph-deploy

創建工作目錄,用來存放密鑰與配置文件
mkdir ceph-cluster
cd ceph-cluster

部署存儲集羣
創建ceph集羣
ceph-deploy new node1 node2 node3 (node1 node2 node3 要和你主機名一樣,以及之間能相互通信和做了主機映射)
創建完之後會多出相應的文件

給所有節點安裝ceph軟件包
ceph-deploy install node1 node2 node3

初始化所有節點的mon服務(主機名解析必須對) 也就是創建監控
ceph-deploy mon create-initial
注:這裏沒有指定主機,是因爲第一步創建的配置文件中已經有了,所以要求主機名解析必須對,否則連接不到對就的主機

創建osd存儲設備
當我們格式化磁盤後會有一個日誌文件和數據文件

創建日誌盤(把各個盤的日誌文件單獨拿出來存放,有幾塊磁盤就要創建就幾塊磁盤的日誌文件)
parted /dev/vdb mklabel gpt
parted /dev/vdb mkpart primary 1M 50%
parted /dev/vdb mkpart primary 50% 100%
讓磁盤的所有者所屬組都是ceph
chown ceph.ceph /dev/vdb*

初始化存儲盤
要在管理目錄下操作
ceph-deploy disk zap node3:vdc node3:vdd
創建OSD存儲空間
ceph-deploy osd create node3:vdc:/dev/vdb1 node3:vdd:/dev/vdb2將主機node3的磁盤vdc設置爲數據文件它的日誌磁盤是/dev/vdb1

驗證
查看集羣狀態
ceph -s

可能出現的錯誤
health:HEALTH_WARN
clock skew detected on node,node3
clock skew(時間不同步)
解決:請先將所有主機的時間都使用NTP時間同步

可能出現的錯誤
osd create 創建osd存儲空間,如提示run 'gatherkeys'

systemctl restart ceph\*.service ceph\*.target在所有節點,或僅在失敗的節點重啓服務

 查看日誌ceph-deploy-ceph.log

osd日誌寫入方式
1.第一步,寫入數據時,首先寫入一個成爲日誌的獨立存儲區域,所有的寫都是先寫到日誌
2.第二步,寫完日誌後,再寫到備用存儲
3.日誌存儲區域:
可以是和OSD同一個機械磁盤
也可以是獨立的SSD磁盤
更可以是磁盤上的某個分區
甚至可以是文件系統上的一個文件
4.作爲存儲日誌的盤符,影響着性能

 ceph塊存儲
 RBD

1、意思
叫做ceph塊設備,或者叫rados快設備
2、作用
1、對外提供塊存儲,可以被映射、格式化、向磁盤一樣被掛載到服務器
2、支持精簡製備和快照的特性支持企業功能,如快照、cow克隆內在緩存

    RADOS(Reliable Autonomic Distributed Object Storage)

1、rados的意思是
可靠、自動、分佈式對象存儲(可靠的自主分佈式對象存儲)
2、rados的作用
1、rados是ceph集羣的基礎,是ceph存儲系統的核心,ceph中一切都是以對象的形式存儲,而rados就是負責存儲這些對象,無需考慮數據是啥類型
2、確保數據的一致性和可靠性
3、負責數執行數據的複製、故障檢測和恢復
4、負責數據在集羣節點之間的遷移和再平衡
5、ceph所有優秀特性都是rados提供的,如:
分佈式對象存儲、高可用性、高可靠性、沒有單點故障、自我修復、自我管理
6、rados就是cpeh集羣中的大腦,負責決策、調度等工作

    創建鏡像
    查看存儲池(默認有一個rdb池)
    ceph osd lspools
創建存儲池
ceph osd pool create test1 100
    查看rbd list
    創建鏡像、查看鏡像
    rdb create demo-image(鏡像名自定義) --image-feature layering(創建鏡像的方式以分層) --size 10G 鏡像的大小
    查看鏡你大小rbd info 鏡像名
    如果要指定存儲池的名字就只需要在鏡像名前加上存儲池的名字
    rbd create rbd/imgage --image-feature layering --size 10G
刪除鏡像
rbd remove demo-image
縮小容量
rbd resize --size 7G image(鏡像名) --alow-shrink 縮小到多少
擴容容量
rbd resize --size 15G image(鏡像名)擴大到15G而不是擴大15G

將鏡像映射爲本地磁盤
rbd map 鏡像名
接下來格式化mkfs.xfs /dev/磁盤名要
將鏡像從本地磁盤刪除
rbd unmap 鏡像名

做遠程主機防問ceph的鏡像
客戶端想要用ceph的鏡像需要做如下步驟
客戶端需要安裝ceph-common軟件包

ls /etc/ceph/
rbdmap
從管理主機上拷貝集羣配置文件(否則不知道集羣在那)
拷貝集羣配置文件在/etc/ceph/ceph.conf將它拷貝到客戶端下面的/etc/ceph
從管理主機上拷貝連接密鑰(否則無連接權限)
scp 192.168.4.51:/etc/ceph/ceph.client.admin.keyring /etc/ceph
那個客戶端想使用ceph鏡像文件做文件存儲就做上面三步

客戶如何使用
映射鏡像到本地磁盤
rbd map 鏡像名
rbd showmapped查看映像狀態
格式化、掛載分區 客戶端

做數據備份和克隆

創建鏡像快照(快照:在當前生成一個快照文件,保存某一刻的狀態,恢復數據)
快照使用COW技術,對大數據快照速度會很快
COW寫時複製技術(copy online write):只有在對原文件做寫操作時,舊數據會被複制到快照文件裏,反之就不會寫入
寫操作包括:rm -r a.txt 添加新內容 刪除文件內容

快照

佔用內存小,備份速度快,能快捷恢復到某個狀態,缺點,不能脫離虛擬系統而存在。

克隆可以將整個系統備份到U盤或者其他地方,後續可以對這個備份進行導入,即可此刻的系統。可以脫離虛擬系統。缺點,佔用內存空間比較大。相當於將鏡像拷貝一次。
鏈接克隆: 依賴於原主機

   完整克隆:完整複製對象系統

   集羣時候,推薦使用鏈接克隆,每個克隆機單獨並互不影響

在管理主機上給被掛載的鏡像創建快照
rbd snap ls 鏡像名 查看鏡像有那些快照
rbd snap create image(鏡像名) --snap image-snap1(快照名) 創建鏡像快照

使用快照恢復誤刪除的文件
rbd snap rollback imgage --snap(用那個快照名恢復) image-snap1
客戶端卸載當前掛載的image鏡像後再次掛載image就可以看到恢復的文件

快照克隆
如果想從快照恢復出來一個新的鏡像,則可以使用克隆
注意,克隆前,需要對快照進行保護操作
被保護的快照無法刪除,取消保持保護(unprotect)
創建保護快照
rbd snap protect(私有的) 鏡像名 --snap 快照名
rbd clone image --snap image-snamp1 image-clone(克隆後的快照名) --image-feature layering
rbd info image-clone 查看克隆文件的信息若沒有會報錯

克隆鏡像很多數據都來自於快照鏈
如果希望克隆鏡像可以獨立工作,就需要將父快照中的數據,全部拷貝一份但比較耗時
rbd flatten image-clone
rbd info image-clone
注意,父快照信息沒了

配置客戶端不使用ceph集羣的塊設備存儲數據的步驟:
客戶端撤銷鏡像映射
先卸載掛載的分區然後在執行
rbd showmapped
rbd unmap(取消映射) /dev/存儲池/存儲池名/鏡像名

刪除快照與鏡像
刪除快照(確保快照未被保護)
在管理主機上刪除創建的鏡像(如果鏡像有快照的話要先刪除快照文件)
rbd snap rm image --snap image-snap1刪除快照

rbd snap unprotect image --snap image-snap1取消保護

rbd list
rbd rm image 刪除鏡像

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