No menu items!
No menu items!
More

    Lỗi LARGE_OMAP_OBJECTS trong Ceph RGW

    1. Tổng quan.

    Lỗi này xuất hiện khi các object trong pool index của bucket có quá nhiều metadata keys (omap keys), gây ảnh hưởng đến hiệu suất của Ceph RGW.

    ⚠️ Nguyên nhân chính

    • Bucket bị xóa nhưng vẫn tồn tại metadata (stale bucket instance)
      • Trong môi trường RGW Multisite, khi một bucket bị xóa, nó không tự động xóa metadata nếu chưa được đồng bộ hoàn toàn.
      • Điều này có thể làm tích tụ bilog, dẫn đến quá nhiều key trong omap.
    • Quá nhiều bilog entries chưa được cắt giảm (trim)
      • Bilog (Bucket Index Log) ghi lại các thay đổi trong bucket (PUT, DELETE, UPDATE).
      • Nếu không được dọn dẹp định kỳ, bilog có thể vượt quá giới hạn:
        • osd_deep_scrub_large_omap_object_key_threshold = 200000 (200K key)
        • osd_deep_scrub_large_omap_object_value_sum_threshold = 1GB
    • Quá trình sync giữa các site chưa hoàn tất
      • Nếu RGW multisite sync chưa hoàn tất, metadata của bucket có thể không được cập nhật đúng cách.

    2. Xử lý lỗi.

    2.1. Tìm object vượt ngưỡng

    Đây là trạng thái của cluster.

    hoanghd3@CEPH-LAB-MON-71:~$ sudo ceph -s
      cluster:
        id:     c85b0190-7f90cac-11ef-97a7-7f90cac
        health: HEALTH_WARN
                1 large omap objects
    
      services:
        mon: 5 daemons, quorum CEPH-LAB-MON-71,CEPH-LAB-MON-72,CEPH-LAB-MON-73,CEPH-LAB-MDS-79,CEPH-LAB-MDS-78 (age 5M)
        mgr: CEPH-LAB-MON-71.dptncn(active, since 9w), standbys: CEPH-LAB-MON-73.blpwtk, CEPH-LAB-MON-72.oleywv
        mds: 2/2 daemons up, 2 hot standby
        osd: 307 osds: 307 up (since 2w), 307 in (since 3w)
        rgw: 3 daemons active (3 hosts, 1 zones)
    
      data:
        volumes: 1/1 healthy
        pools:   11 pools, 3041 pgs
        objects: 586.03M objects, 1.5 PiB
        usage:   2.0 PiB used, 991 TiB / 3.0 PiB avail
        pgs:     2699 active+clean
                 248  active+clean+scrubbing
                 94   active+clean+scrubbing+deep
    
      io:
        client:   634 KiB/s rd, 85 MiB/s wr, 438 op/s rd, 366 op/s wr

    Xem chi tiết lỗi ceph health detail

    hoanghd3@CEPH-LAB-MON-71:~$ sudo ceph health detail
    HEALTH_WARN 1 large omap objects
    [WRN] LARGE_OMAP_OBJECTS: 1 large omap objects
        1 large objects found in pool 'default.rgw.log'
        Search the cluster log for 'Large omap object found' for more details.

    Xem ngưỡng sẽ cảnh báo lỗi này.

    [hoanghd3@CEPH-LAB-MON-71:~]$ sudo ceph tell mon.0 config show | grep -i osd_deep_scrub_large_omap_object_key_threshold
        "osd_deep_scrub_large_omap_object_key_threshold": "200000",

    Xác định đã có object vượt ngưỡng 20000 → cảnh báo large omap objects.

    Log từ command ceph health detail giúp xác định pool bị ảnh hưởng là default.rgw.log.

    Để tìm được object, cần các dữ liệu sau:

    • Namespace thuộc pool default.rgw.log
    • Danh sách PGs thuộc Pool default.rgw.log
    • Danh sách Object thuộc Pool default.rgw.log

    Tìm namespace có trong pool default.rgw.log

    [hoanghd3@CEPH-LAB-MON-71:~]$ sudo radosgw-admin zone get | jq -r '.[] | values' | grep default.rgw.log | cut -d':' -f2 | grep -v default.rgw.log
    gc
    lc
    intent
    usage
    reshard
    notif

    Lấy danh sách PGs trong Pool

    [hoanghd3@CEPH-LAB-MON-71:~]$ sudo ceph pg ls-by-pool default.rgw.log | grep -v NOTE | awk '{print $1}'
    PG
    4.0
    4.1
    4.2
    4.3
    4.4
    4.5
    4.6
    4.7
    4.8
    4.9
    4.a
    4.b
    4.c
    4.d
    4.e
    4.f
    4.10
    4.11
    4.12
    4.13
    4.14
    4.15
    4.16
    4.17
    4.18
    4.19
    4.1a
    4.1b
    4.1c
    4.1d
    4.1e
    4.1f

    Lấy số lượng Large OMAP Objects (NUM_LARGE) của các PGs được list từ kết quả trên khi nó giá trị của nó lớn hơn 0.

    Nếu có kết quả trả về, xác định PG 4.8 sẽ là PG có chứa object large omap objects, hãy note PG này lại để làm bước tiếp theo, nếu kết quả rỗng → bỏ qua.

    ceph pg 4.8 query | jq  '.info.stats.stat_sum | select(.num_large_omap_objects > 0) | .num_large_omap_objects'

    Lấy danh sách các objects trong PG 4.8 đã note lại ở trên, dùng lệnh dưới đây để lấy danh sách các object có trong namespace, bước này phải tìm lần lượt tất cả các namespace list được ở command trên, ví dụ dưới là tìm object trong namespace usage thuộc pool default.rgw.log.

    [hoanghd3@CEPH-LAB-MON-71:~]$ sudo rados -p default.rgw.log --pgid 4.0 ls -N usage -f json | jq -r '.[].name'
    usage.14

    Sau khi lấy được danh sách các object, sử dụng lệnh dưới đây để đếm số lượng OMAP Keys trong từng object.

    Thực hiện lần lượt cho đến khi hết danh sách object và namespace, output nào vượt quá ngưỡng đang set là 200000 thì note lại xử lý, ví dụ:

    [hoanghd3@CEPH-LAB-MON-71:/home/hoanghd3]$ sudo rados -p default.rgw.log listomapkeys usage.14 -N usage | wc -l
    555094

    Để tìm nhanh có thể sử dụng script.

    #!/bin/bash
    ceph=$(which ceph)
    large_omap_object_key_threshold=$($ceph tell mon.0 config show | grep -i osd_deep_scrub_large_omap_object_key_threshold | grep -o "[0-9]*")
    
    if [ "$1" == "" ] || [ $# -gt 1 ]; then
        echo "Pool not set!"
        exit 0
    fi
    
    echo " ======== Details ======="
    
    # Get pool name from user
    POOL=$1
    
    # Find all namespaces in pool
    namespaces=$(radosgw-admin zone get | jq -r '.[] | values' | grep $POOL | cut -d':' -f2 | grep -v $POOL)
    echo "Get Namespaces in $POOL :"
    for namespace in $namespaces
    do
        echo -e "\tNameSpace $namespace Found in $POOL"
    done
    
    echo " ======== Details ======="
    PGS=$(ceph pg ls-by-pool $POOL | grep -v NOTE | tail -n +2 | awk '{print $1}')
    for i in $PGS
    do 
        NUM_LARGE=$(ceph pg $i query | jq  '.info.stats.stat_sum | select(.num_large_omap_objects > 0) | .num_large_omap_objects')
        if [[ $NUM_LARGE ]]; then
            printf "\033[2K\rFound $NUM_LARGE Large omap in PG $i\n"
            for namespace in $namespaces
            do
                printf "\033[2K\r[CHECK] Search for Large omap objects in pool '$POOL', PG '$i' and NameSpace '$namespace' ... \033[2k\r"
    	    find_large="False"
                objects=$(rados -p $POOL --pgid $i ls -N $namespace -f json | jq -r '.[].name')
    	    for obj in $objects
    	    do
    	        omap_in_obj=$(rados -p $POOL --pgid $i listomapkeys $obj -N $namespace | wc -l)
    	        if [[ $omap_in_obj -gt $large_omap_object_key_threshold ]]; then
    	            find_large="True"
    		    printf "\033[2K\rObject : $obj\tOmap Counts : $omap_in_obj \033[0k\n"
    	        fi
    	    done
    	    if [ $find_large == "True" ]; then
    	        echo "----------------------------------------------"
    	    fi
    	done
        fi
    done

    Truyền tên pool là đối số 1 vào script, kết quả object usage.14 thuộc PG 4.18 đang có số lượng omap là 555090/20000 so với ngưỡng alert cảnh báo large omap objects

    [hoanghd3@CEPH-LAB-MON-71:/home/hoanghd3]$ sudo . find_large_omap.sh default.rgw.log
     ======== Details =======
    Get Namespaces in default.rgw.log :
            NameSpace gc Found in default.rgw.log
            NameSpace lc Found in default.rgw.log
            NameSpace intent Found in default.rgw.log
            NameSpace usage Found in default.rgw.log
            NameSpace reshard Found in default.rgw.log
            NameSpace notif Found in default.rgw.log
     ======== Details =======
    Found 1 Large omap in PG 4.18
    Object : usage.14       Omap Counts : 555090

    2.2. Xử lý object đã tìm được.

    Sau khi xác định được object đan vượt ngưỡng, sử dụng phương pháp trim để loại bỏ các sự kiện trong namespace usage.

    Chạy script bằng cách truyền vào thời gian cần loại bỏ và thực thi lệnh

    radosgw-admin usage trim --start-date=2024-01-01 --end-date=2024-12-31

    Nếu muốn loại bỏ cảnh báo large omap objects nhanh có thể sử dụng lệnh deep-scrub để hệ thống quét và cập nhật lại trạng thái

    ceph pg deep-scrub 4.18

    Kết quả.

    hoanghd3@CEPH-LAB-MON-71:~$ sudo ceph -s
      cluster:
        id:     c85b0190-7f90cac-11ef-97a7-7f90cac4804a
        health: HEALTH_OK
    
      services:
        mon: 5 daemons, quorum CEPH-LAB-MON-71,CEPH-LAB-MON-72,CEPH-LAB-MON-73,CEPH-LAB-MDS-79,CEPH-LAB-MDS-78 (age 5M)
        mgr: CEPH-LAB-MON-71.dptncn(active, since 9w), standbys: CEPH-LAB-MON-73.blpwtk, CEPH-LAB-MON-72.oleywv
        mds: 2/2 daemons up, 2 hot standby
        osd: 307 osds: 307 up (since 2w), 307 in (since 3w)
        rgw: 3 daemons active (3 hosts, 1 zones)
    
      data:
        volumes: 1/1 healthy
        pools:   11 pools, 3041 pgs
        objects: 585.37M objects, 1.5 PiB
        usage:   2.0 PiB used, 995 TiB / 3.0 PiB avail
        pgs:     2604 active+clean
                 323  active+clean+scrubbing
                 114  active+clean+scrubbing+deep
    
      io:
        client:   1.8 MiB/s rd, 6.1 MiB/s wr, 345 op/s rd, 135 op/s wr

    Bài viết gần đây

    spot_img

    Related Stories

    Leave A Reply

    Please enter your comment!
    Please enter your name here

    Đăng ký nhận thông tin bài viết qua email