1. 程式人生 > >ceph-建立一個使用該rule-ssd規則的儲存池

ceph-建立一個使用該rule-ssd規則的儲存池

luminous版本的ceph新增了一個功能crush class,這個功能又可以稱為磁碟智慧分組。因為這個功能就是根據磁碟型別自動的進行屬性的關聯,然後進行分類。無需手動修改crushmap,極大的減少了人為的操作。以前的操作有多麻煩可以看看:ceph crushmap

ceph中的每個osd裝置都可以選擇一個class型別與之關聯,預設情況下,在建立osd的時候會自動識別裝置型別,然後設定該裝置為相應的類。通常有三種class型別:hdd,ssd,nvme。

由於當前實驗環境下沒有ssd和nvme裝置,只好修改class標籤,假裝為有ssd裝置,然後進行實驗。

一,實驗環境

[[email protected]
~]# cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) [[email protected] ~]# ceph -v ceph version 12.2.1 (3e7492b9ada8bdc9a5cd0feafd42fbca27f9c38e) luminous (stable)

二,修改crush class:

1,檢視當前叢集佈局:

[[email protected] ~]# ceph osd tree
ID CLASS WEIGHT  TYPE NAME      STATUS REWEIGHT PRI-AFF 
-1
0.05878 root default -3 0.01959 host node1 0 hdd 0.00980 osd.0 up 1.00000 1.00000 3 hdd 0.00980 osd.3 up 1.00000 1.00000 -5 0.01959 host node2 1 hdd 0.00980 osd.1 up 1.00000 1.00000 4 hdd 0.00980 osd.4 up 1.00000 1.00000 -7
0.01959 host node3 2 hdd 0.00980 osd.2 up 1.00000 1.00000 5 hdd 0.00980 osd.5 up 1.00000 1.00000

可以看到只有第二列為CLASS,只有hdd型別。
通過檢視crush class,確實只有hdd型別

[[email protected] ~]# ceph osd crush class ls
[
    "hdd"
]

2,刪除osd.0,osd.1,osd.2的class:

[[email protected] ~]# for i in 0 1 2;doceph osd crush rm-device-class osd.$i;done
done removing class of osd(s): 0
done removing class of osd(s): 1
done removing class of osd(s): 2

再次通過命令ceph osd tree檢視osd.0,osd.1,osd.2的class

[[email protected] ~]# ceph osd tree
ID CLASS WEIGHT  TYPE NAME      STATUS REWEIGHT PRI-AFF 
-1       0.05878 root default                           
-3       0.01959     host node1                         
 0       0.00980         osd.0      up  1.00000 1.00000 
 3   hdd 0.00980         osd.3      up  1.00000 1.00000 
-5       0.01959     host node2                         
 1       0.00980         osd.1      up  1.00000 1.00000 
 4   hdd 0.00980         osd.4      up  1.00000 1.00000 
-7       0.01959     host node3                         
 2       0.00980         osd.2      up  1.00000 1.00000 
 5   hdd 0.00980         osd.5      up  1.00000 1.00000 

可以發現osd.0,osd.1,osd.2的class為空

3,設定osd.0,osd.1,osd.2的class為ssd:

[[email protected] ~]# for i in 0 1 2;doceph osd crush set-device-class ssd osd.$i;done
set osd(s) 0 to class 'ssd'
set osd(s) 1 to class 'ssd'
set osd(s) 2 to class 'ssd'

再次通過命令ceph osd tree檢視osd.0,osd.1,osd.2的class

[[email protected] ~]# ceph osd tree
ID CLASS WEIGHT  TYPE NAME      STATUS REWEIGHT PRI-AFF 
-1       0.05878 root default                           
-3       0.01959     host node1                         
 3   hdd 0.00980         osd.3      up  1.00000 1.00000 
 0   ssd 0.00980         osd.0      up  1.00000 1.00000 
-5       0.01959     host node2                         
 4   hdd 0.00980         osd.4      up  1.00000 1.00000 
 1   ssd 0.00980         osd.1      up  1.00000 1.00000 
-7       0.01959     host node3                         
 5   hdd 0.00980         osd.5      up  1.00000 1.00000 
 2   ssd 0.00980         osd.2      up  1.00000 1.00000 

可以看到osd.0,osd.1,osd.2的class變為ssd
再檢視一下crush class:

[[email protected] ~]# ceph osd crush class ls
[
    "hdd",
    "ssd"
]

可以看到class中多出了一個名為ssd的class

4,建立一個優先使用ssd裝置的crush rule:

建立了一個rule的名字為:rule-ssd,在root名為default下的rule

[[email protected] ~]# ceph osd crush rule create-replicated rule-ssd default  host ssd 

檢視叢集的rule:

[[email protected] ~]# ceph osd crush rule ls
replicated_rule
rule-ssd

可以看到多出了一個名為rule-ssd的rule
通過下面的命令下載叢集crushmap檢視有哪些變化:

