1. 概述node
從本篇文章開始介紹一款如今很是火的分佈式文件系統Ceph,包括這款文件系統的安裝、基本使用場景、經常使用管理命令和重要工做原理。特別是討論了PaxOS算法的基本理後,就更容易理解Ceph分佈式文件系統中各類角色的工做原理。算法
2. Ceph的安裝部署vim
本文將介紹Ceph分佈式文件系統如何在CentOS 7.X版本上一步一步完成安裝,使讀者在閱讀過程當中瞭解Ceph有哪些重要的子系統/工做模塊,以及它們是如何關聯工做的。請注意Ceph在Ubuntu等Linux操做系統上的安裝過程和注意點大體相同,但若是讀者和筆者一樣選擇在CentOS上安裝Ceph,那麼就請使用CentOS 7.X的版本,由於這個版本是Ceph官方介紹中推薦的,更重要的是CentOS 6.X已經不受支持了。緩存
2-1. 準備工做網絡
本文的演示中咱們將按照如下表格安裝一個三節點的Ceph分佈式文件系統,並綁定一個文件系統的客戶端進行文件讀寫操做。ssh
節點 IP地址 角色說明
vmnode1 172.16.71.182 MDN、MDS、OSD
vmnode2 172.16.71.183 MDN、MDS、OSD
vmnode3 172.16.71.184 MDN、MDS、OSD
client 172.16.71.1 Client 分佈式
以上表格中的角色縮寫若是目前看不懂也無所謂,在後續的安裝介紹中咱們將說明這些功能角色的做用。Ceph的安裝準備工做相對而言有一些繁瑣,若是每個節點都是全新的操做系統,那麼這些節點至少須要通過建立用戶、設置用戶無密碼登陸權限、變動Ceph下載倉庫、更新軟件倉庫等工做才能完成準備動做。其過程當中每每會出現一些錯誤,須要在安裝過程當中耐心解決,下面咱們就開始Ceph安裝前的準備工做。工具
2-1-1. 關於用戶測試
不管是測試環境仍是正式環境,安裝Ceph都不建議使用root帳號。因此第一步咱們須要專門建立一個用戶和用戶組,併爲這個用戶給定管理員權限。咱們建立一個用戶組ceph和一個專門用來運行Ceph各個模塊的用戶,用戶名也叫作cephui
[......]# groupadd ceph
[......]# useradd ceph -g ceph
[......]# passwd ceph
// 修改爲你想要的密碼
......123456123456
記得爲用戶設置root權限,既是在sudoers文件中加入相關配置信息:
[......]# vim /etc/sudoers
// 加入ceph的sudo權限
......
root ALL=(ALL) ALL
ceph ALL=(ALL) NOPASSWD:ALL
......12345671234567
參與Ceph構建的每一個節點都要設置相同的用戶信息,而且設置該用戶在各個節點間的無密碼登陸功能——這是由於後面Ceph-deploy的工做過程當中,將登陸到各個節點上執行命令。
[ceph@vmnode1 ~]$ ssh-keygen
// 操做系統會出現一些提示,回車就好了
[ceph@vmnode1 ~]$ cd ~/.ssh/
[ceph@vmnode1 .ssh]$ cat ./id_rsa.pub >> ./authorized_keys
// 必定要更改authorized_keys的訪問權限,否則無密碼登陸要失敗
[ceph@vmnode1 ~]$ chmod 600 ./authorized_keys
// 將authorized_keys copy到你將要登陸的操做系統上,注意用戶的home目錄要作對應12345671234567
關於無密碼登陸的設置過程就再也不深刻講解了,由於是很基本的ssh設置。主要原則就是保證authorized_keys文件的公鑰記錄信息和這個文件在幾個節點間的一致性。若是後續有新的節點加入到Ceph集羣中,而且也要承擔MDS Follower角色的工做,則一樣要設置這個新節點到各個節點的相互無密碼登陸功能。
2-1-2. 關於Ceph源和擴展組件
Ceph官網的下載速度奇慢,這實際上不怪Ceph,緣由你們也都懂,呵呵。一個辦法是設置國外的代理服務,有免費的,不過好用的仍是付費的。另外一個好消息是,Ceph有國內鏡像,例如163的和aliyun的。根據筆者觀察163的鏡像同步要比aliyun的鏡像同步及時,好比163的鏡像中已經有rpm-hammer/ceph-deploy-1.5.37的下載,可是aliyun的鏡像中最高版本只有ceph-deploy-1.5.36。經過如下環境變量的設置就可使用國內的鏡像(這個過程不會影響後續的任何安裝步驟):
# 你也能夠改爲國內其它Ceph鏡像
export CEPH_DEPLOY_REPO_URL
export CEPH_DEPLOY_GPG_URL
另外Ceph的安裝過程還須要至關的第三方組件依賴,其中一些第三方組件在CentOS yum.repo Base等官方源中是沒有的(例如LevelDB),因此讀者在安裝過程當中會有必定的概率遇到各類依賴關係異常,並要求先行安裝XXX第三方組件的提示(例如提示先安裝liblevel.so)。雖然咱們後文將會介紹的Ceph輔助部署工具,Ceph-deploy的工做本質仍是經過yum命令去安裝管理組件,可是既然CentOS yum.repo Base官方源中並無某些須要依賴的第三方組件,因此一旦遇到相似的組件依賴問題安裝過程就無法自動繼續了。解決這個問題,本示例中建議引入CentOS的第三方擴展源Epel。
# 關於Epel 擴展源的引入這裏不過作介紹了,網絡上的資料一大把。這裏給出一個「目前可用」(不保證多年後依然可用)的安裝地址,以及安裝後生成的repo配置片斷(本示例中的第三方擴展源匹配CentOS 7.X操做系統)。
http://dl.fedoraproject.org/p...
# repo文件的名字叫作epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl$basearch
mirrorlist=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
......123456789101112131415123456789101112131415
爲了保證擴展源中的組件與CentOS官方源中的組件不衝突,能夠調低擴展源的優先級。固然讀者也能夠自行手動解決Ceph安裝過程提示的組件依賴問題——使用rpm命令的方式。筆者試過,深入的體會到什麼叫生不如死。。。
設置倉庫後,須要更新倉庫緩存,以下:
[......]$ yum makecache
[......]$ yum update1212
2-1-3. 關於物理磁盤
Ceph是一種分佈式文件系統,既然是文件系統,那麼不管它的上層如何設計如何劃分,始終須要對數據持久化存儲進行落地。因此Ceph須要操做塊存儲設備(關於塊存儲的相關介紹,能夠參看本專題最初的幾篇文章),Ceph要求塊存儲設備的文件系統必須爲XFS、BTRFS或者EXT4,且必須在操做系統上有獨立掛載點。
2-2. 正式安裝
Ceph的安裝有兩種方式,第一種是使用Ceph官方提供的Ceph-deploy(部署工具)進行安裝,這種方式咱們須要首先yum Ceph-deploy,而後再使用Ceph-deploy提供的各類命令來安裝Ceph的各個節點,但好處也很明顯——Ceph的安裝過程基本上是半自動化的,除了一些操做系統層面的問題須要解決外(例如用戶對某個目錄的讀寫權限設定錯誤,再例如防火牆的端口沒有打開等等)整個過程還算比較順利。另一種是全人工安裝,除非你的操做系統存在特殊應用場景,或者有須要特別保護的組件須要進行獨立設定,不然仍是建議使用前一種Ceph-deploy的方式。
2-2-1. 安裝Ceph-Deploy和Ceph軟件自己
首先安裝ceph-deploy軟件本省。請注意這個軟件並非ceph工做的一部分,它只一個增長簡便性的工具。
......
[......]$ yum -y install ceph-deploy
// NTP時鐘同步服務
[......]$ yum install -y ntp ntpdate ntp-doc
//使用一個亞洲公用時間同步節點進行時間同步
[......]$ ntpdate 0.asia.pool.ntp.org
......12345671234567
只須要在某個節點上安裝ceph-deploy就行,可是NTP服務是每個節點都要安裝和進行同步,它主要是保證各節點的物理時鐘同步。接下來咱們使用ceph-deploy工具在將要參與Ceph分佈式文件系統的各個節點上,安裝Ceph軟件。注意,只是安裝軟件,並非說完成後就可讓這些節點承擔相應的工做職責了。如下命令只須要在安裝了ceph-deploy的節點上執行就好了,ceph-deploy會幫助技術人員在指定的各個節點上使用yum命令安裝ceph軟件。接着使用如下命令在以上各個節點上正式安裝Ceph軟件:
[ceph@vmnode1 ~]$ ceph-deploy install vmnode1 vmnode2 vmnode3
// 命令格式爲:
ceph-deploy install {ceph-node}[{ceph-node} ...]123123
安裝Ceph軟件的過程當中,有必定機率會出現各類警告信息。警告信息有的是能夠忽略的,有的則是必須進行處理的。這些問題通常分爲幾類:鏡像源和下載問題,依賴問題,權限問題。如何來處理這些問題,除了須要具有必定的玩轉Linux系統的經驗外,主要仍是細心,切忌急躁。
2-2-2. 安裝Ceph Monitor
MON是Monitor的簡稱,字面意義爲監控、監視。是的,它的做用是監控、管理和協調整個分佈式系統環境中其它各個OSD/PG、Client、MDS角色的工做,保證整個分佈環境中的數據一致性。注意,爲了保證節點故障的狀況下,整個Ceph分佈式文件系統依然能夠穩定工做,咱們必須設置多個MON角色。例如在本示例中,就設置參與Ceph分佈式系統的三個節點上,都安裝MON角色:
// 更名了意味新的MON節點
[ceph@vmnode1 ~]$ ceph-deploy new vmnode1 vmnode2 vmnode3
// 命令格式爲:
ceph-deploy new {initial-monitor-node(s)}12341234
以上命令運行後,ceph-deploy工具會在本節點生成一些文件,包括:
ceph.conf
ceph.log
ceph.mon.keyring123123
最重要的文件固然就是ceph.conf文件了(實際上ceph.mon.keyring也很重要),觀察這個文件內容:
[ceph@vmnode1 ~]$ cat ./ceph.conf
[global]
fsid = 50c157eb-6d74-4d7d-b8e8-959a7b855b55
mon_initial_members = vmnode1, vmnode2, vmnode3
mon_host = 172.16.71.182,172.16.71.183,172.16.71.184
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx1234567812345678
能夠看到ceph.conf文件中已經設置好了咱們將要運行MON角色的三個節點信息。接下來咱們還須要在ceph.conf文件中增長一些信息,以下(後文還會詳細講解ceph中的重要參數):
[ceph@vmnode1 ~]$ vim ./ceph.conf
......
# 後續的文章會詳細講解ceph中重要的配置項
osd pool default size = 2
osd pool default min size = 2
max open files = 655350
cephx cluster require signatures = false
cephx service require signatures = false
......123456789123456789
接着使用如下命令,就能夠在conf文件中已配置的MON節點上啓動MON服務了(前提是,這些節點已經成功安裝了Ceph軟件):
# 開始初始化運行mon節點。
[ceph@vmnode1 ~]$ceph-deploy mon create-initial
# 若是須要指定一些自定義的配置參數,能夠採用以下格式(命令有詳細的幫助信息)來啓動
[ceph@vmnode1 ~]$ceph-deploy --overwrite-conf --cluster ceph mon create-initial12341234
每個Ceph分佈式系統都會有一個名字,若是在建立MON時不給定這個名字就會默認爲「ceph」。完成以上步驟後,ceph-deploy工具會在當前運行命令的目錄下生成幾個文件,這些文件都很是重要,請不要擅自改動。在隨後的安裝過程當中ceph-deploy工具將按需將這些文件複製到對應角色的對應目錄中去。