目錄
一.對象存儲概述
二.創建RGW接口
1.在管理節點創建一個 RGW 守護進程
2.創建成功后默認情況下會自動創建一系列用于 RGW 的存儲池
3.默認情況下 RGW 監聽 7480 號端口
4.開啟 http+https ,更改監聽端口
5.在 rgw 節點上查看端口
6.在客戶端訪問驗證
7.創建 RadosGW 賬戶
8.客戶端測試
三.總結
接著之前的部署集群架構
一.對象存儲概述
對象存儲(object storage)是非結構數據的存儲方法,對象存儲中每一條數據都作為單獨的對象
存儲,擁有唯一的地址來識別數據對象,通常用于云計算環境中
不同于其他數據存儲方法,基于對象的存儲不使用目錄樹。
雖然在設計與實現上有所區別,但大多數對象存儲系統對外呈現的核心資源類型大同小異。從客戶
端的角度來看,分為以下幾個邏輯單位
- Amazon S3
提供了
- 用戶(User)
- 存儲桶(Bucket)
- 對象(Object)
三者的關系是
- User將Object存儲到系統上的Bucket
- 存儲桶屬于某個用戶并可以容納對象,一個存儲桶用于存儲多個對象
- 同一個用戶可以擁有多個存儲桶,不同用戶允許使用相同名稱的Bucket,因此User名稱即可做為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提供名稱空間,但他是個可選組件
二.創建RGW接口
如果需要使用到類似 S3 或者 Swift 接口時候才需要部署/創建 RadosGW 接口,RadosGW 通常作
為對象存儲(Object Storage)使用,類于阿里云OSS
1.在管理節點創建一個 RGW 守護進程
cd /etc/ceph
ceph-deploy rgw create node01
ceph -s
2.創建成功后默認情況下會自動創建一系列用于 RGW 的存儲池
ceph osd pool ls
rgw.root
default.rgw.control #控制器信息
default.rgw.meta #記錄元數據
default.rgw.log #日志信息
default.rgw.buckets.index #為 rgw 的 bucket 信息,寫入數據后生成
default.rgw.buckets.data #是實際存儲的數據信息,寫入數據后生成
3.默認情況下 RGW 監聽 7480 號端口
ssh root@node01 netstat -lntp | grep 7480
4.開啟 http+https ,更改監聽端口
RadosGW 守護進程內部由 Civetweb 實現,通過對 Civetweb 的配置可以完成對 RadosGW 的
基本管理
?
#要在 Civetweb 上啟用SSL,首先需要一個證書,在 rgw 節點生成證書
1)生成CA證書私鑰:
openssl genrsa -out civetweb.key 20482)生成CA證書公鑰:
openssl req -new -x509 -key civetweb.key -out civetweb.crt -days 3650 -subj "/CN=192.168.20.7"#3、將生成的證書合并為pem
cat civetweb.key civetweb.crt > /etc/ceph/civetweb.pem
更改監聽端口
vim ceph.conf
......
[client.rgw.node01]
rgw_host = node01
rgw_frontends = "civetweb port=80+443s ssl_certificate=/etc/ceph/civetweb.pem num_threads=500 request_timeout_ms=60000"------------------------------------------------------------
●rgw_host:對應的RadosGW名稱或者IP地址
●rgw_frontends:這里配置監聽的端口,是否使用https,以及一些常用配置:
?port:如果是https端口,需要在端口后面加一個s。
?ssl_certificate:指定證書的路徑。
?num_threads:最大并發連接數,默認為50,根據需求調整,通常在生產集群環境中此值應該更大
?request_timeout_ms:發送與接收超時時長,以ms為單位,默認為30000
?access_log_file:訪問日志路徑,默認為空
?error_log_file:錯誤日志路徑,默認為空
------------------------------------------------------------#修改完 ceph.conf 配置文件后需要重啟對應的 RadosGW 服務,再推送配置文件
ceph-deploy --overwrite-conf config push node0{1..3}systemctl restart ceph-radosgw.target
5.在 rgw 節點上查看端口
netstat -lntp | grep -w 80
netstat -lntp | grep 443
6.在客戶端訪問驗證
curl http://192.168.80.105:80
curl -k https://192.168.80.105:443
7.創建 RadosGW 賬戶
在管理節點使用 radosgw-admin 命令創建 RadosGW 賬戶
radosgw-admin user create --uid="rgwuser" --display-name="rgw test user"
#創建成功后將輸出用戶的基本信息,其中最重要的兩項信息為 access_key 和 secret_key 。用戶創建成后功,如果忘記用戶信息可以使用下面的命令查看
radosgw-admin user info --uid="rgwuser"
8.客戶端測試
1)在客戶端安裝 python3、python3-pip
yum install -y python3 python3-pippython3 -V
Python 3.6.8pip3 -V
pip 9.0.3 from /usr/lib/python3.6/site-packages (python 3.6)2)安裝 boto 模塊,用于測試連接 S3
pip3 install boto3)測試訪問 S3 接口
echo 123123 > /opt/123.txtvim test.py
#coding:utf-8
import ssl
import boto.s3.connection
from boto.s3.key import Key
try:_create_unverified_https_context = ssl._create_unverified_context
except AttributeError:pass
else:ssl._create_default_https_context = _create_unverified_https_context#test用戶的keys信息
access_key = "ER0SCVRJWNRIKFGQD31H" #輸入 RadosGW 賬戶的 access_key
secret_key = "YKYjk7L4FfAu8GHeQarIlXodjtj1BXVaxpKv2Nna" #輸入 RadosGW 賬戶的 secret_key#rgw的ip與端口
host = "192.168.80.11" #輸入 RGW 接口的 public 網絡地址#如果使用443端口,下述鏈接應設置is_secure=True
port = 443
#如果使用80端口,下述鏈接應設置is_secure=False
#port = 80
conn = boto.connect_s3(aws_access_key_id=access_key,aws_secret_access_key=secret_key,host=host,port=port,is_secure=True,validate_certs=False,calling_format=boto.s3.connection.OrdinaryCallingFormat()
)#一:創建存儲桶
#conn.create_bucket(bucket_name='bucket01')
#conn.create_bucket(bucket_name='bucket02')#二:判斷是否存在,不存在返回None
exists = conn.lookup('bucket01')
print(exists)
#exists = conn.lookup('bucket02')
#print(exists)#三:獲得一個存儲桶
#bucket1 = conn.get_bucket('bucket01')
#bucket2 = conn.get_bucket('bucket02')#四:查看一個bucket下的文件
#print(list(bucket1.list()))
#print(list(bucket2.list()))#五:向s3上存儲數據,數據來源可以是file、stream、or string
#5.1、上傳文件
#bucket1 = conn.get_bucket('bucket01')
# name的值是數據的key
#key = Key(bucket=bucket1, name='myfile')
#key.set_contents_from_filename('/opt/123.txt')
# 讀取 s3 中文件的內容,返回 string 即文件 123.txt 的內容
#print(key.get_contents_as_string())#5.2、上傳字符串
#如果之前已經獲取過對象,此處不需要重復獲取
bucket2 = conn.get_bucket('bucket02')
key = Key(bucket=bucket2, name='mystr')
key.set_contents_from_string('hello world')
print(key.get_contents_as_string())#六:刪除一個存儲桶,在刪除存儲桶本身時必須刪除該存儲桶內的所有key
bucket1 = conn.get_bucket('bucket01')
for key in bucket1:key.delete()
bucket1.delete()4)按照以上步驟執行 python 腳本測試
python3 test.py
三.總結
RGW操作
服務端
ceph-deploy rgw create 節點列表
#創建RGW接口,還可以修改ceph配置文件,設置RGW監聽的端口號(默認端口為7480)
radosgw-admin user create --uid="用戶名" --display-name="備注信息"
#創建RGW賬戶,獲取access_key和secret_key
客戶端
- 準備好客戶端應用程序
- 使用RGW賬戶的access_key和secret_key做驗證訪問RGW對象存儲接口
- 在對象存儲里創建bucket存儲桶
- 在bucket存儲桶里創建對象object,上傳數據