1. 程式人生 > >Linux叢集儲存——day4——Ceph分散式儲存搭建、OSD塊儲存、COW快照、RBD儲存映象

Linux叢集儲存——day4——Ceph分散式儲存搭建、OSD塊儲存、COW快照、RBD儲存映象

Ceph的專有名詞
OSDs 儲存裝置
Monitors 叢集監控元件
MDSs 存放檔案系統的元資料

部署Ceph分散式儲存

    Ceph叢集中一般是一個管理伺服器(control)多個儲存伺服器(node),所以下面所有關於儲存伺服器的操作都需要對每個儲存器進行操作(主機名為node1的操作需要在每個儲存伺服器上進行一次)

0. 部署前準備工作:
   0.1 我們進行配置操作前,要先將所有伺服器配置好yum網路等基本配置
   0.2 讓管理伺服器可以免密登陸其他所有的儲存伺服器
   0.3 在管理伺服器上安裝 ceph-deploy(管理Ceph的軟體)
   0.4 在管理伺服器上建立一個ceph的工作目錄(我設定的名字叫ceph-path)
   0.5 讓所有裝置都繫結一個NTP時間同步伺服器,並且所有裝置的chronyd服務都配好了,具體檢視…………………………………………

1. 部署叢集:
   1.1 建立Ceph叢集: (必須前往控制服務中建立用於ceph工作的目錄中) 

[[email protected] ceph-path]# ceph-deploy  new  儲存裝置的IP1  儲存裝置的IP2  ………………

   1.2 然後給叢集中伺服器裝包:ceph-osd ceph-mds ceph-mon ceph-radosgw
       不過我們不是一個一個到儲存伺服器上進行yum安裝,可以直接在Ceph管理伺服器上進行控制: 

[[email protected] ceph-path]# ceph-deploy  install  儲存裝置的IP1  儲存裝置的IP2  ………………

   1.3 初始化所有節點的mon服務(不需要再次指定儲存伺服器的IP,因為他預設的IP是建立的Ceph叢集中的所有IP)

[[email protected] ceph-path]# ceph-deploy mon create-initial

2. 部署每個儲存伺服器的OSD
   2.1 準備磁碟 ,將其中一個磁碟作為日誌儲存盤(journal盤),根據每個儲存裝置中除了日誌儲存盤還有其他幾個盤來分,有幾個盤就把日誌儲存盤平均分成幾部分,日誌儲存盤一個分割槽對應一個數據儲存磁碟
       (例子是儲存盤一共有4個盤,1個作為日誌儲存盤,3個作為儲存盤,所以日誌盤分成3份)

[[email protected] ~]# parted  選定的日誌儲存盤  mklabel  gpt
[[email protected] ~]# parted  選定的日誌儲存盤  mkpart primary  1M  33%
[[email protected] ~]# parted  選定的日誌儲存盤  mkpart primary  33%  66%
[[email protected] ~]# parted  選定的日誌儲存盤  mkpart primary  66%  100%

   2.2 把日誌儲存盤及其分割槽的所有者和所屬組改為ceph,讓ceph使用者擁有對磁碟的讀寫許可權,到時候寫磁碟的時候軟體就是用ceph使用者的身份進行操作

[[email protected] ~]# chown ceph:ceph /dev/vdb* ; \
echo 'chown ceph:ceph /dev/vdb*' >> /etc/rc.local ; \
chmod +x /etc/rc.local

   2.3 初始化清空磁碟資料

[[email protected] ceph-path]# for i in 儲存裝置的IP1  儲存裝置的IP2  ……
do 
ceph-deploy disk  zap  $i:資料儲存磁碟名1   $i:資料儲存磁碟名2 ……  
done

   2.4 建立OSD儲存空間

[[email protected] ceph-path]# for i in 儲存裝置的IP1  儲存裝置的IP2  ……
do 
ceph-deploy osd create $i:儲存磁碟名1:/dev/日誌儲存盤中對應的分割槽  $i:儲存磁碟名2:/dev/日誌儲存盤中對應的分割槽 ……
done
# 如果出問題了,可以使用下面命令修復,然後再嘗試建立
# [[email protected] ceph-path]# ceph-deploy gatherkeys  儲存裝置的IP1  儲存裝置的IP2  ……

   2.5 檢查OSD儲存空間

[[email protected] ceph-path]# ceph -s
# 如果出現   health HEALTH_OK    那麼就是成功的,就不需要其他的操作了,否則就有問題,需要做修復和查錯!
# 如果出現   HEALTH_WARN  \n clock skew detected on  那就說明NTP時間同步有問題
# 如果只出現了   HEALTH_WARN   那麼就嘗試重啟服務  
# [[email protected] ceph-path]# systemctl restart ceph\*.service ceph\*.target

   2.6 檢視各個伺服器的ceph服務情況(ceph開頭的server、target結尾的服務都是)

