1. 程式人生 > 其它 >Ceph教程-Ceph儲存(八)RadosGW詳解

Ceph教程-Ceph儲存(八)RadosGW詳解

目錄 [隱藏]

簡介

RadosGW通常作為物件儲存(Object Storage)使用,型別於阿里雲OSS。物件儲存通常資料於同一平面,一般用於雲端計算環境中。每一條資料都作為單獨的物件儲存,擁有唯一的地址來識別資料物件,專為使用在API應用級別進行訪問而設計。另外物件儲存中的物件通常不需要再修改,如果需要修改只能下載下來修改再重新上傳,無法直接修改。

一般來說,一個物件儲存的核心資源有使用者(User)、儲存桶(Bucket)和物件(Object)。三者的關係是對使用者將物件儲存到儲存系統上的儲存桶,儲存桶屬於某個使用者並可以容納物件,一個使用者可以擁有多個儲存桶,而一個儲存桶用於儲存多個物件。大多數物件儲存的核心資源型別大同小異,如亞馬遜S3、OpenStack Swift與RadosGW。這其中S3與Swift互不相容,而RadosGW相容S3與Swift。

RadosGW為了相容S3與Swift,Ceph在RadosGW叢集的基礎上提供了RGW(RadosGateWay)資料抽象層和管理層,它可以原生相容S3和Swift的API。S3和Swift它們可基於http或https完成資料交換,由RadosGW內建的Civeweb提供服務。它還可以支援主流的Web伺服器程式以代理的形式接收使用者請求,再轉發至RadosGW程序,這些代理伺服器包括nginx、haproxy等。          RGW的功能依賴於物件閘道器守護程序實現,負責向客戶端提供REST API介面。出於冗餘負載均衡的需求,一個Ceph叢集上通常不止一個RadosGW守護程序。在雲端計算機環境中還會在多個Ceph叢集中定義出多個Zone,這些Zone之間通過同步實現冗餘功能,在本地環境中通常不需要Zone。

關於Civeweb

RadosGW守護程序內部就由Civeweb實現,通過對Civeweb的配置可以完成對RadosGW的基本管理。

服務管理

服的名格式為: ceph-radosgw@rgw.<rgw node name> ,如。

~]$ systemctl restart [email protected]

更改監聽埠

Civeweb預設監聽在7480埠並提供http協議,如果需要修改配置需要編輯ceph.conf配置檔案,在管理節點編輯ceph.conf,新增如下配置。

[client.rgw.ceph-storage-1]
rgw_host = ceph-storage-1
rgw_frontends = "civetweb port=8080 num_threads=500 request_timeout_ms=60000"

RadosGW也作為一個客戶端,所以配置項應該為[client.rgw.ceph-storage-1],其中client代表客戶端配置,RadosGW客戶端配置,而最後ceph-storage-1代表對某一個節點的RadosGW配置。

  • rgw_host:對應的RadosGW名稱或者IP地址。
  • rgw_frontends:這裡配置監聽的埠,是否使用https,以即一些選項資訊。

常用的rgw_frontends配置選項有。

  • num_threads:最大併發連線數,預設為50,根據需求調整,通常在生產叢集環境中此值應該更大。
  • request_timeout_ms:傳送與接收超時時長,以ms為單位,預設為30000。
  • access_log_file:訪問日誌路徑,預設為空。
  • error_log_file:錯誤日誌路徑,預設為空。

注意:ceph.conf配置檔案一般應該修改管理節點的配置檔案,然後由管理節點統一推送到指定的節點。也可以直接修改對應的節點的檔案,無論以何種方式修改完成後都需要重啟對應的RadosGW服務。通過管理節推送配置檔案的命令如下。

~]$ ceph-deploy --overwrite-conf config  push ceph-storage-1
  • --overwrite-conf:表示強制覆蓋,如果修改了管理節點的ceph.conf配置檔案後,這樣管理節點與被推送的節點的配置檔案不一致,這時候如果確認沒有問題就需要強制覆蓋。

HTTPS配置

首先需要生成證書,CA簽名證書或者自簽證書都可以,測試使用這裡生成自簽名證書即可。

1. 生成私鑰。

~]$ openssl genrsa -out civetweb.key 2048

2. 生成公鑰。

~]$ openssl req -new -x509 -key civetweb.key -out civetweb.crt -days 3650 -subj "/CN=oss.gogen.cn"

3. 將生成的證書合併為pem。

~]$ cat civetweb.key civetweb.crt > civetweb.pem

4. 修改ceph.conf配置檔案,指定配置如下。

