當前位置:首頁 » 存儲配置 » ceph適合虛擬化存儲嗎

ceph適合虛擬化存儲嗎

發布時間: 2023-08-07 00:09:50

1. 什麼數據存儲軟體的兼容性比較高

1. Ceph
Ceph是一個強大的存儲系統,它在同一個系統中同時提供了對象,塊(通過RBD)和文件存儲。無論您是希望在虛擬機中使用塊設備,還是將非結構化數據存儲在對象存儲中,Ceph都可以在一個平台上提供所有功能,並且還能獲得出色的靈活性。 Ceph中的所有內容都以對象的形式存儲,不管原始的數據類型是什麼,RADOS(reliable autonomic distributed object store)都會把它們當做對象來進行存儲。

RADOS層確保數據始終保持一致狀態並且可靠。Ceph會通過數據復制,故障檢測和恢復,以及跨群集節點進行數據遷移和重新平衡來實現數據一致性。 Ceph提供了一個符合POSIX的網路文件系統(CephFS),旨在實現高性能,大數據存儲以及與傳統應用程序的最大兼容。Ceph可以通過各種編程語言或者radosgw(RGW)實現無縫的訪問對象存儲,(RGW)這是一種REST介面,它與為S3和Swift編寫的應用程序兼容。另一方面,Ceph的RADOS塊設備(RBD)可以訪問在整個存儲集群中條帶化和復制的塊設備映像。

Ceph的特性
獨立、開放和統一的平台:將塊,對象和文件存儲組合到一個平台中,包括最新添加的CephFS

兼容性:您可以使用Ceph 存儲對外提供最兼容Amazon Web Services(AWS)S3的對象存儲。

精簡配置模式:分配存儲空間時,只是虛擬分配容量,在跟進使用情況佔用實際磁碟空間。這種模式提供了更多的靈活性和磁碟空間利用率。

副本:在Ceph Storage中,所有存儲的數據都會自動從一個節點復制到多個其他節點。默認任何時間群集中的都有三份數據。

自我修復:Ceph Monitors會不斷監控你的數據集。一旦出現一個副本丟失,Ceph會自動生成一個新副本,以確保始終有三份副本。

高可用:在Ceph Storage中,所有存儲的數據會自動從一個節點復制到多個其他的節點。這意味著,任意節點中的數據集被破壞或被意外刪除,在其他節點上都有超過兩個以上副本可用,保證您的數據具有很高的可用性。

Ceph很強大:您的集群可以用於任何場景。無論您希望存儲非結構化數據或為數據提供塊存儲或提供文件系統,或者希望您的應用程序直接通過librados使用您的存儲,而這些都已經集成在一個Ceph平台上了。

可伸縮性:C

2. ScaleIO、VSAN、MFS、Ceph這幾種存儲方案的區別是什麼

ScaleIO:使用彈性聚合軟體產品來革新數據存儲,該軟體產品利用本地磁碟來創建伺服器存儲區域網路 (SAN)。純軟體方式的基於伺服器的存儲區域網路 (SAN),將存儲和計算資源聚合到一起,形成單層的企業級存儲產品。 ScaleIO 存儲彈性靈活,可以提供可線性擴展的性能。 其橫向擴展伺服器 SAN 體系結構可以從幾個伺服器擴展至數千伺服器。
基本適用於全平台。https://community.emc.com/thread/198500
VSAN:VMware Virtual SAN™ 是面向虛擬環境中超聚合的軟體定義存儲.Virtual SAN 是第一款專為 vSphere 環境設計的策略驅動型存儲產品,可幫助用戶實現存儲調配和管理的簡化和優化。 通過使用虛擬機級存儲策略,Virtual SAN 可自動將需求與底層存儲資源進行動態匹配。藉助 Virtual SAN,許多手動存儲任務都可以實現自動化,從而提供更加高效和經濟實惠的運維模式。對比 ScaleIO,它是僅限於VMware虛擬化平台的。
參考鏈接:Virtual SAN:軟體定義的共享存儲 | VMware 中國
MFS 是分布式文件系統,可參考:分布式存儲系統MFS -
Ceph是一個 Linux PB 級分布式文件系統。

3. ceph(第一步) 基礎架構

ceph 是什麼?
ceph 是一種開源存儲軟體。底層實現了對象存儲,並以此為基礎對外提供對象存儲介面、塊存儲介面、文件級存儲介面。

ceph 結構包含兩個部分:

ceph 版本:Nautilus

官網的一張架構圖:

對於這張圖,一開始沒有看懂它想表達什麼,後來明白了。如下圖:

相關名詞解釋:

ceph 組件分為兩部分:

此部分介紹構成 ceph 集群的基礎組件。
其中包含 OSD、Manager、MDS、Monitor。

此部分介紹 ceph 對外提供各種功能的組件。
其中包含:Block Device、Object Storage、Filesystem。

前面兩個部分主要介紹了 ceph 的一些組件及對外提供的功能。
這部分主要介紹 ceph 的存儲邏輯。

首先,在對象存儲中,一切都是扁平化的,並且存儲的最小單元為對象(obj)。存儲 obj 如下圖:

ceph 在對象存儲的基礎上提供了更加高級的思想。

當對象數量達到了百萬級以上,原生的對象存儲在索引對象時消耗的性能非常大。ceph 因此引入了 placement group (pg)的概念。一個 pg 就是一組對象的集合。如下圖:

obj 和 pg 之間的映射由 ceph client 計算得出。

討論 pg 時,不得不提的另外一個名詞:pgp。
pgp 決定了 pg 和 osd 之間的映射關系。一般將 pgp_num 設置成和 pg_num 一樣大小。

這里還有一個名詞需要提一下,在 ceph 中會經常見到 crush 演算法。簡單來說,crush 演算法就是指 ceph 中數據如何存儲、讀取的過程。

由於 ceph 集群面對許多的獨立項目,因此 ceph 還引入了 ceph pool 的概念用於劃分不同的項目。
ceph pool 是對 ceph 對象的邏輯劃分,並不是物理劃分。

pg 和 ceph pool 的區別:

像大多數集群軟體一樣,ceph 也提供了緩存的概念。稱之為 Cache Tier(緩存層,在具體使用時有時會稱之為緩存池)。
緩存池對用戶來說是透明的,因此不會改變用戶的原有使用邏輯。以下緩存池的介紹,均為底層邏輯。
在沒有緩存池時,ceph client 直接指向存儲池。
在添加緩存池後,ceph client 指向緩存池,緩存池再指向存儲池。

官方原話:
When pg_num is increased for any pool, every PG of this pool splits into half, but they all remain mapped to their parent OSD.
Until this time, Ceph does not start rebalancing. Now, when you increase the pgp_num value for the same pool, PGs start to migrate from the parent to some other OSD, and cluster rebalancing starts. This is how PGP plays an important role.
By Karan Singh
個人翻譯:
當一個池增加 pg 數量時,這個池中的所有 pg 都會變化。但是原 pg 的實際物理存儲位置不會改變。
當一個池增加 pgp 的數量時,pg 的實際物理存儲位置會發生改變。

首先,截至目前,沒有具體查到資料證明以下觀點。(基於一致性hash的猜想)

圖中出現了一個新詞: vosd ,這個是指虛擬 osd。它的數量等於 pgp 的數量,而 pgp 一般又等於 pg。

pgp 的數量就是 vosd 的數量。

引入 pg 可以實現 pool 概念,以及優化碎片管理(這一點十分不確定)。

引入 pgp(vosd),是為了在增加 osd 時可以讓數據更加均衡的分布。

如猜想圖:
當我們增加池的 pg 數量時,不會改變 vosd,因此原 pg 與 vosd 之間的映射未變,原 pg 的實際物理位置也不會發生變化。只是會影響同一個池中 obj 的分布。
當我們增加池的 pgp 數量時,相當於改變了 vosd,通過 hash 計算出的部分 pg 與 vosd 之間的映射就要發生改變,從而導致 pg 的實際物理位置發生改變。

與一致性hash不同的地方:
一般情況下,一致性hash只有一層虛擬化層,並且虛擬化層是根據物理硬體而變化的。但是ceph卻是一種反著來的意思。

當 ceph 增加一個 osd 時,pg 的物理位置也會發生改變。
在該猜想下:
當增加 osd 時,並不會增加 vosd 的數量,原部分 vosd 會映射到新的 osd 上,因此產生一種部分 pg 的實際物理位置發生變化的情況。

創建池時,會分配固定的 pg,以及設置與 pg 一樣大小的 pgp。
注意,一般 pg 數量都設置為 2 的次方。

嚴格意義上,我們無論為池分配多少個 pg 都沒有問題。但有時候 pg num 配置小了會報錯,配置大了也會報錯。這不是因為這么配置不對,是因為有其它的參數在限制我們隨意配置 pg num。

比如:
osd 有兩個配置,當每個 osd 的 pg num 過少(默認30)時會告警,當每個 osd 的 pg num 過多(默認300)也會告警。

所以,想要入門使用 ceph,還是需要了解許多基礎知識才可以。否則,各種意外。

https://docs.ceph.com/docs/master/architecture/

https://ceph.com/pgcalc/

4. 雲計算分布式存儲是用ceph還是hadoop

雲計算的開發需要多種語言共同參與,HADOOP在雲計算產品中只是一個底層框架,適合做雲盤、分布式計算等底層業務。很少有一種雲產品只用一種開發語言解決所有問題的,襪緩語言只是工具,關鍵是要學會在不同的應用場景下,如何正確選擇合適的工具。雲產品的框架有很多,比如OpenStack是用Python寫的,Hadoop是用Java寫的。

Ceph架構簡介及其特點

Ceph簡介

Ceph是一個統一的分布式存儲系統,設計初衷是提供較好的性能、可靠性和可擴展性。

Ceph項目最早起源於Sage就讀博士期間的工作(最早的成果於2004年發表),並隨後貢獻給開源社區。在經過了數年的發展之後,目前已得到眾多雲計算廠商的支持並被廣泛應用。RedHat及OpenStack都可與Ceph整合以支持虛擬機鏡像的後端存儲。

Ceph特點

高性能

a.摒棄了傳統的集中式存儲元數據定址的方案,採用CRUSH演算法,數據分布均衡,並行度高。

b.考慮茄好祥了容災域的隔離,能夠實現各類負載的副本放置規則,例如跨機房、機架感知等。

c.能夠支持上千個存儲節點的規模,支持TB到PB級的數據。

高可用性

a.副本數可以靈活控制顫搏。

b.支持故障域分隔,數據強一致性。

c.多種故障場景自動進行修復自愈。

d.沒有單點故障,自動管理。

高可擴展性

a.去中心化。

b.擴展靈活。

c.隨著節點增加而線性增長。

特性豐富

a.支持三種存儲介面:塊存儲、文件存儲、對象存儲。

b.支持自定義介面,支持多種語言驅動。

Hadoop簡介及其特點

Hadoop是一個由Apache基金會所開發的分布式系統基礎架構。用戶可以在不了解分布式底層細節的情況下,開發分布式程序。充分利用集群的威力進行高速運算和存儲。Hadoop實現了一個分布式文件系統(HadoopDistributedFileSystem),簡稱HDFS。

HDFS有高容錯性的特點,並且設計用來部署在低廉的(low-cost)硬體上;而且它提供高吞吐量(highthroughput)來訪問應用程序的數據,適合那些有著超大數據集(largedataset)的應用程序。HDFS放寬了(relax)POSIX的要求,可以以流的形式訪問(streamingaccess)文件系統中的數據。Hadoop的框架最核心的設計就是:HDFS和MapRece。HDFS為海量的數據提供了存儲,而MapRece則為海量的數據提供了計算。

雲計算的開發語言多樣

hadoop和雲計算是兩回事,HADOOP開發首選JAVA,次選C/C++或者Python雲計算就復雜了,不同的應用又不同額選擇。很少有一種雲產品只用一種開發語言解決所有問題的語言只是工具,關鍵是要學會在不同的應用場景下,如何正確選擇合適的工具。雲產品的框架有很多,比如OpenStack是用Python寫的,Hadoop是用Java寫的。

HADOOP在雲計算產品中只是一個底層框架,適合做雲盤、分布式計算等底層業務。中間層和上層用什麼語言開發取決產品的特性和技術人員的技術特點。

5. CentOS 7部署 Ceph分布式存儲架構

隨著OpenStack日漸成為開源雲計算的標准軟體棧,Ceph也已經成為OpenStack的首選後端存儲。Ceph是一種為優秀的性能、可靠性和可擴展性而設計的統一的、分布式文件系統。

Ceph是一個開源的分布式文件系統。因為它還支持塊存儲、對象存儲,所以很自然的被用做雲計算框架openstack或cloudstack整個存儲後端。當然也可以單獨作為存儲,例如部署一套集群作為對象存儲、SAN存儲、NAS存儲等。

前三台伺服器增加一塊硬碟/dev/sdb實驗, 創建目錄並掛載到/var/local/osd{1,2,3};

規范系統主機名添加hosts文件實現集群主機名與主機名之間相互能夠解析(host 文件添加主機名不要使用fqdn方式)可用 hostnamectl set-hostname [name] 設置分別打開各節點的 /etc/hosts 文件,加入這四個節點ip與名稱的對應關系:

