HEALTH_WARN too few PGs per OSD (21 < min 30)解决方法
标签(空格分隔): ceph,ceph运维,pg
集群环境:
[root@node3 ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
[root@node3 ~]# ceph -v
ceph version 12.2.1 (3e7492b9ada8bdc9a5cd0feafd42fbca27f9c38e) luminous (stable)
集群当前布局:
[root@node3 ceph-6]# ceph osd tree
ID CLASS WEIGHT  TYPE NAME      STATUS REWEIGHT PRI-AFF
-1       0.08844 root default
-3       0.02948     host node1
 0   hdd 0.00980         osd.0      up  1.00000 1.00000
 3   hdd 0.00980         osd.3      up  1.00000 1.00000
-5       0.02948     host node2
 1   hdd 0.00980         osd.1      up  1.00000 1.00000
 4   hdd 0.00980         osd.4      up  1.00000 1.00000
-7       0.02948     host node3
 2   hdd 0.00980         osd.2      up  1.00000 1.00000
 5   hdd 0.00980         osd.5      up  1.00000 1.00000
为每个主机再添加一个osd:
为了重现too few pgs的错误,同时为了创建指定数据位置osd,下面创建bluestore的osd,数据存储在/dev/sdd1上。在每个主机上执行下面的步骤:
第一步:创建bluestore类型的osd:
[root@node2 ~]# ceph-disk prepare --bluestore /dev/sdd2 --block.db /dev/sdd1
set_data_partition: incorrect partition UUID: cafecafe-9b03-4f30-b4c6-b4b80ceff106, expected ['4fbd7e29-9d25-41b8-afd0-5ec00ceff05d', '4fbd7e29-9d25-41b8-afd0-062c0ceff05d', '4fbd7e29-8ae0-4982-bf9d-5a8d867af560', '4fbd7e29-9d25-41b8-afd0-35865ceff05d']
prepare_device: OSD will not be hot-swappable if block.db is not the same device as the osd data
prepare_device: Block.db /dev/sdd1 was not prepared with ceph-disk. Symlinking directly.
meta-data=/dev/sdd2              isize=2048   agcount=4, agsize=648895 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2595579, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
第二步:激活该osd:
[root@node2 ~]# ceph-disk activate /dev/sdd2
creating /var/lib/ceph/tmp/mnt.mR3qCJ/keyring
added entity osd.8 auth auth(auid = 18446744073709551615 key=AQBNqOVZt/iUBBAArkrWrZi9N0zxhHhYfhanyw== with 0 caps)
got monmap epoch 1
Removed symlink /etc/systemd/system/ceph-osd.target.wants/ceph-osd@8.service.
Created symlink from /etc/systemd/system/ceph-osd.target.wants/ceph-osd@8.service to /usr/lib/systemd/system/ceph-osd@.service.
最后查看集群布局,发现共有9个osd:
[root@node3 ~]# ceph osd tree
ID CLASS WEIGHT  TYPE NAME      STATUS REWEIGHT PRI-AFF
-1       0.08844 root default
-3       0.02948     host node1
 0   hdd 0.00980         osd.0      up  1.00000 1.00000
 3   hdd 0.00980         osd.3      up  1.00000 1.00000
 7   hdd 0.00989         osd.7      up  1.00000 1.00000
-5       0.02948     host node2
 1   hdd 0.00980         osd.1      up  1.00000 1.00000
 4   hdd 0.00980         osd.4      up  1.00000 1.00000
 8   hdd 0.00989         osd.8      up  1.00000 1.00000
-7       0.02948     host node3
 2   hdd 0.00980         osd.2      up  1.00000 1.00000
 5   hdd 0.00980         osd.5      up  1.00000 1.00000
 6   hdd 0.00989         osd.6      up  1.00000 1.00000
重现too few pgs错误:
创建一个pg数较小的存储池:
[root@node3 ~]# ceph osd pool create rbd 64 64
pool 'rbd' created
[root@node3 ~]# rados lspools
rbd
[root@node3 ~]# ceph -s
  cluster:
    id:     b8b4aa68-d825-43e9-a60a-781c92fec20e
    health: HEALTH_WARN
            too few PGs per OSD (21 < min 30)
  services:
    mon: 1 daemons, quorum node1
    mgr: node1(active)
    osd: 9 osds: 9 up, 9 in
  data:
    pools:   1 pools, 64 pgs
    objects: 0 objects, 0 bytes
    usage:   9742 MB used, 82717 MB / 92459 MB avail
    pgs:     64 active+clean
从上面可以看到,提示说每个osd上的pg数量小于最小的数目30个。pgs为64,因为是3副本的配置,所以当有9个osd的时候,每个osd上均分了64/9 *3=21个pgs,也就是出现了如上的错误 小于最小配置30个。
集群这种状态如果进行数据的存储和操作,会发现集群卡死,无法响应io,同时会导致大面积的osd down。
解决办法:修改默认pool rbd的pgs
[root@node3 ~]# ceph osd pool set rbd pg_num 128
set pool 1 pg_num to 128
之后查看集群状态
[root@node3 ~]# ceph -s
  cluster:
    id:     b8b4aa68-d825-43e9-a60a-781c92fec20e
    health: HEALTH_WARN
            Reduced data availability: 5 pgs inactive, 44 pgs peering
            Degraded data redundancy: 49 pgs unclean
            1 pools have pg_num > pgp_num
  services:
    mon: 1 daemons, quorum node1
    mgr: node1(active)
    osd: 9 osds: 9 up, 9 in
  data:
    pools:   1 pools, 128 pgs
    objects: 0 objects, 0 bytes
    usage:   9743 MB used, 82716 MB / 92459 MB avail
    pgs:     7.031% pgs unknown
             38.281% pgs not active
             70 active+clean
             44 peering
             9  unknown
             5  activating
可以看到还没ok,提示pg_num 大于 pgp_num,所以还需要修改pgp_num
[root@node3 ~]# ceph osd pool set rbd pgp_num 128
set pool 1 pgp_num to 128
再次查看集群状态:
[root@node3 ~]# ceph -s
  cluster:
    id:     b8b4aa68-d825-43e9-a60a-781c92fec20e
    health: HEALTH_OK
  services:
    mon: 1 daemons, quorum node1
    mgr: node1(active)
    osd: 9 osds: 9 up, 9 in
  data:
    pools:   1 pools, 128 pgs
    objects: 0 objects, 0 bytes
    usage:   9750 MB used, 82709 MB / 92459 MB avail
    pgs:     128 active+clean
这里是简单的实验,pool上也没有数据,所以修改pg影响并不大,但是如果是生产环境,这时候再重新修改pg数,会对生产环境产生较大影响。因为pg数变了,就会导致整个集群的数据重新均衡和迁移,数据越大响应io的时间会越长。所以,最好在一开始就设置好pg数。
参考资料:
HEALTH_WARN too few PGs per OSD (16 < min 30)
HEALTH_WARN too few PGs per OSD (21 < min 30)解决方法的更多相关文章
- too few PGs per OSD (20 < min 30)
		ceph osd pool set replicapool pg_num 150 ceph osd pool set replicapool pgp_num 150 
- 天河2 程序 version GLIBCXX_3.4.21 not found 解决方法
		本文告诉大家在 天河2 运行程序时发现 version GLIBCXX_3.4.21 not found 如何修复 我在天河2运行一个程序报错 version `GLIBCXX_3.4.21' not ... 
- 021 Ceph关于too few PGs per OSD的问题
		在一个ceph集群中,操作创建一个池后,发现ceph的集群状态处于warn状态,信息如下 检查集群的信息 查看看池 [root@serverc ~]# ceph osd pool ls images ... 
- ceph -s集群报错too many PGs per OSD
		背景 集群状态报错,如下: # ceph -s cluster 1d64ac80-21be-430e-98a8-b4d8aeb18560 health HEALTH_WARN <-- 报错的地方 ... 
- ceph故障:too many PGs per OSD
		原文:http://www.linuxidc.com/Linux/2017-04/142518.htm 背景 集群状态报错,如下: # ceph -s cluster 1d64ac80-21be-43 ... 
- jquery.validate.min.js 用法方法示例
		页面html 代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ... 
- 5.7.2.2 min()和max()方法
		Math对象还包含许多方法,用于辅助完成简单和复杂的数学计算. 其中,min()和max()方法用于确定一组数值中的最小值和最大值.这两个方法都可以接受任意多个数值参数,如下例子: var max = ... 
- std::min error C2059: 语法错误:“::” 的解决方法
		std::min error C2059: 语法错误:"::" 的解决方法 下面这段代码: size_t n = std::min(count_, num_elements); 编 ... 
- ubuntu 更显列表 [Connecting to archive.ubuntu.com (2001:67c:1360:8001::21)] 超时的解决方法
		问题描述: 在使用apt-get update 时更行列表,显示[Connecting to archive.ubuntu.com (2001:67c:1360:8001::21)]超时 分析: 我已 ... 
随机推荐
- 用Heartbeat实现HA集群
			HA即高可用(high avaliable),又被叫做双机热备,用于关键性业务,简单理解就是,有两台机器A和B,正常是A提供服务,B待机闲置,当A宕机或服务宕掉,会切换到B机器继续提供服务.常用实现高 ... 
- Springboot- Spring缓存抽象学习笔记
			Spring缓存作用准备: 1.准备数据(准备一个有数据的库和表/导入数据库文件,准备好表和表里面的数据) 2.创建javaBean封装数据 3.整合MyBatis操作数据库( 这里用MyBatis) ... 
- codeforces   831B. Keyboard Layouts   解题报告
			题目链接:http://codeforces.com/contest/831/problem/B 题目意思:给出两个长度为26,由小写字母组成的字符串s1和s2,对于给出的第三个字符串s3,写出对应s ... 
- cloudsim仿真过程中内存占用过大问题的解决
			在写<云环境下基于预算和截止期约束的科学工作流弹性资源提供和调度>这篇文章时用到了cloudsim仿真软件进行实验仿真,在实验过程中遇到了当仿真执行时间过长时程序总是不能正常结束,由于仿真 ... 
- Win7 SP1 下安装 VS2015 Update 3
			首先Win7必须是SP1,然后要求安装IE11,安装IE11前需要安装6个先决补丁,成功安装IE11后建议安装3个可选补丁.然后导入3个根证书(COMODO RSA Certification Aut ... 
- Django的 CBV和FBV
			FBV CBV 回顾多重继承和Mixin 回到顶部 FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django的学习中,我们一直使用的是这种方式,所以 ... 
- 记vue+leaflet的一次canvas渲染爆栈
			背景: 在地图上绘制大量的circleMarker,leaflet能选择使用canvas来渲染,比起默认的svg渲染来说在大量绘制的情况下会更加流畅.但当触发其中某一个circleMarker的too ... 
- PostgreSQL.conf文件配置详解[转]
			一.连接配置与安全认证 1.连接Connection Settings listen_addresses (string) 这个参数只有在启动数据库时,才能被设置.它指定数据库用来监听客户端连接的 ... 
- Android 进阶9:进程通信之 AIDL 解析
			读完本文你将了解: AIDL AIDL 生成文件分析 Stub Proxy AIDL 生成的内容小结 AIDL 的使用回顾 服务端 客户端 小结 手动写个 Binder 首先是定义跨进程接口实现 II ... 
- ubuntu 设置plank开机自启之后关机键失效变为注销键
			之前因为猎奇心,给我的ubuntu系统换了一个macUbuntu的桌面,但是之前用的dock是docky,昨日闲来无聊换成了plank,设置成然后就发现我的系统关不了机了,只能通过指令关机. 百度之后 ... 
