1. 程式人生 > >ceph儲存 ceph整體學習記錄(未整理較亂)

ceph儲存 ceph整體學習記錄(未整理較亂)

ceph原始碼下載:   http://ceph.com/download/   主要文件下載連線:   http://download.iyunv.com/detail/skdkjxy/8149989   /*******************/ Time:2014-11-6 Author:skdkjzz /******************/ 1、unified中何為radosgw、rbd、ceph-dfs、rados? 2、distributed中spof? { http://article.yeeyan.org/view/258596/225158 單點故障 } 3、ceph中何為paxos? 4、ceph包括四個部分--moniters(ceph-mon)、object_storage_daemons(ceph-osd)、clients(librados、librbd)、metadata_servers(ceph-mds) 5、posix語義? 6、rados_object_storage_model--include “pools” “objects” 7、object_storage--何為btrfs、xfs?online fsck 硬碟壞軌檢查? 8、objects are automatically placed放置, balanced均衡, migrated遷移 in a dynamic cluster動態叢集 9、CRUSH偽隨機放置演算法(pseudo-random placement algorithm) 10、3 replicas, same row, different racks(3個副本、同行、不同機架) 11、coordinate_peers(協調節點?) 12、何為openstack、RESTful、S3? 13、何為ACL_route_base(路由策略)? 14、何為rbd – rados block device --rbd? 15、基於核心的虛擬機器(K Virtual Machine)--kvm 16、何為librbd、libvirt 17、shared cluster-coherent file system (共享叢集一致?連貫?檔案系統)? 18、動態子目錄樹分割槽特性--高效、可擴充套件、動態、自適應(均衡整個叢集) 19、recursive_accounting--遞迴運算 20、Linux_kernel_client--Samba(CIFS)、export(NFS) 21、NFS-GANESHA 是一個使用者空間伺服器,支援NFSv2、NFSv3和NFSv4。它支援的執行平臺包括Linux,BSD variants和POSIX-compliant Unixes。 22、何為poc? { POC測試,即Proof of Concept,是業界流行的針對客戶具體應用的驗證性測試,根據使用者對採用系統提出的效能要求和擴充套件需求的指標,在選用伺服器上進行真實資料的執行, 對承載使用者資料量和執行時間進行實際測算,並根據使用者未來業務擴充套件的需求加大資料量以驗證系統和平臺的承載能力和效能變化。 } 23、needs testing, deliberate qa effort for production(需要進行測試,為深思熟慮的品質做出努力)   /*******************/ Time:2014-11-7 Author:skdkjzz /******************/ 1、跟隨魏盟去儲存技術實驗室 2、何為Lustre、GlusterFS和OrangeFS? 3、預計下週一進行疑惑解決,然後深入ceph框架 /========================================================================/ HardDisk: 4、預計下週一進行ceph安裝文件閱讀: 5、均衡日誌和OSD效能相當重要 6、不顧分割槽而在單個硬碟上執行多個OSD,這樣不明智! 7、不顧分割槽在運行了OSD的硬碟上監視器或者元資料伺服器,也是不明智! 8、儲存驅動器受限於尋道時間、訪問時間、讀寫時間、還有總吞吐量,這些物理侷限性影響著整體系統效能,尤 其在系統恢復期間。因此我們推薦獨立的驅動器用於安裝作業系統和軟體,另外每個OSD守護程序佔用一個驅動器。 大多數“slow OSD”問題的起因都是在相同的硬碟上運行了作業系統、多個OSD和/或多個日誌檔案。鑑於解決效能問題 的成本差不多會超過另外增加磁碟驅動器,你應該在設計時就避免增加 OSD 儲存驅動器的負擔來提升效能。 9、ceph允許你在每塊硬碟驅動器上執行多個OSD,但這會導致資源競爭並降低總體吞吐量;ceph也允許把日誌 和物件資料儲存在相同驅動器上,但這會增加記錄寫日誌並回應客戶端的延時,因為ceph必須先寫入日誌才會迴應確認了寫動作。 btrfs檔案系統能同時寫入日誌資料和物件資料,xfs和ext4卻不能。 10、ceph最佳實踐指示,你應該分別在單獨的硬碟執行作業系統、OSD資料和OSD日誌。 /========================================================================/   /*******************/ Time:2014-11-8 Author:skdkjzz /******************/ SSD: 1、一種提升效能的方法是使用固態硬碟(SSD)來降低隨機訪問時間和讀延時,同時增加吞吐量。SSD和硬碟相 比每GB成本通常要高10倍以上,但訪問時間至少比硬碟快100倍。 2、SSD侷限性在於順序讀寫效能,SSD沒有可移動機械部件,所以不存在和硬碟一樣的侷限性。但SSD也有侷限性,評估SSD時,順序讀寫性 能很重要,在為多個OSD儲存日誌時,有著400MB/s順序讀寫吞吐量的SSD其效能遠高於120MB/s的。 3、在大量投入SSD前,我們強烈建議核實SSD的效能指標,並在測試環境下衡量效能。 4、SSD沒有移動機械部件,很適合ceph中不需要太多儲存空間的地方,但是對SSD效能衡量需要注意一下幾點: 4.1)IOPS指標,又何為IOPS指標? 4.2)寫密集語義:記日誌涉及寫密集語義,所以你要確保選用的SSD寫入效能和硬碟相當或好於硬碟。廉價SSD可能在加速訪問的同時 引入寫延時,有時候高效能硬碟的寫入速度可以和便宜SSD相媲美。又何為寫密集語義? 4.3)順序寫入:在一個SSD上為多個OSD儲存多個日誌時也必須考慮SSD的順序寫入極限,因為它們要同時處理多個OSD日誌的寫入請求。 4.4)分割槽對齊:採用了SSD的一個常見問題是人們喜歡分割槽,卻常常忽略了分割槽對齊,這會導致SSD的資料傳輸速率慢很多,所以請確保分割槽對齊了。 5、SSD用於物件儲存太昂貴了,但是把OSD的日誌存到SSD、把物件資料儲存到獨立的硬碟可以明顯提升效能。osd_journal選項的預設值是 /var/lib/ceph/osd/$cluster-$id/journal,你可以把它掛載到一個SSD或SSD分割槽,這樣它就不再是和物件資料一樣儲存在同一個硬碟上的檔案了 。 6、提升CephFS檔案系統性能的一種方法是從CephFS檔案內容裡分離出元資料。ceph提供了預設的metadata儲存池來儲存CephFS元資料,所以你不需要給 CephFS元資料建立儲存池,但是可以給它建立一個僅指向某主機SSD的CRUSH執行圖。又何為CRUSH執行圖?   Controller: 1、優秀的ceph的效能問題探討可以參考ceph相關blog--見ceph-docs_zh-v1.3.pdf,頁碼為p23 2、硬碟控制器對寫吞吐量有顯著影響,需慎重選擇,以免造成效能瓶頸(bottleneck)   Others_Notes: 1、可以在同意主機執行多個osd,但是需保證osd硬碟吞吐量不超過為客戶端提供讀寫服務所需網路頻寬。 2、還應考慮叢集在每臺主機上儲存的資料佔總體的百分比,如果一臺主機所佔百分比太多而掛了,那麼就可能導致諸如full ratio(滿載滿負荷)的問題, 那麼ceph會中止執行來防止資料丟失。 3、如果每臺主機執行多個osd,請保證核心是最新的,來確保硬體效能可達期望值。   Network: 1、建議每臺機器最少兩個千兆網絡卡,現在大多數機械硬碟都能達到大概100MB/s的吞吐量,網絡卡應該能處理所有OSD硬碟總吞吐量,所以推薦最少兩個千兆網絡卡, 分別用於公網(前端)和叢集網路(後端)。叢集網路(最好別連線到國際網際網路)用於處理由資料複製產生的額外負載,而且可防止拒絕服務攻擊,拒絕服務攻擊 會干擾資料歸置組,使之在OSD資料複製時不能回到active&#43;clean狀態。請考慮部署萬兆網絡卡。通過1Gbps網路複製1TB資料耗時3小時,而3TB(典型配置)需要9小時, 相比之下,如果使用10Gbps複製時間可分別縮減到20分鐘和1小時。在一個PB級叢集中,OSD磁碟失敗是常態,而非異常;在價效比合理的的前提下,系統管理員 想讓PG儘快從degraded(降級)狀態恢復到 active&#43;clean 狀態。另外,一些部署工具(如Dell的Crowbar)部署了5個不同的網路,但使用了VLAN以提高網路和硬體可管理性。 VLAN使用802.1q協議,還需要採用支援VLAN功能的網絡卡和交換機,增加的硬體成本可用節省的運營(網路安裝、維護)成本抵消。使用VLAN來處理叢集和計算棧 (如 OpenStack、 CloudStack 等等)之間的VM流量時,採用10G網絡卡仍然值得。每個網路的機架路由器到核心路由器應該有更大的頻寬,如40Gbps到100Gbps。 又何為VM流量? 2、伺服器應配置底板管理控制器(Baseboard Management Controller, BMC),管理和部署工具也應該大規模使用BMC,所以請考慮帶外網路管理的成本/效益平衡, 此程式管理著SSH訪問、VM映像上傳、作業系統安裝、埠管理、等等,會徒增網路負載。運營3個網路有點過分,但是每條流量路徑都指示了部署一個大型資料叢集前 要仔細考慮的潛能力、吞吐量、效能瓶頸。   Failure_Domain: 1、故障域指任何導致不能訪問一個或多個OSD的故障,可以是主機上停止的程序、硬碟故障、作業系統崩潰、有問題的網絡卡、損壞的電源、斷網、斷電等等。規劃硬體需求時, 要在多個需求間尋求平衡點,像付出很多努力減少故障域帶來的成本削減、隔離每個潛在故障域增加的成本。   HardWare_choose: 1、參考文件ceph-docs_zh-v1.3.pdf,頁碼為p24。 2、如果在只有一塊硬碟的機器上執行OSD,要把資料和作業系統分別放到不同分割槽;一般來說,我們推薦作業系統和資料分別使用不同的硬碟。   /*******************/ Time:2014-11-9 Author:skdkjzz /******************/ OS_Recommentdations: 1、推薦在較新的Linux發行版上部署ceph。 2、在btrfs上執行ceph,推薦使用Linux核心版本高於v3.5。又何為btrfs? 3、syncfs(2):對非btrfs檔案系統(像XFS和ext4)而言,在一臺伺服器上運行了多個ceph-osd守護程序時,ceph使用syncfs(2)系統呼叫時效率高 得多(此功能在2.6.39核心和glibc-2.14加入)。又何為syncfs(2)?   Platfrom: 1、一般來說,ceph對Linux核心和系統初始化階段的依賴很少(sysvinit、upstart、systemd)。又何為sysvinit、upstart、systemd? 2、Notes: 2.1)預設核心的btrfs版本較老,不推薦用於ceph-osd儲存節點,要升級到推薦的核心,或者改用xfs或ext4。 2.2)預設核心帶的ceph客戶端較老,不推薦做核心空間客戶端(核心rbd或ceph檔案系統),請升級至推薦核心。 2.3)已安裝glibc版本不支援syncfs(2)系統呼叫,同一臺機器上使用xfs或ext4的ceph-osd守護程序效能一般,它可以更好。   Testing: 1、我們持續地在這個平臺上編譯所有分支、做基本單元測試;也為這個平臺構建可釋出軟體包。 2、我們在這個平臺上做基本的安裝和功能測試。 3、我們在這個平臺上持續地做全面的功能、退化、壓力測試,包括開發分支、預釋出版本、正式釋出版本。   Installing Ubuntu/debian Packages:p27   1、install release key: 1.1)軟體包都使用進行release.asc金鑰加密簽名過,把釋出金鑰新增到系統可信金鑰列表中可避免安全警告,執行命令如下: wget -q -O- 'https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc' | sudo apt-key add 2、Add release packeages: 2.1)穩定版-bobtail是ceph最新的主要釋出,適用任何想在生產環境下部署ceph,重大的bug已經修復。把軟體庫新增到apt源列表,執行命令如下: echo deb http://ceph.com/debian-bobtail/ $(lsb_release -sc)main | sudo tee /etc/apt/sources.list.d/ceph.list 2.2)穩定版-argonaut是ceph前一個的主要釋出,適用已經在生產環境下部署了argonaut又沒準備好升級。把軟體庫新增到apt源列表,執行命令如下: echo deb http://ceph.com/debian-argonaut/ $(lsb_release-sc) main | sudo tee /etc/apt/sources.list.d/ceph.list 3、install packages-ceph: 3.1)把正式釋出或者開發包新增到apt源列表中,要更新apt資料庫,在安裝ceph。執行命令如下: sudo apt-get update && sudo apt-get install ceph     RPM packages install-centos&redhat: 1、rpm安裝和ubuntu下類似,詳見p29   Update Ceph: 1、可以逐個升級叢集中的守護程序: 1.1)登入主機升級ceph包 1.2)重啟ceph守護程序 1.3)確認叢集是健康,執行正常 1.4)Notes:important-->一旦升級守護程序就無法降級!   2、depend relation,升級順序如下: 2.1)Monitors(or Osds) 2.2)Osds(or Monitors) 2.3)Metadata Servers 2.4)RADOS Gateway Notes: 作為一般規則,推薦一次性升級同一型別的所有守護程序(如所有ceph-osd守護程序、所有ceph-mon等等)以保證它們都處於同一版本。同時建議 您升級完叢集中的所有守護程序後再練習那個版本的新功能。 3、Upgrading OSD Steps: 3.1)Upgrade the OSD package--> ssh {osd-host} && sudo apt-get update && sudo apt-get install ceph 3.2)Restart the OSD, where N is the OSD number--> service ceph restart osd.N 3.3)Ensure the upgraded OSD has rejoined the cluster--> ceph osd stat 3.4)成功升級一個OSD後,再繼續其它的,直到完成所有OSD。 4、Upgrading Monitors: 4.1)Upgrade the ceph package--> ssh {mon-host} && sudo apt-get update && sudo apt-get install ceph 4.2)Restart the monitor--> service ceph restart mon.{name} 4.3)Ensure the monitor has rejoined the quorum--> ceph mon stat 4.4)成功升級一個監視器後,再繼續其它的,直到完成所有監視器。 5、Upgrading a Metadata Server: 5.1)Upgrade the ceph package--> ssh {mds-host} && sudo apt-get update && sudo apt-get install ceph 5.2)Restart the metadata server--> service ceph restart mds.{name} 5.3)Ensure the metadata server is up and running--> ceph mds stat   5.4)成功升級一個元資料伺服器後,再繼續其它的,直到完成所有元資料伺服器。 6、Upgrading a Client: 6.1)Upgrade the package--> ssh {client-host} && apt-get update && sudo apt-get install ceph-common librados2 librbd1 python-ceph 6.2)Ensure that you have the latest version--> ceph --version   Argonaut update to Bobtail: 1、Notes: 1.1)現在預設開啟了認證,但以前預設關閉 1.2)監視器使用了新的內部on-wire協議(一個時間同步協議?) 1.3)使用RBD format 2格式的映像前要先升級完所有OSD。 1.4)bobtail版支援format 2格式的映像!若ceph-osd未完全升級完成,不可以使用format 2格式。檢查叢集版本命令如下: ceph osd ls 和 ceph tell osd.N version ,其中ceph osd ls 會列出叢集裡所有OSD的ID,迴圈指令碼示例: { for i in $(ceph osd ls); do   ceph tell osd.${i} version done } 1.5)具體開始細節見p33。   Build Ceph Prerequisites,in other words,Cpeh depend other libs or tools: 1、在 Ubuntu上,執行sudo apt-get install安裝缺失依賴,執行命令如下: 1.1)sudo apt-get install autotools-dev autoconf automake cdbs gcc g&#43;&#43; git libboost-dev libedit-dev libssl-dev libtool libfcgi libfcgi-dev libfuse-dev linux-kernel-headers libcrypto&#43;&#43;-dev libcrypto&#43;&#43; libexpat1-dev 1.2)sudo apt-get install uuid-dev libkeyutils-dev libgoogle-perftools-dev libatomic-ops-dev libaio-dev libgdata-common libgdata13 libsnappy-dev libleveldb-dev   Building Ceph: 1、具體安裝步驟及注意事項如下: 1.1):進入ceph source,執行命令如下 {   cd ceph   ./autogen.sh   ./configure --prefix=?   make } 1.2)根據你的系統可以用 make -j 同時執行多個任務,例如make -j4在雙核CPU上會編譯得更快。 1.3)安裝ceph到本地,執行命令--> sudo make install   Installing Oprofile: 1、分析ceph CPU消耗情況的最簡方法就是用系統級的oprofile--> sudo apt-get install oprofile oprofile-gui   Compiling Ceph for Profiling: 1、編譯適合分析的ceph: 1.1)先清理先前編譯--> make distclean 1.2)檢視輸出呼叫圖--> export CFLAGS=&quot;-fno=omit-frame-pointer -O2 -g&quot; 1.3)最終編譯--> {   ./autogen.sh   ./configure   make } 1.4)超執行緒編譯選項-->make -j4 /*******************/ Time:2014-11-10 Author:skdkjzz /******************/ RADOS About: 1、ceph 叢集可以包含數千個儲存節點,最小系統至少需要二個OSD才能做到資料複製。要配置OSD叢集,你得把配置寫入 配置檔案,ceph對很多選項提供了預設值,你可以在配置檔案裡覆蓋它們;另外,你可以使用命令列工具修改執行時配置。 2、ceph 啟動時要啟用三種守護程序: 2.1)ceph-osd 2.2)ceph-mon 2.3)ceph-mds 3、Hard disk prep: 3.1)如果檔案系統日誌在原始硬碟上,就需要禁用寫快取:新的核心(big than v2.6.33)不需要禁用 3.2)禁用硬碟的寫快取功能--> sudo hdparm -W 0 /dev/hda 0 3.3)在生產環境,建議您在系統盤執行OSD,在另外的硬盤裡放資料。如果必須把資料和系統放在一個硬盤裡,最好給資料分配一個單獨的分割槽。 4、Fs depend: 4.1)ceph的OSD依賴於底層檔案系統的穩定性和效能。 4.2)當前,我們推薦部署生產系統時使用xfs檔案系統,建議用btrfs做測試、開發和其他不太要緊的部署。我們相信,長期來看btrfs適合ceph的功能需求和發展方向, 但是xfs和ext4能提供當前部署所必需的穩定性。btrfs開發在迅速推進,使用者應該有能力經常更新到最新核心釋出,而且能跟蹤嚴重bug的修正進度。 4.3)ceph的OSD有賴於底層檔案系統的擴充套件屬性(XATTR)儲存各種內部物件狀態和元資料。底層檔案系統必須給XATTR提供足夠容量,btrfs沒有限制 隨檔案儲存的xattr元資料;xfs的限制相對大(64KB),多數部署都不會有瓶頸;ext4的則太小而不可用。 4.4)要用這些檔案系統,你得把下面這行寫入ceph.conf的[osd]段裡--> filestore xattr use omap = true 5、xfs、btrfs比較: 5.1)xfs和btrfs相比較ext3/4而言,在高伸縮性資料儲存方面有幾個優勢,xfs和btrfs都是日誌檔案系統,這使得在崩潰、斷電後恢復時更健壯, 因為檔案系統在寫入資料前會先記錄所有變更。 5.2)xfs由Silicon Graphics開發,是一個成熟、穩定的檔案系統。相反,btrfs是相對年輕的檔案系統,它致力於實現系統管理員夢寐以求的大規模資料儲存基礎, 和其他Linux檔案系統相比它有獨一無二的功能和優勢。 5.3)btrfs是寫時複製(copy-on-write, cow)檔案系統,它支援檔案建立時間戳和校驗和(可校驗元資料完整性)功能,所以它能探測到資料壞副本, 並且用好副本修復。寫時複製功能是說btrfs支援可寫檔案系統快照。btrfs也支援透明壓縮和其他功能。 5.4)btrfs也集成了多裝置管理功能,據此可以在底層支援異質硬碟儲存,和資料分配策略。未來開發社群還會提供fsck、拆分、資料加密功能,這些誘人的功能正是ceph叢集的理想選擇。 Configure Ceph: 1、典型的ceph叢集中至少要執行下面四種守護程序中的一種: 1.1)ceph-osd 物件儲存裝置 1.2)ceph-mon 監視器 1.3)ceph-mds 元資料伺服器 1.4)radosgw(ceph gateway) ceph閘道器 1.5)為方便起見,每個守護程序都有一系列預設值(參見 ceph/src/common/config_opts.h),你可以用ceph配置檔案覆蓋這些設定。   2、configfile--> ceph.conf: 2.1)啟動ceph叢集時,每個守護程序都從ceph.conf裡查詢它自己的配置。 2.2)手動配置時,你需要建立ceph.conf來配置叢集-->詳見p43。 2.3)ceph檔案使用ini風格的語法,以分號(;)和井號(#)開始的行是註釋。 2.4)一個例程由型別和它的例程編號(ID)確定,OSD的例程ID只能是數字,監視器和元資料伺服器的ID可包含字母和數字。 2.5)元變數大大簡化了叢集配置,ceph會把配置的元變數展開為具體值;元變數功能很強大,可以用在[global] 、[osd] 、 [mon] 、[mds]段裡,類似於bash的shell擴充套件-->詳見p45。 2.6)理想情況下一臺主機應該只 執行一類程序,例如:一臺主機執行著ceph-osd程序,另一臺主機執行著ceph-mds程序,ceph-mon程序又在另外一臺主機上。 2.7)每個主機都有一個標識名稱(系統配置),監視器可用addr選項指定網路地址和埠(如域名或IP地址),基本配置可以只指定最小配置。例如: {   [mon.a]    host = hostName    mon addr = 150.140.130.120:6789   [osd.0]    host = hostName      Notes:   2.7.1)主機名設定是主機的短名字,不是正式域名FQDN,也不是IP地址;在執行hostname -s就可以得到短名字。   此設定只在mkcephfs和手動部署時用到,用chef部署ceph時不必要。 } 2.8)監視器預設監聽 6789 埠,元資料伺服器和OSD監聽從6800開始的第一個可用埠;要確保監聽6789埠的是監視器程序,每個OSD或元資料伺服器程序 監聽了從6800開始的埠。每個主機使用的埠數量都是確定的,所以你沒必要多開埠。但有些時候程序失敗後重啟卻沒釋放舊埠,就會繫結到了新埠, 所以要多留些埠作備用。如果你的部署區分了叢集網和公網,你也許需要給每個網路寫相應配置。網路埠配置示例命令: iptables -A INPUT -m multiport -p tcp -s {ip-address}/{netmask} --dports 6789,6800:6810 -j ACCEPT 2.9)使用兩個分開的網路:   2.9.1)OSD給客戶端做資料複製時,如果副本數大於1,客戶端和ceph叢集間的網路負載會很容易增大,這會導致延時增大和效能下降,ceph處於Degrade。   2.9.2)拒絕服務攻擊(DoS),當攻擊OSD間的流量中斷時,歸置組就再也不能進入active&#43;clean狀態了,它也會阻止使用者讀寫資料。   2.9.3)最好的辦法就是徹底分開叢集網和公網。詳見p47   {    2.9.3.1)要配置這樣的網路,把下面的選項加到ceph.conf裡的[global]段下:    {    [global]      public network {public-network-ip-address/netmask}      cluster network {enter cluster-network-ip-address/netmask}    }    2.9.3.2)要讓ceph主機使用分開的網路,把下面的選項設定在守護程序例程下面:    {    [osd.0]     public addr {host-public-ip-address}     cluster addr {host-cluster-ip-address}       }   } 2.10)典型的ceph生產叢集至少部署3個監視器來確保高可靠性,它允許一個監視器例程崩潰。奇數個監視器確保PAXOS演算法能確定 一批監視器裡哪個版本的叢集執行圖是最新的。 2.11)一個ceph 叢集可以只有一個監視器,但是如果它失敗了,因沒有監視器資料服務就會中斷。 2.12)ceph監視器預設監聽6789埠: {   [mon.a]     host = hostName     mon addr = 150.140.130.120:6789   Notes:   1)預設情況下,ceph會在下面的路徑儲存監視器資料--> /var/lib/ceph/mon/$cluster-$id   2)你必須自己建立對應的目錄,前述的元變數必須先展開,名為ceph的叢集將展開為--> /var/lib/ceph/mon/ceph-a   3)你可以用mon data選項更改預設路徑,但我們不推薦修改。用下面的命令在新監視器主機上建立預設目錄,執行命令如下:   ssh {new-mon-host} && sudo mkdir -p /var/lib/ceph/mon/ceph-{mon-letter} } 2.13)典型的生產叢集裡,一個數據盤上執行一個OSD程序;典型部署要指定日誌尺寸、檔案儲存的擴充套件屬性(XATTR)是否使用物件圖(如執行在ext4之上),例如: { [osd]   osd journal size = 10000   filestore xattr use omap = true #enables the object map. Only if running ext4. [osd.0]   hostname = {hostname} Notes:   1)預設ceph認為你把OSD資料儲存在下面的路徑下:--> /var/lib/ceph/osd/$cluster-$id   2)你必須建立對應目錄,名字為ceph的叢集其元變數完全展開後,前述的目錄將是--> /var/lib/ceph/osd/ceph-0   3)你可以用mon data選項更改預設路徑,但我們不推薦修改。用下面的命令在新監視器主機上建立預設目錄,執行命令如下:   ssh {new-osd-host} && sudo mkdir -p /var/lib/ceph/osd/ceph-{osd-number}   4)osd data路徑應該指向一個硬碟的掛載點,這個硬碟應該獨立於作業系統和守護程序所在硬碟。按下列步驟準備好並掛載:   ssh {new-osd-host} && sudo mkfs -t {fstype} /dev/{disk} && sudo mount -o user_xattr /dev/{hdd} /var/lib/ceph/osd/ceph-{osd-number}   5)我們推薦用xfs或btrfs檔案系統,命令是mkfs   6)ceph預設把OSD日誌儲存在下面的路徑--> /var/lib/ceph/osd/$cluster-$id/journal   7)沒有效能優化時,ceph把日誌和OSD資料儲存相同的硬碟上;要優化OSD效能,可以把日誌分離到單獨的硬碟上(例如,固態硬碟能提供高日誌效能)。   8)ceph的osd journal size預設值是0,所以你得在 ceph.conf裡設定,日誌尺寸應該至少2倍於filestore min sync interval的值和預計吞吐量的乘積:   osd journal size = {2 * (expected throughput * filestore min sync interval)}   9)預計吞吐量應該包括硬碟吞吐量(持續的資料傳輸速度)和網路吞吐量,例如,7200轉的硬碟速度大概是100MB/s,取硬碟和網路吞吐量中較小的一個   應該能提供合理的預計吞吐量。一些使用者以 10GB 起步,例如--> osd journal size = 10000 (unit is MB?) } 2.14)journal and debug:   2.14.1)為打 ceph的除錯輸出(例如,dout()),你可以在配置檔案裡新增除錯選項。ceph的日誌級別在 1 到 20 之間,1 是簡潔、20 是詳細。對每個   程序都相同的子系統可以在[global]下配置,對特定守護程序的子系統要配置在程序段下,如[mon] 、[osd] 、[mds] 下。 例如:   {    [global]      debug ms = 1    [mon]      debug mon = 20      debug paxos = 20      debug auth = 20    [osd]      debug osd = 20      debug filestore = 20      debug journal = 20      debug monc = 20    [mds]      debug mds = 20      debug mds balancer = 20      debug mds log = 20      debug mds migrator = 20    Notes:    1)你的系統執行良好的時候,應該選擇合適的日誌級別、關閉不必要的除錯設定來確保叢集執行在最佳狀態。記錄除錯輸出相 對慢,且浪費資源。    2)每個子系統的日誌都有它自己的輸出級別、和記憶體存留級別。你可以給每個子系統分別設定不同的日誌檔案和記憶體日誌級別,例如:    {     debug {subsystem} {log-level}/{memory-level}     #for example     debug mds log 1/20 (log/memory level)    }   } 2.15)EXAMPLE CEPH.CONF: {   [global]    auth supported = cephx   [osd]    osd journal size = 1000    # uncomment the following line if you are mounting with ext4    # filestore xattr use omap = true   [mon.a]    host = myserver01    mon addr = 10.0.0.101:6789   [mon.b]    host = myserver02    mon addr = 10.0.0.102:6789   [mon.c]    host = myserver03    mon addr = 10.0.0.103:6789   [osd.0]    host = myserver01   [osd.1]    host = myserver02   [osd.2]    host = myserver03   [mds.a]    host = myserver01 } 2.16)Running Changes:   2.16.1)ceph可以在執行時更改ceph-osd、ceph-mon、ceph-mds守護程序的配置:   ceph {daemon-type} tell {id or *} injectargs '--{name} {value} [--{name} {value}]'   2.16.2)用osd、mon、mds中的一個替代{daemon-type},你可以用星號(*)或具體程序ID(其數字或字母)把執行時配置應用到一類程序的所有例程,   例如增加名為osd.0的ceph-osd程序的除錯級別的命令如下--> ceph osd tell 0 injectargs '--debug-osd 20 --debug-ms 1'   2.16.3)在ceph.conf檔案裡配置時用空格分隔關鍵詞,但在命令列使用的時候要用下劃線或連字元(_或-)分隔,例如--> debug osd 變成 debug-osd。 2.17)viewing Configuration at Runtime:   2.17.1)如果你的ceph叢集在執行,而你想看一個在執行程序的配置,用下面的命令:   ceph --admin-daemon {/path/to/admin/socket} config show | less   2.17.2)每個守護程序的管理套接字預設路徑如下--> /var/run/ceph/$cluster-$name.asok   2.17.3)元變數將展開為實際的叢集名和程序名,例如如果叢集名是ceph(預設值),你可以用下面的命令檢索osd.0的配置:   ceph --admin-daemon /var/run/ceph/ceph-osd.0.asok config show | less 2.18)ceph-Filestore-config:   2.18.1)擴充套件屬性(XATTR)是配置裡的重要方面。一些檔案系統XATTR大小有限制,而且在一些情況下檔案系統儲存XATTR的速度   不如其他方法,下面的設定通過使用獨立於檔案系統的儲存方法能幫你提升效能。詳見p64   2.18.2)filestore需要週期性地靜默寫入、同步檔案系統,這建立了一個提交點,然後就能釋放相應的日誌條目了。較大的同步頻率   可減小執行同步的時間及儲存在日誌裡的資料量;較小的頻率使得後端的檔案系統能優化歸併較小的資料和元資料寫入,因此可能使同步更有效。   2.18.3)檔案儲存回寫器強制使用同步檔案排列來寫出大塊資料,這樣處理有望減小最終同步的代價。實踐中,禁用 &quot;filestore flusher&quot;有時候能提升效能。   2.18.4)QUEUE-->可以設定檔案儲存佇列的相關屬性,詳見p65   2.18.5)TIMEOUT-->可以設定關於執行緒超時值以及提交操作超時值。   2.18.6)btrfs相關配置   2.18.7)Journal相關配置 2.19)Journal-config:   2.19.1)ceph的OSD使用日誌的原因有二:速度和一致性。   2.19.2)速度:日誌允許OSD快速地提交小塊資料的寫入,ceph把小片、隨機IO依次寫入日誌,這樣,後端檔案系統就有機會歸併寫入動作,並最終提升併發承載力。   因此,使用OSD日誌能展現出優秀的瞬間寫效能,實際上卻沒有任何寫動作,因 為檔案系統把它們捕捉到了日誌。   2.19.3)一致性:ceph的OSD需要一個能保證原子操作的檔案系統介面。OSD把一個操作的描述寫入日誌,然後把操作應用到檔案系統,這需要原子更新一個物件   (例如歸置組元資料)。每隔一段filestore max sync interval和filestore min sync interval之間的時間,OSD停止寫入、把日誌同步到檔案系統,這樣允許OSD   修整日誌裡的操作並重用空間。失敗後,OSD從上次的同步點開始重放日誌。詳見p96   Ceph deployment: 1、你可以用很多其它部署系統(如Chef、Juju、Puppet、Crowbar)安裝chef,如果你只想測試一下,ceph提供了最小化安裝工具,它只依賴SSH和DNS。你得手動設定SSH和DNS。 2、提供了輕量級部署指令碼供您評估ceph,專業的部署應該考慮用專業的部署系統,像Chef、Juju、Puppet、Crowbar。 3、要配置一個測試或開發叢集,你可以用mkcephfs工具。   3.1)允許以root身份登入叢集主機。詳見p75   3.2)ceph的mkcephfs 指令碼不會把管理主機上建立的配置檔案拷貝到OSD主機,所以你得手動拷貝,例如:   ssh myserver01 sudo tee /etc/ceph/ceph.conf < /etc/ceph/ceph.conf   3.3)建立預設目錄--> sudo mkdir /var/lib/ceph/mon/ceph-a   3.4)如果你在每臺主機上都要執行多個OSD程序,應該先把這些硬碟分別掛載到其資料目錄下。 4、執行mkcephfs:   4.1)cd /etc/ceph && sudo mkcephfs -a -c /etc/ceph/ceph.conf -k ceph.keyring(這個指令碼把一個管理金鑰新增到了ceph.keyring 裡,它和root密碼的功能類似)   4.2)啟動或關閉叢集時不必使用sudo或者提供密碼--> service ceph -a start    Install chef: 1、chef定義了三種實體:   1.1)cheh節點:執行chef-client客戶端,用來安裝和管理軟體   1.2)chef伺服器:在chef節點上和chef-client互動   1.3)chef工作站:管理chef伺服器 2、Create ceph user:   2.1)chef-client命令需要合適的特權才能安裝和管理軟體,他應該有所有 root 特權,例如:   ssh 

[email protected] && sudo useradd -d /home/chef -m chef && sudopasswd chef   2.2)執行下面的命令給chef使用者分配所有特權--> echo &quot;chef ALL = (root) NOPASSWD:ALL&quot; | sudo tee /etc/sudoers.d/chef && sudo chmod 0440 /etc/sudoers.d/chef   2.3)如果你所用的sudo不能包含其它配置檔案,你要把下面這行新增到/etc/sudoers--> chef ALL = (root) NOPASSWD:ALL   2.4)Important--> 不要更改/etc/sudoers的許可權位,請用visudo或sudoedit編輯   2.5)為chef客戶端生成ssh金鑰,詳見p78   2.6)chef依賴 Ruby,選擇適合您當前發行版的Ruby版本並且安裝到所有主機--> sudo apt-get update && sudo apt-get install ruby   2.7)chef伺服器託管在Opscode,記錄chef伺服器的正式域名或IP地址,knife和chef-client要用到。詳見p79   2.8)在chef伺服器上安裝Opscode金鑰環、hef和chef伺服器--> sudo apt-get update && sudo apt-get upgrade && sudo apt-get install opscode-keyring chef chefserver   2.9)安裝器完成、啟動chef伺服器後,你可以在瀏覽器輸入正式域名或者IP地址啟動chef的WEB介面--> http://fqdn-or-ip-address.com:4000   2.10)配置knife:   {    2.10.1)chef伺服器安裝完後,要在chef工作站安裝knife。如果chef伺服器是遠端主機,先ssh登入--> ssh 
[email protected]
   2.10.2)在/home/chef目錄下建立隱藏目錄--> mkdir -p ~/.chef    2.10.3)伺服器會給chef伺服器安裝者生成認證和web UI證書,並設定合適的讀寫許可權位,把它們 從/etc/chef拷貝到~/.chef,然後把所有者改為當前使用者:    sudo cp /etc/chef/validation.pem /etc/chef/webui.pem ~/.chef && sudo chown $(id -u):$(id -g) ~/.chef/*.pem    2.10.4)在當前使用者的目錄下,用一個初始化API客戶端配置knife--> knife configure -i    */???~skdkjzz   }   2.11)add a cookbook path:    2.11.1)在你的chef工作站上把cookbook_path新增到 ~/.chef/knife.rb 配置檔案裡,例如--> cookbook_path '/home/{user-name}/chef-cookbooks/'    2.11.2)路徑不存在的話先建立--> mkdir /home/{user-name}/chef-cookbooks (本地副本位置,稍後上傳到chef伺服器)    2.11.3)把validation.pem拷貝到所有節點,把chef伺服器上的/etc/chef/validation.pem檔案拷貝到每個chef節點,在chef伺服器上的命令列shell執行    下面的命令(用節點主機名替代{nodename}):    {     sudo cat /etc/chef/validation.pem | ssh {nodename} &quot;exec sudo tee /etc/chef/validation.pem >/dev/null&quot;    }    2.11.4)在每個節點執行chef-client,以註冊到chef伺服器--> ssh chef-node && sudo chef-client    2.11.5)檢查下是否安裝好了所有chef節點--> knife node list     ceph Deploying with chef; 1、To get the cookbooks for Ceph {   cd ~/chef-cookbooks   git clone https://github.com/opscode-cookbooks/apache2.git   git clone https://github.com/ceph/ceph-cookbooks.gitceph } 2、Add The Required Cookbook Paths:   2.1)如果你安裝chef的時候添加了預設菜譜路徑,knife無需過多配置就可以上傳克隆的菜譜了。   2.2)如果你要使用另一個路徑,或者克隆的菜譜倉庫樹結構不同,把路徑新增到你的knife.rb檔案裡,cookbook_path可以是字串或字串陣列,例如:   cookbook_path '/home/{user-name}/chef-cookbooks/' --> change to:   {    cookbook_path [     '/home/{user-name}/chef-cookbooks/',     '/home/{user-name}/chef-cookbooks/{another-directory}/',     '/some/other/path/to/cookbooks/'    ]   }   2.3)install cookbook_path:    2.3.1)要安裝ceph,你必須把ceph和Apache菜譜(RADOSGW依賴)上傳到chef伺服器--> knife cookbook upload apache2 ceph 3、configure your ceph environment:   3.1)chef支援多種環境下的軟體安裝,你給ceph建立的環境需要一個fsid、監視器的金鑰(如果啟用了cephx認證)、監視器的短主機名。   3.2)至於檔案系統ID,可以用uuid-runtime包裡的uuidgen工具生成一個唯一的識別符號-->  uuidgen -r   3.3)用ceph-authtool為監視器生成金鑰:   {    sudo apt-get update    sudo apt-get install ceph-common    ceph-authtool /dev/stdout --name=mon. --gen-key    Notes:    3.3.1)金鑰是&quot;key = &quot;右邊的值, 長相如下:      AQBAMuJPINJgFhAAziXIrLvTvAz4PRo5IK/Log==   }   3.4)要給ceph建立環境,先設定一個命令列編輯器,例如:    export EDITOR=vim   3.5)用knife建立環境:    knife environment create {env-name} :example--> knife environment create Ceph 4、configure roles:   4.1)分別用它們的角色檔案給 OSD、監視器、元資料伺服器、RADOS閘道器建立角色:   {    cd ~/chef-cookbooks/ceph    knife role from file roles/ceph-osd.rb    knife role from file roles/ceph-mon.rb    knife role from file roles/ceph-mds.rb    knife role from file roles/ceph-radosgw.rb   } 5、Configure Nodes:   5.1)每個規劃到ceph叢集裡的節點都必需配置,用下面的命令標識節點--> knife node list   5.2)對規劃的ceph叢集的每個節點,都要用下面的命令配置--> knife node edit {node-name}   5.3)要配置的節點的配置資訊應該出現在文字編輯器裡,把chef_environment的值改為ceph(你給ceph環境設定的名字)   5.4)在所有節點的run_list裡新增&quot;recipe[ceph::apt]&quot;,這是第一個配置,這樣chef就能安裝或更新必要的軟體包了。至少然後新增下面幾行中的一個:   {   &quot;role[ceph-mon]&quot;   &quot;role[ceph-osd]&quot;   &quot;role[ceph-mds]&quot;   &quot;role[ceph-radosgw]&quot;   }   5.5)如果你新增的角色不止一個,要用逗號分隔。用hostname命令的結果替換配置裡name的值{hostname}作為節點的主機名:   {//alter by kj     {     &quot;chef_environment&quot;: &quot;Ceph&quot;,     &quot;name&quot;: &quot;{hostname}&quot;,     &quot;normal&quot;: {     &quot;tags&quot;: [     ]     },     &quot;run_list&quot;: [     &quot;recipe[ceph::apt]&quot;,     &quot;role[ceph-mon]&quot;,     &quot;role[ceph-mds]&quot;     ]    }   }//end alter by kj  6、Prepare Osd Disks:   6.1)給一個節點配置了OSD角色意味著這個節點要執行至少一個OSD 程序,你可以在一臺主機上執行很多OSD,例如,   你可以給系統裡每個資料盤配置一個ceph-osd守護程序。這個步驟準備好OSD硬碟並且告訴chef這個節點將執行多少個OSD。   6.2)ceph版本是0.48時要安裝gdisk--> sudo apt-get install gdisk   6.3)對ceph0.48版來說,用下面的命令配置每個OSD所用的儲存資料硬碟,用uuidgen -r命令生成的UUID替{fsid}:   sudo sgdisk /dev/{disk} --zap-all --clear --mbrtogpt --largest-new=1 --change-name=1:'ceph data' --typecode=1:{fsid}   6.4)建立檔案系統、然後把它分配給叢集,執行ceph-disk-prepare的時候要指定一個檔案系統(如 ext4、xfs或btrfs),記得用uuidgen -r生成的UUID替代{fsid}:   {    sudo mkfs -t ext4 /dev/{disk}    sudo mount -o user_xattr /dev/{disk} /mnt    sudo ceph-disk-prepare --cluster-uuid={fsid} /mnt    sudo umount /mnt   }   6.5)最後,模擬一個熱插拔事件--> sudo udevadm trigger --subsystem-match=block --action=add   6.6)完成前面的步驟後,必須在每個節點執行chef-client--> sudo chef-client   6.7) Operated cluster: 高階操作: 高階叢集操作主要包括用服務管理指令碼啟動、停止、重啟叢集、和叢集健康狀態檢查、監控和操作叢集。 1、ceph服務提供了啟動、重啟、停止ceph叢集,每次執行的時候必須指定至少一個選項和一個命令,還必須指定一個守護程序型別或例程名稱: sudo service ceph [options] [commands] [daemons] 2、較老版本可以使用--> sudo /etc/init.d/ceph [options] [commands] [daemons] 3、ceph服務的選項包括: {   Option Shortcut Description   --verbose   -v   Use verbose logging.         詳細的日誌。      --valgrind   N/A  (Dev and QA only) Use Valgrind debugging.         (只適用於開發者和品質保證人員)使用Valgrind除錯。      --allhosts   -a   Execute on all hosts in ceph.conf.  Otherwise, it only executes on localhost.         在ceph.conf裡配置的所有主機上執行,否則它只在本機執行。      --restart   N/A  Automatically restart daemon if it core dumps.         核心轉儲後自動重啟。      --norestart  N/A  Don’t restart a daemon if it core dumps.         核心轉儲後不自動重啟。      --conf    -c   Use an alternate configuration file.         使用另外一個配置檔案。 } 4、ceph服務的命令包括: {   Command    Description   start     Start the daemon(s).   stop     Stop the daemon(s).   forcestop    Force the daemon(s) to stop. Same as kill -9   killall    Kill all daemons of a particular type.   cleanlogs    Cleans out the log directory.   cleanalllogs   Cleans out everything in the log directory. } 5、至於子系統操作,ceph服務能指定守護程序型別,在[daemons]處指定守護程序型別就行了,守護程序型別包括--> mon、osd、mds:   5.1)ceph服務的[daemons]設定也可以指定一個具體例程--> sudo /etc/init.d/ceph -a start osd.0 (這裡osd.0是叢集裡的第一個OSD) 6、Starting A Cluster:   6.1)要啟動ceph叢集,執行ceph的時候加上start命令--> sudo service ceph start [options] [start|restart] [daemonType|daemonID]    較老的版本可以執行--> sudo /etc/init.d/ceph [options] [start|restart] [daemonType|daemonID]   6.2)典型用法:   {    sudo service ceph -a start    sudo /etc/init.d/ceph -a start      }   6.3)使用-a選項可操作整個叢集,你也可以指定一個具體的守護程序例程把操作限制到一個單獨的例程:   sudo /etc/init.d/ceph start osd.0 7、Stoping A Cluster:   7.1)要停止ceph叢集可以在執行ceph時加上stop命令--> sudo service ceph [options] stop [daemonType|daemonID]    較老版本可以執行--> sudo /etc/init.d/ceph -a stop    較新版本直接執行--> sudo service ceph -a stop  8、Monitoring A Cluster:   叢集執行起來後,你可以用ceph工具來監控,典型的監控包括檢查OSD狀態、監視器狀態、歸置組狀態和元資料伺服器狀態   8.1)要在互動模式下執行ceph,不要帶引數執行ceph:   {    ceph    ceph> health    ceph> status    ceph> quorum_status    ceph> mon_status   }   8.2)啟動集群后、讀寫資料前,先檢查下叢集的健康狀態--> ceph health   8.3)如果你的ceph.conf或金鑰環不在預設路徑下,你得指定--> ceph -c /path/to/conf -k /path/to/keyring health   8.4)叢集起來的時候,你也許會碰到像HEALTH_WARN XXX num placement groups stale 這樣的健康告警,等一會再檢查下。   叢集準備好的話ceph health會給出像HEALTH_OK一樣的訊息,這時候就可以開始使用叢集了。   8.5)要觀察叢集內正發生的事件,開啟一個新終端,然後輸入--> ceph -w   {    ceph 會列印 每個歸置組版本和它們 的狀態, 例如一個包括 1 個監視器、 1 個元資料伺服器和 2 個 OSD 的小型    ceph 叢集可能會列印 下面的 :    health HEALTH_OK    monmap e1: 1 mons at {a=192.168.0.1:6789/0}, election epoch 0, quorum 0 a    osdmap e13: 2 osds: 2 up, 2 in    placement groupmap v9713: 384 placement groups: 384 active&#43;clean; 8730 bytes data, 22948 MB used,    264 GB / 302 GB avail    mdsmap e4: 1/1/1 up {0=a=up:active}     2012-08-01 11:33:53.831268 mon.0 [INF] placement groupmap v9712: 384 placement groups: 384    active&#43;clean; 8730 bytes data, 22948 MB used, 264 GB / 302 GB avail     2012-08-01 11:35:31.904650 mon.0 [INF] placement groupmap v9713: 384 placement groups: 384    active&#43;clean; 8730 bytes data, 22948 MB used, 264 GB / 302 GB avail     2012-08-01 11:35:53.903189 mon.0 [INF] placement groupmap v9714: 384 placement groups: 384    active&#43;clean; 8730 bytes data, 22948 MB used, 264 GB / 302 GB avail     2012-08-01 11:37:31.865809 mon.0 [INF] placement groupmap v9715: 384 placement groups: 384    active&#43;clean; 8730 bytes data, 22948 MB used, 264 GB / 302 GB avail   }   8.6)要檢查叢集的狀態,執行下面的命令--> ceph status or ceph -s:   {    ceph 將列印 叢集狀態, 例如一個包括 1 個監視器、 1 個元資料伺服器和 2 個 OSD 的小型 ceph 叢集可能列印 :    health HEALTH_OK    monmap e1: 1 mons at {a=192.168.0.1:6789/0}, election epoch 0, quorum 0 a    osdmap e13: 2 osds: 2 up, 2 in    placement groupmap v9754: 384 placement groups: 384 active&#43;clean; 8730 bytes data, 22948 MB used,    264 GB / 302 GB avail    mdsmap e4: 1/1/1 up {0=a=up:active}   }   8.7)OSD 狀態是叢集內(in)或叢集外(out)狀態,而且是活著且在執行(up)或掛了且不在執行(down)。如果一個OSD活著它也可以是在叢集內(你可以讀寫資料)   或者不在叢集內;如果它掛了,它應該在叢集外,如果它掛了且在叢集內,肯定有問題。    8.7.1)你可以執行下列命令來確定OSD活著且在叢集裡--> ceph osd stat (or) ceph osd dump     8.7.2)你也可以根據OSD在CRUSH 圖裡的位置來檢視--> ceph osd tree;    {    ceph 會列印 CRUSH 的樹狀態、 它 的 OSD 例程、狀態、 權重:    #   id  weight type  name     up/down  reweight     -1  3   pool  default     -3  3     rack mainrack     -2  3      host osd-host     0  1        osd.0  up     1     1  1        osd.1 up     1     2  1        osd.2  up     1    }   8.8)如果你有多個監視器(很可能),你啟動集群后、讀寫資料前應該檢查監視器法定人數狀態。多個監視器必須活著、且在執行,   要週期性檢查監視器狀態來確定它們在執行。    8.8.1)要檢視監視器圖,執行下面的命--> ceph mon stat (or) ceph mon dump    8.8.2)要檢查監視器的法定人數狀態,執行下面的命令--> ceph quorum_status:    {//alter by kj      ceph 會返回 法定人數狀態, 例如, 包含 3 個監視器的 ceph 叢集可能返回 下面的 :     { &quot;election_epoch&quot;: 10,      &quot;quorum&quot;: [      0,      1,      2],      &quot;monmap&quot;: { &quot;epoch&quot;: 1,      &quot;fsid&quot;: &quot;444b489c-4f16-4b75-83f0-cb8097468898&quot;,      &quot;modified&quot;: &quot;2011-12-12 13:28:27.505520&quot;,      &quot;created&quot;: &quot;2011-12-12 13:28:27.505520&quot;,      &quot;mons&quot;: [      { &quot;rank&quot;: 0,      &quot;name&quot;: &quot;a&quot;,      &quot;addr&quot;: &quot;127.0.0.1:6789\/0&quot;},      { &quot;rank&quot;: 1,      &quot;name&quot;: &quot;b&quot;,      &quot;addr&quot;: &quot;127.0.0.1:6790\/0&quot;},      { &quot;rank&quot;: 2,      &quot;name&quot;: &quot;c&quot;,      &quot;addr&quot;: &quot;127.0.0.1:6791\/0&quot;}      ]      }     }    }//end alter by kj   8.9)元資料伺服器為ceph檔案系統提供元資料服務,元資料伺服器有兩種狀態:up|down 和 活躍| 不活躍,執行下面的命令來確保元資料伺服器活著且活躍:   ceph mds stat,要展示元資料叢集的詳細狀態,執行下面的命令--> ceph mds dump    8.10)歸置組把物件對映到OSD,歸置組的狀態應該是活躍且未汙染的,其它的PG狀態請參見(Placement Group States)   /*******************/ Time:2014-11-11 Author:skdkjzz /******************/ Profile Ceph of Cpu Usage: 1、你首次使用oprofile的時候要初始化,找到對應於當前執行核心的vmlinux位置: {   ls /boot   sudo opcontrol --init   sudo opcontrol --setup --vmlinux={path-to-image} --separate=library --callgraph=6 } 2、執行下面的命令啟動opeofile--> opcontrol --start 3、執行下面的命令停止oprofile--> opcontrol --stop 4、要檢視cmon最近的結果,執行下面的命令--> opreport -gal ./cmon | less 5、要檢索cmon最近的呼叫圖結果,執行下面的命令--> opreport -cal ./cmon | less 6、回顧結果後,重新剖析前應該先重置,重置動作從會話目錄裡刪除了資料。 7、要重置oprofile,執行下面的命令--> sudo opcontrol --reset(你應該分析後再重置,以免混合不同的剖析結果。)   Resolve daemon operations issues: 1、ceph-osd掛的時候,監視器將瞭解ceph-osd的存活情況,且通過ceph health命令報告: {   ceph health   HEALTH_WARN 1/3 in osds are down } 2、有ceph-osd程序標記為in且down的時候,你會得到警告,你可以用下面的命令得知哪個ceph-osd程序掛了: {   ceph health detail   HEALTH_WARN 1/3 in osds are down   osd.0 is down since epoch 23, last address 192.168.106.220:6800/11080 } 3、一般情況下,簡單地重啟ceph-osd程序可使之重新加入叢集並且恢復,如果有個硬碟失敗或其它錯誤使ceph-osd不能正常執行或重啟, 一條錯誤資訊將會出現在日誌檔案/var/log/ceph/裡。 4、如果守護程序因心跳失敗、或者底層檔案系統無響應而停止,檢視dmesg獲取硬碟或者核心錯誤。 5、如果叢集填滿了,監視器將阻止新資料寫入,系統會把ceph-osd分為兩類:快滿了和滿了,它們都有可配置的閥值(預設分別是80%和90%), 滿了的ceph-osd會被ceph health報告: {   ceph health   HEALTH_WARN 1 nearfull osds   osd.2 is near full at 85%      (or)      ceph health   HEALTH_ERR 1 nearfull osds, 1 full osds   osd.2 is near full at 85%   osd.3 is full at 97%      Resolve:   5.1)處理這種情況的最好方法就是增加新的ceph-osd,這允許叢集把資料重分佈到新OSD裡。 } 6、擁有歸置組拷貝的OSD都可以失敗,在這種情況下,那一部分的物件儲存不可用,監視器就不會收到那些歸置組的狀態更新了。為檢測這種情況, 監視器把任何主OSD失敗的歸置組標記為stale(不新鮮),例如: {   ceph health   HEALTH_WARN 24 pgs stale; 3/300 in osds are down } 7、你能找出哪些歸置組不新鮮、和儲存這些歸置組的最新OSD,命令如下: {   ceph health detail   HEALTH_WARN 24 pgs stale; 3/300 in osds are down   ...   pg 2.5 is stuck stale&#43;active&#43;remapped, last acting [2,0]   ...   osd.10 is down since epoch 23, last address 192.168.106.220:6800/11080   osd.11 is down since epoch 13, last address 192.168.106.220:6803/11539   osd.12 is down since epoch 24, last address 192.168.106.220:6806/11861      Notes:   7.1)如果想使歸置組2.5重新線上,例如,上面的輸出告訴我們它最後由osd.0 和 osd.2處理,重啟這些ceph-osd將恢復之(還有其它的很多PG)。 } 8、有失敗時歸置組進入“degraded”(降級)或“peering”(連線建立中 )狀態,這事時有發生,通常這些狀態意味著正常的失敗恢復正在進行。然而, 如果一個歸置組長時間處於某個這些狀態就意味著有更大的問題,因此監視器在歸置組卡(stuck)在非最優狀態時會警告,具體地,我們檢查: {   inactive(不活躍) ——歸置組長時間無活躍(例如它不能提供讀寫服務了 ) ;   unclean(不乾淨)——歸置組長時間不乾淨(例如它未能從前面的失敗完全恢復) ;   stale(不新鮮)——歸置組狀態沒有被 ceph-osd 更新, 表明 儲存這個歸置組的所有節點可能都掛了。   8.1)你可以明確列出卡住的歸置組:   {    ceph pg dump_stuck stale    ceph pg dump_stuck inactive    ceph pg dump_stuck unclean   }   8.2)歸置組不同的狀態,造成的原因如下;   {    處於stuck stale狀態的歸置組通過修復ceph-osd程序通常可以修復    處於stuck inactive狀態的歸置組通常是連線建立問題    處於stuck unclean狀態的歸置組通常是由於某些東西阻止了恢復的完成,像未找到的物件。     } } 9、在某些情況下,ceph-osd連線建立程序會遇到問題,使PG不能活躍、可用,例如ceph health也許顯示: {   ceph health detail   HEALTH_ERR 7 pgs degraded; 12 pgs down; 12 pgs peering; 1 pgs recovering; 6 pgs stuck unclean;   114/3300 degraded (3.455%); 1/3 in osds are down   ...   pg 0.5 is down&#43;peering   pg 1.4 is down&#43;peering   ...   osd.1 is down since epoch 69, last address 192.168.106.220:6801/8651      Notes:   9.1)可以查詢到PG為何被標記為down:   {//alter by kj     ceph pg 0.5 query    { &quot;state&quot;: &quot;down&#43;peering&quot;,     ...     &quot;recovery_state&quot;: [     { &quot;name&quot;: &quot;Started\/Primary\/Peering\/GetInfo&quot;,     &quot;enter_time&quot;: &quot;2012-03-06 14:40:16.169679&quot;,     &quot;requested_info_from&quot;: []},     { &quot;name&quot;: &quot;Started\/Primary\/Peering&quot;,     &quot;enter_time&quot;: &quot;2012-03-06 14:40:16.169659&quot;,     &quot;probing_osds&quot;: [     0,     1],     &quot;blocked&quot;: &quot;peering is blocked due to down osds&quot;,     &quot;down_osds_we_would_probe&quot;: [     1],     &quot;peering_blocked_by&quot;: [     { &quot;osd&quot;: 1,     &quot;current_lost_at&quot;: 0,     &quot;comment&quot;: &quot;starting or marking this osd lost may let us proceed&quot;}]},     { &quot;name&quot;: &quot;Started&quot;,     &quot;enter_time&quot;: &quot;2012-03-06 14:40:16.169513&quot;}     ]    }   }//end alter by kj   9.2)recovery_state段告訴我們連線建立因ceph-osd程序掛了而被阻塞,本例是osd.1掛了,啟動這個程序應該就可以恢復。   9.3)如果osd.1是災難性的失敗(如硬碟損壞),我們可以告訴叢集它丟失了,讓叢集盡力完成副本拷貝。叢集不能保證其它資料副本是一致且最新就危險了!   9.4)無論如何讓ceph繼續--> ceph osd lost 1 } 10、某幾種失敗相組合可能導致ceph抱怨有物件丟失: {   ceph health detail   HEALTH_WARN 1 pgs degraded; 78/3778 unfound (2.065%)   pg 2.4 is active&#43;degraded, 78 unfound      10.1)這意味著儲存叢集知道一些物件(或者存在物件的較新副本)存在,卻沒有找到它們的副本。下例展示了這種情況是如何發生的,一個 PG的資料儲存   在ceph-osd 1 和 2上:   {   1 掛了;   2 獨自處理一些寫動作;   1 啟動了;   1 和 2重新建立連線,1上面丟失的物件加入佇列準備恢復;   新物件還未拷貝完,2掛了。這時,1知道這些物件存在,但是活著的ceph-osd都沒有副本,這種情況下,讀寫這些物件的IO就會被阻塞,叢集只能   指望節點早點恢復。這時我們假設使用者希望先得到一個IO錯誤。   }   10.2)首先,你應該確認哪些物件找不到了:   {//alter by kj     ceph pg 2.4 list_missing [starting offset, in json]    { &quot;offset&quot;: { &quot;oid&quot;: &quot;&quot;,     &quot;key&quot;: &quot;&quot;,     &quot;snapid&quot;: 0,     &quot;hash&quot;: 0,     &quot;max&quot;: 0},    &quot;num_missing&quot;: 0,    &quot;num_unfound&quot;: 0,    &quot;objects&quot;: [     { &quot;oid&quot;: &quot;object 1&quot;,     &quot;key&quot;: &quot;&quot;,     &quot;hash&quot;: 0,     &quot;max&quot;: 0 },     ...    ],    &quot;more&quot;: 0}       }//end alter by kj   10.3)其次,你可以找出哪些OSD上探測到、或可能包含資料:   {//alter by kj     ceph pg 2.4 query    &quot;recovery_state&quot;: [     { &quot;name&quot;: &quot;Started\/Primary\/Active&quot;,     &quot;enter_time&quot;: &quot;2012-03-06 15:15:46.713212&quot;,     &quot;might_have_unfound&quot;: [     { &quot;osd&quot;: 1,     &quot;status&quot;: &quot;osd is down&quot;}]},          Notes:     10.3.1)叢集知道osd.1可能有資料,但它掛了。所有可能的狀態有:     {      1)? already probed(已經探測到了 )      2)? querying(在查詢)      3)? osd is down(OSD 掛了 )      4)? not queried (yet)(尚未查詢)      5)? 還有一種可能性,物件存在於其它位置卻未被列出 ,例如,叢集裡的一個ceph-osd停止且被剔出,然後完全恢復了;後來的失敗、      恢復後仍有未找到的物件,它也不會覺得早已死亡的ceph-osd上仍可能包含這些物件。(這種情況幾乎不太可能發生)。     }   }//end alter by kj    10.4)如果所有位置都查詢過了仍有物件丟失,那就得放棄丟失的物件了。這仍可能是罕見的失敗組合導致的,叢集在寫入完成前,未能得知寫入是否已執行。    以下命令把未找到的(unfound)物件標記為 丟失(lost)--> ceph pg 2.5 mark_unfound_lost revert   {    Notes:上述最後一個引數告訴叢集應如何處理丟失的物件。當前只支援revert選項,它使得回滾到物件的前一個版本(如果它是新物件)或完全忽略它。    要謹慎使用,它可能迷惑那些期望物件存在的應用程式。   }   10.5)如果某些因素導致ceph-osd對別人的請求響應緩慢,它將生成日誌,抱怨請求花的時間太長,這個告警閥值是30秒。可通過osd op complaint time選項配置,   這事發生的時候,叢集日誌系統將收到類似下面的訊息:   {    osd.0 192.168.106.220:6800/18813 312 : [WRN] old request osd_op(client.5099.0:790 fatty_26485_object789 [write 0~4096] 2.5e54f643) v4    received at 2012-03-06 15:42:56.054801 currently waiting for sub ops        Notes:     10.5.1)可能的起因包括:     {      ? bad disk (check dmesg output)      ? kernel file system bug (check dmesg output)      ? overloaded cluster (check system load, iostat, etc.)      ? ceph-osd bug     }     }   10.6)如果有東西導致OSD擺動(反覆地被標記為down,然後又up),你可以強制監視器停止:   {    ceph osd set noup # prevent osds from getting marked up    ceph osd set nodown # prevent osds from getting marked down        Notes:    10.6.1)這些標記記錄在osdmap資料結構裡:    {     ceph osd dump | grep flags     flags no-up,no-down       }    10.6.2)下列命令可清除標記:    {     ceph osd unset noup     ceph osd unset nodown    }    10.6.3)還支援其它兩個標記noin和noout,它們分別可阻止OSD被標記為in、死亡的ceph-osd被標記為out(不管mon osd down out interval的值是什麼)。    10.6.4)注意,noup、noout和nodown從某種意義上說是臨時的,一旦標記清除了,它們被阻塞的動作短時間內就會發生;相反,noin標記阻止    ceph-osd啟動時進入叢集,任何設定了此標記的守護程序啟動後都維持原樣。   }   10.7)在生產叢集,我們推薦至少要執行3個監視器。這樣單個監視器失敗不會拖垮整個監視器叢集,因為大部分仍可用,這樣剩餘節點仍能形成法定人數。   {    10.7.1)檢查叢集健康狀況的時候,也許會看到一個監視器失敗了,例如:    {     ceph health     HEALTH_WARN 1 mons down, quorum 0,2       }    10.7.2)額外詳情可檢查叢集狀態:    {     ceph status     HEALTH_WARN 1 mons down, quorum 0,2     mon.b (rank 1) addr 192.168.106.220:6790/0 is down (out of quorum)    }    10.7.3)大多情況下,都可以簡單地重啟相應節點,例如--> service ceph -a restart {failed-mon}    10.7.4)如果監視器數量不足以形成法定人數,ceph命令將攔截你的操作嘗試,你得先啟動足夠的ceph-mon守護程序來形成法定人數,才能在叢集裡做其它的事。   } }   Debugging and logging: 1、你可以在預設位置/var/log/ceph 下翻閱ceph的日誌。 2、除錯也許要求你捕捉記憶體和執行緒問題,你可以在Valgrind下執行單個、一類守護程序、或者整個叢集。你應該只在開發、除錯期間使用Valgrind,它需要大量計算, 會減慢你的系統。Valgrind訊息記錄在標準錯誤。 Data Placement:  1、你的叢集啟動並執行後,你就可以研究資料放置了,ceph支援PB級資料儲存叢集,是因為儲存池和歸置組用CRUSH演算法在叢集內分佈資料。 2、ceph通過RADOS叢集動態地儲存、複製和重新均衡資料物件。很多不同使用者因不同目的把物件儲存在不同的儲存池裡,而它們都坐落於無數的OSD之上,所以 ceph的運營需要些資料歸置計劃。ceph的資料歸置計劃概念主要有: {   2.1)儲存池:ceph在儲存池記憶體儲資料,它是物件儲存的邏輯組;儲存池管理著歸置組數量、複製數量、和儲存池規則集。要往儲存池裡存資料,使用者必須認證過、   且許可權合適,儲存池可做快照,它未來將支援名稱空間功能。   2.2)歸置組:ceph把物件對映到歸置組(PG),歸置組是一系列邏輯物件池的片段,這些物件分組後再儲存到OSD,歸置組減少了每物件元資料數量,更多的歸置組   (如每OSD包括100個)使得均衡更好。   2.3)CRUSH圖:CRUSH是使ceph能伸縮自如而沒有效能瓶頸、沒有擴充套件限制、沒有單點故障,它為CRUSH演算法提供叢集的物理拓撲,以此確定一個物件的資料及它的副本   應該在哪裡、怎樣才能越過故障域保證資料安全。   2.4)起初安裝測試叢集的時候,可以使用預設值。但開始規劃一個大型ceph叢集,做資料歸置操作的時候會涉及儲存池、歸置組、和CRUSH。 } Pools: 1、開始部署叢集時沒有建立儲存池,ceph則用預設儲存池存資料。儲存池不同於CRUSH基於位置的桶,它沒有單獨的物理位置,而且儲存池提供了一些額外的功能: {   1.1)複製:你可以設定一個物件期望的副本數量。典型配置儲存一個物件和一個它的副本(如size = 2),但你可以更改副本的數量。   1.2)歸置組:你可以設定一個儲存池的歸置組數量。典型配置在每個OSD上使用大約100個歸置組,這樣,不用過多計算資源就得到了較優的均衡。設定多個儲存池的時候,   要注意為這些儲存池和叢集設定合理的歸置組數量。   1.3)CRUSH規則:當你在儲存池裡存資料的時候,對映到儲存池的CRUSH規則集使得CRUSH確定一條規則,用於叢集內主物件的歸置和其副本的複製。   你可以給儲存池定製CRUSH 規則。   1.4)快照:你用ceph osd pool mksnap建立快照的時候,實際上建立了一小部分儲存池的快照。   1.5)設定所有者:你可以設定一個使用者ID為一個儲存池的所有者。   1.6)要把資料組織到儲存池裡,你可以列出、建立、刪除儲存池,也可以檢視每個儲存池的利用率。 } 2、要列出