ceph集群提示pgs: 100.000% pgs unknown的一个解决办法

本文详细记录了解决Ceph集群健康警告的过程,通过调整crushmap设置,将主机节点正确地加入到集群的root中,最终使集群状态恢复正常。

搭完集群后,ceph -w提示

[root@node1 ~]# ceph -w
  cluster:
    id:     2386c327-8eb1-4dd7-9fed-fedff947c383
    health: HEALTH_WARN
            Reduced data availability: 128 pgs inactive
 
  services:
    mon: 2 daemons, quorum node0,node1
    mgr: openstack(active)
    osd: 3 osds: 3 up, 3 in
 
  data:
    pools:   1 pools, 128 pgs
    objects: 0  objects, 0 B
    usage:   6.0 GiB used, 118 GiB / 124 GiB avail
    pgs:     100.000% pgs unknown
             128 unknown

在网上查了很久说是需要将osd crush update on start 设置为true,我试了之后发现也不行,最后发现是crush map设置的不对。
从下面可以看出我的host不在root之中

[root@node1 ~]# ceph osd crush tree
ID CLASS WEIGHT  TYPE NAME    
-7       1.00000 host node2   
 2   hdd 1.00000     osd.2    
-5       1.00000 host node1   
 1   hdd 1.00000     osd.1    
-2       1.00000 host node0   
 0   hdd 1.00000     osd.0    
-1             0 root default 




host node0 {
        id -2           # do not change unnecessarily
        id -3 class hdd         # do not change unnecessarily
        # weight 1.000
        alg straw2
        hash 0  # rjenkins1
        item osd.0 weight 1.000
}
host node1 {
        id -5           # do not change unnecessarily
        id -6 class hdd         # do not change unnecessarily
        # weight 1.000
        alg straw2
        hash 0  # rjenkins1
        item osd.1 weight 1.000
}
host node2 {
        id -7           # do not change unnecessarily
        id -8 class hdd         # do not change unnecessarily
        # weight 1.000
        alg straw2
        hash 0  # rjenkins1
        item osd.2 weight 1.000
}
# buckets
root default {
        id -1           # do not change unnecessarily
        id -4 class hdd         # do not change unnecessarily
        # weight 0.000
        alg straw2
        hash 0  # rjenkins1
}

修改方法
1:

将crush map导出
ceph osd getcrushmap -o /tmp/mycrushmap

2:

将crush map反编译为可读模式
crushtool -d /tmp/mycrushmap > /tmp/mycrushmap.txt

3:

将host类型所属的主机节点加入到root中,并注意root列必须位于所有的host列下面
# buckets
root default {
        id -1           # do not change unnecessarily
        id -4 class hdd         # do not change unnecessarily
        # weight 0.000
        alg straw2
        hash 0  # rjenkins1
        item node0 weight 1.000
        item node1 weight 1.000
        item node2 weight 1.000
}

4:

	将修改过的crush map导入集群
	ceph osd setcrushmap -i /tmp/newcrushmap

查看集群状态已经变成正常

[root@node1 ~]# ceph -s
  cluster:
    id:     2386c327-8eb1-4dd7-9fed-fedff947c383
    health: HEALTH_OK
 
  services:
    mon: 2 daemons, quorum node0,node1
    mgr: openstack(active)
    osd: 3 osds: 3 up, 3 in
 
  data:
    pools:   1 pools, 128 pgs
    objects: 0  objects, 0 B
    usage:   6.0 GiB used, 118 GiB / 124 GiB avail
    pgs:     128 active+clean

<think>好的,用户现在遇到了在安装ceph-common时出现的依赖错误,需要解决。根据之前的对话,用户已经按照步骤添加了Ceph仓库并尝试安装,但遇到了多个依赖缺失的问题。现在需要分析错误信息,找出原因并提供解决方案。 首先,错误信息显示缺少多个共享库和Python版本。例如,libcrypto.so.10、libtcmalloc.so.4、liboath.so.0等,以及/usr/bin/python3.6。这些依赖项通常由特定的软件包提供。可能的原因包括系统版本较旧,或者所需的软件包未安装或不在当前启用的仓库中。 接下来,需要确定用户的系统版本。用户之前可能是在CentOS/RHEL 7上操作,因为错误信息中的el7.x86_64表明软件包是针对CentOS 7的。但用户的时间戳显示是2025年,可能需要考虑系统是否更新,或者是否使用了不兼容的仓库。 可能的解决方案包括: 1. 启用EPEL仓库:EPEL提供许多额外的软件包,可能包含缺失的依赖项。 2. 启用其他第三方仓库,如PowerTools或CRB,以获取更多软件包。 3. 安装特定版本的软件包,如较旧的OpenSSL或libtcmalloc。 4. 检查Ceph版本与系统版本的兼容性,可能需要使用适合旧系统的Ceph版本。 5. 考虑升级系统到较新的版本,如CentOS 8或RHEL 8,以支持更新的依赖项。 还需要考虑用户是否按照正确的步骤添加了Ceph仓库,或者是否存在仓库配置错误。此外,用户是否已经启用了必要的额外仓库,如EPEL,这可能会提供缺失的依赖。 另外,错误中提到的Python 3.6可能意味着系统默认的Python版本较旧,需要安装Python 3.6或更高版本,或者通过其他方式提供该解释器。 需要逐步引导用户检查仓库配置,安装必要的依赖包,或者调整安装的Ceph版本以匹配系统支持的依赖项。如果用户无法找到合适的软件包,可能需要手动编译或从其他来源获取,但这可能带来维护上的复杂性。 最后,如果所有方法都无法解决,可能需要建议用户升级操作系统或选择与系统兼容的Ceph版本,以确保依赖项能够被满足。</think>--- ### **问题分析** 你遇到的错误是由于 `ceph-common` 依赖的库(如 `libcrypto.so.10`、`libtcmalloc.so.4` 等)和 Python 3.6 未在系统中找到。这些依赖通常由以下原因导致: 1. **系统版本与 Ceph 版本不兼容**:例如在 CentOS 7 上安装较新版本的 Ceph(如 Pacific/Octopus)。 2. **缺少第三方仓库支持**:如 EPEL、PowerTools 等。 3. **依赖包未安装**:例如旧版 OpenSSL、Google 的 `gperftools` 等。 --- ### **解决方案** --- #### **1. 启用必要仓库** ##### **(1) 启用 EPEL 仓库** EPEL 仓库提供额外依赖包(如 `liboath`、`python3.6`): ```bash # CentOS/RHEL 7 sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm ``` ##### **(2) 启用 PowerTools/CRB 仓库(CentOS 8/RHEL 8+)** 如果是 CentOS 8/RHEL 8 及以上系统
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值