Saturday, October 5, 2024

Hướng dẫn kiểm tra và xử lý cảnh báo daemon crash trong Ceph

-

1. Tổng quan.
Bài viết này sẽ hướng dẫn bạn các bước cơ bản để kiểm tra trạng thái của Ceph khi nhận được cảnh báo, tìm hiểu nguyên nhân daemon crash, và cách xử lý để đưa hệ thống trở lại trạng thái bình thường.

Giả sử có OSD hoặc bất kỳ daemon nào trong Ceph (như mon, mgr, osd) bị crash, Ceph lưu thông tin về lỗi này vào thư mục /var/lib/ceph/crash. Sau khi vấn đề đã được xử lý và các daemon hoạt động bình thường, bạn vẫn sẽ thấy cảnh báo trong trạng thái sức khỏe của Ceph và để xoá thông báo này, bạn cần phải xử lý các crash log còn sót lại.

2. Quy trình xử lý.

Chạy lệnh sau để liệt kê tất cả các crash mới chưa được xử lý:

ceph crash ls-new

Để dọn dẹp các crash và lưu trữ chúng (sẽ không còn hiển thị cảnh báo nữa), bạn có thể chạy lệnh:

ceph crash archive-all

Sau khi đã lưu trữ tất cả các crash, bạn có thể chạy lệnh kiểm tra lại trạng thái sức khỏe của Ceph:

ceph health

Như vậy, cách này sẽ giúp bạn loại bỏ cảnh báo HEALTH_WARN liên quan đến bất kỳ daemon nào khác bị crash, miễn là các crash đã được xử lý và không còn vấn đề chưa được xử lý.

2. Ví dụ tình huống.

Khi có một sự cố mạng tạm thời khiến kết nối tới cluster bị gián đoạn trong khoảng thời gian hơn 15 phút, OpenShift Container Platform (OCP) sẽ gửi cảnh báo yêu cầu kiểm tra trạng thái của Ceph.

Đầu tiên, bạn cần đăng nhập vào pod rook-ceph-operator từ server Bastion:

oc rsh -n openshift-storage $(oc get pods -n openshift-storage -o name -l app=rook-ceph-operator)

Sau khi vào shell của pod, xuất cấu hình Ceph:

export CEPH_ARGS='-c /var/lib/rook/openshift-storage/openshift-storage.config'

Thực thi lệnh để kiểm tra trạng thái Ceph:

shell> ceph -s
  cluster:
    id:     85062931-0052-402c-a2d3-515ccd876ad4
    health: HEALTH_WARN
            1 daemons have recently crashed

  services:
    mon: 3 daemons, quorum b,d,e (age 9h)
    mgr: a(active, since 4d)
    mds: 1/1 daemons up, 1 hot standby
    osd: 3 osds: 3 up (since 4w), 3 in (since 3M)
    rgw: 1 daemon active (1 hosts, 1 zones)

  data:
    volumes: 1/1 healthy
    pools:   12 pools, 201 pgs
    objects: 7.69k objects, 26 GiB
    usage:   75 GiB used, 1.4 TiB / 1.5 TiB avail
    pgs:     201 active+clean

  io:
    client:   853 B/s rd, 186 KiB/s wr, 1 op/s rd, 13 op/s wr

Trong trường hợp này, trạng thái của Ceph là HEALTH_WARN, với cảnh báo rằng có một daemon đã crash gần đây. Đây có thể do lỗi phần mềm, phần cứng, hoặc một vấn đề nào đó. Cảnh báo này sẽ hiển thị cho đến khi sự cố được ghi nhận bởi quản trị viên.

Liệt kê các sự cố mới:

shell> ceph crash ls-new
ID                                                                ENTITY                NEW
2024-06-21T17:07:42.188344Z_e733e959-7cf6-4958-8b10-8393c972929c  client.ceph-exporter   *

Kiểm tra thông tin chi tiết của một sự cố cụ thể:

ceph crash info <crash-id>

Ví dụ.

