Ceph RADOS Gateway安裝,你學(xué)會(huì)了嗎?
什么是對象存儲
對象存儲以獨(dú)立的對象的形式管理數(shù)據(jù),而不是傳統(tǒng)的文件層次結(jié)構(gòu)或塊存儲的形式。每個(gè)對象包括數(shù)據(jù)、元數(shù)據(jù)和唯一標(biāo)識符。元數(shù)據(jù)是描述數(shù)據(jù)的信息,比如創(chuàng)建日期、類型和其他相關(guān)信息。
主要用于非結(jié)構(gòu)化數(shù)據(jù),例如多媒體內(nèi)容、備份數(shù)據(jù)、分析數(shù)據(jù)等,以及任何需要大規(guī)模、易于訪問和經(jīng)濟(jì)有效的數(shù)據(jù)存儲的應(yīng)用。Amazon S3、Google Cloud Storage 和 OpenStack Swift 是一些常見的公有云對象存儲服務(wù)。在私有云或本地環(huán)境中,Ceph 和 MinIO 是兩個(gè)常見的對象存儲系統(tǒng)。
與文件存儲不同,對象存儲不使用目錄樹結(jié)構(gòu)。它把所有的數(shù)據(jù)都看作是對象,每個(gè)對象都由一個(gè)唯一的 ID 標(biāo)識。對象包括數(shù)據(jù)本身,以及描述數(shù)據(jù)的元數(shù)據(jù),還有一個(gè)全局唯一的 ID。
對象存儲的優(yōu)勢在于其擴(kuò)展性和可訪問性。對象存儲是為大規(guī)模數(shù)據(jù)設(shè)計(jì)的,它能夠很好地處理大量非結(jié)構(gòu)化數(shù)據(jù)。對象可以跨多個(gè)服務(wù)器或地理區(qū)域分散存儲,提供了高度的冗余和可用性。對象存儲通常通過 RESTful API 訪問,這使得它可以通過網(wǎng)絡(luò)從任何地方訪問,而且開發(fā)者可以輕松地集成到應(yīng)用程序中。
總結(jié)起來,文件存儲更適合于需要文件級別操作和低延遲訪問的傳統(tǒng)應(yīng)用,而對象存儲則適合于大規(guī)模、非結(jié)構(gòu)化數(shù)據(jù)的存儲和云環(huán)境。
對象存儲的桶概念
在對象存儲系統(tǒng)中,"桶"(Bucket)是一種容器,用于組織和管理存儲的對象。每個(gè)桶都有一個(gè)唯一的名稱,用于區(qū)分存儲在同一對象存儲系統(tǒng)中的其他桶。你可以將桶看作是一個(gè)邏輯上的存儲區(qū)域,可以在其中存儲、列舉和刪除對象。
對象存儲系統(tǒng)的用戶可以創(chuàng)建一個(gè)或多個(gè)桶,并將對象上傳到這些桶中。每個(gè)對象都有一個(gè)與其所在桶相關(guān)聯(lián)的唯一鍵,可以用這個(gè)鍵在桶中定位對象。
這里需要注意的是,桶并不等同于傳統(tǒng)文件系統(tǒng)的文件夾。在文件系統(tǒng)中,文件夾可以嵌套,形成一個(gè)層級結(jié)構(gòu),但在對象存儲中,桶并不能嵌套。每個(gè)桶都是平等且獨(dú)立的,它們只是一種組織對象的方式。
另外,每個(gè)桶可以有其自己的配置,如訪問權(quán)限和生命周期管理規(guī)則。例如,你可以為一個(gè)桶設(shè)置公共讀取權(quán)限,而另一個(gè)桶則設(shè)置為私有?;蛘?,你可以為一個(gè)桶設(shè)置一個(gè)規(guī)則,自動(dòng)刪除超過一定期限的對象。這為管理和控制存儲的數(shù)據(jù)提供了靈活性。
例如,Amazon S3、Google Cloud Storage 和 Ceph RGW 都使用了桶的概念。你可以通過這些服務(wù)的 API 或工具創(chuàng)建桶,上傳對象到桶,從桶下載對象,列舉桶中的對象,以及管理桶的配置。
什么是RGW
RGW是RADOS Gateway的簡稱,是一套基于LIBRADOS接口封裝而實(shí)現(xiàn)的FastCGI服務(wù),對外提供基于 HTTP 的RESTful風(fēng)格的對象存儲數(shù)據(jù)訪問和管理接口,使得 Ceph 存儲集群可以像對象存儲系統(tǒng)一樣使用。
RGW 支持兩種主要的對象存儲 API:Amazon S3 兼容的 API 和 OpenStack Swift 兼容的 API。這使得可以使用許多已經(jīng)存在的 S3 或 Swift 工具和庫來訪問 Ceph 存儲。RGW 的主要功能包括:
- 提供 S3 或 Swift 兼容的 API,使得你可以在 Ceph 上存儲和檢索數(shù)據(jù),而不需要知道底層的 RADOS 協(xié)議。
 - 支持多種訪問控制機(jī)制,包括 S3 風(fēng)格的 ACL(Access Control Lists)和 Swift 風(fēng)格的訪問控制。
 - 提供數(shù)據(jù)冗余和復(fù)制,確保數(shù)據(jù)的可靠性和持久性。
 - 支持大規(guī)模的數(shù)據(jù)存儲,你可以存儲幾乎無限數(shù)量的對象。
 - 支持多租戶環(huán)境,可以在同一 Ceph 集群中為不同的用戶或組織提供隔離的存儲空間。
 
