NEIL's_學而時習之x不學無術~私藏IT技術經驗分享部落

關於部落格
NEIL. Cheng....寫作只是為了日後工作之備忘操作參考

本部落格文章撰寫前進邁向第五年(since 2009 ~至今)仍繼續推進分享IT學習!!About Windows/Linux Server,Virtualization


分享網誌: 由於,本人預先完成LAB後,才補上撰寫文章與截圖,若發現文圖對照說明有誤..本人將盡快校正,也請不吝指教! Thanks!

  • 138195

    累積人氣

  • 60

    今日人氣

    0

    訂閱人氣

Ceph:大數據xPB規模分散式軟體定義儲存系統 :基礎架構 by Navier


Ceph RADOS (Reliable Autonomic Distributed Object Store) 為主要設計方式的

分散式儲存平台,於水平擴展的能力極具彈性。

Ceph 軟體定義的儲存系統有以下幾個特點:

(A.)提供 Object Storgae & Block Storage & File System 等三種不同存儲形式

(B.) 簡易進行水平擴展兼具高可用性。通常搭配OpenStack,VM,或Docker做後端存儲居多

(C.)不受限於任何硬體規格(低成本優勢)

引用上述說明參考來源(推薦讀者參閱)

 Navier's  Ceph 架構設計參考如下

  Ubuntu 14.04 x5   Ceph version :  0.87

Ceph.Admin
(oops):  安裝Ceph-deploy 集中佈署安裝各節點主機,亦擔任"Ceph.Client"

  於本篇最後做 mount(RBD,CephFS)測試.

-----

Ceph.Mon(mon1,mon2):  用來監控 Ceph Storage Cluster 上的即時狀態,確保 Ceph 可以

運作無誤。 
 通常我們會在  Ceph Storage Cluster 實際生產環境下至少將佈署複數個Monitor

 一併掛載 #可避免掛載rbd,object 或cephfs檔案系統時單點失誤情境發生可能性

為了有效的在分散式的環境下存取檔案,每一個 Ceph Monitor daemon 維護著很多份與

cluster 相關的映射資料(map),包含:Monitor map,OSD map,Placement Group (PG) map

CRUSH map,MDS map (若使用 Ceph File System,還會有這組映射資料)

----


Ceph.OSD(osd1,osd2)Ceph OSD(Object Storage Daemon)

Daemon 的主要工作就是透過網路,進行實際資料(object)的存取,但 OSD 完整個功能主要

有以下幾項:
資料儲存,資料複製.資料回復,資料回填(backfilling, 通常發生於新 OSD 加入時)

Rebalance (發生於新 OSD 加入 CRUSH map 時)以 heartbeat 的方式取得其他 OSD 的狀態,

並將資訊提供 Ceph Monitor,
其扮演角色即是實際"存儲節點",本Lab採用兩個OSD做存儲(Ceph

Storage Cluster Default 至少須滿足"3"個OSD節點架構,我們稍後實作將預設值修改配置為"2")


---

Ceph.MDS(mon1,mon2):

負責管理 Ceph File System 上的 metadata,且讓使用者可以把 Ceph File System 當作一般的

檔案系統操作。類同本人過去發表實作之"GlusterFS" 讀者若有興趣可以點閱參考


[Ceph前置配置說明,請於各Ceph節點預先完成以下..]

新增使用者帳戶(ceph,neil):  本Lab於Ceph各節點新增"ceph",neil"兩個帳戶,

  實際執行Lab步驟使用
"neil"這個帳戶,加入"ceph"群組成員中

  ceph-deploy tool
安裝過程中會建立ceph user 授權,本人將neil加入ceph群組

  #下圖中以oops為例

visudo 新增neil,ceph 配置,加入以下配置離開

neil    ALL=(ALL) NOPASSWD:ALL

ceph    ALL=(ALL) NOPASSWD:ALL

各節點 /etc/hosts 表紀錄對應配置參考(必要)

10.10.10.10 oops

10.10.10.20 mon1

10.10.10.21  mon2

10.10.10.30  osd1

10.10.10.31  osd2 


oops (ceph.admin): 組態ceph 安裝來源,並於oops節點安裝ceph-deploy

wget -q -O- 'https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc' | sudo apt-key add -

