天天看點

最新ceph叢集常用指令梳理

  結合網絡、官網、手動查詢等多方管道,整理ceph維護管理常用指令,并且梳理正常指令在使用過程中的邏輯順序。另外整理期間發現ceph 叢集的指令體系有點亂,詳細情況各自體驗。

一:ceph叢集啟動、重新開機、停止

1:ceph 指令的選項如下:

選項簡寫描述

--verbose-v詳細的日志。

--valgrindN/A(隻适合開發者和質檢人員)用 Valgrind 調試。

--allhosts-a在 ceph.conf 裡配置的所有主機上執行,否 則它隻在本機執行。

--restartN/A核心轉儲後自動重新開機。

--norestartN/A核心轉儲後不自動重新開機。

--conf-c使用另外一個配置檔案。

Ceph 子指令包括:

指令描述

start啟動守護程序。

stop停止守護程序。

forcestop暴力停止守護程序,等價于 kill -9

killall殺死某一類守護程序。

cleanlogs清理掉日志目錄。

cleanalllogs清理掉日志目錄内的所有檔案。

2:啟動所有守護程序

要啟動、關閉、重新開機 Ceph 叢集,執行 ceph 時加上 相關指令,文法如下:

/etc/init.d/ceph [options] [start|restart|stop] [daemonType|daemonID]

下面是個典型啟動執行個體:

sudo /etc/init.d/ceph -a start

加 -a (即在所有節點上執行)執行完成後Ceph本節點所有程序啟動。

把 CEPH 當服務運作,按此文法:

service ceph [options] [start|restart] [daemonType|daemonID] 

典型執行個體:  service ceph -a start

3:啟動單一執行個體

要啟動、關閉、重新開機一類守護程序  本例以要啟動本節點上某一類的所有 Ceph 守護程序,

/etc/init.d/ceph  [start|restart|stop] [daemonType|daemonID]

/etc/init.d/ceph start osd.0

 把ceph當做服務運作,啟動一節點上某個 Ceph 守護程序,

按此文法: service ceph  start {daemon-type}.{instance} 

service ceph  start osd.0

二:叢集維護常用指令概覽

1:檢查叢集健康狀況

啟動叢集後、讀寫資料前,先檢查下叢集的健康狀态。你可以用下面的指令檢查:

ceph health   或者 ceph health detail (輸出資訊更詳細)

要觀察叢集内正發生的事件,打開一個新終端,然後輸入:

ceph -w

輸出資訊裡包含:

叢集唯一辨別符

叢集健康狀況

螢幕圖元版本和螢幕法定人數狀态

OSD 版本和 OSD 狀态摘要

其記憶體儲的資料和對象數量的粗略統計,以及資料總量等。

新版本新增選項如下:

  -s, --status          show cluster status

  -w, --watch           watch live cluster changes

  --watch-debug         watch debug events

  --watch-info          watch info events

  --watch-sec           watch security events

  --watch-warn          watch warn events

  --watch-error         watch error events

  --version, -v         display version

  --verbose             make verbose

  --concise             make less verbose

使用方法示範:

ceph -w --watch-info

2:檢查叢集的使用情況

檢查叢集的資料用量及其在存儲池内的分布情況,可以用 df 選項,它和 Linux 上的 df 相似。如下:

ceph df

輸出的 GLOBAL 段展示了資料所占用叢集存儲空間的概要。

SIZE: 叢集的總容量;

AVAIL: 叢集的空閑空間總量;

RAW USED: 已用存儲空間總量;

% RAW USED: 已用存儲空間比率。用此值參照 full ratio 和 near full \ ratio 來確定不會用盡叢集空間。

詳情見存儲容量。

輸出的 POOLS 段展示了存儲池清單及各存儲池的大緻使用率。沒有副本、克隆品和快照占用情況。例如,如果你把 1MB 的資料存儲為對象,理論使用率将是 1MB ,但考慮到副本數、克隆數、和快照數,實際使用率可能是 2MB 或更多。

NAME: 存儲池名字;

ID: 存儲池唯一辨別符;

USED: 大概資料量,機關為 KB 、 MB 或 GB ;