因此,如果需要在 Ceph 存儲集群中使用對象存儲,或者你需要與 S3 或 Swift 兼容的存儲,那么 RGW 就會(huì)是一個(gè)很好的選擇。
安裝ceph RADOS Gateway
在線方式安裝
sudo apt install ceph-radosgw離線安裝
在聯(lián)網(wǎng)環(huán)境下安裝 apt-rdepends:
sudo apt-get update
sudo apt-get install apt-rdependsapt-rdepends 是一個(gè)工具,可以列出一個(gè)包及其所有遞歸依賴的包。使用 apt-rdepends 列出 radosgw 及其所有依賴的包:
apt-rdepends radosgw | grep -v "^ " > packages.txt這會(huì)生成一個(gè)名為 packages.txt 的文件,包含 radosgw 及其所有依賴的包的名稱。使用 apt-get download 下載這些包
mkdir packages
cd packages
xargs -a ../packages.txt apt-get download這會(huì)在 packages 目錄下下載 radosgw 及其所有依賴的包。
- 將下載的包拷貝到離線的環(huán)境中:
 
tar -zcvf ceph_radosgw.tar.gz packages
離線環(huán)境解壓安裝
tar -zxvf ceph_radosgw.tar.gz packages
cd packages
dpkg -i *.deb配置ceph rados gateway
編輯 /etc/ceph/ceph.conf 文件以添加 client.rgw 部分,下面可以添加多個(gè)rgw主機(jī),這樣,每個(gè) RGW 實(shí)例都有自己的配置,并且都可以被獨(dú)立地啟動(dòng)和停止。這種方式可以提高系統(tǒng)的可用性和容錯(cuò)能力,因?yàn)榧词挂粋€(gè) RGW 實(shí)例出現(xiàn)問題,其他的實(shí)例仍然可以繼續(xù)提供服務(wù)。
[client.rgw.node1]
host = node1
rgw_frontends = "civetweb port=80"
[client.rgw.node2]
host = node2
rgw_frontends = "civetweb port=80"創(chuàng)建keyring
創(chuàng)建 keyring 文件:使用 ceph-authtool 命令來創(chuàng)建 keyring 文件,然后使用 chown 命令來更改文件的所有者為 ceph 用戶。
sudo mkdir -p /var/lib/ceph/radosgw/ceph-rgw.`hostname`/
sudo ceph-authtool /var/lib/ceph/radosgw/ceph-rgw.`hostname`/keyring --create-keyring --gen-key -n client.rgw.`hostname`
sudo chown ceph:ceph /var/lib/ceph/radosgw/ceph-rgw.`hostname`/keyring添加 keyring 到 Ceph 集群:你需要將新創(chuàng)建的 keyring 添加到你的 Ceph 集群中。
sudo ceph auth add client.rgw.`hostname` osd 'allow rwx' mon 'allow rwx' -i /var/lib/ceph/radosgw/ceph-rgw.`hostname`/keyring重啟ceph rados gateway
sudo systemctl start ceph-radosgw@rgw.`hostname`創(chuàng)建rgw 數(shù)據(jù)池
創(chuàng)建數(shù)據(jù)池以供 RGW 使用。在命令行中運(yùn)行 ceph 命令以創(chuàng)建所需的池。
ceph osd pool create .rgw.root 64
ceph osd pool create default.rgw.control 64
ceph osd pool create default.rgw.data.root 64
ceph osd pool create default.rgw.gc 64
ceph osd pool create default.rgw.log 64
ceph osd pool create default.rgw.users.uid 64
ceph osd pool create default.rgw.users.email 64
ceph osd pool create default.rgw.users.swift 64
ceph osd pool create default.rgw.buckets.index 64
ceph osd pool create default.rgw.buckets.data 64解釋下上面創(chuàng)建的數(shù)據(jù)池的作用
- .rgw.root:存儲 RGW 的配置信息和元數(shù)據(jù),例如區(qū)域和區(qū)域組的定義。
 - default.rgw.control:用于 RGW 控制數(shù)據(jù)。
 - default.rgw.data.root:默認(rèn)情況下,新創(chuàng)建的 RGW bucket 的元數(shù)據(jù)會(huì)存儲在這個(gè)池中。
 - default.rgw.gc:用于存儲將被垃圾收集器清理的對象列表。
 - default.rgw.log:用于記錄 RGW 的訪問日志。
 - default.rgw.users.uid、default.rgw.users.email、default.rgw.users.swift:存儲不同類型的用戶信息。
 - default.rgw.buckets.index:存儲每個(gè) bucket 的索引信息,用于快速查找和訪問 bucket 中的對象。
 - default.rgw.buckets.data:默認(rèn)情況下,新創(chuàng)建的 RGW bucket 的對象數(shù)據(jù)會(huì)存儲在這個(gè)池中。
 
