Ceph Swift Api 配置與使用(三)【與云原生的故事】

      網友投稿 756 2022-05-30

      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 Swift Api 配置與使用(三)【與云原生的故事】

      三、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 containers = account.list(); for(Container container : containers) { list.add(container.getName()); System.out.println("current container name : " + container.getName()); } return list; } }

      這里的用戶名和密碼填寫上面我們所生成的信息。注意路徑地址后綴為: /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小時內刪除侵權內容。

      上一篇:HBase快速入門系列(8) | 一文教你HBase與Hive如何集成
      下一篇:0代碼實現個性化和美化RDS RDWeb界面
      相關文章
      亚洲白色白色永久观看| 久久久久亚洲Av片无码v | 亚洲天堂中文资源| 亚洲国产另类久久久精品小说| 美腿丝袜亚洲综合| 丁香五月亚洲综合深深爱| 亚洲精品成人a在线观看| 亚洲第一黄色网址| 亚洲国产成人精品女人久久久 | 亚洲av无码专区在线| 久久久久se色偷偷亚洲精品av | 中文字幕在线观看亚洲视频| 精品亚洲成在人线AV无码| 亚洲丰满熟女一区二区v| 亚洲一区精品视频在线| 亚洲 欧洲 自拍 另类 校园| 国产人成亚洲第一网站在线播放| 亚洲一卡一卡二新区无人区| 亚洲人AV在线无码影院观看| 亚洲gay片在线gv网站| 无码天堂亚洲国产AV| 亚洲国产成人久久一区WWW| 亚洲午夜无码AV毛片久久| 在线亚洲午夜理论AV大片| 国产亚洲一区二区在线观看| 久久久久久亚洲精品| 亚洲视频在线观看网站| 亚洲国产精品成人精品小说| 亚洲中文字幕一二三四区苍井空| 亚洲日韩国产一区二区三区在线| 亚洲av纯肉无码精品动漫| 亚洲精品国产福利一二区| 亚洲中文字幕无码永久在线| 亚洲AV无码不卡无码| 亚洲日韩乱码中文无码蜜桃臀| 亚洲粉嫩美白在线| 国产精品亚洲色图| 亚洲综合色婷婷七月丁香| 久久亚洲私人国产精品vA| 亚洲一级片在线观看| 亚洲av成本人无码网站|