shell> ceph crash info 2024-06-21T17:07:42.188344Z_e733e959-7cf6-4958-8b10-8393c972929c
{
    "backtrace": [
        "/lib64/libc.so.6(+0x54db0) [0x7faeab75bdb0]",
        "/lib64/libc.so.6(+0xa154c) [0x7faeab7a854c]",
        "raise()",
        "abort()",
        "/lib64/libstdc++.so.6(+0xa1a01) [0x7faeab9cca01]",
        "/lib64/libstdc++.so.6(+0xad37c) [0x7faeab9d837c]",
        "/lib64/libstdc++.so.6(+0xad3e7) [0x7faeab9d83e7]",
        "/lib64/libstdc++.so.6(+0xad649) [0x7faeab9d8649]",
        "ceph-exporter(+0x2976d) [0x55b28344c76d]",
        "(boost::json::detail::throw_invalid_argument(char const*, boost::source_location const&)+0x37) [0x55b283460297]",
        "ceph-exporter(+0x65a37) [0x55b283488a37]",
        "(DaemonMetricCollector::dump_asok_metrics()+0x1ea3) [0x55b283468ad3]",
        "ceph-exporter(+0x45ef0) [0x55b283468ef0]",
        "ceph-exporter(+0x5cbfd) [0x55b28347fbfd]",
        "ceph-exporter(+0xab7ff) [0x55b2834ce7ff]",
        "(DaemonMetricCollector::main()+0x212) [0x55b283452c22]",
        "main()",
        "/lib64/libc.so.6(+0x3feb0) [0x7faeab746eb0]",
        "__libc_start_main()",
        "_start()"
    ],
    "ceph_version": "17.2.6-209.el9cp",
    "crash_id": "2024-06-21T17:07:42.188344Z_e733e959-7cf6-4958-8b10-8393c972929c",
    "entity_name": "client.ceph-exporter",
    "os_id": "rhel",
    "os_name": "Red Hat Enterprise Linux",
    "os_version": "9.3 (Plow)",
    "os_version_id": "9.3",
    "process_name": "ceph-exporter",
    "stack_sig": "03972c98be910d1ce25645fdd11917d43497d8e45963b63cf072b005e7daee44",
    "timestamp": "2024-06-21T17:07:42.188344Z",
    "utsname_hostname": "rook-ceph-exporter-odf-2.drc.ocp.bankabc.co.id-68495947df-fqbr7",
    "utsname_machine": "x86_64",
    "utsname_release": "5.14.0-284.55.1.el9_2.x86_64",
    "utsname_sysname": "Linux",
    "utsname_version": "#1 SMP PREEMPT_DYNAMIC Mon Feb 19 16:57:59 EST 2024"
}

Sau khi kiểm tra thông tin chi tiết và xác nhận nguyên nhân, bạn có thể ghi nhận (archive) sự cố để loại bỏ cảnh báo:

ceph crash archive <crash-id>

Ví dụ.

ceph crash archive 2024-06-21T17:07:42.188344Z_e733e959-7cf6-4958-8b10-8393c972929c

Sau khi sự cố được ghi nhận, hệ thống sẽ trở về trạng thái HEALTH_OK. Để ghi nhận tất cả các sự cố mới, bạn sử dụng lệnh ceph crash archive-all như đã nói ở trên nhé.

Các sự cố đã ghi nhận vẫn có thể xem qua lệnh:

ceph crash ls

Bạn có thể thay đổi khoảng thời gian cảnh báo cho các sự cố gần đây bằng cách cấu hình mgr/crash/warn_recent_interval. Mặc định, khoảng thời gian này là 2 tuần. Nếu muốn tắt hoàn toàn cảnh báo cho sự cố gần đây, sử dụng lệnh:

ceph config set mgr mgr/crash/warn_recent_interval 0

Sau khi ghi nhận sự cố, kiểm tra lại trạng thái cluster Ceph và hệ thống sẽ quay lại trạng thái bình thường (HEALTH_OK).

shell> ceph -s
  cluster:
    id:     85062931-0052-402c-a2d3-515ccd876ad4
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum b,d,e (age 9h)
    mgr: a(active, since 4d)
    mds: 1/1 daemons up, 1 hot standby
    osd: 3 osds: 3 up (since 4w), 3 in (since 3M)
    rgw: 1 daemon active (1 hosts, 1 zones)

  data:
    volumes: 1/1 healthy
    pools:   12 pools, 201 pgs
    objects: 7.69k objects, 26 GiB
    usage:   75 GiB used, 1.4 TiB / 1.5 TiB avail
    pgs:     201 active+clean

  io:
    client:   1.1 KiB/s rd, 118 KiB/s wr, 2 op/s rd, 11 op/s wr

3. Kết luận.
Việc theo dõi và xử lý cảnh báo trong Ceph là một nhiệm vụ quan trọng để duy trì tính ổn định của hệ thống lưu trữ. Khi một daemon gặp sự cố, kiểm tra trạng thái hệ thống và ghi nhận sự cố crash giúp quản trị viên nhanh chóng xác định nguyên nhân và khôi phục hệ thống về trạng thái bình thường. Thông qua các lệnh cụ thể, quá trình kiểm tra và xử lý sự cố trở nên rõ ràng và có thể được thực hiện hiệu quả trên Ceph.

Tham khảo https://callmedanbo.medium.com/how-to-solved-ceph-mgr-error-1-daemons-have-recently-crashed-6b6a32e00b85.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories