最新ceph集羣經常使用命令梳理

  結合網絡、官網、手動查詢等多方渠道,整理ceph維護管理經常使用命令,而且梳理常規命令在使用過程當中的邏輯順序。另外整理期間發現ceph 集羣的命令體系有點亂,詳細狀況各自體驗。node


一:ceph集羣啓動、重啓、中止編程

1:ceph 命令的選項以下:json

選項簡寫描述服務器

--verbose-v詳細的日誌。網絡

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

--allhosts-a在 ceph.conf 裏配置的全部主機上執行,否 則它只在本機執行。app

--restartN/A核心轉儲後自動重啓。less

--norestartN/A核心轉儲後不自動重啓。socket

--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的狀態信息

[mon@ptmind~]# ceph mon stat


2:查看mon的選舉狀態

[mon@ptmind~]# ceph quorum_status


3:查看mon的映射信息

[mon@ptmind~]# ceph mon dump


4:刪除一個mon節點

[mon@ptmind~]# ceph mon remove cs1


5:得到一個正在運行的mon map,並保存在1.txt文件中

[mon@ptmind~]# ceph mon getmap -o 1.txt


6:讀取上面得到的map

[mon@ptmind~]# monmaptool --print 1.txt 


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

[mon@ptmind~]# ceph-mon -i nc3 --inject-monmap 1.txt


8:查看mon的amin socket

[mon@ptmind~]# ceph-conf --name mon.nc3 --show-config-value admin_socket



9:查看ceph mon log日誌所在的目錄

[mon@ptmind~]# ceph-conf --name mon.nc1 --show-config-value log_file    

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


10:查看一個集羣ceph-mon.nc3參數的配置、輸出信息特別詳細,集羣全部配置生效能夠在此參數下確認

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


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

1:查看msd狀態

[mon@ptmind~]# ceph mds stat


2:刪除一個mds節點

[mon@ptmind~]# ceph  mds rm 0 mds.nc1


3:設置mds狀態爲失敗

[mon@ptmind~]# ceph mds rmfailed <int[0-]>   

 

4:新建pool 

[mon@ptmind~]# ceph mds add_data_pool <poolname>


5:關閉mds集羣

[mon@ptmind~]# mds cluster_down


6:啓動mds集羣

[mon@ptmind~]# mds cluster_up

 

7:設置cephfs文件系統存儲方式最大單個文件尺寸

[mon@ptmind~]# ceph mds set max_file_size 1024000000000


### 清除cephfs 文件系統步驟 ####


強制mds狀態爲featrue

[mon@ptmind~]# ceph mds fail 0


刪除mds文件系統

[mon@ptmind~]# ceph fs rm leadorfs --yes-i-really-mean-it

#刪除fs數據文件夾

[mon@ptmind~]# ceph osd pool delete cephfs_data cephfs_data --yes-i-really-really-mean-it 


#刪除元數據文件夾

[mon@ptmind~]# ceph osd pool delete cephfs_metadata cephfs_metadata --yes-i-really-really-mean-it 


而後再刪除 mds key  ,殘留文件等


拆除文件系統前推薦先刪除節點,待驗證

[mon@ptmind~]# ceph  mds rm 0 mds.node242

 

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

1:查看ceph集羣中的認證用戶及相關的key

[mon@ptmind~]# ceph auth list


2:爲ceph建立一個admin用戶併爲admin用戶建立一個密鑰,把密鑰保存到/etc/ceph目錄下:

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

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


3:爲osd.0建立一個用戶並建立一個key

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


4:爲mds.nc3建立一個用戶並建立一個key

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


5:導入key信息

[mon@ptmind~]# ceph auth import   /var/lib/ceph/mds/ceph-cs1/keyring


6:刪除集羣中的一個認證用戶

[mon@ptmind~]# ceph auth del osd.0


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

1:查看osd列表

[mon@ptmind~]# ceph osd tree


2:查看數據延遲

[mon@ptmind~]# 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:詳細列出集羣每塊磁盤的使用狀況,包括大小、權重、使用多少空間、使用率等等

[mon@ptmind~]# ceph osd df 


4:down掉一個osd硬盤

[mon@ptmind~]# ceph osd down 0   #down掉osd.0節點

 

5:在集羣中刪除一個osd硬盤

[mon@ptmind~]# ceph osd rm 0


6:在集羣中刪除一個osd 硬盤 crush map

[mon@ptmind~]# ceph osd crush rm osd.0


7:在集羣中刪除一個osd的host節點

[mon@ptmind~]# ceph osd crush rm cs1


8:查看最大osd的個數 

 [mon@ptmind~]# ceph osd getmaxosd

