Ceph編譯安裝教程

来源:http://www.cnblogs.com/happenlee/archive/2017/12/01/7941570.html
-Advertisement-
Play Games

Ceph官方版本目前支持的糾刪碼很有限,實驗室這塊希望能夠整合我們自主開發的糾刪碼BRS( " B inary R eed– S olomon encoding" ),所以需要編譯Ceph環境。Ceph官方目前推薦的安裝方式都是通過Ceph deploy的工具來安裝配置,搭建起來十分簡單。目前直接通 ...


Ceph官方版本目前支持的糾刪碼很有限,實驗室這塊希望能夠整合我們自主開發的糾刪碼BRS(Binary Reed–Solomon encoding),所以需要編譯Ceph環境。Ceph官方目前推薦的安裝方式都是通過Ceph-deploy的工具來安裝配置,搭建起來十分簡單。目前直接通過Ceph源碼進行編譯安裝的中文教程有太多坑了。筆者親身通過編譯Ceph搭建環境之後,對這個流程進行了一個完整的小結,後續的童鞋可以做一個簡單的參考。

1.Ceph簡介

Ceph 的初創來自Sage Weil 博士的 PhD 論文,論文 “Ceph: A Scalable, High-Performance Distributed File System”詳細的闡述了 Ceph 的設計架構。
簡而言之,Ceph 作為一個分散式存儲系統設計的目標定位為:

  • 可輕鬆擴展到數PB級別的容量(Ceph目前的版本可以輕鬆支持EB級別的存儲容量)
  • 能夠自動適應多種工作負載的高性能(每秒輸入/輸出操作[IOPS]和帶寬)
  • 高可靠性
  • 提供了對象,塊,文件系統一整套存儲解決方案,大大降低運維的成本

筆者認為Ceph作為一個優秀的分散式存儲系統,未來分散式存儲系統提供了設計基礎。自Linux內核2.6.34版開始,Ceph.ko已經集成到Linux內核之中,作為分散式文件系統的備選項之一。同時Ceph也是OpenStack中優秀的開源存儲解決方案,支持通過Ceph作為塊存儲或對象存儲進行讀寫訪問。

2.編譯Ceph的源碼

Ceph的源碼可以去Github之上clone下來,或者去Ceph官網下載。這裡重點提一下Ceph的版本問題,Ceph在Hammer版本之後,採取了新的版本命名規則:

  • x.0.z - 開發版
  • x.1.z - 候選版
  • x.2.z - 穩定、修正版

目前對Ceph進行二次開發的版本基本上是基於穩定TLS版本來做,實驗室選取了兩個版本進行了開發。10.2.6版本與12.2.1版本,本文基於10.2.6的版本進行編寫。(12.2.1版本不在使用autotools作為編譯工具,同時添加了Mgr等新的組件,配置文件的編寫方式也略有不同。)

由於實驗室擬態系統的要求與設定,這裡筆者選擇了混用64位的Ubuntu 14.04與64位的Centos進行編譯安裝,二者流程大同小異,不同之處我會重點標記。通過cd 進入Ceph的源碼目錄,依次執行如下命令

 1.  ./install-deps.sh     //安裝對應的Ceph依賴包
 2   ./autogen.sh          //調用autotools腳本,生成configure和makefile文件
 3.  ./configure           //這步是很麻煩的一步,由於第一步並不會完全安裝好所有依賴,需要讀者見招拆招,按照終端提示安裝依賴。
    (註:Centos系列不會存在類似問題,嫌麻煩的可以直接用Centos進行編譯安裝)   
 4.  make                  //進入漫長的等待,多核可以添加-j{cpu核數} 如make -j4
 5.  make install          //安裝Ceph  

PS:編譯Ceph時需要超大的記憶體與硬碟空間,所以建議待安裝節點的記憶體和硬碟空間要足夠大,否則會出現:

virtual memory exhausted: Cannot allocate memoryfull disk等問題。

3.配置搭建Ceph的環境,啟用Mon節點

編譯成功後,也不要高興得太早了,接下來我們按下麵配置架構圖來構建Ceph集群。
ceph集群圖.png

