前言环境因为一些问题(网络,或者磁盘,或者其它各种异常),引起了集群的状态的一些变化,变化之后,集群的某些虚拟机正常某些虚拟机出现异常,异常现象就是无法启动特别是win server2008 ,会一直卡在滚动条这里
这个问题很久前碰到过一个哥们出现过,他问我是否遇到过,这个之前遇到过一次无法启动的,通过导出导入的方式解决了,当时一直也没找到原因这个哥们告诉我,通过关闭rbd的属性后,就可以正常启动了,当时就记了下,也没分析更深层次的原因最近有一个环境因为时间过快,往回调整了十几分钟,集群出现mon选举,osd出现闪断以后,部分虚拟机出现无法启动的情况
问题分析导入导出或者克隆基本可以判断数据是没有问题的,那么应该就是其它问题通过关闭属性可以解决,那么大概能够定位到这几个属性相关的
1features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
而锁文件是最大的怀疑,之前处理ctdb的时候,就有过锁没有加上超时时间,然后ctdb挂掉以后,锁不会自动释放的问题,怀疑这个地方类似
我们的rbd的镜像如下
123 ...
暂未分类
未读前言有的时候需要做个单页的网页显示,这个直接用python启动即可,但是存在一个问题,停止进程以后,如果网页正在被访问,socket会不释放,然后再启动就会提示端口占用,实际上是没有端口占用的
这个增加一个配置项就行
相关代码12345678910111213141516171819202122232425262728293031323334353637383940#!/usr/bin/python3from __future__ import print_functionimport SimpleHTTPServerimport SocketServerimport osimport sysimport signaldef quit(signal_num,frame): print("you stop the threading") sys.exit()path = os.path.dirname(sys.argv[0])os.chdir('/home/cephuse/output/')class ReusingTCPServer( ...
前言随机端口可能会占用后面准备使用的端口,然后在后面进程启动的时候,无法绑定端口引起服务异常
处理方法通过内核参数控制,在/etc/sysctl.conf添加
1net.ipv4.ip_local_reserved_ports=8000,8080
这个容易被冲掉,可以修改下默认的内核参数,通过tune实现
修改配置文件 /usr/lib/tuned/balanced/tuned.conf添加
12[sysctl]net.ipv4.ip_local_reserved_ports=8000,8080
然后执行
1tuned-adm profile balanced
这个相当于修改了内核的默认参数,清空 /etc/sysctl.conf也不影响执行完可以通过
1sysctl -a|grep net.ipv4.ip_local_reserved_ports
检查一下是否生效
前言有的时候为了提供一个完整的包,需要把一些零散的文件或者脚本汇总在一起提供,rpm包就是一个很好的方法,这里我们不需要复杂的写法,就纯粹打包的,复杂的可以参考内核或者其它软件包的打包方法
spec文件信息12345678910111213141516171819202122232425262728293031Name: cephuseVersion: 1.0Release: 1%{?dist}Summary: monitor ceph use spaceGroup: Development/ToolsLicense: GPLURL: http://www.zphj1987.comBuildRequires: pythonSource: cephuse-1.0.tar.gz%descriptionuse to monitor ceph%prep%setup -q%installinstall -D -m 644 cephuse.service %{buildroot}/usr/lib/s ...
前言内核模块的更新一般需要卸载模块再加载,但是很多时候使用场景决定了无法做卸载的操作,而linux支持了热更新内核模块的功能,这个已经支持了有一段时间了,一直没有拿ceph的相关模块进行验证
注意模块的某些函数是不支持的,init的部分是不支持的,补丁弄完验证一下就可以知道支不支持,不支持的部分会提示
准备工作先检查当前的版本支持不
12345[root@lab101 kpatch]# cat /boot/config-3.10.0-1062.el7.x86_64 |grep PATCHCONFIG_HAVE_LIVEPATCH=yCONFIG_LIVEPATCH=yCONFIG_DVB_BUDGET_PATCH=mCONFIG_SND_HDA_PATCH_LOADER=y
可以看到默认内核是支持的,这个是红帽维护的一个体系,自己的内核,肯定会很快集成进去的
安装依赖包
12[root@lab102 ~]# yum install elfutils-devel rpm-build[root@lab102 ~]# rpm -ivh kernel-debuginfo-common-x8 ...
##前言如果想访问一个ceph里面的s3地址,但是又不想直接提供secrect key的时候,可以通过预签名的方式生成url
生成方法下载boto3
脚本如下
123456789101112131415161718192021cat s3.pyimport boto3from botocore.client import Configs3_host="http://192.168.0.201:7481"# Get the service client with sigv4 configureds3 = boto3.client('s3', aws_access_key_id = "test",aws_secret_access_key = "test",endpoint_url = s3_host, config=Config(signature_version='s3v4'))# Generate the URL to get 'key-name' from ...
暂未分类
未读显示数据123456789[root@lab201 ~]# ceph dfGLOBAL: SIZE AVAIL RAW USED %RAW USED 1092T 404T 688T 63.01%POOLS: NAME ID USED %USED MAX AVAIL OBJECTS rbd 0 17483G 15.88 92633G 4616231data 1 212T 70.09 92633G 246574395metadata 2 88677K 0 1400G 407249
总used的63% ,data的总used为70%
先说下容量的计算规则
1、根据每个osd计算可用容量:osd可 ...
前言关于bluestore的db应该预留多少空间,网上有很多资料如果采用默认的
write_buffer_size=268435456
大小的话那么几个rocksdb的数据等级是
12345L0: in memoryL1: 256MBL2: 2.56 GBL3: 25.6 GBL4: 256 GB
设置L4那么大的ssd可以给一个osd使用有点不划算,那么空间一般计算就是L1+L2+L3将近30GB这个可以参考下面的文章
https://blog.csdn.net/NewTyun/article/details/103379694
关于block.db大小调整,只需为所有Bluestore OSD保留30 GB
那么这个大小对不对,如果你直接参考30GB这个,并且按照常规的去分区来说,就会带来问题了,我们看下具体什么问题
实际测试验证1parted -s /dev/sdb mkpart primaru 1 31G
上面的命令已经放大了1GB了,但是实际上还是不行
123456789101112[root@lab102 ~]# ceph daemon osd.0 per ...
前言在ceph 14版本里面才加入了bluefs-bdev-migrate,分区迁移相关的命令,那么在12版本里面其实也是可以扩展分区的测试的版本
12[root@lab102 ceph-0]# ceph -vceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)
操作方法如果db分区之前有做独立独立分区,但是发现db的大小设置小了,想把这个db调大,或者是从ssd设备迁移到nvme的分区,那么可以通过dd命令来实现的
停止osd1systemctl stop ceph-osd@0
替换分区123dd if=/dev/sdb1 of=/dev/sda1 bs=64Mln -s /dev/sda1 /var/lib/ceph/osd/ceph-0/block.dbchown ceph:ceph -R /var/lib/ceph/osd/ceph-0/*
把原来的db分区整体复制一份,注意后面的分区要大于或者等于/dev/sdb1这个原始的db分区,加上后面的 ...
暂未分类
未读前言之前写过一篇重构rbd的元数据的文章,讲的是如果rbd的元数据丢失了,数据还在的时候怎么恢复相关的元数据,但是实际使用的场景是,集群可能崩溃了,数据还在,osd无法拉起来,数据又很重要,需要把数据拼接回来,这个也是最底层的一种数据还原方式了
网上有非快照的rbd的拼接的文章,对于快照使用方式的拼接这个没有太多信息,而实际上很多使用场景就是克隆了一个原始系统后,再使用的,本篇就是把还原需要的细节都写出来了
重构的步骤获取基本的信息
1、找到rbd_directory,通过这个找到整个环境里面的rbd的名称和prefix的对应关系
2、根据rbd_header的元数据信息找到rbd下面的信息
rbd的大小
rbd的块大小
rbd是否有parent(判断这个是通过哪个快照创建的)
3、rbd是否做了快照(做了快照有两种可能,本身的快照或者本身做的快照被克隆了),不是快照的image的对象,直接取head的对象进行拼接即可,通过快照克隆的对象,需要判断每个对象的状态来进行拼接(后面讲)
正常情况
正常的情况就是通过命令能够获取到上面的信息1,2的信息,这个的前提是,相关的对象所在的osd ...