最近工作中接觸了一個 Python + Flask 的新項目,項目中使用了 Ceph 對象存儲服務(wù)。遂在開發(fā)環(huán)境使用 Docker 搭建了一套 Ceph 集群。
Ceph 官方文檔
Ceph 介紹
Ceph 是一個開源的分布式存儲系統(tǒng),提供了對象存儲、塊存儲和文件系統(tǒng)三種存儲接口。Ceph 將數(shù)據(jù)存儲在邏輯存儲池中,使用 CRUSH 分布式算法決定如何將數(shù)據(jù)分散存儲在集群的各個節(jié)點上,以實現(xiàn)高可用性和數(shù)據(jù)冗余。本文介紹如何使用 Ceph 的對象存儲功能。
搭建 Ceph 集群至少要包括一個 MON(Monitor) 節(jié)點、一個MGR(Manager) 節(jié)點和多個 OSD(Object Storage Daemon)節(jié)點,OSD 節(jié)點數(shù)量由你要保存的數(shù)據(jù)副本數(shù)量決定,比如你要將數(shù)據(jù)集存儲三份,就需要部署至少三個 OSD 節(jié)點。
-
OSD(Object Storage Daemon):負責(zé)管理磁盤上的數(shù)據(jù)塊(數(shù)據(jù)存儲、數(shù)據(jù)復(fù)制和數(shù)據(jù)恢復(fù)等),執(zhí)行數(shù)據(jù)的讀寫操作。確保集群的高可用性,通常至少要部署三個節(jié)點。
-
MON(Monitor):負責(zé)維護 Ceph 集群的狀態(tài)信息、配置信息和映射信息,確保集群元數(shù)據(jù)的一致性,協(xié)調(diào)集群節(jié)點間數(shù)據(jù)的分布和恢復(fù)。確保集群的高可用性,通常至少要部署三個節(jié)點。
-
MDS(Metadata Server):負責(zé)管理文件系統(tǒng)的目錄結(jié)構(gòu)、文件和目錄的元數(shù)據(jù)信息,為 CephFS(Ceph的分布式文件系統(tǒng))提供元數(shù)據(jù)服務(wù)。塊存儲和對象存儲不需要部署 MDS。
-
MGR(Manager):負責(zé)收集 Ceph 集群的狀態(tài)信息(OSD、MON、MDS 的性能指標(biāo)、健康狀況等),并提供了可視化的儀表板(Ceph Dashboard)方便用戶查看。確保集群的高可用性,通常至少要部署兩個節(jié)點。
-
RGW(Rados Gateway):提供了 RESTful API,允許用戶發(fā)送 HTTP/HTTPS 請求訪問和管理存儲在 Ceph 集群中的數(shù)據(jù),支持 Amazon S3 API 和 OpenStack Swift API。
Ceph 集群搭建
部署環(huán)境
三臺網(wǎng)絡(luò)互通的 CentOS 虛擬機。
主機名稱 | 主機IP | 說明 |
---|---|---|
ceph-admin | 10.0.28.10 | osd、mon、mgr、rgw |
ceph-1 | 10.0.28.11 | osd、mon |
ceph-2 | 10.0.28.12 | osd、mon |
拉取鏡像
DockerHub 鏡像地址
# 拉取鏡像
docker pull ceph/daemon:master-7ef46af-nautilus-centos-7-x86_64
# 更改鏡像tag
docker image tag ceph/daemon:master-7ef46af-nautilus-centos-7-x86_64 ceph/daemon:latest
啟動 mon 容器
登陸到第一臺服務(wù)器(ceph-admin)。
- 創(chuàng)建掛載目錄,并賦予權(quán)限。
sudo mkdir -p "/root/ceph/etc"
sudo mkdir -p "/root/ceph/lib"
sudo mkdir -p "/root/ceph/logs"
sudo mkdir -p "/root/ceph/data;
chmod -R 777 /root/ceph
- 啟動容器。
docker run -d \
--net=host \
--name=mon \
--restart=always \
--privileged=true \
-v /root/ceph/etc:/etc/ceph \
-v /root/ceph/lib:/var/lib/ceph/ \
-v /root/ceph/logs:/var/log/ceph \
-e MON_IP=10.0.28.10,10.0.28.11,10.0.28.12 \
-e CEPH_PUBLIC_NETWORK=10.0.28.0/24 \
ceph/daemon mon
- 復(fù)制配置文件到另外兩臺服務(wù)器.
# ceph-2 10.0.28.11
scp -r /root/ceph root@10.0.28.11:/root
# ceph-3 10.0.28.12
scp -r /root/ceph root@10.0.28.12:/root
-
執(zhí)行上面的容器啟動命令,在另外兩臺服務(wù)器上啟動 mon 容器。
-
查看部署狀態(tài)。如下圖,三個 mon 節(jié)點啟動成功。
docker exec mon ceph -s
啟動 osd 容器
- 執(zhí)行如下命令,在 mon 節(jié)點生成 osd 密鑰信息,否則啟動 osd 容器會報錯。
docker exec -it mon ceph auth get client.bootstrap-osd -o /var/lib/ceph/bootstrap-osd/ceph.keyring
- 啟動容器。
docker run -d \
--net=host \
--name=osd \
--restart=always \
--privileged=true \
-v /root/ceph/etc:/etc/ceph \
-v /root/ceph/lib/:/var/lib/ceph/ \
-v /root/ceph/logs/:/var/log/ceph \
-v /root/ceph/data/osd:/var/lib/ceph/osd \
ceph/daemon osd_directory
- 查看部署狀態(tài)。如下圖,三個 osd節(jié)點啟動成功。
啟動 mds 容器
docker run -d \
--net=host \
--name mds \
--restart=always \
--privileged=true \
-v /root/baseService/ceph/etc:/etc/ceph \
-v /root/baseService/ceph/lib:/var/lib/ceph/ \
-v /root/baseService/ceph/logs:/var/log/ceph \
-e CEPHFS_CREATE=0 \
-e CEPHFS_METADATA_POOL_PG=512 \
-e CEPHFS_DATA_POOL_PG=512 \
ceph/daemon mds
# CEPHFS_CREATE 是為METADATA服務(wù)生成文件系統(tǒng), 0表示不自動創(chuàng)建文件系統(tǒng)(默認值), 1表示自動創(chuàng)建。
# CEPHFS_DATA_POOL_PG是數(shù)據(jù)池的數(shù)量,默認為8。
# CEPHFS_METADATA_POOL_PG是元數(shù)據(jù)池的數(shù)量,默認為8。
啟動 rgw 容器
- 執(zhí)行如下命令,在 mon 節(jié)點生成 rgw密鑰信息,否則啟動 rgw容器會報錯。
docker exec mon ceph auth get client.bootstrap-rgw -o /var/lib/ceph/bootstrap-rgw/ceph.keyring
- 啟動容器。
docker run -d \
--net=host \
--name rgw \
--restart=always \
-p 7480:80 \
-v /root/ceph/etc:/etc/ceph \
-v /root/ceph/lib:/var/lib/ceph/ \
-v /root/ceph/logs:/var/log/ceph \
ceph/daemon rgw
啟動 mgr 容器
- 啟動容器。
docker run -d --net=host \
--name=mgr \
--restart=always \
-v /root/ceph/etc:/etc/ceph \
-v /root/ceph/lib:/var/lib/ceph \
-v /root/ceph/logs:/var/log/ceph \
ceph/daemon mgr
- 查看部署狀態(tài)。如下圖,至此,Ceph 集群節(jié)點全部啟動成功。
安裝 Dashboard 管理后臺
- 開啟 Dashboard 功能。
docker exec mgr ceph mgr module enable dashboard
- 創(chuàng)建證書。
docker exec mgr ceph dashboard create-self-signed-cert
- 創(chuàng)建登陸用戶名和密碼。
docker exec mgr ceph dashboard set-login-credentials cephAdmin cephPassword
- 配置外部訪問端口。
docker exec mgr ceph config set mgr mgr/dashboard/server_port 7800
- 配置外部訪問 ip。
docker exec mgr ceph config set mgr mgr/dashboard/server_addr 10.0.28.10
- 關(guān)閉 HTTPS(如果沒有證書或內(nèi)網(wǎng)使用,可以關(guān)閉)。
docker exec mgr ceph config set mgr mgr/dashboard/ssl false
- 重啟
mgr
服務(wù)。
docker restart mgr
- 查看 Dashboard 服務(wù)信息。
docker exec mgr ceph mgr services
- 瀏覽器訪問 Dashboard 管理頁面。
問題
- osd 容器啟動失敗。
error connecting to the cluster
、does not generate config
。執(zhí)行如下命令解決。
docker exec -it mon ceph auth get client.bootstrap-osd -o /var/lib/ceph/bootstrap-osd/ceph.keyring
- rgw 容器啟動失敗。
ERROR- /var/lib/ceph/bootstrap-rgw/ceph.keyring must exist
執(zhí)行如下命令解決。
docker exec mon ceph auth get client.bootstrap-rgw -o /var/lib/ceph/bootstrap-rgw/ceph.keyring
- 服務(wù)器重啟后,mon 節(jié)點重啟失敗。
Existing mon, trying to rejoin cluster
。修改 mon 的啟動腳本解決。
- 將 mon 容器內(nèi)的啟動腳本復(fù)制到宿主機中。
docker cp mon:/opt/ceph-container/bin/start_mon.sh .
- 修改啟動腳本。
# 找到如下代碼,注釋掉
v2v1=$(ceph-conf -c /etc/ceph/${CLUSTER}.conf 'mon host' | tr ',' '\n' | grep -c ${MON_IP})
# 替換為如下代碼
v2v1=2
- 將修改后的啟動腳本再復(fù)制到容器中。
docker cp start_mon.sh mon:/opt/ceph-container/bin/start_mon.sh
- 重新啟動 mon 容器。
docker restart mon
- 容器正常啟動,但出現(xiàn)如下錯誤日志,執(zhí)行
docker exec mon ceph -s
命令無響應(yīng)。因為部署了三個 mon 節(jié)點,只要再啟動其他兩個 mon 節(jié)點即可恢復(fù)正常響應(yīng)。
末尾
如果本文對你有幫助的話,歡迎 點贊 + 收藏 ,非常感謝!文章來源:http://www.zghlxwxcb.cn/news/detail-851663.html
我是 Cleaner,我們下期再見~文章來源地址http://www.zghlxwxcb.cn/news/detail-851663.html
到了這里,關(guān)于使用 Docker 部署分布式存儲系統(tǒng)——Ceph的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!