max_osd = 90 in epoch 1202     #默認最大是90個osd節點


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

 [mon@ptmind~]# ceph osd setmaxosd 2048

 

10:設置osd crush的權重爲1.0

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

例如:

[mon@ptmind~]# ceph osd crush set osd.1 0.5 host=node241


11:設置osd的權重

[mon@ptmind~]# ceph osd reweight 3 0.5

reweighted osd.3 to 0.5 (8327682)


或者用下面的方式

[mon@ptmind~]# ceph osd crush reweight osd.1 1.0



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

[mon@ptmind~]# ceph osd out osd.3:


3       1    osd.3   up      0      # osd.3的reweight變爲0了就再也不分配數據,可是設備仍是存活的


13:把逐出的osd加入集羣

[mon@ptmind~]# ceph osd in osd.3

marked in osd.3. 


14:暫停osd (暫停後整個集羣再也不接收數據)

[mon@ptmind~]# ceph osd pause

      

15:再次開啓osd (開啓後再次接收數據) 

[mon@ptmind~]# ceph osd unpause


16:查看一個集羣osd.0參數的配置、輸出信息特別詳細,集羣全部配置生效能夠在此參數下確認

[mon@ptmind~]# ceph --admin-daemon /var/run/ceph/ceph-osd.0.asok config show | less



17:設置標誌 flags ,不容許關閉osd、解決網絡不穩定,osd 狀態不斷切換的問題

[mon@ptmind~]# ceph osd set nodown


取消設置

[mon@ptmind~]# ceph osd unset nodown


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


1:查看ceph集羣中的pool數量

[mon@ptmind~]# ceph osd lspools   或者 ceph osd pool ls


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

[mon@ptmind~]# ceph osd pool create rbdtest 100            #這裏的100指的是PG組:


3:查看集羣中全部pool的副本尺寸

[mon@ptmind~]# ceph osd dump | grep 'replicated size'


4:查看pool 最大副本數量

[mon@ptmind~]# ceph osd pool get rbdpool size

size: 3


5:查看pool 最小副本數量

[root@node241 ~]# ceph osd pool get rbdpool min_size

min_size: 2


6:設置一個pool的pg數量

[mon@ptmind~]# ceph osd pool set rbdtest pg_num 100


7:設置一個pool的pgp數量

[mon@ptmind~]# 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


示例:

[mon@ptmind~]# ceph osd pool set rbdpool min_size 1

[mon@ptmind~]# ceph osd pool set rbdpool size 2


驗證:

[mon@ptmind~]# ceph osd dump

pool 3 'rbdpool' replicated size 2 min_size 1 



9:設置rbdtest池的最大存儲空間爲100T(默認是1T)

[mon@ptmind~]# ceph osd pool set rbdtest target_max_bytes 100000000000000



10: 爲一個ceph pool配置配額、達到配額前集羣會告警,達到上限後沒法再寫入數據

[mon@ptmind~]# ceph osd pool set-quota rbdtest max_objects 10000


11: 在集羣中刪除一個pool,注意刪除poolpool 映射的p_w_picpath 會直接被刪除,線上操做要謹慎。

[mon@ptmind~]# ceph osd pool delete rbdtest  rbdtest  --yes-i-really-really-mean-it  #集羣名字須要重複兩次


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

[mon@ptmind~]# ceph osd pool mksnap rbdtest   rbdtest-snap20150924


13: 查看快照信息

[mon@ptmind~]# 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的快照

[mon@ptmind~]# ceph osd pool rmsnap rbdtest  rbdtest-snap20150924


驗證,剩餘一個snap

[mon@ptmind~]# rados lssnap -p rbdtest

2       rbdtest-snap2015092401  2015.09.24 20:31:21

1 snaps



################################rados命令相關##################

rados 是和Ceph的對象存儲集羣(RADOS),Ceph的分佈式文件系統的一部分進行交互是一種實用工具。


1:查看ceph集羣中有多少個pool (只是查看pool)

[mon@ptmind~]# rados lspools    同  ceph osd pool ls 輸出結果一致


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

[mon@ptmind~]# rados df 


3:建立一個pool

[mon@ptmind~]# rados mkpool test


4:建立一個對象object 

[mon@ptmind~]# rados create test-object -p test


5:查看對象文件

[mon@ptmind~]# rados -p test ls

test-object


6:刪除一個對象

[mon@ptmind~]# rados rm test-object-1 -p test


7:刪除foo池 (和它全部的數據)

[mon@ptmind~]# rados rmpool test test –yes-i-really-really-mean-it 

8:查看ceph pool中的ceph object (這裏的object是以塊形式存儲的)

[mon@ptmind~]# rados ls -p test | more