這部分應該是最讓人頭疼的部分了。編譯安裝Ceph和直接通過包管理器安裝Ceph的可大有不同。如/etc/ceph/的配置目錄就自己新建,預設的/var/log/ceph路徑也需要通過mkdir新建,否則Ceph會直接丟棄日誌文件。

  • 編輯/etc/ceph/ceph.conf

    • (1) 為集群分配唯一的集群id

      uuidgen   //生成uuid
  • (2) 編輯fsid

      fsid = {UUID}   //填寫生成的uuid
    • 例如:

      fsid = 236e7afe-7c61-41a0-b577-89df547fcef5

  • (3) 把初始監視器寫入 Ceph 配置文件

    mon initial members = {hostname}[,{hostname}]
    • 例如:

      mon initial members = slave1

  • (4) 把初始監視器的 IP 地址寫入 Ceph 配置文件、並保存。

    mon host = {ip-address}[,{ip-address}]
    • 例如:

      mon host = 192.168.1.4
  • (5) 為此集群創建密鑰環、並生成監視器密鑰。

     ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
    • (6) 生成管理員密鑰環,生成 client.admin 用戶並加入密鑰環。

      ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --set-u

  • (7) 把 client.admin 密鑰加入 ceph.mon.keyring 。

    ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
  • (8) 用規劃好的主機名、對應 IP 地址、和 FSID 生成一個監視器圖,並保存為 /tmp/monmap 。

     monmaptool --create --add {hostname} {ip-address} --fsid {uuid} /tmp/monmap
    • 例如:

      monmaptool --create --add slave1 192.168.1.4 --fsid 236e7afe-7c61-41a0-b577-89df547fcef5 /tmp/monmap

  • (9) 在監視器主機上分別創建數據目錄。

    sudo mkdir /var/lib/ceph/mon/{cluster-name}-{hostname}
    • 例如:

      sudo mkdir /var/lib/ceph/mon/ceph-slave1
  • (10) 用監視器圖和密鑰環組裝守護進程所需的初始數據。

     ceph-mon [--cluster {cluster-name}] --mkfs -i {hostname} --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
    • 例如:

      ceph-mon --mkfs -i slave1 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
  • (11) 仔細斟酌 Ceph 配置文件,公共的全局配置包括這些:

    [global]
    fsid = {cluster-id}
    mon initial members = {hostname}[, {hostname}]
    mon host = {ip-address}[, {ip-address}]
    auth cluster required = none   //這裡為了方便搭建測試環境,關閉了ceph的安全認證,建議在實際運行環境之中開啟。
    auth service required = none
    auth client required = none
  • (12) 建一個空文件 done ,表示監視器已創建、可以啟動了:

    sudo touch /var/lib/ceph/mon/ceph-slave1/done
    • 啟動監視器。

      在 Ubuntu 上用 Upstart :

      sudo start mon id=slave1 [cluster={cluster-name}]

      要使此守護進程開機自啟,需要創建兩個空文件,像這樣:

      sudo touch /var/lib/ceph/mon/{cluster-name}-{hostname}/upstart

      例如:

      sudo touch /var/lib/ceph/mon/ceph-slave1/upstart

      在 Debian/CentOS/RHEL 上用 sysvinit :

      sudo /etc/init.d/ceph start mon.slave1
  • (13) 驗證下 Ceph 已經創建了預設存儲池。

    ceph osd lspools

    可以看到這樣的輸出:

    1 rbd     // Ceph會預設搭建一個rbd的存儲池

    確認下集群在運行。

    ceph -s

    你應該從輸出里看到剛剛啟動的監視器在正常運行,並且應該會看到一個健康錯誤:它表明歸置組卡在了 stuck inactive 狀態。輸出大致如此:

    cluster a7f64266-0894-4f1e-a635-d0aeaca0e993
    health HEALTH_ERR 64 pgs stuck inactive; 64 pgs stuck unclean; no osds
    monmap e1: 1 mons at {slave1=192.168.1.4:6789/0}, election epoch 1, quorum 0 slave1
    osdmap e1: 0 osds: 0 up, 0 in
    pgmap v2: 64 pgs, 1 pools, 0 bytes data, 0 objects
         0 kB used, 0 kB / 0 kB avail
         64 creating

    目前集群處於ERR狀態,由於osd尚未啟動,pgs沒有分配。接下來我們要開始啟動osd,將pgs分配到osd之上,可以讓集群恢復健康。

4.編輯CrushMap,啟用osd節點

你的初始監視器可以正常運行後就可以添加 osd 了。要想讓集群達到 active + clean 狀態,必須安裝足夠多的 osd 來處理pgs,在完成Mon啟動之後,集群就有了預設的 CrushMap,但現在此圖還是空的,裡面沒有任何 osd 映射到 Ceph 節點,所以我們要先啟動osd節點,之後編輯CrushMap,並將其導入Mon節點。

  • (1) 準備OSD。

    ssh {node-name}
    sudo ceph-disk prepare --cluster {cluster-name} --cluster-uuid {uuid} --fs-type {ext4|xfs|btrfs} {data-path} [{journal-path}]
    • 例如:

      ssh slave1
      sudo ceph-disk prepare --cluster ceph --cluster-uuid 236e7afe-7c61-41a0-b577-89df547fcef5 --fs-type xfs /dev/sbb1
  • (2) 激活 osd,並啟動osd設備:

    sudo ceph-disk activate {data-path} [--activate-key {path}]
    sudo start osd.{id}
  • 例如:

    sudo ceph-disk activate /dev/sdb1
    sudo start osd.0

    接下來依次啟動圖中的3個osd節點,此次osd節點雖然啟動了,但是並沒有加入到CrushMap之中進行映射,接下來我們需要導出Mon上的CrushMap,併進行編輯,之後導回到Mon中。

  • (3) 從Mon節點獲取 CrushMap的二進位文件:

    ceph osd getcrushmap -o crushmapbinary

  • (4) 通過CrushMap的二進位文件反編譯它,成為文本文件:

    cephtool -d crushmapbinary -o crushmap.txt

  • (5) 接下來編輯crushmap.txt,主要添加osd device與osd的權重進行配置:
    在 CrushMap里聲明一個設備,在設備列表後面新建一行,輸入 device 、之後是唯一的數字 ID 、之後是相應的 ceph-osd 守護進程常式名字。

    device {num} {osd.name}

    • 例如:
      添加好我們之前activate的osd設備

      device 0 osd.0
      device 1 osd.1
      device 2 osd.2

