Cấu hình lưu trữ iSCSI trên Linux: Hướng dẫn chi tiết thiết lập Target và Initiator

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

Hiệu năng lưu trữ thường chạm ngưỡng giới hạn sớm hơn bạn nghĩ. Dù bạn đang tinh chỉnh một HomeLab 3 node hay quản lý hơn 50 máy chủ production, các ổ đĩa cục bộ cuối cùng cũng sẽ cạn kiệt tài nguyên. Trong khi các chia sẻ NFS hoặc Samba hoạt động tốt cho lưu trữ file cơ bản, chúng thường gặp khó khăn khi bạn cần truy cập block-level (lưu trữ khối) thô cho các ổ đĩa ảo Proxmox hoặc cơ sở dữ liệu MySQL có tần suất giao dịch cao. Đó là lúc iSCSI xuất hiện.

Tôi đã xử lý việc di chuyển dữ liệu trong nhiều năm. iSCSI là lựa chọn tin cậy của tôi cho mạng hiệu năng cao vì nó xử lý các ổ đĩa từ xa giống như phần cứng cục bộ. Hãy coi nó như một dây nối dài ảo dài 50 mét cho ổ cứng của bạn. Trong hướng dẫn này, chúng ta sẽ thiết lập một iSCSI Target (nhà cung cấp lưu trữ) và một iSCSI Initiator (người tiêu thụ lưu trữ) bằng các công cụ Linux tiêu chuẩn.

Kiến trúc: Tại sao lại chọn Lưu trữ Khối (Block Storage)?

Các thiết lập NAS tiêu chuẩn sử dụng chia sẻ ở cấp độ file. Điều này có nghĩa là máy chủ quản lý hệ thống tệp (như EXT4 hoặc ZFS). Với iSCSI, máy chủ—gọi là Target—chỉ đơn giản là bàn giao các khối dữ liệu thô. Phía máy khách—gọi là Initiator—mới là bên định dạng và mount ổ đĩa.

Sự phân tách này rất mạnh mẽ. Nếu bạn đang chạy một cụm Kubernetes, các node của bạn cần lưu trữ khối dùng chung để chúng có thể tự định dạng. Vì iSCSI đóng gói các lệnh SCSI vào các gói tin TCP/IP, bạn có thể chạy lưu lượng này trên hạ tầng Ethernet 1GbE hoặc 10GbE hiện có mà không cần mua phần cứng Fiber Channel đắt tiền.

Cài đặt: Chuẩn bị môi trường

Chúng ta sẽ sử dụng hai máy cho thiết lập này. Tôi khuyên dùng Ubuntu 22.04 hoặc AlmaLinux 9. Một máy đóng vai trò là Target (Máy chủ lưu trữ) và máy còn lại là Initiator (Máy khách).

1. Trên Máy chủ Target

Chúng ta sẽ sử dụng targetcli-fb. Đây là một shell chuyên dụng quản lý hệ thống con LIO của nhân Linux.

# Ubuntu/Debian
sudo apt update && sudo apt install targetcli-fb -y

# RHEL/AlmaLinux
sudo dnf install targetcli -y
sudo systemctl enable --now target

2. Trên Máy khách Initiator

Máy khách cần daemon khám phá (discovery) và các tiện ích đăng nhập.

# Ubuntu/Debian
sudo apt install open-iscsi -y

# RHEL/AlmaLinux
sudo dnf install iscsi-initiator-utils -y

Cấu hình iSCSI Target (Máy chủ)

Chúng ta cần xác định những gì mình sẽ chia sẻ. Mặc dù bạn có thể chia sẻ một file thô, nhưng sử dụng LVM (Logical Volume Management) sẽ thông minh hơn nhiều. Nó cho phép bạn mở rộng ổ đĩa từ 100GB lên 200GB trong vài giây mà không cần unmount. Hãy mở console cấu hình:

sudo targetcli

Bước 1: Tạo Backstore

Backstore là thiết bị lưu trữ vật lý hoặc logic thực tế. Ở đây, chúng ta sẽ ánh xạ một phân vùng 20GB nằm tại /dev/sdb.

cd /backstores/block
create name=iscsi_disk1 dev=/dev/sdb

Bước 2: Xác định IQN

Mỗi thiết bị iSCSI yêu cầu một Tên định danh iSCSI (IQN) duy nhất. Nó tuân theo định dạng cụ thể: iqn.yyyy-mm.naming-authority:unique-id.

cd /iscsi
create iqn.2024-05.com.itfromzero:storage01

Bước 3: Ánh xạ LUN

Logical Unit Number (LUN) liên kết backstore của bạn với IQN mà bạn vừa tạo.

cd iqn.2024-05.com.itfromzero:storage01/tpg1/luns
create /backstores/block/iscsi_disk1

Bước 4: Bảo mật với ACL

Đừng bỏ qua bước này—đây là lớp phòng thủ chính của bạn. Bạn phải đưa Initiator cụ thể được phép kết nối vào danh sách trắng (whitelist). Đầu tiên, hãy lấy IQN của máy khách từ tệp /etc/iscsi/initiatorname.iscsi trên máy khách trước.

cd ../acls
create iqn.2024-05.com.itfromzero:client01

Bước 5: Ràng buộc Portal

Portal cho máy chủ biết IP nào cần lắng nghe. Sử dụng 0.0.0.0 để lắng nghe trên tất cả các interface, thường là ở cổng 3260.

cd ../portals
create 0.0.0.0 3260

Lưu công việc và thoát:

saveconfig
exit

Kết nối Initiator (Máy khách)

Bây giờ, hãy quay lại máy khách của bạn. Đầu tiên, hãy đảm bảo IQN của bạn khớp với IQN bạn đã đưa vào danh sách trắng trong ACL của Target. Chỉnh sửa tệp /etc/iscsi/initiatorname.iscsi:

InitiatorName=iqn.2024-05.com.itfromzero:client01

Khởi động lại các dịch vụ để cập nhật cấu hình:

sudo systemctl restart iscsid open-iscsi

Khám phá và Đăng nhập

Quét mạng của bạn để tìm máy chủ lưu trữ. Thay thế 192.168.1.100 bằng IP thực tế của máy chủ.

sudo iscsiadm -m discovery -t sendtargets -p 192.168.1.100

Sau khi quá trình khám phá thành công, hãy đăng nhập vào target cụ thể:

sudo iscsiadm -m node -T iqn.2024-05.com.itfromzero:storage01 -p 192.168.1.100 --login

Kiểm tra bằng lệnh lsblk. Bạn sẽ thấy một ổ đĩa mới toanh, thường là /dev/sdc. Nó đã sẵn sàng để phân vùng, định dạng và mount.

Xác minh & Mount vĩnh viễn

Tôi đã quản lý hàng chục máy chủ Linux VPS trong nhiều năm và rút ra một bài học kinh nghiệm: luôn xác minh sự ổn định. Chạy lệnh này để kiểm tra số liệu thống kê kết nối của bạn:

sudo iscsiadm -m session -P 3

Theo dõi các lỗi. Những “sự cố nhỏ” về mạng trên đường truyền 1GbE bận rộn có thể làm ngắt kết nối ổ đĩa iSCSI hoặc buộc chúng chuyển sang chế độ chỉ đọc. Nếu bạn thấy độ trễ tăng vọt, hãy cân nhắc bật Jumbo Frames (MTU 9000).

Kiểm tra sau khi khởi động lại

Để giữ cho điểm mount tồn tại sau khi khởi động lại, hãy sử dụng cờ _netdev trong tệp /etc/fstab. Điều này ngăn hệ thống cố gắng mount ổ đĩa trước khi mạng được khởi tạo hoàn toàn.

UUID=550e8400-e29b-41d4-a716-446655440000 /mnt/iscsi-storage ext4 defaults,_netdev 0 0

iSCSI cực kỳ mạnh mẽ nếu mạng của bạn đáp ứng được yêu cầu. Đối với môi trường production, tôi luôn tách biệt lưu lượng iSCSI trên một VLAN riêng hoặc một switch vật lý chuyên dụng. Điều này ngăn chặn việc các tác vụ sao lưu đột ngột làm giảm hiệu năng cơ sở dữ liệu. Chúc bạn thiết lập thành công!

Share: