Ceph Swift Api 配置與使用(三)【與云原生的故事】
Ceph Swift Api 配置與使用
一、Ceph Swift Api 說明
在ceph的使用上, 互聯網大規模的文件場景下, fs并不能滿足生產的使用要求,rados本地化操作也不便于服務的接入與使用, 這里我們就要采用Ceph Swift Api 來實現文件的存儲管理。
二、Ceph Swift Api 特點
Swift是由Rackspace開發,用來為云計算提供可擴展存儲的項目。專注于對象存儲, 并提供一套REST風格的Api來訪問, 與Ceph強一致性不同, 它是最終一致性。兩者都是優秀的開源項目, 并無明顯優劣之分,在使用場景上有所不同, 如果是專注于對象存儲, 那么可以選擇swift即可滿足需要, 如果還有塊存儲要求, 那么選擇Ceph更為合適。這里選擇Ceph, 因為通過網關可以適配兼容swift api, 同時在數據訪問上具有較強的擴展性:
Ceph可通過Rados網關用兼容S3的RESTful API訪問,對AWS云環境下的其他內容也能很好的兼容, 比如OpenStack Swift的對象存儲訪問接口。
CephFS:是一個POSIX兼容的文件系統,可以在任何Linux發行版上運行,操作系統可直接訪問Ceph存儲。
RBD:RBD是一個Linux內核級的塊設備,允許用戶像任何其他Linux塊設備一樣訪問Ceph。
ISCSI 網關: 這一增加的功能是SUSE加上去的,它允許管理員在Ceph之上運行iSCSI(互聯網小型計算機系統接口)網關,從而將其轉變為任何操作系統都可以訪問的SAN(Storage Area Network,存儲區域網絡)文件管理器。
三、Ceph RGW 介紹
Ceph可以提供塊、文件和對象三種形態的存儲。RGW就是提供對象存儲的網關,也即對象存儲網關。 所謂對象存儲網關,也就是對象存儲的入口,本質上是一個HTTP服務器,與Nginx和Apache無特殊差別。通過這個網關入口,用戶可以采用HTTP協議,以RESTful的方式訪問Ceph的對象存儲。
四、Ceph 存儲結構
在使用對象存儲之前, 先要了解桶(container容器)概念及其存儲結構:
Ceph Swift Api的調用, 需要先創建相應用戶進行認證才能操作, 每個用戶下面可以創建多個桶, 桶里面可以存儲對象,對象就是各種數據文件, 包括文檔, 圖片等。傳統上傳文件的使用, 我們往往會指 定路徑信息, 在這里, 桶和對象的關系好比文件夾與文件的概念, 不同之處是桶不能再嵌套桶, 也就是沒有層級路徑的概念。
Ceph存儲結構:
五、Ceph Swift Api 服務端的配置
1、確保集群正常安裝并啟動:
如果rgw沒有顯示, 檢查服務狀態:
systemctl list-unit-files|grep enabled|grep ceph
重啟RGW服務:
ceph-deploy --overwrite-conf --ceph-conf ceph.conf rgw create CENTOS7-1 systemctl restart ceph-radosgw@*.service
2、驗證網關是否正常
訪問地址,http://192.168.88.161:7480
出現以下提示代表正常
3、創建Swift用戶, 用于接口請求認證
sudo radosgw-admin user create --subuser="cephtester:subtester" --uid="cephtester" --display-name="cephtester" --key-type=swift --secret="654321" --access=full
uid 為主用戶, subuser為子用戶信息, secret指定密鑰, 不指定則隨機生成, access擁有權限設定。
返回結果:
[root@CENTOS7-1 ceph-cluster]# sudo radosgw-admin user create --subuser="cephtester:subtester" --uid="cephtester" --display-name="cephtester" --key-type=swift --secret="654321" --access=full { "user_id": "cephtester", "display_name": "cephtester", "email": "", "suspended": 0, "max_buckets": 1000, "auid": 0, "subusers": [ { "id": "cephtester:subtester", "permissions": "full-control" } ], "keys": [], "swift_keys": [ { "user": "cephtester:subtester", "secret_key": "654321" } ], "caps": [], "op_mask": "read, write, delete", "default_placement": "", "placement_tags": [], "bucket_quota": { "enabled": false, "check_on_raw": false, "max_size": -1, "max_size_kb": 0, "max_objects": -1 }, "user_quota": { "enabled": false, "check_on_raw": false, "max_size": -1, "max_size_kb": 0, "max_objects": -1 }, "temp_url_keys": [], "type": "rgw", "mfa_ids": [] }
記住swift_keys下面的user和secret_key信息, 代碼中需使用。
4、激活管理后臺的對象存儲模塊:
5、創建一個管理用戶:
radosgw-admin user create --uid=mgruser --display-name=mgruser --system
返回結果:
[root@CENTOS7-1 ceph-cluster]# radosgw-admin user create --uid=mgruser --display-name=mgruser --system { "user_id": "mgruser", "display_name": "mgruser", "email": "", "suspended": 0, "max_buckets": 1000, "auid": 0, "subusers": [], "keys": [ { "user": "mgruser", "access_key": "W462B8SE31NDCOQR4E6I", "secret_key": "XPZcugMWRhYccFlEPIHKcyFVr73grVuiJgFD4rDR" } ], "swift_keys": [], "caps": [], "op_mask": "read, write, delete", "system": "true", "default_placement": "", "placement_tags": [], "bucket_quota": { "enabled": false, "check_on_raw": false, "max_size": -1, "max_size_kb": 0, "max_objects": -1 }, "user_quota": { "enabled": false, "check_on_raw": false, "max_size": -1, "max_size_kb": 0, "max_objects": -1 }, "temp_url_keys": [], "type": "rgw", "mfa_ids": [] }
根據生成的access_key與secret_key, 執行:
ceph dashboard set-rgw-api-access-key W462B8SE31NDCOQR4E6I ceph dashboard set-rgw-api-secret-key XPZcugMWRhYccFlEPIHKcyFVr73grVuiJgFD4rDR
打開管理界面,https://192.168.88.161:18843 可以查看到我們剛才創建的兩個用戶:
六、Ceph Swift Api 調用驗證
1、創建ceph-demo工程:
增加SwiftOperator接口:
@Component public class SwiftOperator { /** * 用戶名信息, 格式: 主用戶名:子用戶名 */ private String username ="cephtester:subtester"; /** * 用戶密碼 */ private String password = "654321"; /** * 接口訪問地址 */ private String authUrl = "http://192.168.88.161:7480/auth/1.0"; /** * 默認存儲的容器名稱(bucket) */ private String defaultContainerName = "user_datainfo"; /** * Ceph的賬戶信息 */ private Account account = null; /** * Ceph的容器信息 */ private Container container; /** * 進行Ceph的初始化配置 */ public SwiftOperator() { // 1. Ceph的賬戶信息配置 AccountConfig config = new AccountConfig(); config.setUsername(username); config.setPassword(password); config.setAuthUrl(authUrl); config.setAuthenticationMethod(AuthenticationMethod.BASIC); account = new AccountFactory(config).createAccount(); // 2.獲取容器信息 Container newContainer = account.getContainer(defaultContainerName); if(!newContainer.exists()) { container = newContainer.create(); System.out.println("container create ==> " + defaultContainerName); }else { container = newContainer; } } /** * 文件上傳處理 * @param remoteName * @param filePath */ public void createObject(String remoteName, String filePath) { // 1. 從容器當中獲取遠程存儲對象信息 StoredObject object = container.getObject(remoteName); // 2. 執行文件上傳處理 object.uploadObject(new File(filePath)); } /** * 文件的下載處理 * @param objectName * @param outPath */ public void retrieveObject(String objectName, String outPath) { // 1. 從容器當中獲取遠程存儲對象信息 StoredObject object = container.getObject(objectName); // 2. 執行文件的下載方法 object.downloadObject(new File(outPath)); } /** * 獲取用戶下面的所有容器信息 * @return */ public List listContainer() { List list = new ArrayList(); Collection
這里的用戶名和密碼填寫上面我們所生成的信息。注意路徑地址后綴為: /auth/1.0
CephDemoApplication啟動類,測試驗證:
@SpringBootApplication @ComponentScan(basePackages = {"cn.it"}) public class CephDemoApplication { public static void main(String[] args) throws Exception { // Swift Api接口調用驗證 swiftApi(); } /** * 通過Swift接口操作ceph集群 * @throws Exception */ public static void swiftApi() throws Exception { ConfigurableApplicationContext appContext = SpringApplication.run(CephDemoApplication.class); // 1. 先打印出用戶的容器信息 SwiftOperator swiftOperator = appContext.getBean(SwiftOperator.class); swiftOperator.listContainer(); String objName = "test_ceph"; // 2. 上傳指定的文件 swiftOperator.createObject(objName, "E:\\test\\upload\\test_swift_ceph.txt"); // 3. 從ceph下載文件到指定的路徑下面 swiftOperator.retrieveObject(objName, "E:\\test\\download\\test_swift_ceph.txt"); System.out.println("complete"); } }
【與云原生的故事】有獎征文火熱進行中:https://bbs.huaweicloud.com/blogs/345260
API Swift 云原生 對象存儲服務 OBS
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。