[client.rgw.ceph-storage-1]
rgw_host = ceph-storage-1
rgw_frontends = "civetweb port=443s ssl_certificate=/etc/ceph/civetweb.pem num_threads=500 request_timeout_ms=60000"
rgw_dns_name = oss.gogen.cn
  • port:如果是https埠,需要在埠後面加一個s。
  • ssl_certificate:指定證書的路徑。
  • rgw_dns_name:如果使用域名,這裡需要指定域名。

還可以同時開啟http+https,將port指定為如下配置。

rgw_frontends = "civetweb port=80+443s ssl_certificate=/etc/ceph/civetweb.pem num_threads=500 request_timeout_ms=60000"

5. 驗證,如果是http+https那麼兩個協議都可以訪問,正常返回結果如下。

配置泛域名解析

通常每個物件都是儲存在特定的儲存桶之中,而每個物件都要直接通過REST API基於URL進行訪問,URL的格式為: http(s)://bucket-name.domain-name:port/path/to/object。以本實驗為例,如果bucket-name名稱為test,而物件的路徑為/image/1.jpg,那麼URL為:https://test.oss.gogen.cn/image/1.jpg

如果Bucket有很多的話,這時候就需要使用泛域名解釋,將*.oss.gogen.cn都解析到同一個地址,*代表任何主機名。而在雲端計算環境中提供物件儲存服務,對於Bucket的需要的數量和名稱是未知的,所以需要泛域名解析。

泛域名就是指主機名為*的域名,比如:*.oss.gogen.cn,一般新增一條*為主機名的A記錄指向即可完成泛域名解析。

建立RadosGW使用者

建立RadosGW使用者需要使用radosgw-admin命令,在叢集中任何可管理節點執行下面命令。

~]$ radosgw-admin user create --uid="test" --display-name="test user"
  • --uid:指定使用者名稱。
  • --display-name:指定使用者描述資訊。

建立成功後將輸入使用者的基本資訊,基本最重要的兩項為access_key和secret_key。關於更我使用者管理可以使用選項--help檢視。

使用者建立成後功,如果忘記使用者資訊可以使用下面的命令檢視。

~]$ radosgw-admin user info --uid="test"

S3介面訪問測試

一般情況下訪問RadosGW叢集大多情況都是使用的S3的介面方法進行訪問,這裡將使用一個Linux下的S3的客戶端工具進行訪問測試。

安裝客戶端工具

測試S3的API介面,需要使用s3cmd命令,該命令需要安裝軟體包s3cmd,該軟體包在epel源。

~]# yum install s3cmd

初始化客戶端配置

執行下面命令進行初始化客戶端配置。

[root@localhost ~]# s3cmd --configure

Enter new values or accept defaults in brackets with Enter.
Refer to user manual for detailed description of all options.

Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables.
Access Key: DBX185L1FBOHZFC5ZBP3
Secret Key: 9MRABYIYrLNqogyD3qgQVzGX7iBAZwQbvLVGBk4o
Default Region [US]: 

Use "s3.amazonaws.com" for S3 Endpoint and not modify it to the target Amazon S3.
S3 Endpoint [s3.amazonaws.com]: oss.gogen.cn:80

Use "%(bucket)s.s3.amazonaws.com" to the target Amazon S3. "%(bucket)s" and "%(location)s" vars can be used
if the target S3 system supports dns based buckets.
DNS-style bucket+hostname:port template for accessing a bucket [%(bucket)s.s3.amazonaws.com]: %(bucket)s.oss.gogen.cn:80

Encryption password is used to protect your files from reading
by unauthorized persons while in transfer to S3
Encryption password: 
Path to GPG program [/usr/bin/gpg]: 

When using secure HTTPS protocol all communication with Amazon S3
servers is protected from 3rd party eavesdropping. This method is
slower than plain HTTP, and can only be proxied with Python 2.7 or newer
Use HTTPS protocol [Yes]: No

On some networks all internet access must go through a HTTP proxy.
Try setting it here if you can't connect to S3 directly
HTTP Proxy server name: 

New settings:
  Access Key: DBX185L1FBOHZFC5ZBP3
  Secret Key: 9MRABYIYrLNqogyD3qgQVzGX7iBAZwQbvLVGBk4o
  Default Region: US
  S3 Endpoint: oss.gogen.cn:80
  DNS-style bucket+hostname:port template for accessing a bucket: %(bucket)s.oss.gogen.cn:80
  Encryption password: 
  Path to GPG program: /usr/bin/gpg
  Use HTTPS protocol: False
  HTTP Proxy server name: 
  HTTP Proxy server port: 0

Test access with supplied credentials? [Y/n] 
Please wait, attempting to list all buckets...
Success. Your access key and secret key worked fine :-)