接下來我們要給這些osd設備分配權重
CrushMap主要有 4 個主要類型。
設備 由任意對象存儲設備組成,即對應一個 ceph-osd 進程的存儲器。
桶類型: 定義了 CRUSH 分級結構里要用的桶類型( types ),桶由逐級匯聚的存儲位置(如行、機櫃、機箱、主機等等)及其權重組成。
桶常式: 定義了桶類型後,還必須聲明主機的桶類型、以及規劃的其它故障域。
規則: 由選擇桶的方法組成。
目前我們只要大概有個概念,接下來我們只需要簡單的將我們的設備添加到CrushMap之中:

  root default {
    id -1           # do not change unnecessarily
    # weight 3.240
    alg straw
    hash 0  # rjenkins1
    item slave1 weight 1.00
    item slave2 weight 1.00
    item slave3 weight 1.00
   }
  
   host slave1 {
    id -4
    alg straw
    hash 0
    item osd.0 weight 1.00
  }

  host slave2 {
    id -2
    alg straw
    hash 0
    item osd.1 weight 1.00
  }
  
  host slave3 {
    id -3
    alg straw
    hash 0
    item osd.2 weight 1.00
  }
  • (6) 重新編譯這個新的CRUSH map

    crushtool -c crushmap.txt -o crushmap-compiled
  • (7) 將新的CRUSH map 應用到ceph 集群中

    ceph osd setcrushmap -i crushmap-compiled

  • (8)再次確認Ceph集群的運行狀態。

    ceph -s
    
    cluster a7f64266-0894-4f1e-a635-d0aeaca0e993
    health HEALTH_OK  64 pgs stuck active and clean; 3 osds
    monmap e1: 1 mons at {node1=192.168.0.1:6789/0}, election epoch 1, quorum 0 node1
    osdmap e1: 3 osds: 3 up, 3 in
    pgmap v2: 64 pgs, 1 pools, 0 bytes data, 0 objects
         3465 kB used, 923421 kB / 919956 kB avail
         64 active and clean

    我們可以確認,Ceph集群已經恢復健康,我們已經成功編譯安裝了Ceph。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 資料庫 MySql ___ 預設的超級管理員 用戶名:root 密碼:root localhost 127.0.0.1 都表示本機 標識符 1. PK:Primary Key (column is part of a pk) 主鍵 2. NN:Not Null (column is nullable ...
  • Power BI 報表伺服器產品密鑰,以便在生產環境中安裝伺服器。 已下載 Power BI 報表伺服器,並已購買 SQL Server Enterprise 軟體保障協議。或者,已購買 Power BI Premium。希望在生產環境中安裝伺服器,但需要產品密鑰才能進行安裝。產品密鑰在哪裡?產品密... ...
  • PD虛擬機修改RemixOS的屏幕解析度 2017年12月02日02:13:55 by SemiconductorKING 最近要用個移動端APP,手機不方便就想在電腦跑一個,然後裝了個以前用過的覺得還行的RemixOS(安裝方法網上很多的:在 Parallels Desktop 上安裝 Remix ...
  • 1.1 linux配置IP地址 1️⃣ ifconfig命令臨時配置IP地址 能不能自動獲取IP地址和DNS地址,要看有沒有DHCP伺服器 win10上,輸入ipconfig /all 會看到是否有DHCP伺服器 ifconfig命令 對此命令更加詳細的解說 傳送門 http://xp9802.it ...
  • 最近自己裝了個ubuntu kylin 在使用的過程中發現,系統的apt-get 的源有毛病,總是安裝不了軟體。 感覺應該是傳說中的牆的原因,所以準備換到阿裡雲的源。 下麵是步驟: 1、複製原文件備份 sudo cp /etc/apt/source.list /etc/apt/source.list ...
  • 我們在學習的時候使用vmware創建自己的虛擬機,但是我們有時學習環境需要多台電腦進行操作演示,如果安裝創建虛擬機、再在虛擬機上安裝操作系統、這樣很花費我們的時間,而且還步能保證服務的一直性,這就用到vmware的強大功能——克隆,廢話不多說,操作如下: 一、虛擬機克隆 1、在vmware上創建一 ...
  • 有時候我們需要修改主機的host主機名,方便管理和識別自己的伺服器,修改步驟如下: 第一步: vi /etc/hosts 正常情況下,修改了第一步就可以了,如果通過hostname命令查看還是修改以前的話,執行第二步 第二步: vi /etc/sysconfig/network 把hostname設 ...
  • 阿裡雲CentOS7.3搭建 Apache+MySQL+PHP環境 參考https://www.cnblogs.com/apro-abra/p/4862285.html 一、安裝Apache 1.安裝 yum -y install httpd yum -y install httpd yum -y ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...