%USED: 各存儲池的大概使用率;

Objects: 各存儲池内的大概對象數。

新版本新增ceph osd df  指令,可以詳細列出叢集每塊磁盤的使用情況,包括大小、權重、使用多少空間、使用率等等

3:檢查叢集狀态

要檢查叢集的狀态,執行下面的指令::

ceph status

4:檢查MONITOR狀态

檢視螢幕圖,執行下面的指令::

ceph mon stat

或者:

ceph mon dump

要檢查螢幕的法定人數狀态,執行下面的指令:

ceph quorum_status

5:檢查 MDS 狀态:

中繼資料伺服器為 Ceph 檔案系統提供中繼資料服務,中繼資料伺服器有兩種狀态: up | \ down 和 active | inactive ,執行下面的指令檢視中繼資料伺服器狀态為 up 且 active :

ceph mds stat

要展示中繼資料叢集的詳細狀态,執行下面的指令:

ceph mds dump

三:叢集指令詳解

######################mon 相關####################

1:檢視mon的狀态資訊

[[email protected]~]# ceph mon stat

2:檢視mon的選舉狀态

[[email protected]~]# ceph quorum_status

3:檢視mon的映射資訊

[[email protected]~]# ceph mon dump

4:删除一個mon節點

[[email protected]~]# ceph mon remove cs1

5:獲得一個正在運作的mon map,并儲存在1.txt檔案中

[[email protected]~]# ceph mon getmap -o 1.txt

6:讀取上面獲得的map

[[email protected]~]# monmaptool --print 1.txt 

7:把上面的mon map注入新加入的節點

[[email protected]~]# ceph-mon -i nc3 --inject-monmap 1.txt

8:檢視mon的amin socket

[[email protected]~]# ceph-conf --name mon.nc3 --show-config-value admin_socket

9:檢視ceph mon log日志所在的目錄

[[email protected]~]# ceph-conf --name mon.nc1 --show-config-value log_file    

/var/log/ceph/ceph-mon.nc1.log

10:檢視一個叢集ceph-mon.nc3參數的配置、輸出資訊特别詳細,叢集所有配置生效可以在此參數下确認

[[email protected]~]# ceph --admin-daemon /var/run/ceph/ceph-mon.nc3.asok config show | less

######################### msd 相關 ###################

1:檢視msd狀态

[[email protected]~]# ceph mds stat

2:删除一個mds節點

[[email protected]~]# ceph  mds rm 0 mds.nc1

3:設定mds狀态為失敗

[[email protected]~]# ceph mds rmfailed <int[0-]>   

4:建立pool 

[[email protected]~]# ceph mds add_data_pool <poolname>

5:關閉mds叢集

[[email protected]~]# mds cluster_down

6:啟動mds叢集

[[email protected]~]# mds cluster_up

7:設定cephfs檔案系統存儲方式最大單個檔案尺寸

[[email protected]~]# ceph mds set max_file_size 1024000000000

### 清除cephfs 檔案系統步驟 ####

強制mds狀态為featrue

[[email protected]~]# ceph mds fail 0

删除mds檔案系統

[[email protected]~]# ceph fs rm leadorfs --yes-i-really-mean-it

#删除fs資料檔案夾

[[email protected]~]# ceph osd pool delete cephfs_data cephfs_data --yes-i-really-really-mean-it 

#删除中繼資料檔案夾

[[email protected]~]# ceph osd pool delete cephfs_metadata cephfs_metadata --yes-i-really-really-mean-it 

然後再删除 mds key  ,殘留檔案等

拆除檔案系統前推薦先删除節點,待驗證

[[email protected]~]# ceph  mds rm 0 mds.node242

################################ ceph auth 相關 ################################

1:檢視ceph叢集中的認證使用者及相關的key

[[email protected]~]# ceph auth list

2:為ceph建立一個admin使用者并為admin使用者建立一個密鑰,把密鑰儲存到/etc/ceph目錄下:

[[email protected]~]# ceph auth get-or-create client.admin mds 'allow' osd 'allow *' mon 'allow *' > /etc/ceph/ceph.client.admin.keyring