Now verifying that encryption works...
Not configured. Never mind.

Save settings? [y/N] y
Configuration saved to '/root/.s3cfg'
  • Access Key:建立使用者時生成的Access Key。
  • Secret Key:建立使用者時生成的Secret Key。
  • Default Region:選擇區域,預設為US,本環境沒有區域,通常用於雲環境,所以這裡預設即可。
  • S3 Endpoint:輸入Endpoit的地址,域名+埠,這裡使用http,所以需要使用oss.gogen.cn:80。
  • DNS-style bucket+hostname:port template for accessing a bucket:這裡的DNS樣式,格式為%(bucket)s.oss.gogen.cn:80。也就是bucket.hostname:port的模式樣式。
  • Encryption password:加密的密碼,這裡沒有,直接回車留空。
  • Path to GPG program:這裡是加密需要用到的程式包,預設Linux客戶端已經安裝。
  • Use HTTPS protocol:是否使用HTTPS,預設為使用,不使用輸入No。如果使用證書需要為可信任證書,否則無法使用。比如Endpoint的域名為oss.gogen.cn,那麼需要申請一個*.oss.gogen.cn的泛域名證書。
  • HTTP Proxy server name:代理伺服器名稱,這裡沒有代理伺服器,預設留空。
  • New settings:配置資訊確認。
  • Test access with supplied credentials:是否進行訪問測試,預設為Y。
  • Save settings:如果測試成功會有些提示,是否將配置資訊儲存到檔案,預設在/root/.s3cfg。後面在使用s3cmd命令的時候會自動從此目錄讀取配置,後續也可以對這裡直接進行修改。

建立與檢視Bucket

建立Bucket。

~]# s3cmd mb s3://images

如果報ERROR: S3 error: 403 (SignatureDoesNotMatch)錯誤,編輯s3cfg檔案,將裡面signature_v2的值改為True即可。

  • mb:表示建立Bucket,為s3cmd子命令,可以使用s3cmd --help檢視更多命令使用方法。
  • s3://:代表使用的協議,協議後面緊跟著的就是Bucket的名稱。

檢視Bucket。

~]# s3cmd ls s3://

上傳物件

上傳物件命令格式。

~]# s3cmd put <object path> s3://<bucket name>/<save path>
~]# s3cmd put ./ceph-release-1-1.el7.noarch.rpm s3://images/ceph-release-1-1.el7.noarch.rpm
  • put:代表上傳物件。
  • <object path>:需要上傳的物件的路徑。
  • <buketc name>:需要上傳到哪個Bucket。
  • <save path>:儲存的路徑,可以有多層目錄。

上傳儲存的時候指定目錄,目錄不存在會自行建立,如。

~]# s3cmd put ./ceph-release-1-1.el7.noarch.rpm s3://images/rpm/ceph-repo.rpm

說明:上傳的檔案會通過md5校驗,如果檔案一樣,無需重新上傳新檔案,而是直接建立一個型別於硬連結。

下載物件

格式如下。

~]# s3cmd get s3://<bucket name>/<save path>

檢視物件

檢視指定bucket下所有檔案。

~]# s3cmd ls s3://<bucket name>

Swift介面訪問測試

關於Swfi介面測試不做過多介紹。Swift介面測試可以使用Python Swiftclient模組,可以使用下面命令進行安裝。

~]# pip install --upgrade python-swiftclient

安裝成功後也會有一個命令列工具,命令列swift。命令的格式為。

~]# swift [-A auth url] [-U username] [-K password] subcommond

另外Swfit介面與S3不同,Swift使用子賬號訪問,子賬號隸屬於某一個存在的RadosGW賬號。子賬號建立方法如下。

~]$ radosgw-admin subuser create --uid=test --subuser=test:swifttest --access=full
  • --uid:指定RadosGW所存在的賬號。
  • --subuser:指定子賬號,格式為<radosgw user>:<sub user>。
  • --full:指定許可權,full代表完全控制。

建立完成後同樣會給子賬號也生成一個secret_key。

RadosGW負載均衡+高可用

在RadosGW前面加一層代理,同時還可以使用使用Keepalived做高可用,代理後端地址為RadosGW主機的IP+PORT,可以起多個RadosGW程序在不同的主機,這樣便實現了負載均衡+高可用。

這時候HTTPS證書需要配置在前端代理,在使用s3cmd --configure的時候在“HTTP Proxy server name”這裡需要填寫代理伺服器訪問的域名。

在ceph.conf配置檔案內不需要指定rgw_dns_name選項,配置為HTTP即可。

原文地址:https://www.linux-note.cn/?p=220