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