9:爲test pool建立快照

[mon@ptmind~]# rados -p test mksnap testsnap

created pool test snap testsnap


10:列出給定池的快照

[mon@ptmind~]# rados -p test lssnap         

1       testsnap        2015.09.24 21:14:34


11:刪除快照

[mon@ptmind~]# rados -p test rmsnap testsnap

removed pool test snap testsnap


12:上傳一個對象到test pool

[mon@ptmind~]# 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組的映射信息

[mon@ptmind~]# ceph pg dump    或者 ceph pg ls


2:查看一個PG的map

[mon@ptmind~]# 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狀態

[mon@ptmind~]# ceph pg stat


4:查詢一個pg的詳細信息

[mon@ptmind~]# ceph pg  0.26 query


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

[mon@ptmind~]# ceph pg scrub {pg-id}


6:查看pg中stuck的狀態

要獲取全部卡在某狀態的歸置組統計信息,執行命令:

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


[mon@ptmind~]# ceph pg dump_stuck unclean

[mon@ptmind~]# ceph pg dump_stuck inactive

[mon@ptmind~]# ceph pg dump_stuck stale

Inactive (不活躍)歸置組不能處理讀寫,由於它們在等待一個有最新數據的 OSD 復活且進入集羣。

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

Stale (不新鮮)歸置組處於未知狀態:存儲它們的 OSD 有段時間沒向監視器報告了(由 mon_osd_report_timeout 配置)。

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



7:顯示一個集羣中的全部的pg統計

[mon@ptmind~]# 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號   過濾輸出的狀態

[mon@ptmind~]# 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...]} 

實例以下:

[mon@ptmind~]# 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_ 

實例以下:

[mon@ptmind~]# 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號   過濾輸出的狀態

[mon@ptmind~]# ceph pg ls-by-primary    osd.3    clean 

 

############################### rbd命令相關 #########################3 


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

[mon@ptmind~]# rbd create -p test --size 10000 kjh


2:查看ceph中一個pool裏的全部鏡像

[mon@ptmind~]# rbd ls test

kjh


3:查看新建的鏡像的信息

[mon@ptmind~]# rbd -p test info kjh    


4:查看ceph pool中一個鏡像的信息

[mon@ptmind~]# rbd info -p test  --p_w_picpath kjh

rbd p_w_picpath 'kjh':

        size 1000 MB in 250 objects

        order 22 (4096 kB objects)

        block_name_prefix: rb.0.92bd.74b0dc51

        format: 1

5:刪除一個鏡像

[mon@ptmind~]# rbd rm  -p test  kjh


6:調整一個鏡像的尺寸

[mon@ptmind~]# rbd resize -p test --size 20000 kjh


[mon@ptmind~]# rbd -p test info kjh   #調整後的鏡像大小

rbd p_w_picpath '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’同時在下面建立一個’kjhp_w_picpath’


[mon@ptmind~]# ceph osd pool create ptmindpool 256 256

pool 'ptmindpool' created



2:建立鏡像

[mon@ptmind~]# rbd create kjhp_w_picpath --size 1024 --pool ptmindpool


3:查看鏡像

[mon@ptmind~]# rbd --pool ptmindpool ls

kjhp_w_picpath


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

[mon@ptmind~]# rbd snap create ptmindpool/kjhp_w_picpath@snapkjhp_w_picpath



5:查看kjhp_w_picpath的snap

[mon@ptmind~]# rbd snap ls ptmindpool/kjhp_w_picpath

SNAPID NAME         SIZE

     2 snapkjhp_w_picpath 1024 MB

 

6:回滾快照,

[mon@ptmind~]# rbd snap rollback ptmindpool/kjhp_w_picpath@snapkjhp_w_picpath



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

[mon@ptmind~]# rbd snap rm ptmindpool/kjhp_w_picpath@snapkjhp_w_picpath



8:刪除kjhp_w_picpath的所有snapshot


[mon@ptmind~]# rbd snap purge ptmindpool/kjhp_w_picpath



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

導出鏡像

[mon@ptmind~]# rbd export -p ptmindpool --p_w_picpath kjhp_w_picpath /tmp/kjhp_w_picpath.img            

Exporting p_w_picpath: 100% complete...done.


驗證查看導出文件

l /tmp/kjhp_w_picpath.img        

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



10:把一個鏡像導入ceph中

[mon@ptmind~]# rbd import /tmp/kjhp_w_picpath.img  -p ptmindpool --p_w_picpath importmyp_w_picpath1

Importing p_w_picpath: 100% complete...done.


驗證查看導入鏡像文件

rbd -pptmindpool ls

importmyp_w_picpath1

相關文章
相關標籤/搜索