<>前言

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插件.项目主页: <https://github.com/digitalocean/ceph_exporter>
安装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是一套庞大的存储系统,工作原理及涉及组件相当复杂,存储更是系统架构中的重中之重,一定要慎之又慎,同时做好知识储备,多查官方文档,另外再提一个坑,那就是官方的中文文档除了丰富度不如英文文档外,很多参数的默认值与英文文档不一致,英文文档更加准确,因此推荐查看英文文档.
链接:ceph官方文档 <http://docs.ceph.com/docs/master/>

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信