转载:https://blog.csdn.net/ywq935/article/details/82715317

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 ceph-osd@{id}
- sudo systemctl start ceph-mon@{hostname}
- sudo systemctl start ceph-mds@{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是一套庞大的存储系统,工作原理及涉及组件相当复杂,存储更是系统架构中的重中之重,一定要慎之又慎,同时做好知识储备,多查官方文档,另外再提一个坑,那就是官方的中文文档除了丰富度不如英文文档外,很多参数的默认值与英文文档不一致,英文文档更加准确,因此推荐查看英文文档.
--------------------- 
作者:ywq935 
来源:CSDN 
原文:https://blog.csdn.net/ywq935/article/details/82715317 
版权声明:本文为博主原创文章,转载请附上博文链接!

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