Ceph 获取不到 admin_socket 问题解决
今天排查 Ceph 集群的 SLOW_OPS 警告的时候,发现 ceph daemon 命令查看不到我想要的信息。
例如,我想查看 osd.29 的 ops 信息,就会报错:
12# ceph daemon osd.29 opsCan't get admin socket path: unable to get conf option admin_socket for osd: b"error parsing 'osd': expected string of the form TYPE.ID, valid types are: auth, mon, osd, mds, mgr, client\n"
排查了一点时间后,结论是:当 daemon 进程在 cephadm Orchestrator 管理的容器中运行时,套接字文件具有不同的位置,并且命令行工具 ceph(在容器外运行时)不会自动找到它。
所以我们需要指定套接字文件的具体位置,而非通过 daemon 的名字来试图让命令行工具 ceph 去查找。
每个 daemon 的套接字文件, ...
记一次严重的 Ceph backfill_toofull 处理
先看一下我这个集群的状态:
12345678910111213141516171819202122232425# ceph -s cluster: id: 1e2c2112-037f-11ef-b466-45c2ff826e1a health: HEALTH_ERR 1 backfillfull osd(s) 1 full osd(s) Low space hindering backfill (add storage if this doesn't resolve itself): 15 pgs backfill_toofull 3 pool(s) full services: mon: 5 daemons, quorum c3-hadoop-ceph-st38.bj,c3-hadoop-ceph-st40,c3-hadoop-ceph-st43,c3-hadoop-ceph-st42,c3-hadoop-ceph-st41 (age 2d) mgr ...
Ceph 16 命令 ceph osd pool autoscale-status 无输出问题排查和解决
今天想在一个集群看下 pg 自动扩缩的情况,结果发现没有任何输出:
12# ceph osd pool autoscale-status#
1. 问题排查确认 pg 自动扩缩这个功能已经打开了:
12# ceph mgr module enable pg_autoscalermodule 'pg_autoscaler' is already enabled (always-on)
12# ceph osd pool get noautoscalenoautoscale is off
确认每个池都启用了 pg 自动扩缩功能(省略了不需要的输出):
1234# ceph osd pool ls detailpool 1 'device_health_metrics' replicated ... autoscale_mode on ...pool 2 'rp' replicated ... autoscale_mode on ...pool 3 'ec' erasure ... autoscale_mode ...
解决 Ceph 给 Host 添加标签 _admin 不同步 key 和配置的问题
今天给一些 Ceph 集群一些 Host 添加 _admin 标签的时候,发现 ceph.client.admin.keyring 和 ceph.conf 没有同步。
排查了下发现,配置和标签的绑定列表是空的,即下面命令没有输出:
1# ceph orch client-keyring ls
很好解决,在一台有 ceph.client.admin.keyring 和 ceph.conf 的机器上执行:
1ceph orch client-keyring set client.admin label:_admin
然后再看一下配置和标签的绑定情况,像这样的输出就是成功了:
123# ceph orch client-keyring lsENTITY PLACEMENT MODE OWNER PATH client.admin label:_admin rw------- 0:0 /etc/ceph/ceph.client.admin.keyring
已有标签 _admin ...
Ceph 16 模拟坏盘和恢复
1. 准备工作为了方便模拟坏盘和恢复,我们需要先记下一些信息。
可以先看下 OSD 和设备的对应关系:
1ceph device ls
或:
1ceph device ls-by-host <hostname>
首先我们要决定模拟坏盘的 OSD 和对应的设备,我这里选择 osd.1,对应的设备为 /dev/sdc。
然后,我们需要看下选择设备的位置,命令如下:
1ll /sys/block/sdX
记下这个软连接中的 host 编号,方便后面恢复坏盘,我这里是 host0:
12ll /sys/block/sdclrwxrwxrwx 1 root root 0 Apr 17 16:08 /sys/block/sdc -> ../devices/pci0000:17/0000:17:02.0/0000:18:00.0/host0/target0:2:3/0:2:3:0/block/sdc/
2. 模拟坏盘从系统中删除设备,模拟坏盘。命令:
1echo 1 > /sys/block/sdX/device/delete
我这里是:
1echo 1 > /sys/ ...
Linux 不关机添加或删除设备
假设我们要操作设备 /dev/sdX。
1. 删除设备1echo 1 > /sys/block/sdX/device/delete
如果我们还有把这个设备加回来的打算,则最好记下这个设备的位置:
1ll /sys/block/sdX
记下输出路径中中的 hostX。
例如下面这个要记下位置 “host0”:
12ll /sys/block/sdclrwxrwxrwx 1 root root 0 Apr 17 16:08 /sys/block/sdc -> ../devices/pci0000:17/0000:17:02.0/0000:18:00.0/host0/target0:2:3/0:2:3:0/block/sdc/
2. 添加设备添加设备就是让内核重新扫描硬件。我们需要先知道所添加的设备位置(就是删除设备时记录的那个 hostX)。
1echo '- - -' > /sys/class/scsi_host/hostX/scan
注意替换 hostX。
注意设备号可能不会很快复用。
例如你的系统里目前有 /dev/sda ~ /dev/ ...
Linux 删除磁盘设备上的 LVM
我这里以设备 /dev/sdc 为例:
1234567# lsblk -o PATH,NAME,FSTYPE,FSSIZE,FSAVAIL,FSUSE%,MOUNTPOINTPATH NAME FSTYPE FSSIZE FSAVAIL FSUSE% MOUNTPOINT.../dev/sdc sdc LVM2_member /dev/mapper/ceph--3ed272cd--3dd6--4e30--8b ...
Windows 使用 Go + Wails 构建第一个桌面程序
1. 准备环境在开始前,我们需要系统内有依赖如下:
Go 1.18+
NPM (Node 15+)
Wails
前两个点击链接到官网自行下载,然后安装下 Wails:
1go install github.com/wailsapp/wails/v2/cmd/wails@latest
最后执行下 Wails 官方提供的检查命令:
1wails doctor
最后输出有输出 “ SUCCESS Your system is ready for Wails development!” 即为环境已经符合要求了。
2. 创建项目Wails 项目的目录结构相对复杂,所以官方提供了生成初始项目的命令。
我这里选择前端的技术栈为 Vue + TypeScript:
1wails init -n myproject -t vue-ts
更多前端技术栈见 https://wails.io/zh-Hans/docs/gettingstarted/firstproject 。
目录结构如下(不含 README.md 和 .gitignore):
12345678910.├── build/ # 项目 ...
Ceph Rados 性能测试方法
1. 测试准备1.1. 清理系统缓存在每次进行测试以前,我们清理下系统缓存,避免系统缓存对测试结果造成影响:
1sync ; echo 3 | sudo tee /proc/sys/vm/drop_caches
1.2. 创建测试池Ceph 的 Pool 有两种策略,分别是副本池和纠删码池,创建方法如下:
123# 副本池ceph osd pool create {pool-name} [{pg-num} [{pgp-num}]] [replicated] \ [crush-rule-name] [expected-num-objects]
123# 纠删码池ceph osd pool create {pool-name} [{pg-num} [{pgp-num}]] erasure \ [erasure-code-profile] [crush-rule-name] [expected_num_objects] [--autoscale-mode ...
Linux 清理系统缓存
先说一个总结,彻底(尽可能的)清理干净 Linux 缓存:
1sync ; echo 3 | sudo tee /proc/sys/vm/drop_caches
-
下面是关于 Linux 清理系统缓存方法的介绍。
我们可以通过操作写入 /proc/sys/vm/drop_caches 文件来清理 Linux 的缓存。
释放 Pagecache:
1echo 1 > /proc/sys/vm/drop_caches
释放可回收的 Slab 对象(包括 Dentry 和 Inode):
1echo 2 > /proc/sys/vm/drop_caches
释放 Pagecache 和可回收的 Slab 对象:
1echo 3 > /proc/sys/vm/drop_caches
有一些点我们需要关注下:
这是一个非破坏性操作,不会释放任何脏对象。
要增加此操作释放的对象数量,我们应该在写入 /proc/sys/vm/drop_caches 之前进行 sync。这将最大限度地减少系统上脏对象的数量,并创建更多要删除的候选对象。
写入 /proc/sys/v ...