利用 Ceph-Ansible 部署 Ceph Cluster

Ceph logo

Ceph 是一個 open source 的分散式儲存系統,能夠同時提供物件、區塊跟檔案系統的儲存,所以被大量使用在 OpenStack 部署中,提供 Swift,、Cinder 跟 Manlia 的 backend。本篇文章將介紹如何透過 Ceph-Ansible 去部署一個 Production Ready, High-availability 的 Ceph Cluster。

基本架構

一個基本的 Ceph Cluster 基本上包含了 3 個 元件:Ceph Monitor, Ceph OSD, Ceph Manager Daemon

Ceph Monitor

Ceph Monitor 是 Ceph 的核心元件,它負責維護整個集群的狀態映射,包含 monitor、manager、OSD 跟 CRUSH 的狀態,這些資料是維持 Ceph 運作的必要元件。此外,Monitor 也負責進行 daemons 跟 clients 中的認證。一個 High-availability 的 Ceph Cluster 最少需要 3 個 Monitor

Ceph OSD

Ceph OSD 負責儲存資料,處理資料複製、復原跟重新分配,並且透過檢查其他 Ceph OSD 的 heartbeat 提供一些監控資訊給 Monitor 跟 Manager。一個 High-availability 的 Ceph cluster 最少需要 3 個 OSD。

Ceph Manager Daemon

Ceph Manager Daemon 通常會跟 Ceph Monitor 安裝在同樣的節點上,它會去監控整個 Ceph Cluster 的狀況,包含儲存空間使用率、效能跟系統系統附載等。主要目的是提供額外的監控跟介面去方便設置外部監控跟管理系統。從 Ceph Luminous 開始變成 cluster 中必須的一部分。一個 High-availability 的 Manager Daemon 會需要兩個節點。

由上述介紹可以得知我們最少需要 3 個節點才能部署一個 High-availability 的 Ceph Cluster。

網路

Ceph 的網路架構基本上非常簡單,包含了 cluster network 跟 public network。

Cluster Network

Cluster Network 是 Ceph 內部節點跟節點間在進行資料備援複製的時候所使用的網路,通常會建議使用 10G 以上的網路介面。

Public Network

Public Network 是 Ceph 提供給外部 service (e.g. Cinder) 資料時所使用的網路,通常也會建議使用 10G 以上的網路介面。

事前準備

首先我們要先把 Ceph-Ansible 的原始碼下載下來,並切換到 stable branch

git clone https://github.com/ceph/ceph-ansible
cd ceph-ansible
git checkout stable-3.1
cp site.yml.example site.yml

安裝 Ansible

安裝 Ansible 可以直接使用 Linux distro 的 package manager 安裝。

CentOS

sudo yum install epel-release
sudo yum install ansible

Ubuntu

sudo apt install ansible

設定環境

Ceph-Ansible 的環境設定檔全部都放在 group_vars/ 下,預設會提供 sample 結尾的範例檔,會需要把 sample 拿掉。簡單的部署需要設定的檔案只有 all.ymlosds.yml

cp group_vars/all.yml.sample group_vars/all.yml
cp group_vars/osds.yml.sample group_vars/osds.yml

all.yml 設定

all.yml 中定義的是一些比較基本的參數,通常是用於整個 cluster 的每一個節點。

ceph_origin: repository
ceph_repository: community
ceph_stable_release: luminous
public_network: "192.168.113.0/24"
cluster_network: "172.168.113.0/24"
monitor_interface: eth1

ceph_origin: Ceph 安裝的方式,可以選擇 repository, distro, local 三種方式。

  • repository: 使用 Ceph upstream 的 repository
  • distro: 使用 Linux distro 中包好的 Ceph
  • local: 使用本地編譯好的 Ceph binary

ceph_stable_release 顧名思義就是 Ceph 的 release 版本,這裡使用的是 Luminous LTS,目前最新版是 Mimic

public_networkcluster_network 就如上面架構介紹網路所述,填入兩個網斷的 CIDR

monitor_interface 便是 monitor 溝通使用的介面

osds.yml 設定

osds.yml 中定義的是一些 OSD 的參數,通常是用於整個 OSD 節點中。

devices:
  - '/dev/sdb'
  - '/dev/sdc'
osd_scenario: collocated

devices: 用來儲存的裝置,可以定義多個,如果每個 node 並不相同的話,可以嘗試使用 osd_auto_discovery,將其設為 true

osd_scenario: OSD 的部署方式,有 collocated、non-collocated、lvm 三種選項

  • collocated: 將 ceph dataceph blockceph block.dbceph block.wal 放在同一個裝置上。
  • non-collocated: 會將 ceph dataceph block 放在 devices 上,並且將 ceph block.dbceph block.wal 放在額外設定的 dedicated_devices 上。
  • lvm: 需要設定 datawaldblv namevg group,只有 data 為必填選項。

Ansible Inventory 設定

Ansible Inventoy 就根據自己所選擇各個 node 的 hostname 或是 IP address 填入,本篇範例會包含三台 ceph node ceph01, ceph02, ceph03,所有 ceph 元件在這三個 node 上皆會安裝。會將以下資訊寫入 hosts 檔案內

[mons]
ceph01
ceph02
ceph03

[osds]
ceph01
ceph02
ceph03

[mgrs]
ceph01
ceph02
ceph03

# 實際部署

實際部署非常簡單,只需要跑 Ansible-Playbook 即可,指令如下:

```bash
ansible-playbook -i hosts site.yml

如果跑完沒有問題,可以連到其中一個 Ceph Node 利用指令查詢 Ceph Cluster 狀態:

ceph -s

Ceph Status

正確顯示 HEALTH_OK 的話就代表 Ceph Cluster 部署成功囉!

Reference

Ceph Ansible Documentation


Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.