1. 程式人生 > >CRUSH map 定製例項解析

CRUSH map 定製例項解析

定製 CRUSH map:直接修改配置**

當我們使用ceph-deploy部署ceph時,它為我們的配置檔案生成一個預設的CRUSH map,預設的CRUSH map 在測試和沙箱環境下是夠用的;但在一個大型的生產環境中,最好為環境定製一個CRUSH map,步驟:

1、提取已有的CRUSH map ,使用-o引數,ceph將輸出一個經過編譯的CRUSH map 到您指定的檔案
    ` ceph osd getcrushmap -o crushmap.txt`
2、反編譯你的CRUSH map ,使用-d引數將反編譯CRUSH map 到通過-o 指定的檔案中
    `crushtool -d crushmap.txt -o crushmap-decompile`
3、使用編輯器編輯CRUSH map
    `vi crushmap-decompile`
4、重新編譯這個新的CRUSH map
    `crushtool -c crushmap-decompile -o crushmap-compiled`
5、將新的CRUSH map 應用到ceph 叢集中
    `ceph osd setcrushmap -i crushmap-compiled`

編輯注意事項:

1、我們用下面的語法宣告一個node bucket:

    [bucket-type] [bucket-name] {
        id [a unique negative numeric ID]
        weight [the relative capacity/capability of the item(s)]
        alg [the bucket type: uniform | list | tree | straw ]
        hash [the hash type: 0 by default]
        item [item-name] weight [weight]
    }

舉例:

    host node1 {
        id -1
        alg straw
        hash 0
        item osd.0 weight 1.00
        item osd.1 weight 1.00
    }

    host node2 {
        id -2
        alg straw
        hash 0
        item osd.2 weight 1.00
        item osd.3 weight 1.00
    }

    rack rack1 {
        id -3
        alg straw
        hash 0
        item node1 weight 2.00
        item node2 weight 2.00
    }

 1.2、在層級結構中,rack bucket 層級高於host bucket,host bucket 高於 osd。
 所以,rack bucket 包含node bucket,不包含任何osds,

 1.3、osd 的權重預設:1.00相關於1TB,0.50相關與500GB,3.00相關於3TB;
 資料傳輸速率較慢的可略低於此相關率,速率較快的可略高於此相關率。


2、rules:資源池佈置資料所依據的規則;預設情況下一個ruleset配所有的預設資源池;
大部分情況下,當你新建一個資源池時,不需要修改預設的rules,預設的ruleset是0


語法:

    rule <rulename> {

        ruleset <ruleset>
        type [ replicated | erasure ]
        min_size <min-size>
        max_size <max-size>
        step take <bucket-name>
        step [choose|chooseleaf] [firstn|indep] <N> <bucket-type>
        step emit
    }
舉例:

    # rules
    rule data {
        ruleset 0
        type replicated
        min_size 1
        max_size 10
        step take default
        step chooseleaf firstn 0 type host
        step emit
    }
    rule metadata {
        ruleset 1
        type replicated
        min_size 1
        max_size 10
        step take default
        step chooseleaf firstn 0 type host
        step emit
    }
    rule rbd {
        ruleset 2
        type replicated
        min_size 1
        max_size 10
        step take default
        step chooseleaf firstn 0 type host
        step emit
    }


3、新增一個buckets和rules

    #舉例新增2個特殊的rules,一個是服務SSD pool,一個是服務SAS pool

    3.1 為SSD pool新增一個bucket

        pool ssd {
            id -5       # do not change unnecessarily
            alg straw
            hash 0  # rjenkins1
            item osd.0 weight 1.000
            item osd.1 weight 1.000
        }

        新增與之對應的rule:

        rule ssd {
            ruleset 3
            type replicated
            min_size 1
            max_size 10
            step take ssd
            step choose firstn 0 type osd
            step emit
        }

    3.2 同理為SAS pool新增一個bucket

        pool sas {
            id -6       # do not change unnecessarily
            alg straw
            hash 0  # rjenkins1
            item osd.2 weight 1.000
            item osd.3 weight 1.000
        }

        對應的rule:

        rule sas {
            ruleset 4
            type replicated
            min_size 1
            max_size 10
            step take sas
            step choose firstn 0 type osd
            step emit
        }

設定資源池使用ssd rule

ceph osd pool set newpoolname crush_ruleset 3 #ruleset 後面的數字是在rule配置裡面ruleset對應的數字

