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