echo deb http://ceph.com/debian-dumpling/ $(lsb_release -sc) main | sudo tee

/etc/apt/sources.list.d/ceph.list

sudo apt-get update

sudo apt-get install ceph-deploy

[各節點 安裝NTP校時服務與OpenSSH Server]  

sudo apt-get install ntp openssh-server -y  

各節點編輯校時配置(重要)  sudo vi /etc/ntp.conf    

#庵臨時參考鳥歌校時伺服器章節,你可以自行定義慣用校時伺服器
(盡可能各節點NTP配置一致)

sudo /etc/init.d/ntp restart   #Navier近日玩Ceph過程使用Default NTP 校時配置發現運行

ceph mon1,mon2 主機因時間差異過大(秒數>5)引起不同步,可觀察使用
"ceph -s"檢視叢集運作

----

oops (ceph.admin):  僅止ceph-deploy角色執行

ssh-keygen    #庵Lab使用neil這個帳戶,添增SSH登入無須輸入Passwd配置

ssh-copy-id neil@mon1

ssh-copy-id neil@mon2

ssh-copy-id neil@osd1

ssh-copy-id neil@osd2 

#下圖確認"ssh mon1" ok無誤"no passwd"

 


oops
(ceph.admin): 最後一個前置作業完成,我們正式進入佈署ceph階段

建立 Ceph Admin 工作目錄與OSD{1,2}存儲目錄

sudo mkdir  -p   /oops/admin   #only "oops" node

sudo chown -R ceph.ceph /oops/admin

sudo chmod -R  2775  /oops/admin 



sudo mkdir  -p   /oops/data     #by "osd1,osd2"  node 

sudo chown -R ceph.ceph /oops/data

sudo chmod -R  2775  /oops/data

然而目前Neil 給予OSD{1,2}存儲各自獨立約莫22GB空間(整個/oops目錄空間)

          ceph --version 0.87.2

         當我們完成本篇Lab所有階段你可以看見Ceph架構已經順利Run起來(下圖為本人完成結果)

           
health HEALTH_OK

  本人預計將佈署過程拆分成二篇作備忘,然而本篇宗旨在於,建立Ceph Storage Cluster與演示

  手動& 開機掛載RBD,CephFS兩種存取檔案格式
[ oops.admin:10.10.10.10/24] 

cd  /oops/admin

ceph-deploy new mon1 mon2     #定義Monitor節點

---

vi   ceph.conf   #新增以下配置,將osd pool default 值由原本"3"降為"2"OSD個數

osd pool default size = 2

Then 將"ceph"安裝到各個節點

ceph-deploy install oops mon1 mon2 osd1 osd2  


Then 初始化
Monitor

ceph-deploy mon create-initial


Then 佈署
OSD(osd1,osd2 分享目錄"/oops/data")

ceph-deploy osd prepare  osd1:/oops/data osd2:/oops/data

ceph-deploy osd activate osd1/oops/data  osd2:/oops/data   #啟用osd1,osd2

Then 安裝
MDS(mon1,mon2)

ceph-deploy mds create mon1 mon2


Then 手動複製"ceph" 組態檔與"admin key" 同步到各個節點

ceph-deploy admin  oops mon1 mon2 osd1 osd2 

sudo chmod +r /etc/ceph/ceph.client.admin.keyring    

#check各節點.keyring是否有讀取權限?若無讀取權限,節點將不會正常運作


一切各節點安裝就緒後,我們可以使用系統指令來檢視"ceph -s"  "配置資訊"

Health HEALTH_OK  #目前Ceph Storage Cluster 正常運作中

monmap e1: 2 mons at {mon1=10.10.10.20:6789/0,mon2=10.10.10.21:6789/0}, 

pgmap v1053: 164 pgs, 3 pools, 14759 kB data, 43 objects
           
10336 MB used, 30595 MB / 40932 MB avail      <--目前有近40GB空間可用


*mdsmap
注意這是我完成整個LAB後成果,一般來說這一步你看到應該"0/0/0"up 狀態為正解,

                   後面內容提到"掛載CephFS檔案系統"將介紹,在此先略過


  ceph osd tree    #可以查看osd weight (權重值可手動變更), OSD Live Status相關資訊

ceph df      