[[email protected] ~]# ceph osd getcrushmap -o crushmap
20
[[email protected] ~]# crushtool -d crushmap -o crushmap
[[email protected] ~]# cat crushmap
# begin crush map
tunable choose_local_tries 0
tunable choose_local_fallback_tries 0
tunable choose_total_tries 50
tunable chooseleaf_descend_once 1
tunable chooseleaf_vary_r 1
tunable chooseleaf_stable 1
tunable straw_calc_version 1
tunable allowed_bucket_algs 54

# devices
device 0 osd.0 class ssd
device 1 osd.1 class ssd
device 2 osd.2 class ssd
device 3 osd.3 class hdd
device 4 osd.4 class hdd
device 5 osd.5 class hdd

# types
type 0 osd
type 1 host
type 2 chassis
type 3 rack
type 4 row
type 5 pdu
type 6 pod
type 7 room
type 8 datacenter
type 9 region
type 10 root

# buckets
host node1 {
        id -3           # do not change unnecessarily
        id -4 class hdd         # do not change unnecessarily
        id -9 class ssd         # do not change unnecessarily
        # weight 0.020
        alg straw2
        hash 0  # rjenkins1
        item osd.0 weight 0.010
        item osd.3 weight 0.010
}
host node2 {
        id -5           # do not change unnecessarily
        id -6 class hdd         # do not change unnecessarily
        id -10 class ssd                # do not change unnecessarily
        # weight 0.020
        alg straw2
        hash 0  # rjenkins1
        item osd.1 weight 0.010
        item osd.4 weight 0.010
}
host node3 {
        id -7           # do not change unnecessarily
        id -8 class hdd         # do not change unnecessarily
        id -11 class ssd                # do not change unnecessarily
        # weight 0.020
        alg straw2
        hash 0  # rjenkins1
        item osd.2 weight 0.010
        item osd.5 weight 0.010
}
root default {
        id -1           # do not change unnecessarily
        id -2 class hdd         # do not change unnecessarily
        id -12 class ssd                # do not change unnecessarily
        # weight 0.059
        alg straw2
        hash 0  # rjenkins1
        item node1 weight 0.020
        item node2 weight 0.020
        item node3 weight 0.020
}

# rules
rule replicated_rule {
        id 0
        type replicated
        min_size 1
        max_size 10
        step take default
        step chooseleaf firstn 0 type host
        step emit
}
rule rule-ssd {
        id 1
        type replicated
        min_size 1
        max_size 10
        step take default class ssd
        step chooseleaf firstn 0 type host
        step emit
}

# end crush map

可以看到在root default下多了一行: id -12 class ssd。在rules下,多了一個rule rule-ssd其id為1

5,建立一個使用該rule-ssd規則的儲存池:

[[email protected] ~]# ceph osd pool create ssdpool 64 64 rule-ssd
pool 'ssdpool' created

檢視ssdpool的資訊可以看到使用的crush_rule 為1,也就是rule-ssd

[[email protected] ~]# ceph osd pool ls detail
pool 1 'ssdpool' replicated size 3 min_size 2 crush_rule 1 object_hash rjenkins pg_num 64 pgp_num 64 last_change 39 flags hashpspool stripe_width 0

6,建立物件測試ssdpool:

建立一個物件test並放到ssdpool中:

[[email protected] ~]# rados -p ssdpool ls
[[email protected] ~]# echo "hahah">test.txt
[[email protected] ~]# rados -p ssdpool put test test.txt 
[[email protected] ~]# rados -p ssdpool ls
test

檢視該物件的osd組:

[[email protected] ~]# ceph osd map ssdpool test
osdmap e46 pool 'ssdpool' (1) object 'test' -> pg 1.40e8aab5 (1.35) -> up ([1,2,0], p1) acting ([1,2,0], p1)

可以看到該物件的osd組使用的都是ssd磁碟,至此驗證成功。可以看出crush class相當於一個辨別磁碟型別的標籤。

作者:http://www.cnblogs.com/sisimi/p/7804138.html 

其他參考:https://blog-fromsomedude.rhcloud.com/2017/05/16/Luminous-series-CRUSH-devices-class/ 

三,參考文獻:

相關推薦

ceph-建立一個使用rule-ssd規則儲存

luminous版本的ceph新增了一個功能crush class,這個功能又可以稱為磁碟智慧分組。因為這個功能就是根據磁碟型別自動的進行屬性的關聯,然後進行分類。無需手動修改crushmap,極大的減少了人為的操作。以前的操作有多麻煩可以看看:ceph crushmapceph中的每個osd裝置都可以選擇一

Docker-建立一個mysql容器,並儲存為本地映象

查詢docker hub上的映象 [[email protected] ~]$ docker search mysql NAME DESCRIPTION

利用threading模組和queue模組在python3直譯器上建立一個簡單的python執行緒

python直譯器沒提供執行緒池模組,故在python3上自定義python執行緒池簡單版本,程式碼如下 #用threading queue 做執行緒池 import queueimport threadingclass ThreadPool(): def __init__(self,arg):#建