在執(zhí)行上面操作中可能會(huì)報(bào)如下錯(cuò)誤
pg_num 64 size 3 would mean 771 total pgs, which exceeds max 750 (mon_max_pg_per_osd 250 * num_in_osds 3新創(chuàng)建的 placement groups(PG)數(shù)量超過了 Ceph 集群的限制。Ceph 集群設(shè)置了每個(gè) OSD 可以支持的最大 PG 數(shù)量,這是通過參數(shù) mon_max_pg_per_osd 來控制的。
mon_max_pg_per_osd 的值被設(shè)置為了 250,而此時(shí)的集群中有 3 個(gè) OSDs,因此,集群總共可以支持 250 * 3 = 750 個(gè) PGs?,F(xiàn)在嘗試創(chuàng)建的 PG 數(shù)量為 64 * 3 = 192 個(gè)(因?yàn)?size 參數(shù)設(shè)置為 3,每個(gè) PG 都會(huì)有兩個(gè)副本),加上集群中已經(jīng)存在的 PG 數(shù)量,總數(shù)超過了 750。可以采取以下幾種策略來解決這個(gè)問題:
- 增加 mon_max_pg_per_osd 的值:這將增加每個(gè) OSD 支持的 PG 數(shù)量,從而增加集群總體可以支持的 PG 數(shù)量。但是過多的 PGs 可能會(huì)消耗更多的內(nèi)存和 CPU 資源,可能導(dǎo)致性能下降。
 
ceph config set global mon_max_pg_per_osd 300
查看當(dāng)前osd可以支持的最大pg數(shù)
ceph config get mon mon_max_pg_per_osd- 添加更多的 OSDs:通過增加 OSD 的數(shù)量,增加集群總體可以支持的 PG 數(shù)量。
 - 減小 pg_num 的值:降低 pg_num 的值可以減少新創(chuàng)建的 PG 數(shù)量,從而使得總 PG 數(shù)量不超過限制。但是,pg_num 的值應(yīng)該根據(jù)你的數(shù)據(jù)分布和性能需求來設(shè)置,過小的 pg_num 可能會(huì)導(dǎo)致數(shù)據(jù)分布不均,性能下降。
 
使用radosgw-admin 命令行工具來創(chuàng)建用戶
radosgw-admin user create --uid="wanger" --display-name="wanger"創(chuàng)建完成后需要保存好access_key和secret_key,后面配置 S3 客戶端和其他工具會(huì)用到

在 Ceph RADOS Gateway (RGW) 中,可以使用 S3 兼容的客戶端工具(例如 AWS CLI、s3cmd、boto3 等)或者 librgw API 來上傳數(shù)據(jù)。下面以awscli為例進(jìn)行實(shí)驗(yàn)
- 安裝 AWS CLI
 
apt-get install awscli- 配置 AWS CLI:運(yùn)行 aws configure 命令來配置 S3 客戶端。需要提供訪問密鑰、安全密鑰、默認(rèn)區(qū)域名稱(可以設(shè)置為 us-east-1),以及默認(rèn)輸出格式(可以設(shè)置為 json)。
 
aws configure將訪問密鑰和安全密鑰設(shè)置為你在 RGW 中創(chuàng)建的用戶的密鑰。
- 創(chuàng)建bucket:使用aws s3api create-bucket命令來創(chuàng)建新的bucket。例如:
 
aws s3api create-bucket --bucket mybucket --endpoint-url http://node1- 上傳數(shù)據(jù):使用 aws s3 cp 命令來上傳文件到 bucket。例如:
 
aws s3 cp myfile.txt s3://mybucket/myfile.txt --endpoint-url http://node1- 列出 bucket 中的文件:使用 aws s3 ls 命令來列出 bucket 中的所有文件。例如:
 
aws s3api head-object --bucket mybucket --key myfile.txt --endpoint-url http://node1- 刪除文件:使用 aws s3 rm 命令來刪除 bucket 中的文件。例如:
 
aws s3 rm s3://mybucket/myfile.txt --endpoint--url http://node1














 
 
 


















 
 
 
 