#查看pool,rbd,metadata 使用率,如下圖我們將手動切一區塊RBD大小約15GB

  Ceph.Client 掛載測試演示用
(此為本篇Lab最終完成結果演示)

A.  oops.admin:10.10.10.10/24
 [建立RBD區塊,格式化,並掛載於系統]

安裝
ceph.client   #倘若是獨立安裝節點,請參造以下步驟,然而我們是

在admin節點扮演client

ceph-deploy install  "oops"

ceph-deploy admin   "oops"

<手動為Ceph Storage Cluster 建立一個Block Device>: "預定配置15GB容量"

#Neil現手動刪除先前測試Lab所建立Block Device "monkey" 還原重新建置演示

[刪除現存IMAGE步驟]

rbd ls rbd            #查看rbd pools底下有哪些建立好的image,我們看到有一"monkey"

rbd --image monkey info      #詳細查看該image detail資訊

rbd rm monkey    #現手動刪除該image,並可看到執行成功後回傳訊息

 
"Removing image: 100% complete...done."

ceph osd tree        #前幾步我們看到曾有個"rbd" pools已經消失

Then 我們現在要重新建構一個名為"kiki" image 並指定放置於名為"love"儲存池中

建立新儲存池名為"love"

ceph osd pool create  love 128 128    #目前OSD總數="2"副本數2

Total PGs = (Total_number_of_OSD * 100) / max_replication_count   #計算公式

(2*100)/2=100
  #挑選最接近2的N次方數值倍數接近100的"128"...故配置128



#"love"後面接第一個pg_num,第二是pgp_num 此 2值須一致 ,需視目前OSD個數做合理規劃,

  可參考官方規劃配置
點我
 

rbd create love/kiki  --size 15360     #block name="kiki",pool="love",15GB容量

rbd --image kiki -p love info      
#建立image時若無定義pool,預設將配置到"rbd"這個儲存池

sudo modprobe rbd                                                    #手動載入rbd模組

sudo rbd map kiki --name client.admin -m mon1  
#Map the image to a block device,monitor
 
                                                                                         
sudo rbd unmap /dev/rbd0 可解除map

sudo mkfs.xfs    /dev/rbd/love/kiki      
 #格式化Block Device."xfs" format


[手動掛載Block Device]

mkdir   /home/neil/tutu                             #建立掛載rbd block目錄

mkdir  /home/neil/ceph-fuse                   
#建立掛載ceph-fuse目錄

sudo mount   /dev/rbd/love/kiki   /home/neil/tutu     #成功掛載,rbd0

[配置自動開機掛載RBD Block Device]

sudo vi /etc/fstab

/dev/rbd/love/kiki /home/neil/tutu  xfs    defaults,noatime,_netdev        0       0


[rbdmap script 安裝與開機自動啟用]

sudo wget https://raw.github.com/ceph/ceph/a4ddf704868832e119d7949e96fe35ab1920f06a/src/init-rbdmap -O /etc/init.d/rbdmap

sudo chmod +x /etc/init.d/rbdmap

sudo update-rc.d rbdmap defaults


sudo vi   /etc/ceph/rbdmap  

#使用sudo rbd showmapped 檢視 


加入pool name & image name,存檔離開後將其設定有讀取(read)權限

love/kiki


 vi   /etc/init.d/rbdmap   

RBDMAPFILE="/etc/ceph/rbdmap"      #確認方才我司編輯設定檔路徑無誤,離開

[測試開機掛載 Block Device]

1.卸載方才掛載好的目錄"/home/neil/tutu",並重新啟動

   sudo umount  /home/neil/tutu 

   sudo  shutdown -r now

2. 檢視掛載目錄,我們可手動隨時停用/啟用RBD掛載,掛載RBD Block這區塊算是告一段落

3.  ceph df : 網路下一個步驟前說明,"n1_data,n1_meta"兩個pools計畫給MDS 使用,

                   
理應不存在,亦是我在測試Lab前預先建置pools..後續步驟將介紹 

 
B. [採用ceph-fuse 掛載檔案系統]

     
 sudo apt-get install ceph-fuse   #安裝ceph-fuse,順利安裝

一個Ceph 文件系統需要至少兩個RADOS 存儲池,一用於數據(data)、另一用於元數據。

