Khắc phục lỗi thường gặp trong Ceph Cluster

Ceph là một hệ thống lưu trữ phân tán mạnh mẽ, nhưng không tránh khỏi những lỗi phức tạp trong quá trình vận hành. Trong bài viết này, chúng ta sẽ đi sâu vào những lỗi phổ biến và cách khắc phục.

Slow OSD heartbeats

Đây là tình trạng khi hai OSDs (Object Storage Daemons) có độ trễ kết nối lớn hơn 1 giây, điều này không tốt cho việc lưu trữ và truy cập dữ liệu trong CEPH. Độ trễ có thể được kiểm tra thông qua mạng nội bộ (giữa các server lưu trữ) hoặc mạng ngoại vi (từ server lưu trữ đến server sử dụng). Nếu độ trễ quá cao, OSDs tương ứng sẽ bị đánh dấu là down, có thể dẫn đến mất dữ liệu trong CEPH.

Tham khảo: https://docs.ceph.com/en/latest/rados/operations/monitoring/#network-performance-checks

shell> ceph -s
health: HEALTH_WARN
       Slow OSD heartbeats on back (longest 6181.010ms)
       Slow OSD heartbeats on front (longest 5953.232ms)

Và lệnh.

shell> ceph health detail
[WRN] OSD_SLOW_PING_TIME_BACK: Slow OSD heartbeats on back (longest 11846.602ms)
    Slow OSD heartbeats on back from osd.12 [] to osd.25 [] 11846.602 msec
    Slow OSD heartbeats on back from osd.8 [] to osd.17 [] 3617.281 msec
    Slow OSD heartbeats on back from osd.16 [] to osd.27 [] 2784.517 msec
    Slow OSD heartbeats on back from osd.21 [] to osd.17 [] 1678.064 msec
    Slow OSD heartbeats on back from osd.11 [] to osd.15 [] 1675.884 msec
    Slow OSD heartbeats on back from osd.20 [] to osd.13 [] 1073.790 msec
[WRN] OSD_SLOW_PING_TIME_FRONT: Slow OSD heartbeats on front (longest 11427.677ms)
    Slow OSD heartbeats on front from osd.12 [] to osd.25 [] 11427.677 msec
    Slow OSD heartbeats on front from osd.8 [] to osd.17 [] 3787.868 msec
    Slow OSD heartbeats on front from osd.16 [] to osd.27 [] 3465.298 msec
    Slow OSD heartbeats on front from osd.11 [] to osd.15 [] 1469.591 msec
    Slow OSD heartbeats on front from osd.21 [] to osd.17 [] 1341.135 msec
    Slow OSD heartbeats on front from osd.20 [] to osd.13 [] 1224.235 msec
    Slow OSD heartbeats on front from osd.5 [] to osd.16 [] 1101.175 msec

Bằng cách kiểm tra các thông tin trên, bạn có thể thấy rằng độ trễ OSD của một server và các server khác là tương đối cao. Vấn đề có thể được giải quyết bằng cách rút cáp mạng cáp quang của server, lau sạch và cắm lại.

Slow ops

Đây là tình trạng khi có các hoạt động chậm trong hệ thống.

shell> ceph -s
     21 slow ops, oldest one blocked for 29972 sec, mon.ceph1 has slow ops

Để giải quyết, đảm bảo tất cả các server lưu trữ đều đồng bộ thời gian và khởi động lại dịch vụ monitor trên server tương ứng.

Pgs not deep-scrubbed in time

CEPH thực hiện kiểm tra nhất quán (scrub) cho tất cả PGs (Placement Groups) mỗi 1-1.5 ngày. Khi kiểm tra nhất quán cho mỗi PG, có một tỷ lệ nhất định sẽ được chuyển thành kiểm tra nhất quán sâu (deep-scrub), quá trình này chậm hơn và tiêu thụ nhiều hiệu suất đọc đĩa. Nếu một PG không được deep-scrub trong vòng 2 tuần, hệ thống sẽ cảnh báo.

shell> ceph -s
    47 pgs not deep-scrubbed in time

Để giải quyết, bạn có thể thay đổi giá trị ngưỡng của osd_deep_scrub_interval thành một tháng (606024*30) để loại bỏ cảnh báo.

MDS cache is too large

Đây là cảnh báo khi bộ nhớ cache mà MDS (Metadata Server) sử dụng cao hơn nhiều so với giá trị ngưỡng đã đặt. Bạn có thể sử dụng lệnh sau để đặt giá trị ngưỡng cao hơn cho bộ nhớ cache của MDS, điều này sẽ loại bỏ cảnh báo nhưng sẽ tiêu thụ nhiều bộ nhớ hơn. Lệnh config dump có thể được sử dụng để xem thông tin về các giá trị ngưỡng.

ceph config set mds mds_cache_memory_limit 10GB
ceph config dump

Nếu sau một thời gian tăng giá trị mds_cache_memory_limit, cảnh báo vẫn xuất hiện và MDS cache sử dụng vượt quá 1.5 lần giá trị mới, bạn có thể cân nhắc thiết lập nhiều dịch vụ MDS ở trạng thái hoạt động.

