大多數 Ceph 用戶不會直接往 Ceph 存儲集群里存儲對象,他們通常會使用 Ceph 塊設備、 Ceph 文件系統、或 Ceph 對象存儲這三大功能中的一個或多個。
前提條件
先完成存儲集群快速入門 ,並確保 Ceph 存儲集群處於 active + clean 狀態,這樣才能使用 Ceph 塊設備。
塊設備快速入門
Ceph 塊設備也叫 RBD 或 RADOS 塊設備。
可以在虛擬機上運行 ceph-client 節點,但是不能在與 Ceph 存儲集群(除非它們也用 VM )相同的物理節點上執行下列步驟。
這里采用新添加一台主機來操作,還需要進行預檢工作,具體查看網址:https://www.cnblogs.com/sanduzxcvbnm/p/15080342.html
添加hosts解析,ntp時間同步,升級內核版本,普通用戶免登錄,關閉卸載firewalld,關閉selinux
主機名是:ceph-clinet,ip是:10.16.16.114
安裝 Ceph
1.確認你使用了合適的內核版本,詳情見操作系統推薦(http://docs.ceph.org.cn/start/os-recommendations),查看ceph-client主機
lsb_release -a
uname -r
2.在管理節點上,通過 ceph-deploy 把 Ceph 安裝到 ceph-client 節點 (ceph-deploy主機上操作)
$ cd my_cluster
$ ceph-deploy install ceph-client
3.在管理節點上,用 ceph-deploy 把 Ceph 配置文件和 ceph.client.admin.keyring 拷貝到 ceph-client (ceph-deploy主機上操作)
$ ceph-deploy admin ceph-client
ceph-deploy 工具會把密鑰環復制到ceph-client主機的 /etc/ceph
目錄,要確保此密鑰環文件有讀權限(如 sudo chmod +r /etc/ceph/ceph.client.admin.keyring )。
# 在ceph-client主機上操作
$ sudo chmod +r /etc/ceph/ceph.client.admin.keyring
配置塊設備
1.在 ceph-client 節點上創建一個塊設備 image (ceph-client主機上操作)
# 前提條件,已經創建名為rbd的pool,具體查看:https://www.cnblogs.com/sanduzxcvbnm/p/15625374.html
# 命令示例: rbd create foo --size 4096 [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring]
$ rbd create foo --size 4096 -m node1 -k /etc/ceph/ceph.client.admin.keyring
2.在 ceph-client 節點上,把 image 映射為塊設備 (ceph-client主機上操作)
# 命令示例: sudo rbd map foo --name client.admin [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring]
$ sudo rbd map foo --name client.admin -m node1 -k /etc/ceph/ceph.client.admin.keyring
/dev/rbd0
3.在 ceph-client 節點上,創建文件系統后就可以使用塊設備了,此命令可能耗時較長 (ceph-client主機上操作)
# 命令示例: sudo mkfs.ext4 -m0 /dev/rbd/rbd/foo
$ sudo mkfs.ext4 -m0 /dev/rbd0
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: 完成
文件系統標簽=
OS type: Linux
塊大小=4096 (log=2)
分塊大小=4096 (log=2)
Stride=16 blocks, Stripe width=16 blocks
262144 inodes, 1048576 blocks
0 blocks (0.00%) reserved for the super user
第一個數據塊=0
Maximum filesystem blocks=1073741824
32 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Allocating group tables: 完成
正在寫入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
4.在 ceph-client 節點上掛載此文件系統 (ceph-client主機上操作)
$ sudo mkdir /mnt/ceph-block-device
$ sudo mount /dev/rbd0 /mnt/ceph-block-device
$ cd /mnt/ceph-block-device
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
rbd0 251:0 0 4G 0 disk /mnt/ceph-block-device
有個疑問,使用的pool,創建命令是:ceph osd pool create rbd 128 128
這里創建塊設備后的大小是4G,有待進一步研究。
問題
此時查看ceph狀態,會發現有提示:application not enabled on 1 pool(s)
$ ceph -s
cluster:
id: cbbcd33f-95c1-438b-90b7-d57f9ca5835f
health: HEALTH_WARN
application not enabled on 1 pool(s)
services:
mon: 3 daemons, quorum node1,node2,node3
mgr: node1(active)
osd: 3 osds: 3 up, 3 in
rgw: 1 daemon active
data:
pools: 5 pools, 160 pgs
objects: 267 objects, 138 MiB
usage: 3.4 GiB used, 57 GiB / 60 GiB avail
pgs: 160 active+clean
查看錯誤詳情
$ ceph health detail
HEALTH_WARN application not enabled on 1 pool(s)
POOL_APP_NOT_ENABLED application not enabled on 1 pool(s)
application not enabled on pool 'rbd'
use 'ceph osd pool application enable <pool-name> <app-name>', where <app-name> is 'cephfs', 'rbd', 'rgw', or freeform for custom applications.
通過查看錯誤詳情,可知解決辦法如下:
# 第一個rbd是pool-name,第二個rbd是app-name,其中app-name只能是'cephfs', 'rbd', 'rgw'中的一個
$ ceph osd pool application enable rbd rbd
enabled application 'rbd' on pool 'rbd'
$ ceph -s
cluster:
id: cbbcd33f-95c1-438b-90b7-d57f9ca5835f
health: HEALTH_OK
services:
mon: 3 daemons, quorum node1,node2,node3
mgr: node1(active)
osd: 3 osds: 3 up, 3 in
rgw: 1 daemon active
data:
pools: 5 pools, 160 pgs
objects: 267 objects, 138 MiB
usage: 3.4 GiB used, 57 GiB / 60 GiB avail
pgs: 160 active+clean
Ceph 文件系統快速入門
准備工作
1.確認你使用了合適的內核版本,詳情見操作系統推薦(http://docs.ceph.org.cn/start/os-recommendations) (ceph-client主機上操作)
lsb_release -a
uname -r
2.在管理節點上,通過 ceph-deploy 把 Ceph 安裝到 ceph-client 節點 (ceph-deploy主機上操作)
$ cd my_cluster
$ ceph-deploy install ceph-client
3.確保 Ceph 存儲集群在運行,且處於 active + clean 狀態。同時,確保至少有一個 Ceph 元數據服務器在運行
# 命令示例:ceph -s [-m {monitor-ip-address}] [-k {path/to/ceph.client.admin.keyring}]
# 因為元數據服務器mds在node1主機上 (ceph-client主機上操作)
$ ceph -s -m node1 -k /etc/ceph/ceph.client.admin.keyring
cluster:
id: cbbcd33f-95c1-438b-90b7-d57f9ca5835f
health: HEALTH_OK
services:
mon: 3 daemons, quorum node1,node2,node3
mgr: node1(active)
osd: 3 osds: 3 up, 3 in
rgw: 1 daemon active
data:
pools: 5 pools, 160 pgs
objects: 267 objects, 138 MiB
usage: 3.4 GiB used, 57 GiB / 60 GiB avail
pgs: 160 active+clean
創建文件系統
雖然已創建了元數據服務器,但如果你沒有創建存儲池和文件系統,它是不會變為活動狀態的。(http://docs.ceph.org.cn/cephfs/createfs/)
# 命令示例:ceph osd pool create cephfs_data <pg_num>
# 命令示例:ceph osd pool create cephfs_metadata <pg_num>
# 命令示例:ceph fs new <fs_name> cephfs_metadata cephfs_data
# 一個 Ceph 文件系統需要至少兩個 RADOS 存儲池,一個用於數據、一個用於元數據 (ceph-client主機上操作)
$ ceph osd pool create cephfs_data 32 32
pool 'cephfs_data' created
$ ceph osd pool create cephfs_metadata 32 32
pool 'cephfs_metadata' created
$ ceph fs new cephfs cephfs_metadata cephfs_data
new fs with metadata pool 8 and data pool 9
文件系統創建完畢后, MDS 服務器就能達到 active 狀態了,比如在一個單 MDS 系統中:(ceph-client主機上操作)
$ ceph mds stat
cephfs-1/1/1 up {0=node1=up:active}
建好文件系統且 MDS 活躍后,你就可以掛載此文件系統了.
創建密鑰文件
Ceph 存儲集群默認啟用認證,你應該有個包含密鑰的配置文件(但不是密鑰環本身)。用下述方法獲取某一用戶的密鑰: (ceph-client主機上操作)
1.在密鑰環文件中找到與某用戶對應的密鑰,例如:
$ cat /etc/ceph/ceph.client.admin.keyring
2.找到用於掛載 Ceph 文件系統的用戶,復制其密鑰。大概看起來如下所示:
[client.admin]
key = AQCj2YpRiAe6CxAA7/ETt7Hcl9IyxyYciVs47w==
3.打開文本編輯器
4.把密鑰粘帖進去,大概像這樣:
AQCj2YpRiAe6CxAA7/ETt7Hcl9IyxyYciVs47w==
5.保存文件,並把其用戶名 name 作為一個屬性(如 admin.secret )。
$ echo "AQCj2YpRiAe6CxAA7/ETt7Hcl9IyxyYciVs47w==" >> admin.secret
6.確保此文件對用戶有合適的權限,但對其他用戶不可見。
內核驅動
把 Ceph FS 掛載為內核驅動。
# 命令示例:sudo mkdir /mnt/mycephfs
# 命令示例:sudo mount -t ceph {ip-address-of-monitor}:6789:/ /mnt/mycephfs
Ceph 存儲集群默認需要認證,所以掛載時需要指定用戶名 name 和創建密鑰文件一節中創建的密鑰文件 secretfile ,例如:(ceph-client主機上操作)
# 命令示例:sudo mount -t ceph 192.168.0.1:6789:/ /mnt/mycephfs -o name=admin,secretfile=admin.secret
$ sudo mount -t ceph node1:6789:/ /mnt/mycephfs -o name=admin,secretfile=admin.secret
$ mount -l
10.16.16.111:6789:/ on /mnt/mycephfs type ceph (rw,relatime,name=admin,secret=<hidden>,acl)
從管理節點而非服務器節點掛載 Ceph FS 文件系統
用戶空間文件系統( FUSE )
注:找不到ceph-fuse命令,這一步暫時不做
把 Ceph FS 掛載為用戶空間文件系統( FUSE )
# 命令示例:sudo mkdir ~/mycephfs
# 命令示例:ceph-fuse -m node1:6789 ~/mycephfs
# Ceph 存儲集群默認要求認證,需指定相應的密鑰環文件,除非它在默認位置(即 /etc/ceph ):
# 命令示例:sudo ceph-fuse -k ./ceph.client.admin.keyring -m 192.168.0.1:6789 ~/mycephfs
Ceph 對象存儲快速入門
從 firefly(v0.80)起,Ceph 存儲集群顯著地簡化了 Ceph 對象網關的安裝和配置。網關守護進程內嵌了 Civetweb,無需額外安裝 web 服務器或配置 FastCGI。此外,可以直接 使用 ceph-deploy 來安裝網關軟件包、生成密鑰、配置數據目錄以及創建一個網關實例。
Civetweb 默認使用 7480 端口。要么直接打開 7480 端口,要么在你的 Ceph 配置文件中設置首選端口(例如 80 端口)。
安裝 Ceph 對象網關
1.在 client-node 上執行預安裝步驟。如果你打算使用 Civetweb 的默認端口 7480 ,必須通過 firewall-cmd 或 iptables 來打開它.
2.從管理節點的工作目錄,在 client-node 上安裝 Ceph 對象網關軟件包。例如:
# 命令示例:ceph-deploy install --rgw <client-node> [<client-node> ...]
$ ceph-deploy install --rgw ceph-client
新建 Ceph 對象網關實例
從管理節點的工作目錄,在 client-node 上新建一個 Ceph 對象網關實例。例如:
$ ceph-deploy rgw create ceph-client
一旦網關開始運行,你就可以通過 7480 端口來訪問它(比如 http://ceph-client:7480 )。
配置 Ceph 對象網關實例
這一步相當於是修改訪問的端口號,從默認的7480換成80
1.通過修改 Ceph 配置文件可以更改默認端口(比如改成 80 )。增加名為 [client.rgw.<client-node>]
的小節,把 <client-node>
替換成你自己 Ceph 客戶端節點的短名稱(即 hostname -s
的輸出)。例如,你的節點名就是 client-node ,在 [global]
節后增加一個類似於下面的小節:
# 命令示例
[client.rgw.client-node]
rgw_frontends = "civetweb port=80"
實際情況
[client.rgw.ceph-client]
rgw_frontends = "civetweb port=80"
確保在 rgw_frontends 鍵值對的 port=
中沒有空格。
如果你打算使用 80 端口,確保 Apache 服務器沒有在使用該端口,否則會和 Civetweb 沖突。出現這種情況時我們建議移除 Apache 服務。
$ ceph-deploy --overwrite-conf config push node1 node2 node3
2.為了使新端口的設置生效,需要重啟 Ceph 對象網關。在 RHEL 7 和 Fedora 上 ,執行:
# 示例命令:sudo systemctl restart ceph-radosgw.service
$ sudo systemctl restart ceph-radosgw.service
3.最后,檢查節點的防火牆,確保你所選用的端口(例如 80 端口)處於開放狀態。如果沒有,把該端口加入放行規則並重載防火牆的配置。例如:
sudo firewall-cmd --list-all sudo firewall-cmd --zone=public --add-port
80/tcp --permanent
sudo firewall-cmd --reload
你應該可以生成一個未授權的請求,並收到應答。例如,一個如下不帶參數的請求:
http://<client-node>:80
應該收到這樣的應答:
<ListAllMyBucketsResult>
<Owner>
<ID>anonymous</ID>
<DisplayName/>
</Owner>
<Buckets/>
</ListAllMyBucketsResult>