需求修改mon的ip
操作步骤卸载客户端挂载的服务1[root@lab103 ~]# umount /mnt
停掉mds的服务1[root@lab103 ~]# systemctl stop ceph-mds@lab103
停掉osd的服务1[root@lab103 ~]# systemctl stop ceph-osd.target
停掉管理服务12[root@lab103 ~]# systemctl stop ceph-mgr@lab103[root@lab103 ~]# systemctl stop ceph-mon@lab103
备份mon的数据1# cp -ra /var/lib/ceph/mon/ceph-lab103/ /opt/ceph-lab103bk
编辑monmap获取monmap
123456789[root@lab103 mon]# ceph-mon -i lab103 --extract-monmap ./monmap2024-11-04 11:11:11.046678 7f5f75107000 -1 wrote monmap to ./monmap[ ...
系统管理
未读背景内网测试环境出现一台机器上面的systemd返回值异常,其它都正常,具体的现象如下
1systemctl restart smb;echo $?
这个返回的是1,正常执行完毕应该是0
问题定位开始的时候以为是网络的问题,通过执行本地的命令发现,任何systemd的执行命令返回的都是1,但是实际成功了开始并没有往病毒方面想,系统没有定时任务,没有异常的cpu负载
1[root@lab103 ~]# strace systemctl restart rsyslogd
后面是通过这个命令定位到出现异常了,我们复现下病毒的操作
通过把systemctl拷贝一份到本地的另外一个路径
1[root@lab103 ~]# cp -ra /usr/bin/systemctl /usr/bin/sys
使用一个新的脚本替换,这里我用的脚本,实际是二进制,看不到内容,效果差不多
12345[root@lab103 ~]# cat /usr/bin/systemctl#! /bin/bashecho a > /tmp/test/usr/bin/sys $1 $2 $3 $4 $5 $6 $7ex ...
系统管理
未读背景需要下载一个mysql的docker的镜像,但是遇到了问题,这里把相关的方法记录下
问题123[root@lab103 data]# docker pull mysql:8.0Trying to pull repository docker.io/library/mysql ...Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
直接下载的时候无法下载,这个需要给这个做个代理,但是机器可能是内网的机器,那么我们可以下载下来
处理方法我的mac本身可以直接联通上面的外网地址,那么可以通过下载一个docker客户端,然后给客户端设置代理,然后下载,把镜像保存好即可
具体操作
下载docker桌面1https://www.docker.com/products/docker-desktop/
在官方下载即可
配置代理
这个填写自己本地的代理地址即可
上面配 ...
背景国产化的平台目前主要用到的有飞腾和龙芯,飞腾的是arm64架构,这个使用的比较多,龙芯的架构之前是mips架构,最新的硬件的架构已经发生了改变,现在是loongarch64架构,这个算比较新的架构,所以硬件就比较难获得,如果又有适配的需求,这个时候通过虚拟机启动环境是一个比较好的方式
虚拟机有两种方式:
一种是在相同架构下开虚拟机,这个比较简单,一般的操作系统内都带了kvm的相关的软件,直接使用qemu-kvm启动虚拟机就可以了,这个方式的前提是你得有一台这个架构的物理机器,才能在上面启动kvm虚拟机,还存在资源共用的问题了
另外一种方式就是通过qemu完全软件来进行启动这个虚拟机,qemu是在软件内实现了硬件的模拟,一般硬件厂商会给这个做一些适配工作,然后就支持虚拟厂商的硬件了,这个对宿主机环境没有要求
上面的方式二在之前尝试过,可能当时厂商对qemu还没开发完整,所以整个软件链路我自己当时是没有跑起来的,最近因为软件适配的问题,再次尝试,能够启动成功了,本篇就是把这个过程记录下来
准备的资源
准备一个x86的主机,性能尽量好点,这样虚拟机也能快一点
准备一个操作系统,这个操 ...
背景ceph通过radosgw对外提供了s3功能,这个能够提供一个s3接口供外部使用,s3的功能选项很多,本篇记录的是policy的功能配置
配置方法配置policy可以通过s3cmd,或者windows的s3客户端都可以,这里我们使用s3cmd进行配置
安装配置s3cmd下载客户端
1[root@lab101 ceph]# yum install s3cmd
配置s3cmd
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152[root@lab101 ceph]# s3cmd --configureEnter new values or accept defaults in brackets with Enter.Refer to user manual for detailed description of all options.Access key and Secret key are your identifiers for Amazon ...
背景最近看到opencloudos社区有一些公开的任务可以做,尝试了做其中的一个打包的任务,整个任务的执行周期超过预期,但是中间还是掌握了一些新的东西本篇文章就是总结这些新的知识点
具体过程打包环境问题以前的打包经验是从官网找到source的rpm包,然后本地解压,然后对着spec文件进行rpmbuild -bb即可生成当前系统的包但是这个环境是需要使用mock跑一遍的,这个之前确实没接触过,只是在centos下包的时候,某些包的下载链接有koji这个地址的这个是一套完整的环境
我们看下这个地方是怎么运行的
12345678910111213141516171819202122232425262728293031[root@myserver ~]# cat mock.cfg# Auto-generated by the Koji build systemconfig_opts['basedir'] = '/var/lib/mock'config_opts['chroot_setup_cmd'] = 'groupins ...
存储相关
未读背景如果一个环境需要对文件系统进行系统备份,文件系统内的文件数目是10亿级别的,那么直接通过一个rsync进行同步肯定是不太好的,如果出现中断,那么再次启动后的遍历的时间成本太高了
分析rsync的同步原理是,启动同步的时候,会对源端进行一个全量的扫描,构建一个incremental file list,然后开始同步,如果是系统本地的目录进行同步我们可以看到三个进程一个是生成器,一个是发送方,一个是接收方,因为是在一台机器上面运行,所以可以看到这三个进程的,这个之前还误以为是并发三,实际还是单进程模式的
我们很多情况下,存储环境都是集群模式的,集群模式就是文件系统有多个入口,可以多个并发同时去操作,比如我们原始集群有2个网关,我们新集群有6个网关,那么我们实际上是可以1个原始网关对3个新网关的方式去处理数据的
由于我们无法去判断原始的目录结构,并且即使能够获取到,也不太好去做均分,比如有6亿文件,根目录下面一个目录5亿,其它5个目录1亿,这种情况就不好去分平分目录了,还有个情况是如果按容量区分,也是不太好取到怎么去区分目录的,所以这个地方想到的一个方案是获取到所有的文件的列表,然后对列 ...
问题处理
未读背景最近有碰到扇区的错误,引起osd的无法启动,经过处理,系统可以恢复了,但是扇区的错误为什么导致了osd down,怎么去模拟这个删除的问题,就需要做一些定位的工作了
我们需要模拟扇区的问题,就需要去精确的模拟到损坏的扇区,也就是比如我需要模拟某个文件的扇区损坏,那么就需要定位到这个文件属于哪些扇区
方法定位扇区通过blktrace进行模拟,这个操作是去读取文件就行,”C”是完成的请求,下面是过滤的,避免太多其它信息干扰
对磁盘的文件进行读取的请求
1blktrace -d /dev/sdb -o - | blkparse -i - | awk '$6 == "C" {print $1, $2, $6, $7, $8, $9, $10}'
输出类似下面的信息
123456788,80 8 C R 17152 + 5128,80 8 C R 17664 + 5128,80 8 C R 18176 + 5128,80 8 C R 18688 + 5128,80 8 C R 19200 + 5128,80 8 C R 19712 ...
系统服务
未读需求背景线上的项目有使用lvs作为端口转发,使用的是udp的端口转发服务,想在测试环境下面模拟一个高并发的udp的服务器和客户端的环境,现成的没有相关的软件,那么就用两个脚本进行实现
要实现这个服务,需要准备一个服务端的脚本,和客户端的脚本,服务端使用用本地文件对外提供服务,客户端请求数据流并保存到本地
需求分析考虑高并发,所以需要对软件进行一下限速,然后尽量高的并发的,一个端口响应一个请求,并发的取读取udp的请求
需求实现python实现这个实现是最开始实现的一个版本,服务端和客户端都采用的python的,一个python进程启动20个端口,然后并发启动进程,这个发现一个问题,因为python的进程占用cpu很容易100%,这个对系统的资源有点大,造成无法处理很大的并发,客户端也是,这个如果小批量的测试还是可以的,也记录下
服务端实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676 ...
需求rbd是ceph的块接口,我们可以把设备map到服务器上面,然后当磁盘进行访问,有的软件能够基于块设备再做上层的高可用的写入的,所以,从软件来说,同一个设备在两台机器同时挂载,没有什么问题,但是如果应用层不加锁,随意的写入就可能破坏了数据,造成磁盘无法访问,那么这里就是利用ceph本身的功能来实现排它的挂载
也就是同一时刻,同一个rbd,只能被一个设备挂载
配置查看rbd的属性
123456789[root@lab101 ~]# rbd info gamebaserbd image 'gamebase': size 30 GiB in 7680 objects order 22 (4 MiB objects) snapshot_count: 1 id: 5e6552f9f0e2 block_name_prefix: rbd_data.5e6552f9f0e2 format: 2 features: layering, exclusive-lock, object-map, fast-diff
我们进行挂载测试
123456789101112[root@l ...