Logo

Personal Ops Runbook

Personal runbook covering infrastructure operations for Cloud, Kubernetes, OpenStack, and Ceph environments. Includes deployment and teardown procedures, node management, cluster monitoring setup, and incident response workflows compiled from day-to-day operational work. Intended strictly for personal reference — configurations and scripts are environment-specific and not guaranteed to work as-is elsewhere.

Quy trình thay DISK JOURNAL

Trong docs có nói thẳng một sự thật quan trọng: journal hỏng không có quy trình thay nóng như data disk. Căn cứ từ trang SSD Journaling:

  • Với journal SSD thì node sẽ tạo RAID0 từ các ổ journal — ví dụ cluster lab đang là md126 : active raid0. RAID0 là striping nên 1 trong 2 ổ journal chết = toàn bộ journal chết = datapath node sập.
  • Số lượng SSD journal được định nghĩa lúc deploy cluster; các version Lightbits tương lai mới hỗ trợ thêm/bớt thiết bị sau cài đặt — tức là với hệ thống lab hiện tại verison 3.18.x không có lệnh add/replace journal online.

  • Như vậy quy trình cho journal SSD thực chất là xử lý node failure + tái tạo journal.

Links tham khảo:

Nội dung Link
SSD Journaling (kiến trúc, RAID0, giới hạn version) https://documentation.lightbitslabs.com/lightbits-private-cloud/ssd-journaling
Nhận diện node failure trong cluster https://documentation.lightbitslabs.com/lightbits-private-cloud/identifying-a-node-failure-in-a-lightbits-cluster
Troubleshooting: Node is Inactive https://documentation.lightbitslabs.com/lightbits-private-cloud/node-is-inactive
Node Instance Restart (best practices) https://documentation.lightbitslabs.com/lightbits-private-cloud/node-instance-restart

Bài tập trên oss-nvme-05 (journal của oss-nvme-05 là nvme0n1/S6VANN0L107040nvme2n1/S6VANN0L106474)

Bước 1 - Xem lại hiện trạng trước khi phá hỏng nó

[root@oss-nvme-05 ~]# cat /proc/mdstat | grep -A2 "^md"
md126 : active raid0 nvme2n1[1] nvme0n1[0]
      30005577728 blocks super 1.2 512k chunks

md127 : active raid1 sda2[0] sdb1[1]
      468512768 blocks super 1.2 [2/2] [UU]
      bitmap: 3/4 pages [12KB], 65536KB chunk



[root@oss-nvme-05 ~]# PCIADDR=$(basename $(readlink -f /sys/block/nvme2n1/device | sed 's|/nvme/nvme[0-9]*||'))
[root@oss-nvme-05 ~]# echo "PCIADDR=$PCIADDR"
PCIADDR=0000:81:00.0
[root@oss-nvme-05 ~]# cat /sys/block/nvme2n1/device/serial
S6VANN0L106474

Bước 2 - Rút 1 ssd journal

[root@oss-nvme-05 ~]# echo 1 > /sys/bus/pci/devices/$PCIADDR/remove
[root@oss-nvme-05 ~]# lsblk
NAME      MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
sda         8:0    0 447.1G  0 disk
├─sda1      8:1    0   200M  0 part  /boot/efi
└─sda2      8:2    0 446.9G  0 part
  └─md127   9:127  0 446.8G  0 raid1 /
sdb         8:16   0 447.1G  0 disk
└─sdb1      8:17   0 446.9G  0 part
  └─md127   9:127  0 446.8G  0 raid1 /
nvme0n1   259:0    0    14T  0 disk
└─md126     9:126  0  27.9T  0 raid0
nvme5n1   259:1    0    14T  0 disk
nvme1n1   259:2    0    14T  0 disk
nvme4n1   259:3    0    14T  0 disk
nvme6n1   259:4    0    14T  0 disk
nvme7n1   259:6    0    14T  0 disk
nvme3n1   259:7    0    14T  0 disk
### [ADMIN] — B3. Quan sat suc lan toa (phan dang gia nhat cua bai)
[root@vm-admin-01 ~]# lbcli --endpoint $ENDPOINT -J "$LIGHTOS_JWT" list nodes
Name            UUID                                   State     NVMe endpoint        Failure domains   Capacity   Used      Local rebuild progress
oss-nvme-01-0   e8bc0737-a4af-5538-8952-3cdf63a20f96   Active    10.237.95.101:4420   [oss-nvme-01]     61 TiB     0 B       None
oss-nvme-02-0   ef732732-4c12-5e22-8bf4-eb3dddbd0cc7   Active    10.237.95.102:4420   [oss-nvme-02]     61 TiB     0 B       None
oss-nvme-03-0   5c5b6d5d-21c0-51e2-9c02-359936ae9c70   Active    10.237.95.103:4420   [oss-nvme-03]     61 TiB     0 B       None
oss-nvme-05-0   8861a8fc-b72b-4129-b9e9-1fe77a5a6e82   Active    10.237.95.105:4420   [oss-nvme-05]     61 TiB     0 B       None

