1. 程式人生 > >cephfs調優 & 效能測試 & 監控 & 常用命令

cephfs調優 & 效能測試 & 監控 & 常用命令

前言

k8s對ceph rbd模式不支援ReadWriteMany(RWX),為了滿足k8s的靈活性需求,採用支援多點掛載的cephfs工作模式.網上少有針對cephfs調優的文章,因此在本篇,將針對cephfs進行一些引數調優及效能測試

硬體規劃

這裡寫圖片描述

配置調優

在進行配置調優之前首先理解一下ceph幾種基礎配置項名詞的定義
名詞解析:

object: ceph資料儲存的基本單位,可以是普通data也可以是journal data
osd: ceph資料儲存的目標載體,一般一個osd例項對應一塊磁碟
pg(Placement Group): 儲存位組,object物件的儲存時的分組,與osd關聯
pgp( Placement Group for Placement purpose):值應與pg保持一致,當此值修改時,pg內的資料物件才會進行rebalance
pool: 資料的邏輯隔離與管理單位,由多個pg構成

關係圖:
在這裡插入圖片描述

經過多次的對引數反覆調整,將ceph.conf修改成如下配置,比較適合我們的使用場景:

# cat /etc/ceph/ceph.conf 

[global]
fsid = 05bd836f-f307-47fa-ae95-34e302fbd9e8
mon_initial_members = h020112, h020113, h020114
mon_host = 192.168.20.112,192.168.20.113,192.168.20.114
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
public_network= 192.168.20.0/24
osd pool default size = 2

[osd]
osd pool default pg num =  1024
osd pool default pgp num = 1024
osd data = /var/lib/ceph/osd/ceph-$id
osd journal size = 81920
osd mkfs type = xfs
osd mkfs options xfs = -f

filestore xattr use omap = true
filestore min sync interval = 10
filestore max sync interval = 15
filestore queue max ops = 25000
filestore queue max bytes = 10485760
filestore queue committing max ops = 5000
filestore queue committing max bytes = 10485760000

journal max write bytes = 1073714824
journal max write entries = 10000
journal queue max ops = 50000
journal queue max bytes = 10485760000

osd max write size = 512
osd client message size cap = 2147483648
osd deep scrub stride = 131072
osd op threads = 16
osd disk threads = 4
osd map cache size = 1024
osd map cache bl size = 128
osd mount options xfs = "rw,noexec,nodev,noatime,nodiratime,nobarrier"
osd recovery op priority = 4
osd recovery max active = 10
osd max backfills = 4

[mds]
mds cache size = 1000000

建立mds

ceph-deploy mds create h020112 h020113 h020114
ceph osd pool create yks_cephfs_data
ceph osd pool create yks_cephfs_metadata

# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
	key = AQB/q5db/XWqKRAA52WFBxRLevtcC3bus1GeyUbw==

### 準備在客戶端掛載ceph ###

# 首先客戶端必須先安裝ceph-common
$ yum -y install ceph-common
# 將key寫入檔案/etc/ceph/admin.secret中
$ echo "AQB/q5db/XWqKRAA52WFBxRLevtcC3bus1GeyUbw==" > /etc/ceph/admin.secret
# 掛載ceph
$ mkdir /mnt/cephfs
$ mount -t ceph 192.168.20.114:6789:/ /mnt/cephfs -o name=admin,secretfile=/etc/ceph/admin.secret
$ echo "192.168.20.114:6789:/ /mnt/cephfs    ceph    name=admin,secretfile=/etc/ceph/admin.secret,noatime   0   2" >> /etc/fstab
# 掛載成功後,即可使用cephfs檔案系統

效能測試

使用fio命令測試小塊(16k)\大塊(512k)檔案讀寫\隨機讀寫效能,測試結果如下:
這裡寫圖片描述

穩定性測試

使用多執行緒壓力測試指令碼執行一天兩夜往cephfs內寫入了幾千萬個小檔案,壓力測試指令碼如下:

#!/bin/bash

for dir1 in {1..100};do
 mkdir /mnt/cephfs/${dir1}
 cd /mnt/cephfs/${dir1}
 for i in {1..20000};do
   dd if=/dev/zero of=file${i} bs=1024k count=1
 done

  dir2s="a b c d e f g j"
  for dir2 in ${dir2s};do
  { mkdir /mnt/cephfs/${dir1}/${dir2}
    cd /mnt/cephfs/${dir1}/${dir2} 
    for i in {1..100000};do
      dd if=/dev/zero of=file${i} bs=128k count=1
    done } &
  done 
