本篇主题在mon无法启动,或者所有的mon的数据盘都损坏的情况下,如何把所有的数据恢复如初
写本章的缘由在ceph中国的群里有看到一个技术人员有提到,在一次意外机房掉电后,三台mon的系统盘同时损坏了,这个对于熟悉ceph的人都知道这意味着什么,所有的集群数据将无法访问,关于这个的解决办法目前没有在哪里有看到,这个对于大多数人是用不上的,但是一旦出现了,这个损失将是无法估量的,当然谁都不希望这个情况的发生
所以在研究了下ceph的一些操作后,自己尝试去找了一些关于集群的故障修复的,目前看到了一个是关于单个rbd镜像的恢复的文章,那个需要将数据映射本地的loop设备后重新读取,这个我曾经验证过一遍,确实可以实现,在周末的时候我尝试了另外一个办法,实现了在mon完全失效的情况下全集群的完整数据的恢复,并且保留了原来的数据结构和数据信息,当然这中间需要进行一定的操作去完成它,这个我准备写成一个标准的操作流程,并用视频的方式来记录这个恢复的流程
暂未分类
未读本篇主题:
1、怎样配置ssh免登陆访问
2、为什么搭建集群要关闭防火墙和selinux,如何关闭
3、从哪里获取ceph的安装包,怎样安装才是快速正确的
4、为什么要配置时间同步服务,怎样配置
5、怎样创建集群
6、怎样使用不同的方式增加osd(这里我总结了五种)
默认方式
磁盘journal
目录配置方式
btrfs文件系统
disk+ssd方式
7、怎样配置文件系统
8、怎样配置块设备系统
9、怎样配置S3服务
10、如何干净的将集群清理到初始状态
(本篇基于centos7,其他系统除了安装方式其他通用)
本篇资源:包括了视频,操作文档,相关安装包资源,S3的windows客户端
付费资源有需要联系
暂未分类
未读能够动态的进行系统参数的调整是一个很重要并且有用的属性ceph的集群提供两种方式的调整,使用tell的方式和daemon设置的方式
一、tell方式设置调整配置使用命令:
调整mon的参数1#ceph tell mon.* injectargs '--{tunable value_to_be_set}'
调整osd的参数1#ceph tell osd.* injectargs '--{tunable value_to_be_set}'
调整mds的参数1#ceph tell mds.* injectargs '--{tunable value_to_be_set}'
例子:
12[root@lab5134 ~]# ceph tell mon.* injectargs '--mon_osd_report_timeout 400'injectargs:mon_osd_report_timeout = '400'
除了上面的tell的 ...
暂未分类
未读简单快速的在客户端验证rbd的cache是否开启首先修改配置文件
在ceph.conf中添加:
123[client]rbd cache = truerbd cache writethrough until flush = true
开启以后,在这台机器上进行测试
1234[root@node8109 ~]# rbd -p rbd bench-write zp --io-size 4096 --io-threads 256 --io-total 102400000 --io-pattern seqbench-write io_size 4096 io_threads 256 bytes 102400000 pattern seq SEC OPS OPS/SEC BYTES/SECelapsed: 0 ops: 25000 ops/sec: 26830.05 bytes/sec: 109895890.09
可以看到io达到了26830每秒
下面进行关闭后再测试:
1234567[root@node8109 ~]# rbd -p rbd ...
暂未分类
未读在ceph的一台OSD主机出现故障的时候,数据可以通过副本的机制进行恢复,之后通过删除osd的操作也能够将故障osd从osd tree当中删除掉,但是故障的 osd 的主机仍然会留在集群当中,通过 ceph osd tree 或者打印 crush map 都可以看到这个损坏的节点主机名,所以这里讲下怎么删除掉这个无用的host
首先集群环境为两台主机 node8109 node8110 , node8110主机出现故障需要清理掉
先看下当前的osd tree状态12345678910[root@node8109 webui]# ceph osd treeID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY -1 4.00000 root default -3 4.00000 rack localrack -2 2.00000 ...
假设环境为三个mon,主机名为mon1、mon2、mon3,现在mon3上面的系统盘损坏,mon的数据完全丢失,现在需要对mon3进行恢复处理
1、停止所有mon进程,可以不停其他进程,需要停止内核客户端以及对外的服务,防止卡死在mon1机器上执行
1/etc/init.d/ceph stop mon
在mon2机器上执行
1/etc/init.d/ceph stop mon
2、分别在mon主机上获取当前的monmap在mon1机器上执行
1ceph-mon -i mon1 --extract-monmap /tmp/monmap
备份原始monmap
1cp /tmp/monmap /tmp/monmapbk
在mon2机器上执行
1ceph-mon -i mon2 --extract-monmap /tmp/monmap
备份原始monmap
1cp /tmp/monmap /tmp/monmapbk
3、处理monmap,去掉损坏的mon3的map信息在mon1机器上执行
1monmaptool /tmp/monmap --rm mon3
在mon2机器上执行
1monmapt ...
暂未分类
未读本文中的命令的第一版来源于国外的一个博客,后面的版本为我自己修改的版本
查询的命令如下:
123456789101112131415ceph pg dump | awk ' /^pg_stat/ { col=1; while($col!="up") {col++}; col++ } /^[0-9a-f]+\.[0-9a-f]+/ { match($0,/^[0-9a-f]+/); pool=substr($0, RSTART, RLENGTH); poollist[pool]=0; up=$col; i=0; RSTART=0; RLENGTH=0; delete osds; while(match(up,/[0-9]+/)>0) { osds[++i]=substr(up,RSTART,RLENGTH); up = substr(up, RSTART+RLENGTH) } for(i in osds) {array[osds[i],pool]++; osdlist[o ...
创建一个rbd1[root@mytest ~]# rbd create test1 --size 4000
查看rbd信息123456[root@mytest ~]# rbd info test1rbd image 'test1': size 4000 MB in 1000 objects order 22 (4096 kB objects) block_name_prefix: rb.0.fa6c.6b8b4567 format: 1
可以看出是没写入真实数据的
12[root@mytest ~]# ceph df|grep rbd rbd 0 133 0 30627M 2
查询rbd池里面的对象信息123[root@mytest ~]# rados ls -p rbdtest1.rbdrbd_directory
查看下这两个对象的内容
123[root@mytest ~]#rados -p rbd get test1.rbd test1rbd.txt[root@mytest ...
暂未分类
未读
ceph集群新搭建以后是只有一个默认的存储池rbd的池
## 创建文件接口集群
1.创建一个元数据池12[root@mytest ~]# ceph osd pool create metadata 20 20pool 'metadata' created
2.创建一个数据池12[root@mytest ~]# ceph osd pool create data 20 20pool 'data' created
3.创建一个文件系统12[root@mytest ~]# ceph fs new ceph metadata datanew fs with metadata pool 4 and data pool 5
4.创建一个mds1[root@mytest ~]# ceph-deploy mds create mytest
5.部署完检查状态1234567891011[root@mytest ceph]# ceph -s cluster 7e5469ac-ae1f-494f-9913-901f60c0a76b hea ...
ceph的server是定期会发布版本,而它的客户端是放到linux 内核当中的,一些属性的支持是依赖于内核版本的,这样就存在一些问题,一些功能后端支持,而客户端旧了;还有可能是客户端用的很新的内核,而后端比较旧不支持,所以查看了下内核中的 features 文件,可以看到这个对应关系,总结了下就是下面的列表
注意表中:
S=SUPPORTED_DEFAULT 代表客户端支持这个属性
R=REQUIRED_DEFAULT 代表需要服务端支持这个属性
missing 2040000 意思是 CEPH_FEATURE_CRUSH_TUNABLES (40000) 和 CEPH_FEATURE_CRUSH_TUNABLES2 (2000000) 不被当前客户端支持,一般要么关闭新的server端的这个属性,或者升级到支持的版本的内核.
内核代码查看地址:https://elixir.bootlin.com/linux/v5.7/source/include/linux/ceph/ceph_features.h
Some examp ...