在管理節點使用ssh-keygen 生成ssh keys 發布到各節點

第一步:增加 yum配置文件(各個節點都需要增加yum源) vim /etc/yum.repos.d/ceph.repo

或阿里的ceph源

復制配置文件到其它節點和客戶端

在ceph1更新軟體源並安裝ceph-deploy 管理工具

配置文件的默認副本數從3改成2,這樣只有兩個osd也能達到 active+clean 狀態,添加行 osd_pool_default_size = 2

(如果網路源安裝失敗,手工安裝epel-release 然後安裝yum –yinstall cep-release再yum –y install ceph ceph-radosgw)
錯誤參考: https://blog.csdn.net/yenai2008/article/details/72457463

添加osd節點 (所有osd節點執行)
我們實驗准備時已經創建目錄/var/local/osd{id}

(用ceph-deploy把配置文件和admin密鑰拷貝到所有節點,這樣每次執行Ceph命令行時就無需指定monitor地址和ceph.client.admin.keyring了)

以上基本上完成了ceph存儲集群的搭建。

其中: <pg_num> = 128 ,
關於創建存儲池
確定 pg_num 取值是強制性的,因為不能自動計算。下面是幾個常用的值:

隨著 OSD 數量的增加,正確的 pg_num 取值變得更加重要,因為它顯著地影響著集群的行為、以及出錯時的數據持久性(即災難性事件導致數據丟失的概率)。

創建好存儲池後,你就可以用 fs new 命令創建文件系統了
ceph fs new <fs_name> cephfs_metadata cephfs_data
其中: <fs_name> = cephfs 可自定義

在這里想起沒在/etc/fstab配置ceph1、ceph2、ceph3的sdb自動掛載。

ceph在開源社區還是比較熱門的,但是更多的是應用於雲計算的後端存儲。所以大多數在生產環境中使用ceph的公司都會有專門的團隊對ceph進行二次開發,ceph的運維難度也比較大。但是經過合理的優化之後,ceph的性能和穩定性都是值得期待的。

清理機器上的ceph相關配置

可以參考內容: http://blog.51cto.com/12270625/1887648

6. ceph(第二步) 三節點部署(ceph-deploy)

使用 ceph-deploy 工具部署 ceph 存儲集群。

使用虛擬機構建三節點 ceph 存儲集群。

全篇使用 root 許可權。

虛擬化軟體:vmware
虛擬機操作系統:centos 7.6
每台虛擬機配置:2G內存,1塊系統盤(50G),2塊ceph將使用的硬碟(每塊20G)
虛擬機網路:一條虛擬機間互通,並且可以上網的網路即可(NAT)。
總共三台虛擬機:ceph01、ceph02、ceph03

ceph 版本:nautilus
ceph-deploy 版本:2.0.1

當前時間: 2019.10

部署過程整體描述:
首先選出一台機器作為部族神署節點,部署節點負責為機器部署 ceph 軟體。這里直接選擇 ceph01 作為部署節點。

我這里 ceph01、ceph02、ceph03 對應的地址分別為:
10.10.10.31、10.10.10.32、10.10.10.33

所有機器均關閉掉防火牆。

所有機器均配置 yum 國內加速源:

所有機器均配置 pip 國內加速源:

這里配置的是部署節點到其它機器間的主機解析。

vim /etc/hosts 添加如下內容:

這里配置的是部署節點到其它機器間的免密登錄。

注意:以下每行命令執行後都需要輸入密碼,不能直接全部復制粘貼。

命令參考如下,盡量每個節點都測試一兆拿虧下

所有機器執行如下命令:

注意!當前步驟十分重要。

在 ceph 中讀取了 hostname 命令產生的結果。
因此在每個節點上均需修改自己的 hostname。命令參考:

進入到 ceph01 節點上:

按照此方法修改其它節點的 hostname。

主要分兩步:
第一步,安裝 ceph-deploy
第二步,使用 ceph-deploy 安裝 ceph 組件。

該步驟所有命令均在部署節點上執行。

安裝 ceph-deploy:

該步驟所有命令均在部署節點上執行。

vim /opt/ceph-deploy/ceph.conf
在 global 中增加:

當前命令執行以後,可以在當前目錄下發現許多的 keyring 文件,這是連接其它節點的憑據。以後的 ceph-deploy 命令均在當前目錄下執行才可正常使用。

將當前臨時文件夾下的配置文件同步到所有節點的 /etc/ceph/ 下

