概述
Ceph 是一個開源的軟件定義存儲平台,它在單個分佈式計算機集羣上實現對象存儲,並提供對象級、塊級和文件級存儲的三合一接口。Ceph 存儲集羣由 Ceph 監視器、Ceph 管理器、Ceph 元數據服務器和 OSD 組成,它們協同工作來存儲和複製數據,供應用程序、Ceph 用户和 Ceph 客户端使用。Ceph 還提供了使用 PostgreSQL 來利用網絡存儲的選項。
在這篇文章中,我將指導你通過一個簡單的過程在單台機器上搭建一個一體化的 Ceph 存儲集羣,這樣你就可以使用這個設置來運行簡單的與存儲相關的實驗性開發或測試。
搭建 Ceph 存儲集羣
一個可用於生產環境的 Ceph 存儲集羣應該包含所有必要的組件以正確管理存儲,但這篇博客文章旨在提供一個簡單的設置,讓開發人員能夠快速體驗網絡存儲集羣。
搭建基礎環境
在本節中,我使用了一台在 VirtualBox 上運行的 CentOS 7 虛擬機,並添加了三個虛擬硬盤(VHD)。這台虛擬機的存儲設置如下圖所示:
登錄到 CentOS 後,通過運行以下命令添加一個名為 ceph 的新用户:
$ sudo useradd -d /home/ceph -m ceph
$ sudo passwd ceph
$ echo "ceph ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph
$ sudo chmod 0440 /etc/sudoers.d/ceph
$ su - ceph
然後使用以下命令安裝基本軟件包。Docker 用作容器,NTP 用於同步時鐘:
$ sudo yum update
$ sudo yum install lvm2 docker ntp ntpdate ntp-doc python3
檢查狀態,確保 Docker 和 NTPD 都正常運行:
$ sudo systemctl status ntpd
$ sudo systemctl status docker
搭建集羣監視器
有許多工具可用於管理 Ceph 存儲集羣,但我們將使用簡單的 cephadm 作為我們的管理工具。
首先,切換到主目錄並通過以下命令下載 cephadm:
$ cd ~
$ curl --silent --remote-name --location https://github.com/ceph/ceph/raw/octopus/src/cephadm/cephadm
$ chmod +x cephadm
接下來,添加 Octopus 版本的倉庫並安裝 cephadm:
$ sudo ./cephadm add-repo --release octopus
$ sudo ./cephadm install
現在,使用 cephadm 引導程序在 Ceph 存儲集羣中設置第一個監視器守護進程。將 192.168.0.134 替換為你實際的服務器 IP 地址。我們將使用簡單的用户名和密碼 admin/password 來簡化設置,否則 cephadm 會生成一個隨機密碼,並要求你在首次登錄時更改它。
$ sudo ./cephadm bootstrap --mon-ip 192.168.0.134 --dashboard-password-noupdate --initial-dashboard-user admin --initial-dashboard-password password
如果一切順利運行,你應該會看到類似以下的一些消息。
Ceph Dashboard is now available at:
URL: https://localhost.localdomain:8443/
User: admin
Password: password
You can access the Ceph CLI with:
sudo ./cephadm shell --fsid 1117491a-ca74-11ed-87fc-080027a1115e -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring
Please consider enabling telemetry to help improve Ceph:
ceph telemetry on
For more information see:
https://docs.ceph.com/docs/master/mgr/telemetry/
設置好集羣監視器後,使用 Web 瀏覽器登錄並檢查當前狀態。通常會顯示如下所示的儀表板:
你也可以安裝一些常用工具,通過命令行檢查 Ceph 存儲集羣:
$ sudo cephadm install ceph-common
然後,使用以下命令檢查狀態,你應該會看到類似以下的輸出:
$ sudo ceph status
cluster:
id: 1117491a-ca74-11ed-87fc-080027a1115e
health: HEALTH_WARN
OSD count 0 < osd_pool_default_size 3
services:
mon: 1 daemons, quorum localhost.localdomain (age 9m)
mgr: localhost.localdomain.trwhwk(active, since 8m)
osd: 0 osds: 0 up, 0 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 0 B used, 0 B / 0 B avail
pgs:
搭建對象存儲設備
如你在 ceph status 中所見,我們的這個集羣中只有一個監視器在運行,但有 0 個 osd(對象存儲設備)。在向這個存儲集羣添加對象存儲設備之前,讓我們使用 lsblk 檢查當前的磁盤狀態。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 80G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 79G 0 part
├─centos-root 253:0 0 49.8G 0 lvm /
├─centos-swap 253:1 0 5G 0 lvm [SWAP]
└─centos-home 253:2 0 24.3G 0 lvm /home
sdb 8:16 0 30G 0 disk
sdc 8:32 0 30G 0 disk
sdd 8:48 0 30G 0 disk
sr0 11:0 1 1024M 0 rom
上面是 lsblk 命令的輸出,它顯示了系統當前的磁盤狀態。它列出了所有可用的塊設備,包括它們的名稱、主要和次要設備編號、大小、類型以及掛載點(如果有的話)。在這種情況下,我們可以看到有三個額外的磁盤(sdb、sdc 和 sdd)尚未被使用。
接下來,讓我們使用 Ceph 設備管理命令檢查這三個磁盤是否可以添加。
$ sudo ceph orch device ls
Hostname Path Type Serial Size Health Ident Fault Available
localhost.localdomain /dev/sdb hdd VBc50561fa-4658471a 32.2G Unknown N/A N/A Yes
localhost.localdomain /dev/sdc hdd VBc775712c-0dbb8b17 32.2G Unknown N/A N/A Yes
localhost.localdomain /dev/sdd hdd VB4dfb0df0-a8f28653 32.2G Unknown N/A N/A Yes
這三個磁盤在“Available”列中都顯示為“是”,表明我們可以將它們添加到存儲集羣中。要將這些設備添加到集羣中,我們需要運行以下命令:
$ sudo ceph orch apply osd --all-available-devices
Scheduled osd.all-available-devices update...
輸出表明設備正在處理中,這可能需要一些時間。請等待幾秒鐘或幾分鐘,然後檢查 ceph 集羣狀態。
$ sudo ceph status
cluster:
id: 1117491a-ca74-11ed-87fc-080027a1115e
health: HEALTH_OK
services:
mon: 1 daemons, quorum localhost.localdomain (age 12m)
mgr: localhost.localdomain.trwhwk(active, since 11m)
osd: 3 osds: 3 up (since 20s), 3 in (since 20s); 1 remapped pgs
data:
pools: 1 pools, 1 pgs
objects: 0 objects, 0 B
usage: 3.0 GiB used, 87 GiB / 90 GiB avail
pgs: 1 active+undersized+remapped
progress:
Rebalancing after osd.1 marked in (18s)
[............................]
現在我們可以看到,3 個 OSD 已添加到這個 Ceph 存儲集羣中。如果我們再次運行“lsblk”命令,應該會看到類似以下的輸出,表明 sdb、sdc 和 sdd 現在正被 Ceph 存儲集羣使用。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 80G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 79G 0 part
├─centos-root 253:0 0 49.8G 0 lvm /
├─centos-swap 253:1 0 5G 0 lvm [SWAP]
└─centos-home 253:2 0 24.3G 0 lvm /home
sdb 8:16 0 30G 0 disk
└─ceph--7062ccde--bf6b--4252--ba0a--a66e02c0839d-osd--block--5ca780b0--b4a3--49c3--b58d--3aba26b88d14 253:3 0 30G 0 lvm
sdc 8:32 0 30G 0 disk
└─ceph--c38c357f--71ef--4641--acd4--8cb7bdf53520-osd--block--ae0bc25d--299e--45f0--af4f--890263970f1d 253:4 0 30G 0 lvm
sdd 8:48 0 30G 0 disk
└─ceph--debbc90a--860a--4e8f--9e93--a3c6e48e7994-osd--block--ccd3d288--f87f--4fa3--983a--102d838ea2a1 253:5 0 30G 0 lvm
sr0
如果你的 Ceph 存儲集羣的健康狀態仍然處於 HEALTH_WARN 狀態,你可以嘗試運行本文中描述的命令來解決該問題。
解決問題後,你的 ceph 存儲集羣應該處於 HEALTH_OK 狀態。
$ sudo ceph status
cluster:
id: 1117491a-ca74-11ed-87fc-080027a1115e
health: HEALTH_OK
services:
mon: 1 daemons, quorum localhost.localdomain (age 17m)
mgr: localhost.localdomain.trwhwk(active, since 16m)
osd: 3 osds: 3 up (since 5m), 3 in (since 5m)
data:
pools: 1 pools, 1 pgs
objects: 0 objects, 0 B
usage: 3.0 GiB used, 87 GiB / 90 GiB avail
pgs: 1 active+clean
本地測試 Ceph 存儲集羣
搭建 Ceph 存儲集羣主要是為了網絡存儲場景,但我們稍後會考慮塊、對象和文件系統的不同訪問網絡場景。在這裏,我們將創建一個 Cephfs 文件系統,將其本地掛載,並執行一個簡單的測試。
要創建 Cephfs 文件系統,請運行以下命令並進行驗證:
$ sudo ceph fs volume create cephfs
$ sudo ceph fs volume ls
[
{
"name": "cephfs"
}
]
要在本地掛載 cephfs 文件系統,
- 通過運行以下命令為 cephfs 創建一個密鑰:
$ sudo ceph fs authorize cephfs client.user / rw | sudo tee /etc/ceph/ceph.client.user.keyring
[client.user]
key = AQCcFR5kLAgrERAAdfgLAUqdGvRxghJrLUkBMw==
此命令將創建一個密鑰並將其寫入密鑰環文件。
- 通過運行以下命令掛載 cephfs 文件系統:
$ sudo mount -t ceph :/ /media/cephfs -o name=user,secret=AQCcFR5kLAgrERAAdfgLAUqdGvRxghJrLUkBMw==
此命令將把 cephfs 文件系統掛載到 /media/cephfs 目錄。
- 通過運行以下命令將掛載目錄的所有權更改為 ceph:ceph:
$ sudo chown -R ceph:ceph /media/cephfs/
- 在掛載目錄中創建一個文件並驗證其內容:
$ echo "hello ceph storage cluster" > /media/cephfs/hello.txt
$ cat /media/cephfs/hello.txt
hello ceph storage cluster
此時,你可以嘗試使用類似以下的一些命令在另一台 CentOS 機器上掛載這個 Ceph 存儲集羣。不過,我們將在下一篇博客文章中討論這個主題。
ssh ceph@192.168.0.134 'sudo ceph-authtool -p /etc/ceph/ceph.client.admin.keyring' > client.admin.key
sudo mount -t ceph 192.168.0.134:/ /mnt/cephfs -o name=admin,secretfile=client.admin.key
總結
在這篇博客文章中,我們介紹了在單個虛擬機上搭建簡單的 Ceph 存儲集羣並在 Cephfs 存儲集羣上執行基本測試的過程。我們創建了一個 Ceph 用户,設置了 Ceph 監視器和管理器,添加了對象存儲設備,並創建了一個 Cephfs 文件系統。然後我們在本地掛載了 Cephfs 文件系統,創建了一個文件,並讀取其內容以驗證掛載是否成功。在未來的文章中,我們將探索更高級的用例,例如使用 Cephfs 文件系統在一體化 Ceph 存儲集羣上運行 PostgreSQL。