[[email protected]~]# ceph auth get-or-create client.admin mds 'allow' osd 'allow *' mon 'allow *' -o /etc/ceph/ceph.client.admin.keyring

3:為osd.0建立一個使用者并建立一個key

[[email protected]~]# ceph auth get-or-create osd.0 mon 'allow rwx' osd 'allow *' -o /var/lib/ceph/osd/ceph-0/keyring

4:為mds.nc3建立一個使用者并建立一個key

[[email protected]~]# ceph auth get-or-create mds.nc3 mon 'allow rwx' osd 'allow *' mds 'allow *' -o /var/lib/ceph/mds/ceph-cs1/keyring

5:導入key資訊

[[email protected]~]# ceph auth import   /var/lib/ceph/mds/ceph-cs1/keyring

6:删除叢集中的一個認證使用者

[[email protected]~]# ceph auth del osd.0

################################ osd  相關 ################################

1:檢視osd清單

[[email protected]~]# ceph osd tree

2:檢視資料延遲

[[email protected]~]# ceph osd perf 

osd fs_commit_latency(ms) fs_apply_latency(ms) 

  0                     3                    4 

  1                   333                  871 

  2                    33                   49 

  3                     1                    2 

。。。。。。。。。。。。

3:詳細列出叢集每塊磁盤的使用情況,包括大小、權重、使用多少空間、使用率等等

[[email protected]~]# ceph osd df 

4:down掉一個osd硬碟

[[email protected]~]# ceph osd down 0   #down掉osd.0節點

5:在叢集中删除一個osd硬碟

[[email protected]~]# ceph osd rm 0

6:在叢集中删除一個osd 硬碟 crush map

[[email protected]~]# ceph osd crush rm osd.0

7:在叢集中删除一個osd的host節點

[[email protected]~]# ceph osd crush rm cs1

8:檢視最大osd的個數 

 [[email protected]~]# ceph osd getmaxosd

max_osd = 90 in epoch 1202     #預設最大是90個osd節點

9:設定最大的osd的個數(當擴大osd節點的時候必須擴大這個值)

 [[email protected]~]# ceph osd setmaxosd 2048

10:設定osd crush的權重為1.0

ceph osd crush set {id} {weight} [{loc1} [{loc2} ...]]

例如:

[[email protected]~]# ceph osd crush set osd.1 0.5 host=node241

11:設定osd的權重

[[email protected]~]# ceph osd reweight 3 0.5

reweighted osd.3 to 0.5 (8327682)

或者用下面的方式

[[email protected]~]# ceph osd crush reweight osd.1 1.0

12:把一個osd節點逐出叢集

[[email protected]~]# ceph osd out osd.3:

3       1    osd.3   up      0      # osd.3的reweight變為0了就不再配置設定資料,但是裝置還是存活的

13:把逐出的osd加入叢集

[[email protected]~]# ceph osd in osd.3

marked in osd.3. 

14:暫停osd (暫停後整個叢集不再接收資料)

[[email protected]~]# ceph osd pause

15:再次開啟osd (開啟後再次接收資料) 

[[email protected]~]# ceph osd unpause

16:檢視一個叢集osd.0參數的配置、輸出資訊特别詳細,叢集所有配置生效可以在此參數下确認

[[email protected]~]# ceph --admin-daemon /var/run/ceph/ceph-osd.0.asok config show | less

17:設定标志 flags ,不允許關閉osd、解決網絡不穩定,osd 狀态不斷切換的問題

[[email protected]~]# ceph osd set nodown

取消設定

[[email protected]~]# ceph osd unset nodown

################################pool  相關################################

1:檢視ceph叢集中的pool數量

[[email protected]~]# ceph osd lspools   或者 ceph osd pool ls

2:在ceph叢集中建立一個pool

[[email protected]~]# ceph osd pool create rbdtest 100            #這裡的100指的是PG組:

3:檢視叢集中所有pool的副本尺寸

[[email protected]~]# ceph osd dump | grep 'replicated size'

4:檢視pool 最大副本數量

[[email protected]~]# ceph osd pool get rbdpool size

size: 3

5:檢視pool 最小副本數量

[[email protected] ~]# ceph osd pool get rbdpool min_size

min_size: 2

6:設定一個pool的pg數量

[[email protected]~]# ceph osd pool set rbdtest pg_num 100

7:設定一個pool的pgp數量

[[email protected]~]# ceph osd pool set rbdtest pgp_num 100

8: 修改ceph,資料最小副本數、和副本數

ceph osd pool set $pool_name min_size 1

ceph osd pool set $pool_name size 2

示例:

[[email protected]~]# ceph osd pool set rbdpool min_size 1

[[email protected]~]# ceph osd pool set rbdpool size 2

驗證:

[[email protected]~]# ceph osd dump

pool 3 'rbdpool' replicated size 2 min_size 1 

9:設定rbdtest池的最大存儲空間為100T(預設是1T)

[[email protected]~]# ceph osd pool set rbdtest target_max_bytes 100000000000000

10: 為一個ceph pool配置配額、達到配額前叢集會告警,達到上限後無法再寫入資料

[[email protected]~]# ceph osd pool set-quota rbdtest max_objects 10000

11: 在叢集中删除一個pool,注意删除poolpool 映射的image 會直接被删除,線上操作要謹慎。

[[email protected]~]# ceph osd pool delete rbdtest  rbdtest  --yes-i-really-really-mean-it  #叢集名字需要重複兩次

12: 給一個pool建立一個快照

[[email protected]~]# ceph osd pool mksnap rbdtest   rbdtest-snap20150924

13: 檢視快照資訊

[[email protected]~]# rados lssnap -p rbdtest

1       rbdtest-snap20150924    2015.09.24 19:58:55

2       rbdtest-snap2015092401  2015.09.24 20:31:21

2 snaps

14:删除pool的快照

[[email protected]~]# ceph osd pool rmsnap rbdtest  rbdtest-snap20150924

驗證,剩餘一個snap

[[email protected]~]# rados lssnap -p rbdtest

2       rbdtest-snap2015092401  2015.09.24 20:31:21

1 snaps

################################rados指令相關##################

rados 是和Ceph的對象存儲叢集(RADOS),Ceph的分布式檔案系統的一部分進行互動是一種實用工具。

1:檢視ceph叢集中有多少個pool (隻是檢視pool)

[[email protected]~]# rados lspools    同  ceph osd pool ls 輸出結果一緻

2:顯示整個系統和被池毀掉的使用率統計,包括磁盤使用(位元組)和對象計數

[[email protected]~]# rados df 

3:建立一個pool

[[email protected]~]# rados mkpool test

4:建立一個對象object 

[[email protected]~]# rados create test-object -p test

5:檢視對象檔案

[[email protected]~]# rados -p test ls

test-object

6:删除一個對象

[[email protected]~]# rados rm test-object-1 -p test

7:删除foo池 (和它所有的資料)

[[email protected]~]# rados rmpool test test –yes-i-really-really-mean-it 

8:檢視ceph pool中的ceph object (這裡的object是以塊形式存儲的)

[[email protected]~]# rados ls -p test | more

9:為test pool建立快照

[[email protected]~]# rados -p test mksnap testsnap

created pool test snap testsnap

10:列出給定池的快照

[[email protected]~]# rados -p test lssnap         

1       testsnap        2015.09.24 21:14:34

11:删除快照

[[email protected]~]# rados -p test rmsnap testsnap

removed pool test snap testsnap

12:上傳一個對象到test pool

[[email protected]~]# rados -p test put myobject blah.txt

13:

###使用rados 進行性能測試###

測試用例如下:

rados bench 600 write  rand -t 100 -b 4K -p datapool

選項解釋:

測試時間 :600

支援測試類型:write/read ,加rand就是随機,不加就是順序

并發數( -t選項):100 

pool的名字是:datapool

################################ PG 相關 ################################

PG =“放置組”。當叢集中的資料,對象映射到程式設計器,被映射到這些PGS的OSD。

1:檢視pg組的映射資訊

[[email protected]~]# ceph pg dump    或者 ceph pg ls

2:檢視一個PG的map

[[email protected]~]# ceph pg map 0.3f

osdmap e88 pg 0.3f (0.3f) -> up [0,2] acting [0,2]   #其中的[0,2]代表存儲在osd.0、osd.2節點,osd.0代表主副本的存儲位置

3:檢視PG狀态

[[email protected]~]# ceph pg stat

4:查詢一個pg的詳細資訊

[[email protected]~]# ceph pg  0.26 query

5:要洗刷一個pg組,執行指令:

[[email protected]~]# ceph pg scrub {pg-id}

6:檢視pg中stuck的狀态

要擷取所有卡在某狀态的歸置組統計資訊,執行指令:

ceph pg dump_stuck inactive|unclean|stale [--format <format>] [-t|--threshold <seconds>]

[[email protected]~]# ceph pg dump_stuck unclean

[[email protected]~]# ceph pg dump_stuck inactive

[[email protected]~]# ceph pg dump_stuck stale

Inactive (不活躍)歸置組不能處理讀寫,因為它們在等待一個有最新資料的 OSD 複活且進入叢集。

Unclean (不幹淨)歸置組含有複制數未達到期望數量的對象,它們應該在恢複中。

Stale (不新鮮)歸置組處于未知狀态:存儲它們的 OSD 有段時間沒向螢幕報告了(由 mon_osd_report_timeout 配置)。

可用格式有 plain (預設)和 json 。閥值定義的是,歸置組被認為卡住前等待的最小時間(預設 300 秒)

7:顯示一個叢集中的所有的pg統計

[[email protected]~]# ceph pg dump --format plain

8:恢複一個丢失的pg

如果叢集丢了一個或多個對象,而且必須放棄搜尋這些資料,你就要把未找到的對象标記為丢失( lost )。

如果所有可能的位置都查詢過了,而仍找不到這些對象,你也許得放棄它們了。這可能是罕見的失敗組合導緻的,叢集在寫入完成前,未能得知寫入是否已執行。

目前隻支援 revert 選項,它使得復原到對象的前一個版本(如果它是新對象)或完全忽略它。要把 unfound 對象标記為 lost ,執行指令:

ceph pg {pg-id} mark_unfound_lost revert|delete

9:檢視某個PG内分布的資料狀态,具體狀态可以使用選項過濾輸出

ceph pg ls {<int>} {active|clean|down|replay|splitting|scrubbing|scrubq|degraded|inconsistent|peering|repair|recovering|backfill_wait|incomplete|stale|remapped|deep_scrub|backfill|

backfill_toofull|recovery_wait|undersized [active|clean|down|replay|splitting|scrubbing|scrubq|degraded|inconsistent|peering|repair|recovering|backfill_wait|incomplete|stale|remapped|

deep_scrub|backfill|backfill_toofull|recovery_wait|undersized...]} :  list pg with specific pool, osd, state

執行個體如下:

                    pg号   過濾輸出的狀态

[[email protected]~]# ceph   pg   ls       1     clean

10:查詢osd 包含pg 的資訊,過濾輸出pg的狀态資訊

pg ls-by-osd <osdname (id|osd.id)>       list pg on osd [osd]

 {<int>} {active|clean|down|replay|splitting|scrubbing|scrubq|degraded|    

 inconsistent|peering|repair|recovering| backfill_wait|incomplete|stale|remapped|deep_scrub|backfill|backfill_toofull|recovery_wait|undersized[active|clean|down|replay|splitting|    

 scrubbing|scrubq|degraded|inconsistent| peering|repair|recovering|backfill_ wait|incomplete|stale|remapped|deep_scrub|backfill|backfill_toofull|recovery_wait|undersized...]} 

執行個體如下:

[[email protected]~]# ceph pg ls-by-osd osd.5 

11:查詢pool包含pg 的資訊,過濾輸出pg的狀态資訊

ceph pg  ls-by-pool   poolname   選項