例項:建立一個表格,分頁顯示資料(MongoDB資料庫儲存),功能:實現增刪改查

需求:建立一個表格,分頁顯示資料,功能:實現增刪改查 效果圖: 自動建立一個專案 命令列: express mongodb-demo --view=ejs cd mongodb-demo npm install npm install mongodb --save npm sta

java--Fibonacc由數字1、1、2、3...組成的,從第三個數字起每一個數字為前兩個數字的和。建立一個方法,接受一個整數引數,顯示從第一個元素開始總共由引數指定的個數所構成的所有斐波那契數

題目完整描述:一個斐波那契數列是由數字1、1、2、3、5、8、13、21、34等等組成的,其中每一個數字(從第三個數字起)都是前兩個數字的和。建立一個方法,接受一個整數引數,並顯示從第一個元素開始總共由該引數指定的個數所構成的所有斐波那契數字。例如,如果執行 java Fibonacci 5(Fib

作業系統(程序間共享儲存區的通訊):建立一個共享儲存區,大小4個位元組(int大小)。建立一個子程序,然後子父程序獨自執行。父程序寫入一個數字到共享儲存區,子程序在共享儲存區把數字讀出

題目:建立一個共享儲存區,大小4個位元組(int大小)。建立一個子程序,然後子父程序獨自執行。父程序寫入一個數字到共享儲存區,子程序在共享儲存區把該數字讀出。 程式碼量很少,純屬應付作業 筆者在telnet上寫這些程式碼,由於知識技術及英語太菜,不知道怎樣在telnet上覆製出來這些程式碼,

OPENSHIFT-6-分配永久儲存-建立一個永久性註冊

1.檢查機器並確認環境正常。登陸master節點,檢視掛載資訊,退出登陸。 2.使用admin賬號登陸。使用default專案。檢視pod列表資訊。檢視pod的volume資訊。檢視部署配置列表資訊。 3.檢視registry-volume.yml檔案。使用該檔案建立pv

編寫程式由從標準輸入裝置讀入的元素資料建立一個int型vector物件,然後動態建立一個vector物件大小一致的陣列,把vector物件的所有元素賦值給新陣列

先建立一個含有若干int型的vector容器,變數名為ivec。用標準輸入來初始化這個容器的每一個元素。 再動態建立一個int型陣列,利用迭代器來遍歷容器,並利用容器來初始化動態建立的陣列 最後的cout<<*(p-10)是返回到了陣列的最開始的位置,p指標又重新指向了第一個元素

如何建立一個四維的矩陣,儲存多個3通道彩色圖片

分別對兩張影象進行讀入,可以把每張彩色影象儲存為一個三維矩陣(width*height*channel) eg:  img1=imread('1.jpg');        img2=imread('2.jpg'); 現在我想把這兩張圖片存入一個四維矩陣中(第四維是2),

建立一個Ceph S3閘道器伺服器

      寫作背景是這樣的,公司有個專案,需要通過Ceph物件儲存閘道器寫1億張圖片到Ceph叢集中,由於一個閘道器寫入的速度比較慢,為了縮短寫入時間,需要增加一些伺服器作為閘道器,來將資料寫入到叢集中。        背景

html5實現表單內的上傳檔案框,建立一個可存取到file的url。

<span style="font-size:18px;"><!DOCTYPE html> <html> <head> <title>HTML5上傳圖片預覽</title> <meta http-

每個月建立一個月的表(儲存過程)

CREATE OR REPLACE PROCEDURE LOGIN_CREATETAB AUTHID current_user AS tabname VARCHAR2(200); tabCount NUMBER; BEGIN   select 'T_MO_ACCESS_LO

程式功能:建立一個帶有頭結點的單向連結串列,並將儲存在陣列中的字元依次轉儲到連結串列的各個結點中。

#include <stdio.h> #include <stdlib.h> struct node {int num;struct node *next;  }; typedef struct node Node; typedef struct node *Link; void Cr

OpenStack+Ceph+熱遷移+++四、建立儲存

四、建立儲存池 1.建立Cinder,Glance,Nova的儲存池(node1節點) ceph osd pool create volumes 128 ceph osd pool create i

【Java編程】建立一個簡單的JDBC連接-Drivers, Connection, Statement and PreparedStatement

code ava 語句 ole man for out 讀取 drop 本blog提供了一個簡單的通過JDBC驅動建立JDBC連接例程,並分別通過Statement和PreparedStatement實現對數據庫的查詢。在下一篇blog中將重點比較Statement與P

如何利用Cool Edit Pro建立一個數字音樂工作室

cool edit pro 數字音樂工作室 相信很多音樂愛好者,對於“專業錄音棚”、“音樂工作室”都深深地向往。呵呵,多麽希望自己家中能擁有一套專業的音樂工作室啊。好在現在PC上的也突飛猛進,在普通的個人電腦上,擁有基於PC平臺的數字音樂工作室成為了可能,實際上全世界的專業音樂棚都在越來越多地使用