Client node18 failing to respond to cache pressure

Đây là cảnh báo khi một client (trong trường hợp này là node18) không phản hồi kịp thời đến yêu cầu giảm bộ nhớ cache từ dịch vụ MDS (Metadata Server) của Ceph. Nếu cảnh báo này chỉ xuất hiện tạm thời, có thể không cần phải xử lý. Tuy nhiên, nếu cảnh báo này xuất hiện liên tục, bạn có thể cần phải gỡ bỏ và tái mount hệ thống file Ceph trên node18.

Bạn có thể truy vấn số ID của máy khách ceph và số lượng nút mà nó sử dụng (giá trị của num_caps). Lệnh này được sử dụng để liệt kê tất cả các phiên làm việc hiện tại với MDS.

ceph tell mds.0 session ls

Sử dụng lệnh này được sử dụng để xoá một client cụ thể hoặc tất cả các client khỏi MDS. Điều này có thể hữu ích nếu một client đang gây ra sự cố với MDS.

ceph tell mds.0 session evict id=11134635
ceph tell mds.0 session evict

Bạn có thể sử dụng các lệnh này được sử dụng để quản lý danh sách đen của Ceph, cho phép bạn xem, loại bỏ hoặc xóa sạch danh sách đen. Tuy nhiên, cần lưu ý rằng việc loại bỏ một client khỏi danh sách đen không đảm bảo rằng client đó sẽ có thể truy cập Ceph một cách bình thường.

ceph osd blacklist ls
ceph osd blacklist rm 192.168.20.1:0/1498586492
ceph osd blacklist clear

PGs inactive, PGs incomplete (Giảm khả năng truy cập dữ liệu)

Khi các Placement Groups (PGs) trong Ceph rơi vào trạng thái incomplete, điều này đồng nghĩa với việc số lượng OSDs (Object Storage Daemon) trục thuộc PG ít hơn mốc min_size. Khi đó, dữ liệu tương ứng không thể đọc/ghi, gây ra các vấn đề liên quan đến MDS (Metadata Server).

3 MDSs report slow metadata IOs
2 MDSs report slow requests
2 MDSs behind on trimming
Reduced data availability: 4 pgs inactive, 4 pgs incomplete

pg 5.6de is incomplete, acting [254,356,222,352,111,247,100,133,351,206] (reducing pool cephfs_data min_size from 8 may help; search ceph.com/docs for 'incomplete')
pg 5.6e9 is incomplete, acting [276,244,357,358,221,321,311,229,314,351] (reducing pool cephfs_data min_size from 8 may help; search ceph.com/docs for 'incomplete')
pg 5.73b is incomplete, acting [186,279,351,247,293,354,359,220,181,283] (reducing pool cephfs_data min_size from 8 may help; search ceph.com/docs for 'incomplete')
pg 5.eda is incomplete, acting [164,157,120,227,353,351,295,269,95,354] (reducing pool cephfs_data min_size from 8 may help; search ceph.com/docs for 'incomplete'

Cách khắc phục

  • Xem thông tin PG:ceph pg 5.6de query
  • Cứu PG bằng cách bắt buộc tạo lại:ceph osd force-create-pg 5.6de --yes-i-really-mean-it
  • Nếu tình trạng vẫn chưa được giải quyết, có thể xem xét giảm min_size của pool (điều này có rủi ro về đồng bộ dữ liệu).

Failed to probe daemons or devices stderr:Non-zero exit code 125 from /bin/podman (lỗi Podman khi probe dæmon hoặc thiết bị)

Lỗi này xảy ra do vấn đề với Podman container, gây ra lỗi không thể probe các dæmon hoặc thiết bị.

[WRN] CEPHADM_REFRESH_FAILED: failed to probe daemons or devices
host ceph105 ceph-volume inventory failed: cephadm exited with an error code: 1, stderr:Non-zero exit code 125 from /bin/podman run --rm --ipc=host --net=host --entrypoint stat -e CONTAINER_IMAGE=docker.io/ceph/ceph:v15 -e NODE_NAME=ceph105 docker.io/ceph/ceph:v15 -c %u %g /var/lib/ceph
stat:stderr Error: readlink /var/lib/containers/storage/overlay/l/HMGABIBEWBRXOSBT4JLOKQIKDA: no such file or directory
Traceback (most recent call last):
File "", line 6112, in
File "", line 1299, in _infer_fsid
File "", line 1382, in _infer_image
File "", line 3581, in command_ceph_volume
File "", line 1477, in make_log_dir
File "", line 2084, in extract_uid_gid
RuntimeError: uid/gid not found

Cách khắc phục

  • Xác định các node bị lỗi:ceph orch ps | grep error
  • Kéo lại Docker image cần thiết:cephadm pull podman pull ceph/ceph:v15
  • Kiểm tra lại trạng thái của container:podman images podman ps
  • Khởi động lại server hoặc dịch vụ Ceph:systemctl restart ceph

Mds.cephfs.ceph109.avzzqn(mds.1): Behind on trimming (594/128) max_segments: 128, num_segments: 594 (MDS trì hoãn trimming)

Khi số segments trong MDS vượt quá giới hạn mds_log_max_segments, MDS bắt đầu trimming. Nếu vượt quá 2 lần giới hạn, Cảnh báo “Behind on trimming” sẽ xuất hiện.

[WRN] MDS_TRIM: 2 MDSs behind on trimming
mds.cephfs.ceph109.avzzqn(mds.1): Behind on trimming (594/128) max_segments: 128, num_segments: 594
mds.cephfs.ceph106.hggsge(mds.0): Behind on trimming (259/128) max_segments: 128, num_segments: 259

Cách khắc phục

Tăng giá trị mds_log_max_segments lên 1024:

ceph config set mds mds_log_max_segments 1024

MDS N slow requests are blocked > 30 secs (MDS có requests chậm bị chặn hơn 30 giây).

Bạn sẽ nhìn thấy reports.

[WRN] MDS_SLOW_REQUEST: 3 MDSs báo cáo yêu cầu chậm
mds.cephfs.ceph109.avzzqn(mds.1): 29 yêu cầu chậm bị chặn > 30 giây
mds.cephfs.ceph110.sfagxf(mds.2): 1 yêu cầu chậm bị chặn > 30 giây
mds.cephfs.ceph106.hggsge(mds.0): 3 yêu cầu chậm bị chặn > 30 giây

Nguyên nhân có thể:

  • Dịch vụ MDS chạy quá chậm
  • Vấn đề với PG hoặc OSD khiến việc ghi log không được xác nhận
  • Lỗi phần mềm (BUG)

Giải pháp, mình đã thử đặt giá trị mds_op_complaint_time là 3000 nhưng vấn đề vẫn tồn tại. Khi cảnh báo này xuất hiện, OSD không báo lỗi và dịch vụ MDS chạy bình thường, bộ nhớ đủ dùng. Kiểm tra ổ cứng qua thẻ RAID, phát hiện hai server có một ổ cứng không được phát hiện. Dự đoán ổ cứng gặp vấn đề và OSD chưa phản ứng kịp, cần tiếp tục theo dõi.

Insufficient standby MDS daemons available (không đủ daemon MDS dự phòng).

Khi một dịch vụ MDS bị crash, MDS dự phòng sẽ thay thế. Các server tính toán đã kết nối vẫn có thể truy cập Ceph bình thường, nhưng server mới không thể mount hệ thống tệp Ceph.

Giải pháp hãy SSH vào server có dịch vụ MDS bị crash và khởi động lại dịch vụ MDS. Sau đó, SSH vào server MDS dự phòng và khởi động lại dịch vụ MDS.

ssh ceph107
systemctl restart ceph-8f1c1f24-59b1-11eb-aeb6-f4b78d05bf17@mds.cephfs.ceph106.hggsge.service
ssh ceph102
systemctl restart ceph-8f1c1f24-59b1-11eb-aeb6-f4b78d05bf17@mds.cephfs.ceph102.imxzno.service

OSD_TOO_MANY_REPAIRS (Quá nhiều lần repaired reads trên 1 OSD)

Khi một OSD có đĩa cứng bị lỗi, hệ thống Ceph sẽ phát hiện nhiều PG gặp vấn đề trong quá trình kiểm tra tính nhất quán (deep scrub), dẫn đến cảnh báo này. Dù đã sửa chữa tất cả PG, cảnh báo vẫn không biến mất.

Giải pháp hãy SSH vào server Ceph tương ứng và khởi động lại dịch vụ OSD.

ssh ceph105
systemctl restart ceph-osd@174.service

RECENT_CRASH (2 daemon đã bị crash gần đây)

Khi có daemon bị crash, dù đã giải quyết vấn đề, cảnh báo vẫn không biến mất. Ví dụ, khi đĩa cứng bị lỗi dẫn đến dịch vụ OSD bị crash và tự động khởi động lại, cảnh báo vẫn còn.

Giải pháp hãy sử dụng lệnh sau để xóa và lưu trữ cảnh báo:

ceph crash archive-all

Client không thể cập nhật trạng thái.

Thông thường, sau khi hoàn thành nhiệm vụ đọc/ghi, client sẽ thông báo cho MDS giải phóng tài nguyên và cập nhật tid. Nếu client và MDS không thể giao tiếp bình thường, tid sẽ không được cập nhật, dẫn đến MDS không thể giải phóng bộ nhớ và cảnh báo “MDSs behind on trimming”.

Giải pháp hãy khởi động lại dịch vụ MDS.

Kết Luận

Những lỗi này thường gặp trong Ceph và việc hiểu rõ ngày càng giúp bạn quản lý hệ thống tốt hơn. Hãy luôn giữ một quy trình giám sát và bảo trì hợp lý để tránh những gián đoạn không mong muốn trong hệ thống!

Tham khảo http://www.chenlianfu.com/?p=3388

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