(metadata )
 配置這些Pool時可參考:

Total PGs = (Total_number_of_OSD * 100) / max_replication_count   #計算公式

(2*100)/2=100 
  #挑選最接近2的N次方數值倍數接近100的"128"...故配置128


#目前有四個pools,n1_data(數據儲存用),n1_meta(元數據),rbd預設pools

建立CephFS檔案系統 其建立步驟參考如下

ceph osd pool create n1_data <pg_num>   #先建立兩個Pools ,先前設定為50,50後手動修正

ceph osd pool create  n1_meta  <pg_num>


#ceph fs new <fs_name> <metadata> <data>  創建CephFS檔案系統

ceph fs new  n1_meta  n1_data
ceph fs ls

ceph osd lspools   

ceph osd pool  get  n1_data  pg_num    #檢視pg_num,pgp_num數值,

ceph osd pool get   n1_meta pgp_num

參考下圖: 
<metadata> <data>  眼尖朋友會看到我之前配置順序寫反,請留意修正==|||(汗)

修正pg_num,pgp_num 為"128",參考步驟一一修正合適數值

ceph osd pool set  n1_data  pg_num  128

ceph osd pool set  n1_meta  pg_num  128

ceph osd pool set  n1_data  pgp_num  128

ceph osd pool set  n1_meta  pgp_num  128

建議: 我會在cepf.conf 定義好以下Default 值

osd pool default pg num = 128

osd pool default pgp num = 128

Then
ceph.conf 組態同步到各台主機中

[oops.admin]

ceph-deploy  --overwrite-conf admin  mon1 mon2 osd1 osd2  

當我們建立好CephFS檔案系統好後,可以看到檔案系統已經UP,接下來我們就可以開始掛載

 CephFS檔案系統

      ceph mds stat    1/1/1 up ....


用內核驅動掛載ceph文件系統

#這次掛載我們掛在兩台mds (mon1,mon2) 做主被動備援設計,掛載到本機的

 /home/neil/ceph-fuse
目錄下,搭上金鑰驗證(cephx)啟用

sudo mount -t ceph mon1,mon2:6789:/ /home/neil/ceph-fuse  -o name=admin,secret=AQC+kRNXcA3tOhAAZSO9NlTZhkV/MFO7dTsCjQ=

金鑰可在/etc/ceph/ceph.client.admin.keyring 找到


另一種內核掛載方式"secretfile"  #將金鑰匯入指定檔案,掛載檔案系統時讀取(+r 讀取權限)

sudo mount -t ceph mon1,mon2:6789:/ /home/neil/ceph-fuse  -o name=admin,secretfile=/oops/admin/admin.secret

使用ceph-fuse 掛載cephfs檔案系統成功!OK

 sudo ceph-fuse -m mon1,mon2:6789    /home/neil/ceph-fuse/

開機時自動掛載CephFS

sudo    vi /etc/fstab  
#加入以下即可完成開機掛載,結束本篇十座目標

id=admin,conf=/oops/admin/ceph.conf  /home/neil/ceph-fuse  fuse.ceph defaults,noatime,_netdev 0 0

Neil結論: 

於本篇,我們完成Ceph營運環境建構,利用ceph-deploy 工具快速完成

ceph.admin,ceph.mon,ceph.mds.ceph.osd 佈署,並介紹實作掛載"rbd" Block Device與"cephFS"

檔案系統,
Ceph Block 掛載形式類似iSCSI 掛載形式常用於與OpenStack,Docker整合使用,亦可當作

Apache Hadoop 資料儲存取代HDFS 參考
點我 ,相當具彈性...下一篇我們將日常運維議題更往前推進...

[懷念家兔KIKI]

這幾週心力交瘁,在完成上一篇"
 PowerDNS 基於MariaDB Galera Cluster架構下設計by Navier"
 
之際陪我度過九個年頭兔兔KIKI,急症送醫住院,很遺憾住院三天後,最終還是離開我了(腸胃道蠕動停滯),

相當難過
花了一些時間平復內心趨近於平靜,祈禱妳在另一個世界解脫輪迴,登極樂世界修行....

別了KIKI,我們愛妳...感謝過去有妳的陪伴,期待你我再度重遇...Neil 

相簿設定
標籤設定
相簿狀態