V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zodiac182
V2EX  ›  程序员

问个 ceph pg 的问题

  •  
  •   zodiac182 · 2021-06-08 14:27:13 +08:00 · 1095 次点击
    这是一个创建于 1065 天前的主题,其中的信息可能已经有所发展或是发生改变。
    求大佬前来搭救。
    集群是这样配置的:
    node-0,node-1,node-2,node-3 上 HDD 硬盘,pool name:storage 。
    Node-4,node-5,node-6 上 SDD 硬盘,pool name:cache, 做成缓存。

    # ceph osd lspools
    4 storage
    5 image-storage_data
    6 image-storage_metadata
    8 cache


    查看 pool 8 ( cache )的情况,可以看到每个 osd 有 64 个 pg, 集中在 4,5,6 三个 node 上。没问题。
    # osdmaptool osdmap --import-crush ./crushmap --test-map-pgs --pool 8
    osdmaptool: osdmap file 'osdmap'
    osdmaptool: imported 1839 byte crush map from ./crushmap
    pool 8 pg_num 64
    #osd count first primary c wt wt
    osd.0 0 0 0 9.09419 1
    osd.1 0 0 0 10.9131 1
    osd.2 0 0 0 9.09419 1
    osd.3 0 0 0 14.5527 1
    osd.4 64 27 27 0.872299 0.950012
    osd.5 64 21 21 0.872299 0.950012
    osd.6 64 16 16 0.872299 0.950012
    in 7
    avg 27 stddev 31.6747 (1.17314x) (expected 4.84873 0.179583x))
    min osd.4 64
    max osd.4 64
    size 3 64
    osdmaptool: writing epoch 4682 to osdmap


    但是看 pool 4 ( storage ), 为什么每个 osd 上都有属于 pool storage 的 pg 呢? 4,5,6 结点上没有 hdd 呀。
    # osdmaptool osdmap --import-crush ./crushmap --test-map-pgs --pool 4
    osdmaptool: osdmap file 'osdmap'
    osdmaptool: imported 1839 byte crush map from ./crushmap
    pool 4 pg_num 128
    #osd count first primary c wt wt
    osd.0 93 28 28 9.09419 1
    osd.1 100 30 30 10.9131 1
    osd.2 75 27 27 9.09419 1
    osd.3 88 35 35 14.5527 1
    osd.4 15 6 6 0.872299 0.950012
    osd.5 10 2 2 0.872299 0.950012
    osd.6 3 0 0 0.872299 0.950012
    in 7
    avg 54 stddev 40.1639 (0.743777x) (expected 6.85714 0.126984x))
    min osd.6 3
    max osd.1 100
    size 3 128
    3 条回复    2021-06-08 18:46:04 +08:00
    zodiac182
        1
    zodiac182  
    OP
       2021-06-08 14:49:02 +08:00
    查看 pg 的状态,发现很多 pg 的副本是同时存在于两个 pool 的。

    # ceph pg ls-by-osd 4
    PG OBJECTS DEGRADED MISPLACED UNFOUND BYTES OMAP_BYTES* OMAP_KEYS* LOG STATE SINCE VERSION REPORTED UP ACTING SCRUB_STAMP DEEP_SCRUB_STAMP
    4.5 13154 0 0 0 55052803072 76 8 3064 active+clean 6h 4678'25693372 4678:36403484 [4,6,1]p4 [4,6,1]p4 2021-06-08 08:40:18.746379 2021-06-06 22:45:04.723214
    4.b 12745 0 0 0 53309668388 76 8 3018 active+clean 8h 4679'14474815 4679:21985894 [3,1,4]p3 [3,1,4]p3 2021-06-07 19:05:19.609229 2021-06-01 15:14:08.633892
    4.c 12861 0 0 0 53772528128 0 0 3094 active+clean 6h 4678'15078958 4678:20963884 [4,3,1]p4 [4,3,1]p4 2021-06-08 07:54:49.711211 2021-06-05 20:05:37.202050
    4.d 13102 0 0 0 54819514898 0 0 3072 active+clean 3h 4678'21367130 4679:28327270 [4,2,3]p4 [4,2,3]p4 2021-06-08 11:27:17.714580 2021-06-08 11:27:17.714580
    4.10 12828 0 0 0 53681672210 0 0 3009 active+clean 10h 4678'9153051 4678:13302772 [0,4,2]p0 [0,4,2]p0 2021-06-07 10:19:00.018771 2021-06-07 10:19:00.018771
    4.17 13035 0 0 0 54525949881 0 0 3048 active+clean 10h 4678'10906087 4679:15392312 [0,4,2]p0 [0,4,2]p0 2021-06-07 19:06:35.025947 2021-06-05 03:43:30.623975
    4.21 12884 0 0 0 53878359040 0 0 3068 active+clean 10h 4678'13903340 4678:19842337 [0,3,4]p0 [0,3,4]p0 2021-06-07 18:56:16.993401 2021-06-04 23:57:05.083683
    4.24 12915 0 0 0 54005068288 76 8 3004 active+clean 10h 4679'10099444 4679:16249023 [3,4,0]p3 [3,4,0]p3 2021-06-07 18:56:19.869887 2021-06-01 08:26:30.348797
    Judoon
        2
    Judoon  
       2021-06-08 16:20:03 +08:00
    crushmap 是你自己写的吗?
    我记得创建 osd 的时候,ceph 会自动加上 class 为 ssh 和 hdd 的,用 ceph osd tree,应该有个 class 字段能直接区分。
    ```
    ceph osd crush rule create-replicated hdd_rule default host hdd
    ceph osd crush rule create-replicated ssd_rule default host ssd

    ceph osd pool create rbd_ssd 512 512 replicated ssd_rule
    ceph osd pool create rbd_hdd 512 512 replicated hdd_rule
    ```
    我之前是直接这么创建就可以了的

    如果你的磁盘是用了硬件 raid 卡,ceph 可能无法自动识别出了了,推荐用 jbod 直连

    另外 “很多 pg 的副本是同时存在于两个 pool 的” 这句话没看懂
    zodiac182
        3
    zodiac182  
    OP
       2021-06-08 18:46:04 +08:00
    @Judoon
    感谢你的指导,
    我也是这样添加的。
    比如,0,1,2 是来自 hdd pool 的 osd,
    4,5,6 是来此 ssd pool 的 osd 。
    通过 ceph pg 来查看的时候,很多 pg 是类似[0,2,4]这样分布的。我疑惑的是为啥可以分布在两个 pool 上。
    而且,查看 pg 分布的时候,选定--pool 4 ( 4 是 hdd 的 pool ),结果却看到了在 osd 4,5,6 上也有这个 pool 的 pg 。
    osdmaptool osdmap --import-crush ./crushmap --test-map-pgs --pool 4
    osdmaptool: osdmap file 'osdmap'
    osdmaptool: imported 1839 byte crush map from ./crushmap
    pool 4 pg_num 128
    #osd count first primary c wt wt
    osd.0 93 28 28 9.09419 1
    osd.1 100 30 30 10.9131 1
    osd.2 75 27 27 9.09419 1
    osd.3 88 35 35 14.5527 1
    osd.4 15 6 6 0.872299 0.950012
    osd.5 10 2 2 0.872299 0.950012
    osd.6 3 0 0 0.872299 0.950012

    不明白这是怎么回事。
    为什么 4,5,6 这三个 osd 上面会有来自 hdd 这个 pool 的 pg 呢?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1423 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:42 · PVG 07:42 · LAX 16:42 · JFK 19:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.