[[email protected] ~]# systemctl status ceph\*.service ceph\*.target
# 也可以過濾一下,看看有沒有沒起來的服務
# [[email protected] ~]# systemctl status ceph\*.service ceph\*.target | grep 'inactive'

   2.7 排錯的時候,可以檢視管理伺服器的ceph日誌,檢視裡面有哪些錯誤

[[email protected] ceph-path]# cat -n ceph-deploy-ceph.log | grep ERROR

3. 建立塊儲存

   塊儲存可以理解為一種儲存裝置,塊儲存分為單機塊儲存(光碟、磁碟)和分散式塊儲存(Ceph)。
   而Ceph塊儲存可以理解為,他是把零散的多個伺服器的一個個OSD塊儲存結合成一個大的儲存裝置,這個大的裝置就叫儲存池(rbd池)

   每個Ceph塊裝置都有儲存池,預設就有一個,然後在儲存池裡有多個映象。
   在使用塊裝置的時候,我們也要進行“分割槽”——建立映象,並不是真的分割槽,但可以理解為磁碟分割槽,他就是把儲存池的儲存空間進行分割,然後每個映象在進行具體的其他的操作,所以,我們真正使用的時候用的是映象

    在部署映象的時候,如果其所在儲存池就是預設儲存池rbd,則可以不寫儲存池名

  對於映象的基本操作: 在任意一個伺服器(管理或者儲存)進行操作都可以,並且會相互同步

     檢視儲存池

[[email protected] ~]# ceph osd lspools

     建立儲存池

[[email protected] ~]# ceph osd pool create 儲存池名 建立多少個目錄用來儲存裝置(128個)

     刪除儲存池(儲存池名字要一模一樣的寫兩次)

[[email protected] ~]# ceph osd pool delete 儲存池名 儲存池名 --yes-i-really-really-mean-it

     檢視映象

[[email protected] ~]# rbd info 儲存池名/映象名

     建立映象

[[email protected] ~]# rbd create 儲存池名/映象名 --image-feature layering(映象樣式) --size 大小

     修改映象大小

[[email protected] ~]# rbd resize --size 修改到的映象大小(M/G) 儲存池名/映象名  --allow-shrink

     把映象裝置對映到本機

[[email protected] ~]# rbd  map  儲存池名/映象名
# 然後介面會返回一個磁碟位置,然後我們就可以對這個裝置進行分割槽掛載格式化等操作

     刪除映象(如果映象有快照必須先刪除快照檔案)

[[email protected] ~]# rbd  rm  儲存池名/映象名


   3.1 建立一個映象

   3.2 配置客戶端使用Ceph儲存連線映象(client主機為客戶端)
     3.2.1 安裝軟體包 ceph-common

     3.2.2 拷貝Ceph儲存叢集的配置檔案:
        把管理伺服器中的ceph配置檔案和連結金鑰拷貝到本機/etc/ceph上
        其中 ceph.conf 是用來確定叢集的資訊,讓客戶端知道叢集在哪裡
        其中 ceph.client.admin.keyring 是用來確定連結,使客戶端有許可權連線ceph叢集

[[email protected] ~]# scp 管理伺服器的IP:/etc/ceph/ceph.conf 管理伺服器的IP:/etc/ceph/ceph.client.admin.keyring /etc/ceph/

     3.2.3 把Ceph叢集映象對映為本地磁碟(和伺服器把映象裝置對映到本機一樣的操作)

[[email protected] ~]# rbd  map  儲存池名/映象名

     3.2.4 檢視Ceph叢集的掛載情況

[[email protected] ~]# rbd  showmapped

   3.3 然後使用者就可以像操作本機磁碟一樣對Ceph磁碟進行使用。


4. 利用COW技術給ceph儲存叢集做快照備份
    COW -- Copy  Online  Writ 寫時複製
   其操作原理就是,建立快照後,當客戶端對磁碟映象進行寫操作的時候,就儲存修改前的檔案到快照中,也就是說,剛剛建立的新快照是不佔用任何儲存空間的,只有資料發生變更了,才會把舊資料儲存到快照中。
   而做快照是為了恢復資料,所以,只有資料發生了變更,快照才會記錄,一開始可能分配了和磁碟映象一樣的空間,單實際上並沒有使用那麼多。
   什麼操作算寫操作呢?刪除、修改、新增任何資料,那麼只要有前面的任意一個操作,快照就會工作進行記錄。

   4.0 檢視Ceph塊儲存映象的快照資訊:

[[email protected] ~]# rbd snap ls 儲存池名/映象名

   4.1 如何在需要儲存資料的時候在伺服器上建立快照

[[email protected] ~]# rbd snap create 儲存池名/映象名 --snap 快照名

   4.2 如何建立將磁碟資料還原到快照的狀態
     4.2.1 客戶端解除掛載

[[email protected] ~]# umount  映象掛載的位置

     4.2.2 服務端解還原快照 

[[email protected] ~]# rbd snap rollback 儲存池名/映象名  --snap 快照名

     4.2.3 客戶端重新掛載

[[email protected] ~]# mount 映象所在的系統位置(rbd map 命令查到的結果)  映象掛載的位置

  注: 
    1. 還原的時候,其順序可以有改變,但是,最好不要改變,否則會有一些問題出現,如果伺服器的時間不一致,則資料還原會失敗
    2. 還原的時候如果出現客戶端不能掛載,那就就在管理伺服器上重新還原一下快照即可

   4.3 刪除快照

[[email protected] ~]# rbd snap rm 儲存池名/映象名  --snap 快照名

5. 快照克隆

    根據快照製作一個映象的克隆出來,這個克隆可以當作一個映象進行使用,只不過這裡面有原映象拍攝快照的時候的所有資料資訊,包括檔案格式化的資訊等,所以快照克隆可以理解為以快照拍攝時期的映象為模板,克隆出一個和當時一模一樣的映象出來。
    但是是克隆的映象資料大多來源於快照鏈,也就是他不能脫離原映象獨立使用,如果要獨立使用要做其他的操作,不過消耗時間會多不少,下面會具體講述。

   檢視集體克隆的資訊:(其實克隆就是一個映象,所以其基本操作和不同映象一樣)

[[email protected] ~]# rbd info 克隆名

   刪除克隆:

[[email protected] ~]# rbd rm 克隆名

    5.1 必須先把要克隆的快照保護起來(使其不能被刪除或者修改)

[[email protected] ~]# rbd snap protect 映象名 --snap 快照名

    5.2 建立快照的克隆

# 沒有快照可以現在製作,然後繼續操作,製作快照的方法在上面
[[email protected] ~]# rbd clone 映象名 --snap 快照名 克隆名字 --image-feature layering(映象樣式)
# 如果希望克隆的映象可以獨立使用,不與原映象和快照有關係就要把整個原映象進行拷貝
# [[email protected] ~]# rbd flatten 克隆名字

    5.3 解除保護

[[email protected] ~]# rbd snap unprotect 映象名 --snap 快照名

    5.4 配置客戶端連線映象進行操作(和對待普通映象一樣的操作)

總結:

    快照克隆出來的就是一個映象,可以當作一個映象進行操作。

檢視命令:
ceph -s 檢查Ceph儲存的管理伺服器部署是否成功
rbd info 映象名 檢視映象資訊
rbd snap ls 映象名 檢視映象快照資訊
配置Ceph服務基本思路
環境 搭建幾個儲存伺服器裡面配置至少2個用於儲存的磁碟(至少要一個日誌儲存一個數據儲存)
搭建一個控制伺服器可以免密登陸所有的儲存伺服器,安裝管理軟體ceph-deploy,建立個儲存服務配置的目錄(所有操作都在這裡面進行)
幾個伺服器都繫結一個NTP伺服器,開啟chronyd服務,保證時間同步
 
建叢集 建立 ceph-deploy  new 儲存裝置……
裝包 ceph-deploy  install 儲存裝置……
初始化 ceph-deploy mon create-initial
 
建OSD 配置磁碟 到各個磁碟把預定的日誌儲存盤分成等同資料儲存個數的區
賦予許可權 給日誌儲存盤所有分割槽ceph使用者都有讀寫許可權
清空磁碟 ceph-deploy disk  zap  儲存裝置:資料儲存磁碟……
建立OSD ceph-deploy osd create  儲存裝置:資料儲存磁碟:/dev/日誌儲存盤中對應的分割槽……
 
建塊儲存 建立映象 rbd create 映象名 --image-feature layering(映象樣式) --size 大小
配置客戶端 裝包ceph-common、拷貝配置檔案ceph.conf和ceph.client.admin.keyring
對映映象 rbd map 映象名
 
做備份 建立快照 rbd snap create 映象名 --snap 快照名
還原 解掛 、 還原rbd snap rollback 映象名  --snap 快照名 、 掛載
 
克隆伺服器 保護快照 rbd snap protect 映象名 --snap 快照名
建立克隆 bd clone 映象名 --snap 快照名 克隆名字 --image-feature layering(映象樣式)
解除保護 rbd snap unprotect 映象名 --snap 快照名