ceph pg ls-by-pool   <poolstr>  {active|clean| down|replay|splitting|scrubbing|scrubq|  degraded|inconsistent|peering|repair| recovering|backfill_wait|incomplete|  stale|remapped|deep_scrub|backfill|     

 backfill_toofull|recovery_wait| undersized [active|clean|down|replay|  splitting|scrubbing|scrubq|degraded| inconsistent|peering|repair|recovering| backfill_wait|incomplete|stale| remapped|deep_scrub|backfill|backfill_ 

執行個體如下:

[[email protected]~]# ceph pg ls-by-pool test  

12:查詢某個osd狀态為 primary pg ,可以根據需要過濾狀态

pg ls-by-primary <osdname (id|osd.id)> {<int>} {active|clean|down|replay|splitting|scrubbing|scrubq|degraded|inconsistent|peering|repair|recovering|backfill_wait|incomplete|stale|remapped|deep_scrub|backfill|

backfill_toofull|recovery_wait|undersized [active|clean|down|replay|splitting|scrubbing|scrubq|degraded|inconsistent|peering|repair|recovering|backfill_wait|incomplete|stale|remapped|deep_scrub|backfill|

backfill_toofull|recovery_wait|undersized...]} :  list pg with primary = [osd]

 執行個體如下:

                         osd号   過濾輸出的狀态

[[email protected]~]# ceph pg ls-by-primary    osd.3    clean 

############################### rbd指令相關 #########################3 

1:在test池中建立一個命名為kjh的10000M的鏡像

[[email protected]~]# rbd create -p test --size 10000 kjh

2:檢視ceph中一個pool裡的所有鏡像

[[email protected]~]# rbd ls test

kjh

3:檢視建立的鏡像的資訊

[[email protected]~]# rbd -p test info kjh    

4:檢視ceph pool中一個鏡像的資訊

[[email protected]~]# rbd info -p test  --image kjh

rbd image 'kjh':

        size 1000 MB in 250 objects

        order 22 (4096 kB objects)

        block_name_prefix: rb.0.92bd.74b0dc51

        format: 1

5:删除一個鏡像

[[email protected]~]# rbd rm  -p test  kjh

6:調整一個鏡像的尺寸

[[email protected]~]# rbd resize -p test --size 20000 kjh

[[email protected]~]# rbd -p test info kjh   #調整後的鏡像大小

rbd image 'kjh':

        size 2000 MB in 500 objects

        order 22 (4096 kB objects)

        block_name_prefix: rb.0.92c1.74b0dc51

        format: 1

#########rbd pool 快照功能測試###########

1:建立個pool叫’ptmindpool’同時在下面建立一個’kjhimage’

[[email protected]~]# ceph osd pool create ptmindpool 256 256

pool 'ptmindpool' created

2:建立鏡像

[[email protected]~]# rbd create kjhimage --size 1024 --pool ptmindpool

3:檢視鏡像

[[email protected]~]# rbd --pool ptmindpool ls

kjhimage

4:建立snap,快照名字叫’snapkjhimage’

[[email protected]~]# rbd snap create ptmindpool/[email protected]

5:檢視kjhimage的snap

[[email protected]~]# rbd snap ls ptmindpool/kjhimage

SNAPID NAME         SIZE

     2 snapkjhimage 1024 MB

6:復原快照,

[[email protected]~]# rbd snap rollback ptmindpool/[email protected]

7:删除snap 删除snap報(rbd: snapshot 'snapshot-xxxx' is protected from removal.)寫保護 ,使用 rbd snap unprotect volumes/snapshot-xxx' 解鎖,然後再删除

[[email protected]~]# rbd snap rm ptmindpool/[email protected]

8:删除kjhimage的全部snapshot

[[email protected]~]# rbd snap purge ptmindpool/kjhimage

9: 把ceph pool中的一個鏡像導出

導出鏡像

[[email protected]~]# rbd export -p ptmindpool --image kjhimage /tmp/kjhimage.img            

Exporting image: 100% complete...done.

驗證檢視導出檔案

l /tmp/kjhimage.img        

-rw-r--r-- 1 root root 1073741824 Sep 24 23:15 /tmp/kjhimage.img

10:把一個鏡像導入ceph中

[[email protected]~]# rbd import /tmp/kjhimage.img  -p ptmindpool --image importmyimage1

Importing image: 100% complete...done.

驗證檢視導入鏡像檔案

rbd -pptmindpool ls

importmyimage1