我這個環境有三台虛擬機,每台虛擬機敏橘上有額外2塊硬碟用於 ceph 集群,它們是 sdb、sdc。這個要根據自己的環境找到正確的硬碟。

命令參考如下:

其中 /dev/sdb ceph01 ,表示 ceph01 節點上的 /dev/sdb 硬碟。

命令執行完以後,基礎的環境就算搭建完成了。可以執行如下命令查看集群的狀態:
ceph 健康: ceph health
ceph 集群詳細狀態:ceph -s
ceph 集群 osd 狀態:ceph osd tree

至此,該集群還處於一個基礎的狀態,並不能正常使用。

接下來需要配置 ceph pool 相關信息,以及安裝配置 rgw 從而使用對象存儲功能。

vim /opt/ceph-deploy/ceph.conf
在 global 中增加如下:

其中 pg num 需要計算得出,pgp num 與 pg num 保持一致。

粗略的計算方法:
( osd 數量 * 100 ) / 池副本數。

同步配置文件:

vim /opt/ceph-deploy/ceph.conf
增加如下內容:

整體配置如下:

安裝 rgw:

至此,我們可以去創建一個 pool,並上傳文件測試集群了。

這個時候執行 ceph -s
可以看到集群報了 warn 信息,如下:

這不是因為我們哪裡配置有問題,這是 ceph 的某個告警配置。當某個 osd 的 pg 小於 30 時會發出告警。現在可以忽略這個問題。ceph 提供這個配置,可能是擔心集群在未來使用中出現 pg 分布不均勻的情況。
參考:
https://docs.ceph.com/docs/master/rados/configuration/pool-pg-config-ref/

查看池列表:ceph osd lspools

ceph 默認的池已經創建一些 pg。為了解決前面的告警,我們需要滿足每個 osd 都有超過30個 pg,因此創建一個具有80個 pg 的池。

(此時用 ceph -s 可以看到集群狀態又是 HEALTH_OK 了)

命令參考:

可以看到文件已經上傳上去了,並且叫 test-object-1

rados get test-object-1 /tmp/test-object-1 -p mytest

可以看到兩個文件的內容是一樣的,到此,基本的部署及使用均正常了。

在 ceph 中,hostname 是一個非常重要的屬性。

hostname 命令只可以臨時改變當前主機的主機名,並不會永久生效。

目前已知兩種方式會永久影響主機名。

第一種情況,很直觀,不再多做介紹。

第二種情況時:

這樣的配置,會讓通過 10.10.10.31 地址訪問進來的連接所識別到的主機名改為 ceph01。

在本環境中,不同的 ceph 節點之間通過 10.10.10.0/24 地址進行通信,所以只需要為該地址配置主機名。

在 ceph 中,如果主機名混亂,會發生什麼?
ceph osd tree 這個命令可以讓你看到主機名混亂帶來的後果:

如果糟糕的事情已經發生了,我們只需要修改好主機名,然後重啟機器,一切都會恢復正常:

第一種方式的優先順序高於第二種。
因此只需要更改 /etc/hostname 即可。文件內容參考如下:

7. Ceph為什麼越來越火國內使用ceph較為成功的存儲廠商有哪些

Ceph是當前非常流行的開源分布式存儲系統,具有高擴展性、高性能、高可靠性等優點,同時提供塊存儲服務(rbd)、對象存儲服務(rgw)以及文件系統存儲服務(cephfs)。目前也是OpenStack的主流後端存儲,隨著OpenStack在雲計算領域的廣泛使用,ceph也變得更加炙手可熱。國內目前使用ceph搭建分布式存儲系統較為成功的企業有x-sky,深圳元核雲,上海UCloud等三家企業。

熱點內容
為什麼路由器的密碼是五位數 發布:2025-02-02 08:32:30 瀏覽:719
怎樣編程選股 發布:2025-02-02 08:22:02 瀏覽:416
電腦web應用伺服器 發布:2025-02-02 08:05:31 瀏覽:811
電腦存儲內存多少合適 發布:2025-02-02 08:00:15 瀏覽:110
登錄界面android 發布:2025-02-02 07:53:23 瀏覽:842
編譯時註解與運行時註解 發布:2025-02-02 07:53:14 瀏覽:818
怎樣登陸ftp 發布:2025-02-02 07:44:44 瀏覽:637
瘋狂點擊腳本 發布:2025-02-02 07:38:10 瀏覽:73
pss演算法 發布:2025-02-02 07:30:55 瀏覽:748
發信息腳本 發布:2025-02-02 07:03:07 瀏覽:741