官术网_书友最值得收藏!

icon1

1.1 Ceph概述

1.Ceph簡介

從2004年提交第一行代碼開始到現在,Ceph已經是一個有著十年之久的分布式存儲系統軟件,目前Ceph已經發展為開源存儲界的當紅明星,當然這與它的設計思想以及OpenStack的推動有關。

“Ceph is a unified, distributed storage system designed for excellent performance, reliability and scalability.”這句話說出了Ceph的特性,它是可靠的、可擴展的、統一的、分布式的存儲系統。Ceph可以同時提供對象存儲RADOSGW(Reliable、Autonomic、Distributed、Object Storage Gateway)、塊存儲RBD(Rados Block Device)、文件系統存儲Ceph FS(Ceph Filesystem)3種功能,以此來滿足不同的應用需求。

Ceph消除了對系統單一中心節點的依賴,從而實現了真正的無中心結構的設計思想,這也是其他分布式存儲系統所不能比的。通過后續章節內容的介紹,你可以看到,Ceph幾乎所有優秀特性的實現,都與其核心設計思想有關。

OpenStack是目前最為流行的開源云平臺軟件。Ceph的飛速發展離不開OpenStack的帶動。目前而言,Ceph已經成為OpenStack的標配開源存儲方案之一,其實際應用主要涉及塊存儲和對象存儲,并且開始向文件系統領域擴展。這一部分的相關情況,在后續章節中也將進行介紹。

2.Ceph的發展

Ceph是加州大學Santa Cruz分校的Sage Weil(DreamHost的聯合創始人)專為博士論文設計的新一代自由軟件分布式文件系統。

2004年,Ceph項目開始,提交了第一行代碼。

2006年,OSDI學術會議上,Sage發表了介紹Ceph的論文,并在該篇論文的末尾提供了Ceph項目的下載鏈接。

2010年,Linus Torvalds將Ceph Client合并到內核2.6.34中,使Linux與Ceph磨合度更高。

2012年,擁抱OpenStack,進入Cinder項目,成為重要的存儲驅動。

2014年,Ceph正趕上OpenStack大熱,受到各大廠商的“待見”,吸引來自不同廠商越來越多的開發者加入,Intel、SanDisk等公司都參與其中,同時Inktank公司被Red Hat公司1.75億美元收購。

2015年,Red Hat宣布成立Ceph顧問委員會,成員包括Canonical、CERN、Cisco、Fujitsu、Intel、SanDisk和SUSE。Ceph顧問委員會將負責Ceph軟件定義存儲項目的廣泛議題,目標是使Ceph成為云存儲系統。

2016年,OpenStack社區調查報告公布,Ceph仍為存儲首選,這已經是Ceph第5次位居調查的首位了。

3.Ceph應用場景

Ceph可以提供對象存儲、塊設備存儲和文件系統服務,其對象存儲可以對接網盤(owncloud)應用業務等;其塊設備存儲可以對接(IaaS),當前主流的IaaS云平臺軟件,例如OpenStack、CloudStack、Zstack、Eucalyptus等以及KVM等,本書后續章節中將介紹OpenStack、CloudStack、Zstack和KVM的對接;其文件系統文件尚不成熟,官方不建議在生產環境下使用。

4.Ceph生態系統

Ceph作為開源項目,其遵循LGPL協議,使用C++語言開發,目前Ceph已經成為最廣泛的全球開源軟件定義存儲項目,擁有得到眾多IT廠商支持的協同開發模式。目前Ceph社區有超過40個公司的上百名開發者持續貢獻代碼,平均每星期的代碼commits超過150個,每個版本通常在2000個commits左右,代碼增減行數在10萬行以上。在過去的幾個版本發布中,貢獻者的數量和參與公司明顯增加,如圖1-1所示。

圖1-1 部分廠商和軟件

5.Ceph用戶群

Ceph成為了開源存儲的當紅明星,國內外已經擁有眾多用戶群體,下面簡單說一下Ceph的用戶群。

(1)國外用戶群

1)CERN:CERN IT部門在2013年年中開始就運行了一個單一集群超過10000個VM和100000個CPU Cores的云平臺,主要用來做物理數據分析。這個集群后端Ceph包括3PB的原始容量,在云平臺中作為1000多個Cinder卷和1500多個Glance鏡像的存儲池。在2015年開始測試單一30 PB的塊存儲RBD集群。

2)DreamHost:DreamHost從2012年開始運行基于Ceph RADOSGW的大規模對象存儲集群,單一集群在3PB以下,大約由不到10機房集群組成,直接為客戶提供對象存儲服務。

3)Yahoo Flick:Yahoo Flick自2013年開始逐漸試用Ceph對象存儲替換原有的商業存儲,目前大約由10機房構成,每個機房在1PB~2PB,存儲了大約2500億個對象。

4)大學用戶:奧地利的因斯布魯克大學、法國的洛林大學等。

(2)國內用戶群

1)以OpenStack為核心的云廠商:例如UnitedStack、Awcloud等國內云計算廠商。

2)Ceph產品廠商:SanDisk、XSKY、H3C、杉巖數據、SUSE和Bigtera等Ceph廠商。

3)互聯網企業:騰訊、京東、新浪微博、樂視、完美世界、平安科技、聯想、唯品會、福彩網和魅族等國內互聯網企業。

6.社區項目開發迭代

目前Ceph社區采用每半年一個版本發布的方式來進行特性和功能的開發,每個版本發布需要經歷設計、開發、新功能凍結,持續若干個版本的Bug修復周期后正式發布下一個穩定版本。其發布方式跟OpenStack差不多,也是每半年發布一個新版本。

Ceph會維護多個穩定版本來保證持續的Bug修復,以此來保證用戶的存儲安全,同時社區會有一個發布穩定版本的團隊來維護已發布的版本,每個涉及之前版本的Bug都會被該團隊移植回穩定版本,并且經過完整QA測試后發布下一個穩定版本。

代碼提交都需要經過單元測試,模塊維護者審核,并通過QA測試子集后才能合并到主線。社區維護一個較大規模的測試集群來保證代碼質量,豐富的測試案例和錯誤注入機制保證了項目的穩定可靠。

7.Ceph版本

Ceph正處于持續開發中并且迅速提升。2012年7月3日,Sage發布了Ceph第一個LTS版本:Argonaut。從那時起,陸續又發布了9個新版本。Ceph版本被分為LTS(長期穩定版)以及開發版本,Ceph每隔一段時間就會發布一個長期穩定版。Ceph版本具體信息見表1-1。欲了解更多信息,請訪問https://Ceph.com/category/releases/。

表1-1 Ceph版本信息

1.2 Ceph的功能組件

Ceph提供了RADOS、OSD、MON、LIBRADOS、RBD、RGW和Ceph FS等功能組件,但其底層仍然使用RADOS存儲來支撐上層的那些組件,如圖1-2所示。

圖1-2 Ceph功能組件的整體架構

下面分為兩部分來講述Ceph的功能組件。

(1)Ceph核心組件

在Ceph存儲中,包含了幾個重要的核心組件,分別是Ceph OSD、Ceph Monitor和Ceph MDS。一個Ceph的存儲集群至少需要一個Ceph Monitor和至少兩個Ceph的OSD。運行Ceph文件系統的客戶端時,Ceph的元數據服務器(MDS)是必不可少的。下面來詳細介紹一下各個核心組件。

?Ceph OSD:全稱是Object Storage Device,主要功能包括存儲數據,處理數據的復制、恢復、回補、平衡數據分布,并將一些相關數據提供給Ceph Monitor,例如Ceph OSD心跳等。一個Ceph的存儲集群,至少需要兩個Ceph OSD來實現active +clean健康狀態和有效的保存數據的雙副本(默認情況下是雙副本,可以調整)。注意:每一個Disk、分區都可以成為一個OSD。

?Ceph Monitor:Ceph的監控器,主要功能是維護整個集群健康狀態,提供一致性的決策,包含了Monitor map、OSD map、PG(Placement Group)map和CRUSH map。

?Ceph MDS:全稱是Ceph Metadata Server,主要保存的是Ceph文件系統(File System)的元數據(metadata)。溫馨提示:Ceph的塊存儲和Ceph的對象存儲都不需要Ceph MDS。Ceph MDS為基于POSIX文件系統的用戶提供了一些基礎命令,例如ls、find等命令。

(2)Ceph功能特性

Ceph可以同時提供對象存儲RADOSGW(Reliable、Autonomic、Distributed、Object Storage Gateway)、塊存儲RBD(Rados Block Device)、文件系統存儲Ceph FS(Ceph File System)3種功能,由此產生了對應的實際場景,本節簡單介紹如下。

RADOSGW功能特性基于LIBRADOS之上,提供當前流行的RESTful協議的網關,并且兼容S3和Swift接口,作為對象存儲,可以對接網盤類應用以及HLS流媒體應用等。

RBD(Rados Block Device)功能特性也是基于LIBRADOS之上,通過LIBRBD創建一個塊設備,通過QEMU/KVM附加到VM上,作為傳統的塊設備來用。目前OpenStack、CloudStack等都是采用這種方式來為VM提供塊設備,同時也支持快照、COW(Copy On Write)等功能。

Ceph FS(Ceph File System)功能特性是基于RADOS來實現分布式的文件系統,引入了MDS(Metadata Server),主要為兼容POSIX文件系統提供元數據。一般都是當做文件系統來掛載。

后面章節會對這幾種特性以及對應的實際場景做詳細的介紹和分析。

1.3 Ceph架構和設計思想

1.Ceph架構

Ceph底層核心是RADOS。Ceph架構圖如圖1-3所示。

圖1-3 Ceph架構圖

?RADOS:RADOS具備自我修復等特性,提供了一個可靠、自動、智能的分布式存儲。

?LIBRADOS:LIBRADOS庫允許應用程序直接訪問,支持C/C++、Java和Python等語言。

?RADOSGW:RADOSGW是一套基于當前流行的RESTful協議的網關,并且兼容S3和Swift。

?RBD:RBD通過Linux內核(Kernel)客戶端和QEMU/KVM驅動,來提供一個完全分布式的塊設備。

?Ceph FS:Ceph FS通過Linux內核(Kernel)客戶端結合FUSE,來提供一個兼容POSIX的文件系統。

具體的RADOS細節以及RADOS的靈魂CRUSH(Controlled Replication Under Scalable Hashing,可擴展哈希算法的可控復制)算法,這兩個知識點會在后面的第2、3章詳細介紹和分析。

2.Ceph設計思想

Ceph是一個典型的起源于學術研究課題的開源項目。雖然學術研究生涯對于Sage而言只是其光輝事跡的短短一篇,但畢竟還是有幾篇學術論文可供參考的。可以根據Sage的幾篇論文分析Ceph的設計思想。

理解Ceph的設計思想,首先還是要了解Sage設計Ceph時所針對的應用場景,換句話說,Sage當初做Ceph的初衷的什么?

事實上,Ceph最初針對的應用場景,就是大規模的、分布式的存儲系統。所謂“大規?!焙汀胺植际健?,至少是能夠承載PB級別的數據和成千上萬的存儲節點組成的存儲集群。

如今云計算、大數據在中國發展得如火如荼,PB容量單位早已經進入國內企業存儲采購單,DT時代即將來臨。Ceph項目起源于2004年,那是一個商用處理器以單核為主流,常見硬盤容量只有幾十GB的年代。當時SSD也沒有大規模商用,正因如此,Ceph之前版本對SSD的支持不是很好,發揮不了SSD的性能。如今Ceph高性能面臨的最大挑戰正是這些歷史原因,目前社區和業界正在逐步解決這些性能上的限制。

在Sage的思想中,我們首先說一下Ceph的技術特性,總體表現在集群可靠性、集群擴展性、數據安全性、接口統一性4個方面。

?集群可靠性:所謂“可靠性”,首先從用戶角度來說數據是第一位的,要盡可能保證數據不會丟失。其次,就是數據寫入過程中的可靠性,在用戶將數據寫入Ceph存儲系統的過程中,不會因為意外情況出現而造成數據丟失。最后,就是降低不可控物理因素的可靠性,避免因為機器斷電等不可控物理因素而產生的數據丟失。

?集群可擴展性:這里的“可擴展”概念是廣義的,既包括系統規模和存儲容量的可擴展,也包括隨著系統節點數增加的聚合數據訪問帶寬的線性擴展。

?數據安全性:所謂“數據安全性”,首先要保證由于服務器死機或者是偶然停電等自然因素的產生,數據不會丟失,并且支持數據自動恢復,自動重平衡等??傮w而言,這一特性既保證了系統的高度可靠和數據絕對安全,又保證了在系統規模擴大之后,其運維難度仍能保持在一個相對較低的水平。

?接口統一性:所謂“接口統一”,本書開頭就說到了Ceph可以同時支持3種存儲,即塊存儲、對象存儲和文件存儲。Ceph支持市面上所有流行的存儲類型。

根據上述技術特性以及Sage的論文,我們來分析一下Ceph的設計思路,概述為兩點:充分發揮存儲本身計算能力和去除所有的中心點。

?充分發揮存儲設備自身的計算能力:其實就是采用廉價的設備和具有計算能力的設備(最簡單的例子就是普通的服務器)作為存儲系統的存儲節點。Sage認為當前階段只是將這些服務器當做功能簡單的存儲節點,從而產生資源過度浪費(如同虛擬化的思想一樣,都是為了避免資源浪費)。而如果充分發揮節點上的計算能力,則可以實現前面提出的技術特性。這一點成為了Ceph系統設計的核心思想。

?去除所有的中心點:搞IT的最忌諱的就是單點故障,如果系統中出現中心點,一方面會引入單點故障,另一方面也必然面臨著當系統規模擴大時的可擴展性和性能瓶頸。除此之外,如果中心點出現在數據訪問的關鍵路徑上,也必然導致數據訪問的延遲增大。雖然在大多數存儲軟件實踐中,單點故障點和性能瓶頸的問題可以通過為中心點增加HA或備份加以緩解,但Ceph系統最終采用Crush、Hash環等方法更徹底地解決了這個問題。很顯然Sage的眼光和設想還是很超前的。

1.4 Ceph快速安裝

在Ceph官網上提供了兩種安裝方式:快速安裝和手動安裝??焖侔惭b采用Ceph-Deploy工具來部署;手動安裝采用官方教程一步一步來安裝部署Ceph集群,過于煩瑣但有助于加深印象,如同手動部署OpenStack一樣。但是,建議新手和初學者采用第一種方式快速部署并且測試,下面會介紹如何使用Ceph-Deploy工具來快速部署Ceph集群。

1.4.1 Ubuntu/Debian安裝

本節將介紹如何使用Ceph-Deploy工具來快速部署Ceph集群,開始之前先普及一下Ceph-Deploy工具的知識。Ceph-Deploy工具通過SSH方式連接到各節點服務器上,通過執行一系列腳本來完成Ceph集群部署。Ceph-Deploy簡單易用同時也是Ceph官網推薦的默認安裝工具。本節先來講下在Ubuntu/Debian系統下如何快速安裝Ceph集群。

1)配置Ceph APT源。

root@localhos`t:~#  echo  deb  http://ceph.com/debian-{ceph-stable-release}/
$(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list

2)添加APT源key。

root@localhost:~#  wget  –q  –O  -'https://ceph.com/git/? p=ceph.git; a=blob_
plain; f=keys/release.asc' | sudo apt-key add -

3)更新源并且安裝ceph-deploy。

root@localhost:~# sudo apt-get update &&sudo apt-get install ceph-deploy -y

4)配置各個節點hosts文件。

root@localhost:~# cat /etc/hosts
192.168.1.2  node1
192.168.1.3  node2
192.168.1.4  node3

5)配置各節點SSH無密碼登錄,這就是本節開始時講到的Ceph-Deploy工具要用過SSH方式連接到各節點服務器,來安裝部署集群。輸完ssh-keygen命令之后,在命令行會輸出以下內容。

root@localhost:~# ssh-keygen
Generating public/private key pair.
Enter file in which to save the key (/ceph-client/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /ceph-client/.ssh/id_rsa.
Your public key has been saved in /ceph-client/.ssh/id_rsa.pub

6)復制key到各節點。

root@localhost:~# ssh-copy-idnode1
root@localhost:~# ssh-copy-idnode2
root@localhost:~# ssh-copy-idnode3

7)在執行ceph-deploy的過程中會生成一些配置文件,建議創建一個目錄,例如my-cluster。

root@localhost:~# mkdir my-cluster
root@localhost:~# cd my-cluster

8)創建集群(Cluster),部署新的monitor節點。

root@localhost:~# ceph-deploy new {initial-monitor-node(s)}

例如:

root@localhost:~# ceph-deploy new node1

9)配置Ceph.conf配置文件,示例文件是默認的,可以根據自己情況進行相應調整和添加。具體優化情況本書后面會介紹。

[global]
fsid = 67d997c9-dc13-4edf-a35f-76fd693aa118
mon_initial_members = node1, node2
mon_host = 192.168.1.2,192.168.1.3
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
filestore_xattr_use_omap = true
<! -----以上部分都是ceph-deploy默認生成的---->
public network = {ip-address}/{netmask}
cluster network={ip-addesss}/{netmask}
<! -----以上兩個網絡是新增部分,默認只是添加public network,一般生產都是定義兩個網絡,集
群網絡和數據網絡分開-------->
[osd]
……
[mon]
……

這里配置文件不再過多敘述。

10)安裝Ceph到各節點。

root@localhost:~# ceph-deploy install {ceph-node}[{ceph-node} ...]

例如:

root@localhost:~# ceph-deploy install node1 node2 node3

11)獲取密鑰key,會在my-cluster目錄下生成幾個key。

root@localhost:~# ceph-deploy mon create-initial

12)初始化磁盤。

root@localhost:~# ceph-deploy disk zap {osd-server-name}:{disk-name}

例如:

root@localhost:~# ceph-deploy disk zap node1:sdb

13)準備OSD。

root@localhost:~# ceph-deploy osd prepare {node-name}:{data-disk}[:{journal-disk}]

例如:

root@localhost:~# ceph-deploy osd prepare node1:sdb1:sdc

14)激活OSD。

root@localhost:~# ceph-deploy osd activate {node-name}:{data-disk-partition}[:{journal-disk-partition}]

例如:

root@localhost:~# ceph-deploy osd activate node1:sdb1:sdc

15)分發key。

root@localhost:~# ceph-deploy admin {admin-node} {ceph-node}

例如:

root@localhost:~# ceph-deploy admin node1 node2 node3

16)給admin key賦權限。

root@localhost:~# sudo chmod +r /etc/ceph/ceph.client.admin.keyring

17)查看集群健康狀態,如果是active+clean狀態就是正常的。

root@localhost:~# ceph health

提示

安裝Ceph前提條件如下。

① 時間要求很高,建議在部署Ceph集群的時候提前配置好NTP服務器。

② 對網絡要求一般,因為Ceph源在外國有時候會被屏蔽,解決辦法多嘗試機器或者代理。

1.4.2 RHEL/CentOS安裝

本節主要講一下在RHEL/CentOS系統下如何快速安裝Ceph集群。

1)配置Ceph YUM源。

root@localhost:~# vim /etc/yum.repos.d/ceph.repo
[ceph-noarch]
name=Cephnoarch packages
baseurl=http://ceph.com/rpm-{ceph-release}/{distro}/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://ceph.com/git/? p=ceph.git; a=blob_plain; f=keys/release.asc

2)更新源并且安裝ceph-deploy。

root@localhost:~# yum update &&yum install ceph-deploy -y

3)配置各個節點hosts文件。

root@localhost:~# cat /etc/hosts
192.168.1.2  node1
192.168.1.3  node2
192.168.1.4  node3

4)配置各節點SSH無密碼登錄,通過SSH方式連接到各節點服務器,以安裝部署集群。輸入ssh-keygen命令,在命令行會輸出以下內容。

root@localhost:~# ssh-keygen
Generating public/private key pair.
Enter file in which to save the key (/ceph-client/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /ceph-client/.ssh/id_rsa.
Your public key has been saved in /ceph-client/.ssh/id_rsa.pub

5)拷貝key到各節點。

root@localhost:~# ssh-copy-id node1
root@localhost:~# ssh-copy-id node2
root@localhost:~# ssh-copy-id node3

6)在執行ceph-deploy的過程中會生成一些配置文件,建議創建一個目錄,例如my-cluster。

root@localhost:~# mkdir my-cluster
root@localhost:~# cd my-cluster

7)創建集群(Cluster),部署新的monitor節點。

root@localhost:~# ceph-deploy new {initial-monitor-node(s)}

例如:

root@localhost:~# ceph-deploy new node1

8)配置Ceph.conf配置文件,示例文件是默認的,可以根據自己情況進行相應調整和添加。具體優化情況本書后面會介紹。

[global]
fsid = 67d997c9-dc13-4edf-a35f-76fd693aa118
mon_initial_members = node1, node2
mon_host = 192.168.1.2,192.168.1.3
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
filestore_xattr_use_omap = true
<! -----以上部分都是ceph-deploy默認生成的---->
public network = {ip-address}/{netmask}
cluster network={ip-addesss}/{netmask}
<! -----以上兩個網絡是新增部分,默認只是添加public network,一般生產都是定義兩個網絡,集群網絡和數據網絡分開-------->
[osd]
……
[mon]
……

這里配置文件不再過多敘述。

9)安裝Ceph到各節點。

root@localhost:~# ceph-deploy install {ceph-node}[{ceph-node} ...]

例如:

root@localhost:~# ceph-deploy install node1 node2 node3

10)獲取密鑰key,會在my-cluster目錄下生成幾個key。

root@localhost:~# ceph-deploy mon create-initial

11)初始化磁盤。

root@localhost:~# ceph-deploy disk zap {osd-server-name}:{disk-name}

例如:

root@localhost:~# ceph-deploy disk zap node1:sdb

12)準備OSD。

root@localhost:~# ceph-deploy osd prepare {node-name}:{data-disk}[:{journal-disk}]

例如:

root@localhost:~# ceph-deploy osd prepare node1:sdb1:sdc

13)激活OSD。

root@localhost:~# ceph-deploy osd activate {node-name}:{data-disk-partition}[:{journal-disk-partition}]

例如:

root@localhost:~# ceph-deploy osd activate node1:sdb1:sdc

14)分發key。

root@localhost:~# ceph-deploy admin {admin-node} {ceph-node}

例如:

root@localhost:~# ceph-deploy admin node1 node2 node3

15)給admin key賦權限。

root@localhost:~# sudo chmod +r /etc/ceph/ceph.client.admin.keyring

16)查看集群健康狀態,如果是active + clean狀態就是正常的。

root@localhost:~# ceph health

1.5 本章小結

本章主要從Ceph的歷史背景、發展事件、Ceph的架構組件、功能特性以及Ceph的設計思想方面介紹了Ceph,讓大家對Ceph有一個全新的認識,以便后面更深入地了解Ceph。

主站蜘蛛池模板: 南澳县| 五大连池市| 太谷县| 富民县| 湘潭县| 乐亭县| 德江县| 赣榆县| 澄江县| 泰和县| 八宿县| 周宁县| 甘肃省| 上思县| 秦皇岛市| 韶山市| 金沙县| 乌兰察布市| 密云县| 沈阳市| 中牟县| 石家庄市| 永城市| 华容县| 隆化县| 哈尔滨市| 拉萨市| 乐清市| 武定县| 澜沧| 岳阳市| 府谷县| 东乌珠穆沁旗| 建湖县| 霍邱县| 逊克县| 泸西县| 平塘县| 景德镇市| 万山特区| 长治市|