Ceph 是一個 open source 的分散式儲存系統,能夠同時提供物件、區塊跟檔案系統的儲存,所以被大量使用在 OpenStack 部署中,提供 Swift,、Cinder 跟 Manlia 的 backend。本篇文章將介紹如何透過 Ceph-Ansible 去部署一個 Production Ready, High-availability 的 Ceph Cluster。
Table of Contents
基本架構
一個基本的 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/
<code> 下,預設會提供 </code>
sample
<code> 結尾的範例檔,會需要把 sample 拿掉。簡單的部署需要設定的檔案只有 </code>
all.yml
<code> 跟 </code>
osds.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 的每一個節點。all.yml
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 安裝的方式,可以選擇 repository, distro, local 三種方式。ceph_origin
: 使用 Ceph upstream 的 repositoryrepository
: 使用 Linux distro 中包好的 Cephdistro
: 使用本地編譯好的 Ceph binarylocal
顧名思義就是 Ceph 的 release 版本,這裡使用的是 Luminous LTS,目前最新版是 Mimicceph_stable_release
就如上面架構介紹網路所述,填入兩個網斷的 CIDRpublic_network
<code> 與 </code>
cluster_network
便是 monitor 溝通使用的介面monitor_interface
osds.yml
設定
osds.yml
中定義的是一些 OSD 的參數,通常是用於整個 OSD 節點中。osds.yml
devices:
- '/dev/sdb'
- '/dev/sdc'
osd_scenario: collocated
。devices
<code>: 用來儲存的裝置,可以定義多個,如果每個 node 並不相同的話,可以嘗試使用 </code>
osd_auto_discovery
<code>,將其設為 </code>
true
: OSD 的部署方式,有 collocated、non-collocated、lvm 三種選項osd_scenario
放在同一個裝置上。collocated
<code>: 將 </code>
ceph data
<code>、</code>
ceph block
<code>、</code>
ceph block.db
<code>跟</code>
ceph block.wal
上。non-collocated
<code>: 會將 </code>
ceph data
<code>跟</code>
ceph block
<code> 放在 </code>
devices
<code> 上,並且將 </code>
ceph block.db
<code>跟</code>
ceph block.wal
<code> 放在額外設定的 </code>
dedicated_devices
,只有 data 為必填選項。lvm
<code>: 需要設定 </code>
data
<code>、</code>
wal
<code>跟</code>
db
<code> 的 </code>
lv name
<code> 跟 </code>
vg group
Ansible Inventory 設定
Ansible Inventoy 就根據自己所選擇各個 node 的 hostname 或是 IP address 填入,本篇範例會包含三台 ceph node
檔案內ceph01, ceph02, ceph03
<code>,所有 ceph 元件在這三個 node 上皆會安裝。會將以下資訊寫入 </code>
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
正確顯示 HEALTH_OK 的話就代表 Ceph Cluster 部署成功囉!
Reference
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.