001.Ceph簡介概述

来源:https://www.cnblogs.com/itzgr/archive/2019/01/14/10265103.html
-Advertisement-
Play Games

一 Ceph簡介 Red Hat Ceph是一個分散式的數據對象存儲,系統設計旨在性能、可靠性和可擴展性上能夠提供優秀的存儲服務。分散式對象存儲是存儲的未來,因為它們適應非結構化數據,並且客戶端可以同時使用當前及傳統的對象介面進行數據存取。例如: 本地語言綁定介面(C/C++, Java, Pyth ...


一 Ceph簡介

Red Hat Ceph是一個分散式的數據對象存儲,系統設計旨在性能、可靠性和可擴展性上能夠提供優秀的存儲服務。分散式對象存儲是存儲的未來,因為它們適應非結構化數據,並且客戶端可以同時使用當前及傳統的對象介面進行數據存取。例如:
  • 本地語言綁定介面(C/C++, Java, Python)
  • RESTful 介面(S3/Swift)
  • 塊設備介面
  • 文件系統介面
Red Hat Ceph具有非常好的可擴展性——數以千計的客戶端可以訪問PB級到EB級甚至更多的數據。

二 Ceph優勢及特點

2.1 Ceph優勢

Ceph區別於其他文件系統(如glusterfs、swift等)主要具有以下優勢:
  1. CRUSH演算法
CRUSH演算法運行在Ceph Clients和Ceph OSD上,用於計算對象的位置信息,它代替了傳統的查表的思想,把工作分攤到所有Ceph Clients和Ceph OSD上,增強了彈性擴展和高可用性,是ceph的兩大創新之一。ceph摒棄了傳統的集中式存儲元數據定址的方案,而使用CRUSH演算法完成數據的定址操作。CRUSH在一致性哈希基礎上很好的考慮了容災域的隔離,能夠實現各類負載的副本放置規則,例如跨機房、機架感知等。Crush演算法有相當強大的擴展性,理論上支持數千個存儲節點。
  1. 高可用
Ceph中的數據副本數量可以由管理員自行定義,並可以通過CRUSH演算法指定副本的物理存儲位置以分隔故障域,支持數據強一致性;ceph可以忍受多種故障場景並自動嘗試並行修複。
  1. 高擴展性
Ceph不同於swift,客戶端所有的讀寫操作都要經過代理節點,一旦集群併發量增大時,代理節點很容易成為單點瓶頸。Ceph本身並沒有主控節點,擴展起來比較容易,並且理論上,它的性能會隨著磁碟數量的增加而線性增長。
  1. 特性豐富
Ceph支持三種調用介面:對象存儲,塊存儲,文件系統掛載。三種方式可以一同使用。 2.2 Ceph特點
  1. 統一存儲
  2. 無任何單點故障
  3. 數據多份冗餘
  4. 存儲容量可擴展
  5. 自動容錯及故障自愈

三 體系架構

體系架構示意圖(來源於官方): 001

3.1 RADOS

Ceph的底層核心為RADOS(Reliable, Autonomic Distributed Object Store),RADOS本身也是分散式存儲系統,CEPH所有的存儲功能都是基於RADOS實現。Ceph的上層應用調用本機上的librados API,再由後者通過socket與RADOS集群中的其他節點通信並完成各種操作。 Ceph的本質是一個對象存儲。RADOS由兩個組件組成:OSD和Monitor。 OSD主要提供存儲資源,每一個disk、SSD、RAID group或者一個分區都可以成為一個OSD,而每個OSD還將負責向該對象的複雜節點分發和恢復; Monitor維護Ceph集群並監控Ceph集群的全局狀態,提供一致性的決策。 RADOS分發策略依賴於CRUSH(Controlled Replication Under Scalable Hashing)演算法(基於可擴展哈希演算法的可控複製)。

3.2 RADOS GW和RBD

RADOS GateWay、RBD其作用是在librados庫的基礎上提供抽象層次更高、更便於應用或客戶端使用的上層介面。其中,RADOS GW是一個提供與Amazon S3和Swift相容的RESTful API的gateway,以供相應的對象存儲應用開發使用。 RBD則提供了一個標準的塊設備介面,常用於在虛擬化的場景下為虛擬機創建volume。目前,Red Hat已經將RBD驅動集成於KVM/QEMU中,以提高虛擬機訪問性能。這兩種方式目前在雲計算中應用的比較多。

3.3 CEPHFS

CEPHFS則提供了POSIX介面,用戶可直接通過客戶端掛載使用。它是內核態的程式,所以無需調用用戶空間的librados庫。它通過內核中的net模塊來與Rados進行交互。

四 Ceph角色及原理

4.1 角色及作用

002 所有Ceph存儲集群的部署都始於部署一個個Ceph節點、網路和Ceph存儲集群。Ceph存儲集群至少需要一個Ceph Monitor和兩個OSD守護進程。而運行Ceph文件系統客戶端時,則必須要有元數據伺服器(Metadata Server)。
  • Ceph OSDs:Ceph OSD守護進程( Ceph OSD )的功能是存儲數據,處理數據的複製、恢復、回填、再均衡,並通過檢查其他OSD守護進程的心跳來向Ceph Monitors提供一些監控信息。當Ceph存儲集群設定為有2個副本時,至少需要2個OSD守護進程,集群才能達到active+clean狀態(Ceph預設有3個副本)。
  • Monitors:Ceph Monitor維護著展示集群狀態的各種圖表,包括監視器圖、OSD圖、歸置組(PG)圖、和CRUSH 圖。Ceph 保存著發生在Monitors、OSD和PG上的每一次狀態變更的歷史信息(稱為epoch)。
  • MDSs: Ceph元數據伺服器(MDS)為Ceph文件系統存儲元數據(也就是說,Ceph塊設備和Ceph 對象存儲不使用MDS)。元數據伺服器使得POSIX文件系統的客戶端,可以在不對Ceph存儲集群造成負擔的前提下,執行諸如ls、find等基本命令。

4.2 存儲通信機制

03 當一個OSD需要存儲數據時(不管是來自Ceph塊設備、Ceph對象存儲、Ceph文件系統、還是基於librados的自定義實現),Ceph OSD在扁平的命名空間內把所有數據都存儲為對象。 004 提示:對象包含一個標識符、二進位數據、和由名字/值對組成的元數據,元數據語義完全取決於Ceph客戶端。例如,CephFS用元數據存儲文件屬性,如文件所有者、創建日期、最後修改日期等等。一個對象ID不止在本地唯一 ,它在整個集群內都是唯一的。 Ceph客戶端維護對象ID和存儲對象的存儲池名稱,但它們既不需要維護對象到OSD的索引,也不需要與一個集中的對象索引進行通信來查找數據對象的位置。 為了能夠存儲並獲取數據,Ceph客戶端首先會訪問一臺Ceph mon並得到最新的存儲集群映射關係,然後Ceph客戶端可以通過提供的對象名稱與存儲池名稱,使用集群映射關係和CRUSH演算法(可控的、可擴展的、分散式的副本數據放置演算法)來計算出提供對象所在的歸置組(PG)和主Ceph OSD。 最後,Ceph客戶端連接到可執行讀寫操作的主OSD上進而達到數據的存儲與獲取。客戶端和OSD之間沒有中間伺服器,中間件或匯流排。

五 Ceph應用場景

Ceph的應用場景主要由它的架構確定,Ceph提供對象存儲、塊存儲和文件存儲。

5.1 LIBRADOS應用

通俗理解,Librados提供了應用程式對RADOS的直接訪問,目前Librados已經提供了對C、C++、Java、Python、Ruby和PHP的支持。它支持單個單項的原子操作,如同時更新數據和屬性、CAS操作,同時有對象粒度的快照操作。它的實現是基於RADOS的插件API,也就是在RADOS上運行的封裝庫。

5.2 RADOSGW應用

此類場景基於Librados之上,增加了HTTP協議,提供RESTful介面並且相容S3、Swfit介面。RADOSGW將Ceph集群作為分散式對象存儲,對外提供服務。

5.3 RBD應用

此類場景也是基於Librados之上的,細分為下麵兩種應用場景。 第一種應用場景為虛擬機提供塊設備。通過Librbd可以創建一個塊設備(Container),然後通過QEMU/KVM附加到VM上。通過Container和VM的解耦,使得塊設備可以被綁定到不同的VM上。 第二種應用場景為主機提供塊設備。這種場景是傳統意義上的理解的塊存儲。 以上兩種方式都是將一個虛擬的塊設備分片存儲在RADOS中,都會利用數據條帶化提高數據並行傳輸,都支持塊設備的快照、COW(Copy-On-Write)克隆。最重要的是RBD還支持Live migration。

5.4 CephFS(Ceph文件系統)應用

此類場景是基於RADOS實現的PB級分散式文件系統,其中引入MDS(Meta Date Server),它主要為相容POSIX文件系統提供元數據,比如文件目錄和文件元數據。同時MDS會將元數據存儲在RADOS中,這樣元數據本身也達到了並行化,可以大大加快文件操作的速度。MDS本身不為Client提供數據文件,只為Client提供對元數據的操作。當Client打開一個文件時,會查詢並更新MDS相應的元數據(如文件包括的對象信息),然後再根據提供的對象信息直接從RADOS中得到文件數據。   更多有趣知識可見:https://blog.csdn.net/sunhf_csdn/article/details/79797186 官方文檔:http://docs.ceph.org.cn 參考:http://ceph.org.cn/2018/06/29/red-hat-ceph%E5%AD%98%E5%82%A8-%E3%80%8A%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3ceph%E6%9E%B6%E6%9E%84%E3%80%8B/ https://www.jianshu.com/p/25163032f57f http://www.51niux.com/?id=161
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 【譯】《C# 小技巧 -- 編寫更優雅的 C#》原書名《C# Tips -- Write Better C#》 目錄 介紹(Introduction) 第一部分:各種小技巧(Part 1: Assorted Tips) 使用 LINQ 合併 IEnumerable 序列(Merging IEnume ...
  • 使用WPF的裝飾器(Adorner)實現圖片拖拉變形,DrawingVisual高保真合成圖片。效果如下: 源碼:https://gitee.com/orchis/ImageFotoMix.git ...
  • 處理HTTP請求的11個階段如下圖:序號階段指令備註1POST_READrealip獲取客戶端真實IP2SERVER_REWRITErewrite3FIND_CONFIG4REWRITErewrite5POST_REWRITE6PRE_ACCESSlimit_conn, limit_req7ACCE... ...
  • 問題: 定義了預設TextBlock樣式後,再次自定義下拉框 or 其他控制項 ,當內部含有TextBlock時,設置控制項的字體相關樣式無效,系統始終使用TextBlock設置預設樣式 解決方案: 為相關控制項定義數據模板,為內部TextBlock添加樣式資源,指向預設資源。 具體為啥會有這種問題不清楚 ...
  • 在.NetCore中預設使用DataProtection來保護數據,例如Cooike等。一般情況下DataProtection生成的密鑰會被加密後存儲,例如預設的文件存儲 可以看到使用了Windows DPAPI加密。 但是如果更改預設設置例如使用的外部存儲如redis則此時密鑰預設是不加密的 微軟 ...
  • nginx的請求處理流程如下圖:nginx可以處理來自web(http),Email,TCP/UDP的三類請求。nginx底層使用非阻塞的事件驅動引擎,結合狀態機來完成非同步通知,其中處理Http請求的是HTTP狀態機。 ...
  • 日誌切割如果使用預設日誌配置,經過一段時間運行後,access.log和error.log文件會變得非常大,使維護和排查問題變得不便,所以非常有必要做日誌切割。通常的思路是:使用nginx的-s reopen命令,結合linux系統的crontab定時任務命令,弄一個定時任務按時切割日誌文件。每天定... ...
  • 註:這是在大一時候老師給我們留的任務,剛開始一臉懵逼,現在回想起來還挺有意思的,今天在優盤裡翻來覆去的看到這個塊代碼,複習一下! 註:在學校老師講到,水仙花數實現的原理就是一個三位數或者以上數的n次冪之和相加,等於它本身!例如:153=13+53+33 這個例子就是查找到小於1000大於100中的水 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...