done

壓測的過程出現過幾次客戶端響應阻塞的意外,但基本都自動恢復,穩定性尚可.
在寫入了5T 4k的小檔案後,檢視檔案大小\目錄大小\檔案詳情等常規操作延遲可以接受,測試基本通過

Ceph監控

ceph效能指標及容量監控,prometheus採集+grafana展示,這裡使用digitalocean提供的ceph_exporter prometheus外掛.專案主頁:
安裝ceph_exporter

yum install golang
yum install librados2-devel librbd1-devel

# 配置go PATH環境變數
cat > /etc/profile.d/go.sh << EOF
export GOROOT=/usr/lib/golang
export GOBIN=$GOROOT/bin
export GOPATH=/home/golang
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
EOF

source /etc/profile.d/go.sh

# 安裝.過程沒有輸出,請耐心等待
go get -u github.com/digitalocean/ceph_exporter
# 進入目錄可以檢視到已安裝的ceph_exporter
cd /usr/lib/golang/bin/
ls

# 啟動程式
nohup ./ceph_exporter &

prometheus配置job

  - job_name: 'ceph-exporter'
    static_configs:
      - targets: ['192.168.20.114:9128']
        labels:
          alias: ceph-exporter

重啟prometheus,web ui檢視target:
在這裡插入圖片描述

prometheus/grafana安裝配置步驟見此前的文章

grafana新增圖形模板
匯入179號模板:
在這裡插入圖片描述
在這裡插入圖片描述

監控告警配置可以自定義閾值,參考此前文章觸發告警介面

Ceph常用命令

# 服務相關:
- systemctl status ceph\*.service ceph\*.target  #檢視所有服務
- systemctl stop ceph\*.service ceph\*.target  #關閉所有服務
- systemctl start ceph.target   #啟動服務
- systemctl stop ceph-osd\*.service  # 關閉所有osd服務
- systemctl stop ceph-mon\*.service  #關閉所有mon服務
- sudo systemctl start [email protected]{id}
- sudo systemctl start [email protected]{hostname}
- sudo systemctl start [email protected]{hostname}

# 檢視
- ceph -help #檢視命令幫助
- ceph -s #檢視狀態
- ceph osd pool set rbd pg_num 1024   # 修改pg_num數量
- ceph osd pool set rbd pg_num 1024   # 修改pgp_num數量
- ceph osd tree  #檢視osd樹
- ceph osd pool ls  #檢視所有的osd池
- ceph --admin-daemon /var/run/ceph/ceph-osd.11.asok config show  # 檢視指定的osd執行中的所有引數
- rados df   #檢視儲存池使用情況
- rados -p rbd ls |sort  
- ceph osd pool get rbd pg_num 
- ceph osd pool get rbd pgp_num 
- ceph osd pool set rbd pg_num 1024
- ceph osd pool set rbd pgp_num 1024

# rbd相關
- rbd create --size {megabytes} {pool-name}/{image-name}
- rbd list
- rbd info RBD_NAME
- rbd feature disable RBD_NAME FEATURE1 FEATURE1 ..
- rbd map RBD_NAME  #對映到系統核心
- rbd showmapped   #檢視rbd對映條目
- rbd unmap /dev/rbd0  # 取消核心對映
- rbd resize --size 2048 RBD_NAME    # to increase
- rbd resize --size 2048 foo --allow-shrink  #to decrease
- rbd du {RBD_NAME} -p rbd  #檢視某個或所有Image的容量,-p 指定pool名
- rbd diff RBD_NAME | awk '{ SUM += $2 } END { print SUM/1024/1024/1024 " GB" }' #檢視rbd image當前佔用大小

# 修改
- ceph tell # 使用tell命令手動臨時修改元件的配置
[例如:叢集狀態恢復涉及資料回填時,加速回填速度]
- ceph tell 'osd.*' injectargs '--osd-max-backfills 16'       #預設為1
- ceph tell 'osd.*' injectargs '--osd-recovery-max-active 8'  #預設為4

最後
Ceph是一套龐大的儲存系統,工作原理及涉及元件相當複雜,儲存更是系統架構中的重中之重,一定要慎之又慎,同時做好知識儲備,多查官方文件,另外再提一個坑,那就是官方的中文文件除了豐富度不如英文文件外,很多引數的預設值與英文文件不一致,英文文件更加準確,因此推薦檢視英文文件.
連結:ceph官方文件