# Ky vong: oss-nvme-05-0 roi khoi Active (Inactive/Failed) — KHAC bai data (node van Active)
[root@vm-admin-01 ~]# lbcli --endpoint $ENDPOINT -J "$LIGHTOS_JWT" get node --uuid=8861a8fc-b72b-4129-b9e9-1fe77a5a6e82
Name            UUID                                   State     NVMe endpoint        Failure domains   Capacity   Used      Local rebuild progress
oss-nvme-05-0   8861a8fc-b72b-4129-b9e9-1fe77a5a6e82   Active    10.237.95.105:4420   [oss-nvme-05]     61 TiB     0 B       None

# de y truong journalDeviceNotFound
[root@vm-admin-01 ~]# lbcli --endpoint $ENDPOINT -J "$LIGHTOS_JWT" list events | head -8
ID        Severity   Time                      Name                          Description      Type      Component(s)
30        Info       2026-08-02 15:46:54.953   NVMeDeviceAdded                                NVMeSSD   nvme5n1
29        High       2026-08-02 15:39:14.807   NVMeDeviceFailed                               NVMeSSD   nvme5n1
28        Info       2026-08-02 02:58:19.784   ServerDeleted                 Completed        Server    oss-nvme-04
27        High       2026-08-02 02:16:06.850   ServerClockDrift              ClockDrift       Server    oss-nvme-01
26        Info       2026-08-02 01:30:37.663   NodeEnteredUnattachedState                     Node      oss-nvme-04-0
25        High       2026-08-02 01:30:22.497   NodeInPermanentFailureState   NodeInactive     Node      oss-nvme-04-0
24        Info       2026-08-02 00:30:28.601   NodeEnteredInactiveState      ServerDisabled   Node      oss-nvme-04-0
### [NEW] — B4. Xem noi tang: md degraded/chet, duroslight phan ung
[root@oss-nvme-05 ~]# cat /proc/mdstat
Personalities : [raid0] [raid1]
md126 : broken raid0 nvme2n1[1] nvme0n1[0]
      30005577728 blocks super 1.2 512k chunks

md127 : active raid1 sda2[0] sdb1[1]
      468512768 blocks super 1.2 [2/2] [UU]
      bitmap: 3/4 pages [12KB], 65536KB chunk

unused devices: <none>
[root@oss-nvme-05 ~]# systemctl status duroslight-0 --no-pager | head -5 duroslight-0.service - duros service: 0
     Loaded: loaded (/usr/lib/systemd/system/duroslight-0.service; disabled; preset: disabled)
     Active: active (running) since Sat 2026-08-01 14:08:09 +07; 1 day 9h ago
   Main PID: 6795 (duroslight)
      Tasks: 119 (limit: 3295145)

[root@oss-nvme-05 ~]# journalctl -u node-manager --since "-5 min" --no-pager | grep -viE "statistics|heartbeat" | tail -10
-- No entries --

Quy trình phục hồi (2 kịch bản)

Kịch bản A — "ổ quay lại" (sửa được cáp/backplane, hoặc lab rescan):

### [NEW]
echo 1 > /sys/bus/pci/rescan               # o ve, cung serial, md superblock con nguyen
# Thu duong nhe truoc: de he thong tu phuc hoi / restart node instance
systemctl restart node-manager
# Bam: md journaling co reassemble? duroslight len lai? node ve Active?

Kịch bản B — "thay ổ journal MỚI" (serial khác, hoặc kịch bản A không tự lành): đây là lúc sự thật version lộ ra — không có lệnh gán ổ journal mới vào node đang sống. Đường phục hồi chuẩn trong tay bạn chính là tái sinh node từ trạng thái sạch (bài đã thuộc từ vụ record Failed):

# 1. Tat services tren 05
# 2. [ADMIN] disable server 35b83b77 → cho Unattached (timer!) → delete server
# 3. [NEW] wipe 8 o + rm gftl.db + rm -rf /var/cache/nm_service + xoa unit duroslight cu
# 4. Start lai services dung thu tu B5 (discovery truoc, checkpoint registry, node-manager sau)
#    → auto-registration tao lai server cung SUUID, chon journal tu dau voi bo o hien co

Ba cảnh báo trước khi bấm: (1) đây là bài node-down — node 05 sẽ rời Active thật sự, chỉ làm khi cluster còn N-1 node khỏe và 0 volume như hiện tại; (2) tuyệt đối làm trên node lab, không phải node đang giữ dữ liệu; (3) khả năng phải đi trọn Kịch bản B kể cả khi ổ quay lại — journal RAID0 chết giữa chừng có thể để trạng thái không tự lành, và đó chính là bài học đáng tiền: journal không phải "ổ dữ liệu có thể thay", nó là bộ phận sống còn của node — mất journal gần như đồng nghĩa làm lại node. Cũng vì thế production nên coi cảnh báo SMART trên ổ journal là mức ưu tiên cao nhất trong 8 ổ.

Muốn mình đóng cả hai bài (data + journal) thành file 9.9-Disk-Failure-Drills.md cho bộ docs không?