對象存儲概述
對象是對象存儲系統中數據存儲的基本單位,每個Object是數據和數據屬性集的綜合體,數據屬性可以根據應用的需求進行設置,包括數據分布、服務質量等每個對象自我維護其屬性,從而簡化了存儲系統的管理任務對象的大小可以不同,甚至可以包含整個數據結構,如文件、數據庫表項等對象存儲系統一般是一類智能設備,它具有自己的存儲介質、處理器、內存以及網絡系統等,負責管理本地的對象,是對象存儲系統的核心
- 對象存儲(Object Storage)是無層次結構的數據存儲方法,通常用於雲計算環境中
- 不同於其他數據存儲方法,基於對象的存儲不使用目錄樹
- 數據作為單獨的對象進行存儲
- 數據並不放置在目錄層次結構中,而是存在於平面地址空間內的同一級別
- 應用通過唯一地址來識別每個單獨的數據對象
- 每個對象可包含有助於檢索的元數據
- 專為使用API在應用級別(而非用戶級別)進行訪問而設計
基本概念
雖然在設計與實現上有所區別,但大多數對象存儲系統對外呈現的核心資源類型大同小異
- Amazon S3:提供了user、bucket和object分別表示用戶、存儲桶和對象,其中bucket隸屬於user,因此user名稱即可做為bucket的名稱空間,不同用戶允許使用相同名稱的bucket
-
OpenStack Swift:提供了user、container和object分別對應於用戶、存儲桶和對象,不過它還額外為user提供了父級組件account,用於表示一個項目或租戶,因此一個account中可包含一到多個user,它們可共享使用同一組container,並為container提供名稱空間
-
RadosGW:提供了user、subuser、bucket和object,其中的user對應於S3的user,而subuser則對應於Swift的user,不過user和subuser都不支持為bucket提供名稱空間,因此,不同用戶的存儲桶也不允許同名;不過,自Jewel版本起,RadosGW引入了tenant(租戶)用於為user和bucket提供名稱空間,但它是個可選組件
-
Jewel版本之前,radosgw的所有user位於同一名稱空間,它要求所有user的ID必須惟一,並且即便是不同user的bucket也不允許使用相同的bucket ID
各pool的意義
- 當創建RGW時候默認會創建對應的池信息,不需要人為創建
認證與授權方式
S3和Swift使用了不同的認證機制
- 用戶賬號是認證(Authentication)、授權(Authorization)及存儲配額(Quota)功能的載體,RGW依賴它對RESTfulAPI進行請求認證、控制資源(存儲桶和對象等)的訪問權限並設定可用存儲空間上限
- S3主要采用的是基於訪問密鑰(access key)和私有密鑰(secret key)進行認證,RGW兼容其V2和V4兩種認證機制,其中V2認證機制支持本地認證、LDAP認證和kerberos認證三種方式,所有未能通過認證的用戶統統被視為匿名用戶
-
Swift結合Swift私有密鑰(swift key)使用令牌(token)認證方式,它支持臨時URL認證、本地認證、OpenStack Keystone認證、第三方認證和匿名認證等方式
-
通過身份認證后,RGW針對用戶的每次資源操作請求都會進行授權檢查,僅那些能夠滿足授權定義(ACL)的請求會被允許執行
- S3使用bucket acl和object acl分別來控制bucket和object的訪問控制權限,一般用於向bucket或object屬主之外的其它用戶進行授權
- Swift API中的權限控制則分為user訪問控制列表和bucket訪問控制列表兩種,前一種針對user進行設定,而后一定則專用於bucket及內部的object,且只有read和write兩種權限
RADOS網關
為了支持通用的雲存儲功能,Ceph在RADOS集群的基礎上提供了RGW(RADOS GateWay)數據抽象和管理層,它是原生兼容S3和SwiftAPI的對象存儲服務,支持數據壓縮和多站點(Multi-Site)多活機制,並支持NFS協議訪問接口等特性。RADOS網關也稱為Ceph對象網關、RADOSGW、RGW,是一種服務,使客戶端能夠利用標准對象存儲API來訪問Ceph集群。它支持S3和Swift API
- radosgw的http/https服務由內建的Civeweb提供,它同時也能支持多種主流的Web服務程序以代理的形式接收用戶請求並轉發至ceph-radosgw進程,這些Web服務程序包括nginx和haproxy等
-
rgw客戶端通過s3或者swift api使用rgw用戶進行身份驗證,S3和Swift是RESTful風格的API,它們基於http/https協議完成通信和數據交換。然后rgw網關代表用戶利用cephx與ceph存儲進行身份驗證
功能概述
RGW的功能依賴於Ceph對象網關守護進程(ceph-radosgw)實現,它負責向客戶端提供RESTAPI接口,並將數據操作請求轉換為底層RADOS存儲集群的相關操作
- 出於冗余及負載均衡的需要,一個Ceph集群上的ceph-radosgw守護進程通常不止一個,這些支撐同一對象存儲服務的守護進程聯合起來構成一個zone(區域)用於代表一個獨立的存儲服務和存儲空間
-
在容災設計的架構中,管理員會基於兩個或以上的Ceph集群定義出多個zone,這些zone之間通過同步機制實現冗余功能,並組成一個新的父級邏輯組件zonegroup
企業級部署架構
- 以下圖為生產環境常用架構方
rados網關部署步驟
- 手工開啟方式
配置Citeweb
- 自0.80版本起,Ceph放棄了基於apache和fastcgi提供radosgw服務的傳統而代之以默認嵌入在ceph-radosgw進程中的Citeweb,這種新的實現方式更加輕便和簡潔,但直到Ceph 11.0.1版本,Citeweb才開始支持SSL協議
-
Citeweb默認監聽於TCP協議的7480端口提供http服務,修改配置需要編輯ceph.conf配置文件,以如下格式進行定義
-
配置https
- 額外添加參數ssl certificate=/PATH/TO/PEM FILE
- 定義port=443s,或者port=80+443s
常用的配置項
參數選項 | 信息描述 |
---|---|
ssl_certificate | 配置默認https的證書位置開啟加密訪問(生產基本不用,因為會在前加個負載均衡器) |
access_log_ file | 定義訪問日志的路徑 |
error_log_file | 定義錯誤日志的路徑 |
num_threads | Citeweb以線程模型處理客戶端請求,它為每個連接請求分配一個專用線程,因而此參數定義了其支持的最大並發連接數,默認值為50 |
request_timeout_ms | 網絡發送與接收操作的超時時長,以ms為單位,默認值為30000,可以在必要時通過增大此值實現長連接的效果 |
- 具體的配置示例
訪問測試
curl http://servera
什么是S3存儲
S3由Amazon於2006年推出,全稱為Simple Storage Service,S3定義了對象存儲,是對象存儲事實上的標准,從某種意義上說,S3就是對象存儲,對象存儲就是S3,它對象存儲市場的霸主,后續的對象存儲都是對S3的模仿
S3的特點
- 跨區域復制
- 事件通知
- 版本控制
- 安全加密
- 訪問管理切可編程
rgw中s3的API支持
對象存儲在bucket中若要利用S3 API訪問對象,需要為RADOS網關配置用戶每個用戶具有一個access key和一個secret key。access key標識用戶,secret key驗證用戶身份
- S3服務的RESTAPI使用用戶賬號(user)、存儲桶(bucket)和對象(object)三個組件來組織存儲的數據對象,對象保存於存儲桶中,而存儲桶則支持授權給特定賬號進行讀寫及創建/刪除等操作
-
Amazon S3 API授權和身份驗證模型具有單層設計。一個用戶可以有多個access key和secret key,用於在同一帳戶中提供不同類型的訪問
-
radosgw-admin是用於管理radowgw服務的命令行接口,它有着眾多的分別用於不同管理功能的命令,例如user、subuser、key、bucket和object等
S3中的用戶管理
管理用戶密鑰
S3設置配額數
檢索用戶信息
統計數據
配置DNS實現數據傳輸
配置泛域名解析
- S3的存儲桶是用於存儲對象的容器,每個對象都必須儲存在一個特定的存儲桶中,且每個對象都要直接通過RESTfulAPI基於URL進行訪問,URL格式為
http(s)://bucket-name.radowgw-host[:port]/key"
-
例如,對於存儲在
rgw01.test.io
上的S3API對象存儲系統上eshop存儲桶中的名為images/test.ipg
的對象,可通過http://eshop.rgw01.test.io/images/test.jpg
對其進行尋址 -
因此,radosgw的S3API接口的功能強依賴於DNS的泛域名解析服務,它必須能夠正常解析任何
<bucket-name>.<radowgw-host>
格式的名稱至radosgw主機 -
另外,還需要配置每個radowgw守護進程的rgw dns name為其DNS名稱
rados網關訪問S3對象
啟用S3-api客戶端s3cmd
如果基於編程的方式過於復雜切大量重復操作所以S3為了簡化操作退出了命令行版本的客戶端
- 使用s3cmd命令之前需要事先配置其工作環境,包括指定Access Key和Secret Key,以及S3服務的訪問端點和默認的Region(Ceph的新版本中稱作zonegroup)等
- s3cmd –configure,配置的結果將保存於
~/.s3cmd.cfg
配置文件中,用戶隨后可通過編輯此文件修改配置參數,或者再次運行此配置命令為其指定新的配置信息
命令測試
Bucket常用操作
什么是Swift
openstack swift是openstack開源雲計算項目開源的對象存儲,提供了強大的擴展性、冗余和持久性
Swift特性
- 極高的數據持久性
-
完全對稱的系統架構
-
無限的可擴展性
-
無單點故障
Swift-API操作
Swift-API的上下文中,存儲桶以container表示,而非S3中的bucket,但二者在功用上類同,都是對象數據的容器,且對象存儲在容器中。Openstack Swift API的用戶模型與Amazon S3 API稍有不同。若要使用swift api通過rados網關的身份驗證,需要為rados網關用戶帳戶配置子用戶。swift有租戶概念,rados網關用戶對應swift的租戶,而子帳號則對應swift的api用戶
- Swift的用戶賬號對應於radosgw中的subuser(子用戶),它隸屬於某個事先存在的user(用戶賬號)
- 例如:Python Swiftclient是一個用於與Swift API交互的Python客戶端程序,它包含了Python API(swift 模塊)和一個命令行工具swift
Swift用戶管理
Swift客戶端
- swift客戶端不像s3客戶端一樣有本地的配置信息文件,所以沒有次操作都要帶上賬號的認證信息
-
RADOS網關支持Swift v1.0以及OpenStack keystone v2.0身份驗證
swift讀寫練習
使用openstack swift提供對象存儲
- 使用openstack swift接口創建一個可訪問ceph集群的用戶
-
使用openstack swift接口管理對象的存儲