2015年4月16日 星期四

分散式儲存系統 Ceph(二):利用 ceph-deploy 部署 Ceph 叢集(2015-06-06 編輯)

Ceph 官方提供兩種安裝方式,一種是自行安裝(manual installation),另一種是透過部署工具(ceph-deploy)來部署。
雖然我自己也做過自行安裝,不過不知道哪裡弄錯了,成功次數有點少 XD
所以記錄下來的,主要是透過 ceph-deploy 工具的部署方法。

PS. 其實不看這篇文章,直接看官方文件也是一樣的~。


    1、系統配置
    部署架構中,有一台 Admin 節點負責執行部署程序,部署目標為 Monitor 節點以及三台 OSD 節點。
    其中 OSD 節點有兩顆 HDD 和一顆 SSD。HDD 有一顆拿來裝作業系統,剩下的 SSD 放 Journal、HDD 放 OSD。

    2、環境配置
    作業系統:Ubuntu 14.04.2 64-bit server
    使用者名稱(所有節點):ubuntu
    ceph-deploy 版本(Admin 節點):1.4.0-0ubuntu1
    ceph 版本(Monitor 與 OSD 節點):0.80.9-0ubuntu0.14.04.1

    2.1、設定 hostname
    為了方便後面的部署,在 Admin 節點的 /etc/hosts 寫下以下的設定:
    monitor 10.5.1.1
    osd1 10.5.1.2
    osd2 10.5.1.3
    osd3 10.5.1.4
    而在 Monitor 節點與 OSD 節點的 /etc/hosts,則是寫以下的設定:
    monitor 192.168.100.1
    osd1 192.168.100.2
    osd2 192.168.100.3
    osd3 192.168.100.4
    這樣的目的是讓 Monitor 與 OSD 互相溝通時,能夠使用內部網路進行溝通,避免壓縮到外部網路的流量。

    另外需要注意的是,上述的 hostname 會在以下的指令當中使用
    但由於 ceph-deploy 工具在部署時,會需要指令上指定的 hostname 與對應主機自己的 hostname 完全一致,否則可能會出現類似以下的警告訊息:
    [monitor][WARNIN] ********************************************************************************
    [monitor][WARNIN] provided hostname must match remote hostname
    [monitor][WARNIN] provided hostname: monitor
    [monitor][WARNIN] remote hostname: ubuntu-monitor
    [monitor][WARNIN] monitors may not reach quorum and create-keys will not complete
    [monitor][WARNIN] ********************************************************************************
    上述警告訊息是發生在 Admin 節點上 /etc/hosts 設定的 Monitor 節點名稱為 "monitor"、指令中也是以 "monitor" 作為參數
    但實際在 Monitor 節點上的 /etc/hostname 內容則是 "ubuntu-monitor"。

    2.2、設定 ssh
    因為 ceph-deploy 會自動透過 ssh 連線到其他節點進行部署,所以必須設定 ssh 連線
    包括設定 ssh key 讓 ssh 連線時不需要輸入密碼、以及設定登入節點時的預設使用者名稱。

    2.2.1、設定 ssh key

    ssh-keygen
    ssh-copy-id ubuntu@monitor
    ssh-copy-id ubuntu@osd1
    ssh-copy-id ubuntu@osd2
    ssh-copy-id ubuntu@osd3
    

    2.2.2、設定預設的登入帳號

    編輯 ~/.ssh/config,寫入以下的資訊去設定每個節點預設的登入帳號。
    Host monitor
      Hostname monitor
      User ubuntu
    Host osd1
      Hostname osd1
      User ubuntu
    Host osd2
      Hostname osd2
      User ubuntu
    Host osd3
      Hostname osd3
      User ubuntu
    

    2.3、準備 OSD 環境
    在每個 OSD 節點上準備要給 Ceph 使用的環境。以下是以 HDD 掛載在 /mnt/storage-sdb、SSD 掛載在 /mnt/storage-sdc 為例,同時都是使用 XFS 檔案格式。

    3、部署 Ceph
    以下的動作皆是在 Admin 節點上進行的。
    1. 使用非 root 帳號,建立一個 ceph 資料夾,並且將當前目錄移至該 ceph 資料夾(因為 ceph-deploy 工具產生的所有檔案與記錄,皆會出現在當前資料夾)。
      mkdir ~/ceph-deploy
      cd ~/ceph-deploy
    2. 建立 Ceph 叢集
      ceph-deploy new monitor
      這個指令執行後,會產生 ceph.conf 設定檔,如果需要變更設定檔內容,可以在這個時候先變更。
    3. 在每個節點上安裝 ceph 相關套件。
      ceph-deploy install --release firefly monitor osd1 osd2 osd3
    4. 初始化 Monitor。
      ceph-deploy mon create-initial
      ceph-deploy gatherkeys monitor
    5. 部署 OSD 節點。將 OSD 放在每個節點的 /mnt/storage-sdb、Journal 放在每個節點的 /mnt/storage-sdc。
      ceph-deploy osd prepare osd1:/mnt/storage-sdb:/mnt/storage-sdc/journal-osd0 osd2:/mnt/storage-sdb:/mnt/storage-sdc/journal-osd1 osd3:/mnt/storage-sdb:/mnt/storage-sdc/journal-osd2
      ceph-deploy osd activate osd1:/mnt/storage-sdb:/mnt/storage-sdc/journal-osd0 osd2:/mnt/storage-sdb:/mnt/storage-sdc/journal-osd1 osd3:/mnt/storage-sdb:/mnt/storage-sdc/journal-osd2
    6. 將 keyring 以及 ceph.conf 設定檔傳送到每個節點上。這個動作主要是方便使用者,可以在每個節點上使用 ceph 的 CLI 時,不需要自行指定 Monitor 以及 keyring 位置,並非是必要動作。
      ceph-deploy admin monitor osd1 osd2 osd3

    4、確認 Ceph 狀態
    首先在 Admin 節點上,將 ceph.conf 以及 keyring 都複製到預設的 /etc/ceph 目錄,讓下一個指令可以簡單一點。
    mkdir /etc/ceph
    cp ~/ceph-test/ceph.c* /etc/ceph
    接著執行以下指令,就可以看到部署出來的 Ceph 狀態了。如果一切正常的話,應該可以看到類似下面的結果。
    ubuntu@admin:~/ceph-test$ ceph -s
        cluster 888cc004-021b-43e2-a9d5-794f450b97d3
         health HEALTH_OK
         monmap e1: 1 mons at {monitor=140.92.25.110:6789/0}, election epoch 2, quorum 0 monitor
         osdmap e10: 3 osds: 3 up, 3 in
          pgmap v637: 192 pgs, 3 pools, 37524 kB data, 21 objects
                204 MB used, 5586 GB / 5586 GB avail
                     192 active+clean

    5、Trouble Shouting

    5.1、ceph-deploy mon create-initial 指令出現 no such file 的錯誤
    參考 [1] 的回覆,依據網友 Travis Rhoden 的測試,問題可能發生在同時將 ceph-deploy 和 ceph 都安裝在 Monitor 節點上。
    因此如果沒有額外的主機可以作為部署用的 Admin 節點,建議可以利用 container 技術,在既有節點上做出 Admin 節點的 container。

    6、參考資料
    1. ceph-deploy mon create-initial fails

    沒有留言: