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.

Lightbits Client

Mục tiêu: Cài đặt oss-nvme-06 thành client NVMe/TCP

Thông tin

Client oss-nvme-06 — mgmt 10.237.94.106, data 10.237.95.106
Storage data IP 10.237.95.101 / .102 / .103 (port 4420)
Controller (lbcli) vm-admin-01 10.237.94.100
Proxy http://10.237.7.250:3128 (no_proxy 10.237.0.0/16)

Chú ý: Các lệnh ở phần này chỉ chạy trên oss-nvme-06 hoặc trên controller vm-admin-01.

================================================================

PHẦN A — CHUẨN BỊ CLIENT (trên oss-nvme-06)

================================================================

A.0 Cài package, disable toàn bộ service cũ

[CLIENT] — Lấy bundle từ node ADMIN

# Xóa và tạo lại thư mục bundle
rm -rf /tmp/rpms
mkdir -p /tmp/rpms

# Copy bundle từ node ADMIN sang
scp ~/lightos-offline/target_rpms/*.rpm ~/lightos-offline/deps/*.rpm root@$NEW:/tmp/rpms/

[NEW] — Dựng repo local và cài đặt package

yum install -y --nogpgcheck /tmp/rpms/createrepo_c-libs*.rpm /tmp/rpms/createrepo_c-[0-9]*.rpm /tmp/rpms/drpm*.rpm 2>/dev/null
createrepo /tmp/rpms
printf "[lightos]\nname=lightos\nbaseurl=file:///tmp/rpms\ngpgcheck=0\nenabled=1\n" > /etc/yum.repos.d/lightos.repo
dnf clean all

A.1 Kiểm tra kernel (cần >=5.3.5 cho nvme-tcp)

uname -r # AlmaLinux 9 kernel 5.14 → OK

A.2 Kiểm tra data network tới 3 node

[root@oss-nvme-06 ~]# for ip in 10.237.95.101 10.237.95.102 10.237.95.103; do ping -c1 -W1 $ip; done
PING 10.237.95.101 (10.237.95.101) 56(84) bytes of data.
64 bytes from 10.237.95.101: icmp_seq=1 ttl=64 time=0.213 ms

--- 10.237.95.101 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.213/0.213/0.213/0.000 ms
PING 10.237.95.102 (10.237.95.102) 56(84) bytes of data.
64 bytes from 10.237.95.102: icmp_seq=1 ttl=64 time=0.199 ms

--- 10.237.95.102 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.199/0.199/0.199/0.000 ms
PING 10.237.95.103 (10.237.95.103) 56(84) bytes of data.
64 bytes from 10.237.95.103: icmp_seq=1 ttl=64 time=0.182 ms

--- 10.237.95.103 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.182/0.182/0.182/0.000 ms

# MTU9000: test jumbo frame không phân mảnh, nếu fail → MTU path chưa thông 9000
[root@oss-nvme-06 ~]# ping -M do -s 8972 -c2 10.237.95.101
PING 10.237.95.101 (10.237.95.101) 8972(9000) bytes of data.
8980 bytes from 10.237.95.101: icmp_seq=1 ttl=64 time=0.142 ms
8980 bytes from 10.237.95.101: icmp_seq=2 ttl=64 time=0.155 ms

--- 10.237.95.101 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1062ms
rtt min/avg/max/mdev = 0.142/0.148/0.155/0.006 ms

Nếu jumbo fail nhưng ping thường ok bench vẫn được nhưng kết quả sẽ không tốt.

A.3 Cài gói cần thiết

dnf install -y nvme-cli fio

A.4 Nạp module nvme-tcp

[root@oss-nvme-06 ~]# modprobe nvme-tcp
[root@oss-nvme-06 ~]# unset http_proxy; unset https_proxy
[root@oss-nvme-06 ~]# lsmod | grep nvme # kỳ vọng nvme_tcp / nvme_fabrics / nvme_core
nvme                   77824  0
nvme_tcp              102400  0
nvme_fabrics           49152  1 nvme_tcp
nvme_core             274432  3 nvme_tcp,nvme,nvme_fabrics
nvme_keyring           20480  3 nvme_tcp,nvme_core,nvme_fabrics
nvme_auth              36864  1 nvme_core

# boot-persistent
echo nvme_tcp > /etc/modules-load.d/nvme_tcp.conf

A.5 Bật NVMe native multipath

# kiểm tra hiện trạng
[root@oss-nvme-06 ~]# grep -r "" /sys/module/nvme_core/parameters | grep multipath
/sys/module/nvme_core/parameters/multipath:Y

# lấy đường dẫn kernel
[root@oss-nvme-06 ~]# grubby --default-kernel
/boot/vmlinuz-5.14.0-687.5.3.el9_8.x86_64

grubby --args=nvme_core.multipath=Y --update-kernel $(grubby --default-kernel)

Nếu không có grubby chạy echo "options nvme_core multipath=Y" > /etc/modprobe.d/50-nvme_core.conf && dracut -f

A.6 Reboot để áp dụng multipath

reboot

================================================================

PHẦN B — LẤY HOSTNQN + TẠO VOLUME (ACL)

================================================================

B.1 Lấy hostNQN của client (trên oss-nvme-06)

# Cách 1
[root@oss-nvme-06 ~]# cat /etc/nvme/hostnqn
nqn.2014-08.org.nvmexpress:uuid:6f63c000-1464-11f2-8000-30560f906fe2

# Cách 2 khi sử dụng cách 1 file trống/không có:
[root@oss-nvme-06 ~]# nvme gen-hostnqn | tee /etc/nvme/hostnqn
nqn.2014-08.org.nvmexpress:uuid:6f63c000-1464-11f2-8000-30560f906fe2

Ghi lại nqn.2014-08.org.nvmexpress:uuid:.... — đây là ACL để volume cho phép client này.

B.2 Lấy subsystem NQN của cluster (trên CONTROLLER vm-admin-01)

[root@vm-admin-01 ~]# lbcli get cluster
UUID                                   Subsystem NQN                                                             Current max replicas   Supported max replicas   MinVersionInCluster   MinAllowedVersion   MaxAllowedVersion
f49c7acd-4ffd-59ab-91ad-9946a01f2cba   nqn.2016-01.com.lightbitslabs:uuid:a1bf3a50-1b6e-47aa-b5c2-3e8ae454f916   3                      3                        3.18.2b26868114363    3.18.X              3.21.X
# tìm dòng "subsystem NQN" / "discoveryEndpoints"

Ghi lại subsysNQN dạng nqn.2016-01.com.lightbitslabs:uuid:....

B.3 Tạo nhiều volume để bench MAX (trên CONTROLLER)

Bench trần cluster cần nhiều volume rải primary trên 3 node.
Tạo 6 volume replica 2, ACL = hostNQN client.

[root@vm-admin-01 ~]# HOSTNQN="nqn.2014-08.org.nvmexpress:uuid:6f63c000-1464-11f2-8000-30560f906fe2"
[root@vm-admin-01 ~]# for i in $(seq 1 6); do lbcli create volume --name bench-vol-$i --size 200Gib --replica-count 2 --acl "$HOSTNQN" --project-name default; done
Name          UUID                                   State      Protection State   NSID      Size      Replicas   Compression   ACL                                                                             Rebuild Progress   Missing Nodes Access
bench-vol-1   6e329c5f-84fe-40da-9632-33cd3213e045   Creating   Unknown            0         200 GiB   2          false         values:"nqn.2014-08.org.nvmexpress:uuid:6f63c000-1464-11f2-8000-30560f906fe2"
Name          UUID                                   State      Protection State   NSID      Size      Replicas   Compression   ACL                                                                             Rebuild Progress   Missing Nodes Access
bench-vol-2   e05c6c1c-1062-4e26-963d-710cb1fe0ad6   Creating   Unknown            0         200 GiB   2          false         values:"nqn.2014-08.org.nvmexpress:uuid:6f63c000-1464-11f2-8000-30560f906fe2"
Name          UUID                                   State      Protection State   NSID      Size      Replicas   Compression   ACL                                                                             Rebuild Progress   Missing Nodes Access
bench-vol-3   42bda73c-4a12-40e6-9f12-db11f375f896   Creating   Unknown            0         200 GiB   2          false         values:"nqn.2014-08.org.nvmexpress:uuid:6f63c000-1464-11f2-8000-30560f906fe2"
Name          UUID                                   State      Protection State   NSID      Size      Replicas   Compression   ACL                                                                             Rebuild Progress   Missing Nodes Access
bench-vol-4   a1a23dd8-f9fb-4746-b502-b79fc8d31226   Creating   Unknown            0         200 GiB   2          false         values:"nqn.2014-08.org.nvmexpress:uuid:6f63c000-1464-11f2-8000-30560f906fe2"
Name          UUID                                   State      Protection State   NSID      Size      Replicas   Compression   ACL                                                                             Rebuild Progress   Missing Nodes Access
bench-vol-5   30f1050f-79b1-4c35-abc7-5ab148d10a3a   Creating   Unknown            0         200 GiB   2          false         values:"nqn.2014-08.org.nvmexpress:uuid:6f63c000-1464-11f2-8000-30560f906fe2"
Name          UUID                                   State      Protection State   NSID      Size      Replicas   Compression   ACL                                                                             Rebuild Progress   Missing Nodes Access
bench-vol-6   f67d9374-7487-48e0-ac07-bd2c98a9781e   Creating   Unknown            0         200 GiB   2          false         values:"nqn.2014-08.org.nvmexpress:uuid:6f63c000-1464-11f2-8000-30560f906fe2"

[root@vm-admin-01 ~]# lbcli list volumes --project-name default
Name          UUID                                   State       Protection State   NSID      Size      Replicas   Compression   ACL                                                                             Rebuild Progress   Missing Nodes Access
bench-vol-5   30f1050f-79b1-4c35-abc7-5ab148d10a3a   Available   FullyProtected     5         200 GiB   2          false         values:"nqn.2014-08.org.nvmexpress:uuid:6f63c000-1464-11f2-8000-30560f906fe2"   None
bench-vol-3   42bda73c-4a12-40e6-9f12-db11f375f896   Available   FullyProtected     3         200 GiB   2          false         values:"nqn.2014-08.org.nvmexpress:uuid:6f63c000-1464-11f2-8000-30560f906fe2"   None
bench-vol-1   6e329c5f-84fe-40da-9632-33cd3213e045   Available   FullyProtected     1         200 GiB   2          false         values:"nqn.2014-08.org.nvmexpress:uuid:6f63c000-1464-11f2-8000-30560f906fe2"   None
bench-vol-4   a1a23dd8-f9fb-4746-b502-b79fc8d31226   Available   FullyProtected     4         200 GiB   2          false         values:"nqn.2014-08.org.nvmexpress:uuid:6f63c000-1464-11f2-8000-30560f906fe2"   None
bench-vol-2   e05c6c1c-1062-4e26-963d-710cb1fe0ad6   Available   FullyProtected     2         200 GiB   2          false         values:"nqn.2014-08.org.nvmexpress:uuid:6f63c000-1464-11f2-8000-30560f906fe2"   None
bench-vol-6   f67d9374-7487-48e0-ac07-bd2c98a9781e   Available   FullyProtected     6         200 GiB   2          false         values:"nqn.2014-08.org.nvmexpress:uuid:6f63c000-1464-11f2-8000-30560f906fe2"   None

ACL = hostNQN nghĩa là chỉ client này được mount vào 6 vol × 200GiB vừa tạo ở trên, cluster tự rải primary đều 3 node.

[root@vm-admin-01 ~]# lbcli list volumes --project-name default -o json | grep -iE "name|node|primary"
      "nodeList": [
      "name": "bench-vol-5",
      "projectName": "default",
      "sourceSnapshotName": "",
      "qosPolicyName": "no-limit-policy",
      "primaryNodeUUID": "ef732732-4c12-5e22-8bf4-eb3dddbd0cc7",
      "missingNodesAccess": []
      "nodeList": [
      "name": "bench-vol-3",
      "projectName": "default",
      "sourceSnapshotName": "",
      "qosPolicyName": "no-limit-policy",
      "primaryNodeUUID": "5c5b6d5d-21c0-51e2-9c02-359936ae9c70",
      "missingNodesAccess": []
      "nodeList": [
      "name": "bench-vol-1",
      "projectName": "default",
      "sourceSnapshotName": "",
      "qosPolicyName": "no-limit-policy",
      "primaryNodeUUID": "ef732732-4c12-5e22-8bf4-eb3dddbd0cc7",
      "missingNodesAccess": []
      "nodeList": [
      "name": "bench-vol-4",
      "projectName": "default",
      "sourceSnapshotName": "",
      "qosPolicyName": "no-limit-policy",
      "primaryNodeUUID": "e8bc0737-a4af-5538-8952-3cdf63a20f96",
      "missingNodesAccess": []
      "nodeList": [
      "name": "bench-vol-2",
      "projectName": "default",
      "sourceSnapshotName": "",
      "qosPolicyName": "no-limit-policy",
      "primaryNodeUUID": "5c5b6d5d-21c0-51e2-9c02-359936ae9c70",
      "missingNodesAccess": []
      "nodeList": [
      "name": "bench-vol-6",
      "projectName": "default",
      "sourceSnapshotName": "",
      "qosPolicyName": "no-limit-policy",
      "primaryNodeUUID": "e8bc0737-a4af-5538-8952-3cdf63a20f96",
      "missingNodesAccess": []

Phân bố primary gần như cân bằng hoàn hảo — đúng cái cần để ép đều 3 node. Đối chiếu UUID node từ lbcli list nodes dưới:

[root@vm-admin-01 ~]# lbcli 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
Node UUID Node Volume primary
e8bc0737... oss-nvme-01 bench-vol-4, bench-vol-6
ef732732... oss-nvme-02 bench-vol-1, bench-vol-5
5c5b6d5d... oss-nvme-03 bench-vol-2, bench-vol-3

2 volume bench primary mỗi node — chia đều tăm tắp: - oss-nvme-01: vol-4, vol-6 - oss-nvme-02: vol-1, vol-5 - oss-nvme-03: vol-2, vol-3

Nghĩa là khi chạy fio song song lên 6 volume, IO sẽ đổ đều primary lên cả 3 node — đúng mục tiêu ép trần cluster.
Không cần tạo thêm hay đổi gì, LightOS tự cân bằng tốt.

================================================================

PHẦN C — KẾT NỐI CLIENT (discovery-client)

================================================================

Theo docs thì discovery-client tốt hơn nvme connect bằng tay vì nó tự cập nhật path khi add/remove node — đúng nhu cầu add oss-nvme-06 làm node sau này.

C.1 Cài discovery-client (trên oss-nvme-06)

Như đã nói ở trên thì discovery-client có repo riêng, khác với repo lbcli.

# prereq
dnf install -y yum-utils

# import GPG key của discovery-client
rpm --import 'https://dl.lightbitslabs.com/public/discovery-client/gpg.014E5C7FAFD89AEE.key'

# repo file — el/9 cho AlmaLinux 9
curl -1sLf 'https://dl.lightbitslabs.com/public/discovery-client/config.rpm.txt?distro=el&codename=9' | tee /etc/yum.repos.d/lightbits-discovery-client.repo
dnf makecache -y --disablerepo='*' --enablerepo='lightbits-discovery-client'

# cài discovery-client
dnf install -y discovery-client

Nếu codename=9 không có gói, thử codename=8 (gói thường tương thích el8/el9).

C.2 Initial setup

# xác nhận nvme-tcp loaded + multipath=Y (đã làm ở A, có thể kiểm lại)
[root@oss-nvme-06 ~]# lsmod | grep nvme
nvme                   77824  0
nvme_tcp              102400  0
nvme_fabrics           49152  1 nvme_tcp
nvme_core             274432  3 nvme_tcp,nvme,nvme_fabrics
nvme_keyring           20480  3 nvme_tcp,nvme_core,nvme_fabrics
nvme_auth              36864  1 nvme_core

[root@oss-nvme-06 ~]# cat /sys/module/nvme_core/parameters/multipath
Y # PHẢI = Y

# khởi động service
[root@oss-nvme-06 ~]# systemctl enable --now discovery-client
Created symlink /etc/systemd/system/multi-user.target.wants/discovery-client.service  /etc/systemd/system/discovery-client.service.

C.2b Kết nối qua config file

Cần subsysNQN (B.2) + hostNQN (B.1). Tạo file config liệt kê cả 3 data IP.
Port discovery = 8009 (khác với port data 4420) với -n là SUBNQN và -q là HOSTNQN.

mkdir -p /etc/discovery-client/discovery.d/
SUBNQN="nqn.2016-01.com.lightbitslabs:uuid:9304cdd3-0716-4e2f-b37f-bf2f590d6c4d"
HOSTNQN=$(cat /etc/nvme/hostnqn)
cat > /etc/discovery-client/discovery.d/oss-cluster.conf << EOF
-t tcp -a 10.237.95.101 -s 8009 -q $HOSTNQN -n $SUBNQN
-t tcp -a 10.237.95.102 -s 8009 -q $HOSTNQN -n $SUBNQN
-t tcp -a 10.237.95.103 -s 8009 -q $HOSTNQN -n $SUBNQN
EOF
systemctl restart discovery-client

discovery-client tự nvme discover + nvme connect và tự cập nhật path khi add/remove node.

C.2c Connect-all bằng CLI

Nếu không muốn dùng config file thì dùng command này:

discovery-client connect-all -t tcp -a 10.237.95.101 -s 8009 -q $(cat /etc/nvme/hostnqn) -p

-p: giữ kết nối persistent để monitor thay đổi.

C.3 Nvme connect tay nếu discovery-client vướng

Cần subsysNQN và connect tới cả 3 node để có đa đường:

SUBNQN="nqn.2016-01.com.lightbitslabs:uuid:..."
HOSTNQN=$(cat /etc/nvme/hostnqn)
for ip in 10.237.95.101 10.237.95.102 10.237.95.103; do
  nvme connect -t tcp -a $ip -s 4420 -n "$SUBNQN" -q "$HOSTNQN" --ctrl-loss-tmo -1
done

--ctrl-loss-tmo -1: cho phép reconnect vô hạn, tránh timeout khi node fail (cần cho test failover).

C.4 Verify kết nối

# thấy các /dev/nvmeXnY = volume bench
[root@oss-nvme-06 ~]# systemctl enable --now discovery-client
Created symlink /etc/systemd/system/multi-user.target.wants/discovery-client.service  /etc/systemd/system/discovery-client.service.
[root@oss-nvme-06 ~]# nvme list
Node                  Generic               SN                   Model                                    Namespace  Usage                      Format           FW Rev
--------------------- --------------------- -------------------- ---------------------------------------- ---------- -------------------------- ---------------- --------
/dev/nvme0n1          /dev/ng0n1            S6VANN0L107093       SAMSUNG MZQL215THBLA-00A07               0x1          0.00   B /  15.36  TB      4 KiB +  0 B   GDD5302Q
/dev/nvme1n1          /dev/ng1n1            S6VANN0L105917       SAMSUNG MZQL215THBLA-00A07               0x1          0.00   B /  15.36  TB      4 KiB +  0 B   GDD5302Q
/dev/nvme2n1          /dev/ng2n1            S6VANN0L105522       SAMSUNG MZQL215THBLA-00A07               0x1          0.00   B /  15.36  TB      4 KiB +  0 B   GDD5302Q
/dev/nvme3n1          /dev/ng3n1            S6VANN0L107106       SAMSUNG MZQL215THBLA-00A07               0x1          0.00   B /  15.36  TB      4 KiB +  0 B   GDD5302Q
/dev/nvme4n1          /dev/ng4n1            S6VANN0L105513       SAMSUNG MZQL215THBLA-00A07               0x1          0.00   B /  15.36  TB      4 KiB +  0 B   GDD5302Q
/dev/nvme5n1          /dev/ng5n1            S6VANN0L105524       SAMSUNG MZQL215THBLA-00A07               0x1          0.00   B /  15.36  TB      4 KiB +  0 B   GDD5302Q
/dev/nvme6n1          /dev/ng6n1            S6VANN0L107103       SAMSUNG MZQL215THBLA-00A07               0x1          0.00   B /  15.36  TB      4 KiB +  0 B   GDD5302Q
/dev/nvme7n1          /dev/ng7n1            S6VANN0L107041       SAMSUNG MZQL215THBLA-00A07               0x1          0.00   B /  15.36  TB      4 KiB +  0 B   GDD5302Q
/dev/nvme8n1          /dev/ng8n1            f973dc215df7aebb     Lightbits LightOS                        0x2        214.75  GB / 214.75  GB      4 KiB +  0 B   3.18
/dev/nvme8n2          /dev/ng8n2            f973dc215df7aebb     Lightbits LightOS                        0x3        214.75  GB / 214.75  GB      4 KiB +  0 B   3.18
/dev/nvme8n3          /dev/ng8n3            f973dc215df7aebb     Lightbits LightOS                        0x5        214.75  GB / 214.75  GB      4 KiB +  0 B   3.18
/dev/nvme8n4          /dev/ng8n4            f973dc215df7aebb     Lightbits LightOS                        0x6        214.75  GB / 214.75  GB      4 KiB +  0 B   3.18
/dev/nvme8n5          /dev/ng8n5            f973dc215df7aebb     Lightbits LightOS                        0x1        214.75  GB / 214.75  GB      4 KiB +  0 B   3.18
/dev/nvme8n6          /dev/ng8n6            f973dc215df7aebb     Lightbits LightOS                        0x4        214.75  GB / 214.75  GB      4 KiB +  0 B   3.18

# thấy đa đường (3 path tới subsystem)
[root@oss-nvme-06 ~]# nvme list-subsys
nvme-subsys0 - NQN=nqn.1994-11.com.samsung:nvme:PM9A3:2.5-inch:S6VANN0L107093
               hostnqn=nqn.2014-08.org.nvmexpress:uuid:6f63c000-1464-11f2-8000-30560f906fe2
               iopolicy=numa
\
 +- nvme0 pcie 0000:81:00.0 live

nvme-subsys1 - NQN=nqn.1994-11.com.samsung:nvme:PM9A3:2.5-inch:S6VANN0L105917
               hostnqn=nqn.2014-08.org.nvmexpress:uuid:6f63c000-1464-11f2-8000-30560f906fe2
               iopolicy=numa
\
 +- nvme1 pcie 0000:c3:00.0 live

nvme-subsys8 - NQN=nqn.2016-01.com.lightbitslabs:uuid:a1bf3a50-1b6e-47aa-b5c2-3e8ae454f916
               hostnqn=nqn.2014-08.org.nvmexpress:uuid:6f63c000-1464-11f2-8000-30560f906fe2
               iopolicy=numa
\
 +- nvme10 tcp traddr=10.237.95.102,trsvcid=4420,src_addr=10.237.95.106 live
 +- nvme8 tcp traddr=10.237.95.103,trsvcid=4420,src_addr=10.237.95.106 live
 +- nvme9 tcp traddr=10.237.95.101,trsvcid=4420,src_addr=10.237.95.106 live

nvme-subsys2 - NQN=nqn.1994-11.com.samsung:nvme:PM9A3:2.5-inch:S6VANN0L105522
               hostnqn=nqn.2014-08.org.nvmexpress:uuid:6f63c000-1464-11f2-8000-30560f906fe2
               iopolicy=numa
\
 +- nvme2 pcie 0000:c4:00.0 live

nvme-subsys3 - NQN=nqn.1994-11.com.samsung:nvme:PM9A3:2.5-inch:S6VANN0L107106
               hostnqn=nqn.2014-08.org.nvmexpress:uuid:6f63c000-1464-11f2-8000-30560f906fe2
               iopolicy=numa
\
 +- nvme3 pcie 0000:82:00.0 live

nvme-subsys4 - NQN=nqn.1994-11.com.samsung:nvme:PM9A3:2.5-inch:S6VANN0L105513
               hostnqn=nqn.2014-08.org.nvmexpress:uuid:6f63c000-1464-11f2-8000-30560f906fe2
               iopolicy=numa
\
 +- nvme4 pcie 0000:83:00.0 live

nvme-subsys5 - NQN=nqn.1994-11.com.samsung:nvme:PM9A3:2.5-inch:S6VANN0L105524
               hostnqn=nqn.2014-08.org.nvmexpress:uuid:6f63c000-1464-11f2-8000-30560f906fe2
               iopolicy=numa
\
 +- nvme5 pcie 0000:84:00.0 live

nvme-subsys6 - NQN=nqn.1994-11.com.samsung:nvme:PM9A3:2.5-inch:S6VANN0L107103
               hostnqn=nqn.2014-08.org.nvmexpress:uuid:6f63c000-1464-11f2-8000-30560f906fe2
               iopolicy=numa
\
 +- nvme6 pcie 0000:05:00.0 live

nvme-subsys7 - NQN=nqn.1994-11.com.samsung:nvme:PM9A3:2.5-inch:S6VANN0L107041
               hostnqn=nqn.2014-08.org.nvmexpress:uuid:6f63c000-1464-11f2-8000-30560f906fe2
               iopolicy=numa
\
 +- nvme7 pcie 0000:06:00.0 live

# Các block device mới
[root@oss-nvme-06 ~]# lsblk | grep nvme
nvme7n1   259:0    0    14T  0 disk
nvme2n1   259:1    0    14T  0 disk
nvme1n1   259:2    0    14T  0 disk
nvme6n1   259:3    0    14T  0 disk
nvme3n1   259:4    0    14T  0 disk
nvme0n1   259:5    0    14T  0 disk
nvme4n1   259:6    0    14T  0 disk
nvme5n1   259:7    0    14T  0 disk
nvme8n1   259:9    0   200G  0 disk
nvme8n2   259:11   0   200G  0 disk
nvme8n6   259:17   0   200G  0 disk
nvme8n4   259:19   0   200G  0 disk
nvme8n5   259:21   0   200G  0 disk
nvme8n3   259:25   0   200G  0 disk

Mỗi volume nên hiện 1 device với nhiều path (live + inaccessible). Đó là multipath.

================================================================

PHẦN D — DỌN DẸP

================================================================

Sau khi bench xong, để dọn dẹp sạch oss-nvme-06, làm như sau:

# trên client dừng discovery-client trước (nếu không nó tự connect lại)
systemctl disable --now discovery-client
rm -f /etc/discovery-client/discovery.d/oss-cluster.conf

# ngắt mọi kết nối nvme
nvme disconnect-all

# trên controller xóa volume bench
for i in $(seq 1 6); do lbcli delete volume --name bench-vol-$i --project-name default; done

Thứ tự quan trọng: dừng discovery-client trước khi disconnect, nếu không nó sẽ tự kết nối lại volume (vì -p persistent monitor).