crush map :微調 使用命令**

新增、移動一個osd:

ceph osd crush set {id} {name} {weight} pool={pool-name} [{bucket-type}={bucket-name} ...]

更改osd的權重:

ceph osd crush reweight {name} {weight}

刪除一個osd:
ceph osd crush remove {name}

新增一個bucket:

ceph osd crush add-bucket {bucket-name} {bucket-type}

移動一個bucket:

ceph osd crush move {bucket-name} {bucket-type}={bucket-name}, [...]

刪除一個bucket:

ceph osd crush remove {bucket-name}

移動bucket例項:

1、執行命令`ceph osd tree `檢視當前的cluster 佈局:圖cluster1

這裡寫圖片描述

2、在當前佈局中新增racks:
    ceph osd crush add-bucket rack01 rack
    ceph osd crush add-bucket rack02 rack
    ceph osd crush add-bucket rack03 rack

3、把每一個host移動到相應的rack下面:
    ceph osd crush move ceph-node1 rack=rack01
    ceph osd crush move ceph-node2 rack=rack02
    ceph osd crush move ceph-node3 rack=rack03

4、把所有rack移動到default root 下面:
    ceph osd crush move rack03 root=default
    ceph osd crush move rack02 root=default
    ceph osd crush move rack01 root=default

5、再次執行命令`ceph osd tree`檢視更新後的cluster 佈局:圖cluster2

這裡寫圖片描述

參考文件:

官方文件:

書籍:learning ceph

相關推薦

CRUSH map 定製例項解析

定製 CRUSH map:直接修改配置** 當我們使用ceph-deploy部署ceph時,它為我們的配置檔案生成一個預設的CRUSH map,預設的CRUSH map 在測試和沙箱環境下是夠用的;但在一個大型的生產環境中,最好為環境定製一個CRUSH map

java8中 map和flatmap的共同點和區別,以及兩者的例項解析

在函式式語言中,函式作為一等公民,可以在任何地方定義,在函式內或函式外,可以作為函式的引數和返回值,可以對函式進行組合。由於指令式程式設計語言也可以通過類似函式指標的方式來實現高階函式,函式式的最主要的好處主要是不可變性帶來的。沒有可變的狀態,函式就是引用透明(Referen

MapReduce簡單例項解析map、reduce、combiner、partition一條龍

需求:通過MapReduce對紅樓夢TXT檔案統計笑、喜、哭、怒在全書的數量,使用combiner減少IO,通過partition輸出到兩個檔案中。 通過MapReduce外掛建立MapReduce project,這樣需要的包都會自動匯入 主函式:

spring 官方文件的介面理解整理(四)型別轉換spring例項解析

上篇文章解析了spring型別轉換的介面和他們的分工,怎麼通過設計模式實現轉換功能。 這篇需要些上篇的知識,如果沒有看可以從這兒跳轉spring 官方文件的介面理解整理(三)型別轉換 一、準備新建Maven專案,pom.xml內容如下 <properties>

通俗理解卡爾曼濾波及其演算法實現(帶例項解析

1.簡介(Brief Introduction) 在學習卡爾曼濾波器之前,首先看看為什麼叫“卡爾曼”。跟其他著名的理論(例如傅立葉變換,泰勒級數等等)一樣,卡爾曼也是一個人的名字,而跟他們不同的是,他是個現代人! 卡爾曼全名Rudolf Emil Kalman,匈牙利數學家,1930年出生於

控制檯實現js發起http請求 —— AJAX 例項解析

此處以一個簡單的測試使用者登入介面為例。。。 如果一個網站的登入模組設計的很簡單的話,可以通過不斷髮起請求去測試一個賬號的密碼。。。 // 第一步:建立 XMLHttpRequest 物件 var xmlhttp; if (window.XMLHttpRequest) {// code

c++ coredump例項解析

一、背景     經過重重除錯後,看到編譯成功的那一刻,內心充滿歡喜。當程式一執行,卻經常出現coredump的情況,此時內心是崩潰的。我想程式設計師經常會碰到這種情況,尤其使用c++語言編寫程式碼,由於沒有自動記憶體管理,經常會出現coredump情況,主要原因有以下幾

影象修復例項解析(三)

本篇基於SIGGRAPH 2017 (ACM ToG)的 Globally and Locally Consistent Image Completion  (CE中加入Global+Local兩個判別器的改進),  proj:http://hi.cs.waseda.ac

抽象類和介面的異同及例項解析

與具體類比較 抽象類不能直接例項化,並且對抽象類使用 new 運算子會導致 編譯時錯誤。雖然一些變數和值在編譯時的 型別可以是抽象的,但是這樣的變數和值必須或者為 null,或者含有對非抽象類的例項的 引用(此非抽象類是從抽象類派生的)。

TSM檔案格式及例項解析(四)——string的排列

目錄 引: 資料 簡析 Indexes: blocks: 關聯string 小結: TSM檔案格式現已基本明瞭,某些壓縮演算法有空再去研究一下。 引: 現在想知道未壓縮的檔案格式是怎樣。 但是翻遍官方配置文件 https://docs.influx

Kalman濾波演算法例項解析轉載

1.簡介(Brief Introduction)在學習卡爾曼濾波器之前,首先看看為什麼叫“卡爾曼”。跟其他著名的理論(例如傅立葉變換,泰勒級數等等)一樣,卡爾曼也是一個人的名字,而跟他們不同的是,他是個現代人!卡爾曼全名Rudolf Emil Kalman,匈牙利數學家,1930年出生於匈牙利首都布達佩斯。

vue 陣列遍歷方法forEach和map的原理解析和實際應用

一、前言 forEach和map是陣列的兩個方法,作用都是遍歷陣列。在vue專案的處理資料中經常會用到,這裡介紹一下兩者的區別和具體用法示例。 二、程式碼 1. 相同點 都是陣列的方法 都用來遍歷陣列 兩個函式都有4個引數:匿名函式中可傳3個引數item(當前項), index(當前項的

vue 數組遍歷方法forEach和map的原理解析和實際應用

second 直接 price each var bool 原理 棧內存 == 一、前言 forEach和map是數組的兩個方法,作用都是遍歷數組。在vue項目的處理數據中經常會用到,這裏介紹一下兩者的區別和具體用法示例。 二、代碼 1. 相同點 都是數組的方法 都用來遍

Json檔案轉Map(二)之解析節點

說明     在上一篇部落格中,筆者向大家介紹瞭如何去解析Json並轉化為Map。這一篇的部落格,筆者主要是介紹如何去提取巢狀Json的節點並儲存。例如以下的Json格式: { "error": 0, "status": "success", "results"

基於OAUTH2的統一認證的例項解析

基於OAUTH2的統一認證的例項解析 在一個單位中,可能是存在多個不同的應用,比如學校會有財務的系統會有學生工作的系統,還有圖書館的系統等等,如果每個系統都用獨立的賬號認證體系,會給使用者帶來很大困擾,也給管理帶來很大不便。所以需要設計一種統一登入的解決方案。比如我登陸了百度賬號,進貼吧時發現已

Java中Map介面的解析

Map詳解: 先看圖,便於巨集觀瞭解Map的地位。 Map介面中鍵和值一一對映. 可以通過鍵來獲取值。 給定一個鍵和一個值,你可以將該值儲存在一個Map物件. 之後,你可以通過鍵來訪問對應的值。 當訪問的值不存在的時候,方法就會丟擲一個NoSuchElementEx

例項解析linux核心I2C體系結構(2)

四、在核心裡寫i2c裝置驅動的兩種方式 在一文介紹了利用/dev/i2c-0在應用層完成對i2c裝置的操作,但很多時候我們還是習慣為i2c裝置在核心層編寫驅動程式。目前核心支援兩種編寫i2c驅動程式的方式。下面分別介紹這兩種方式的實現。這裡分別稱這兩種方式為“Adapter

html5桌面通知(Web Notifications)例項解析

interface NotificationCenter { // Notification factory methods. Notification createNotification(in DOMString iconUrl, in DOMString title, in DOMString bo

Java簡單的繼承例項解析

面向物件程式語言具有封裝、繼承、多型三個基本特徵,本文就繼承舉例詳談 程式碼中有一個父類person1類,表示“這個人”,person1的一個子類為student,表示“這個人是學生”。 perso

C++類和物件例項解析

C++既是面向物件也是面向過程的語言,在這裡就有一個重要的概念——類。         何謂類?類是對物件的一種抽象,舉例來講:每一個實實在在存在的人就是一個物件,人有很多共同的特徵(一個頭,兩條腿,能走,能跑),這具有共同特徵的人就成為一個類。類是一個抽象的名詞,每一個人(即物件)是這個類的例項。