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