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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...