結合網絡、官網、手動查詢等多方管道,整理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