Lưu trữ Có thể Mở rộng với GlusterFS: Xây dựng Cụm máy chủ Chịu lỗi trên Linux

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

Bức tường Lưu trữ: Khi các Máy chủ Đơn lẻ Chạm Giới hạn

Tôi từng quản lý một dự án WordPress tăng trưởng từ vài trăm lượt truy cập lên 50.000 khách mỗi tháng gần như chỉ sau một đêm. Chúng tôi đã mở rộng theo chiều ngang (scale horizontally) bằng cách thêm ba node web và một bộ cân bằng tải (load balancer), nhưng ngay lập tức vấp phải một rào cản: tải lên tệp tin (media uploads).

Sử dụng các cron job rsync đã tạo ra độ trễ 60 giây giữa các máy chủ, nghĩa là người dùng có thể tải ảnh lên Node A nhưng lại gặp lỗi 404 khi Node B cố gắng phục vụ ảnh đó. Chúng tôi đã chuyển sang một máy chủ NFS trung tâm, nhưng khi tệp VPS duy nhất đó khởi động lại để cập nhật kernel, toàn bộ nền tảng đã bị “sập” trong năm phút. Chúng tôi đã đánh đổi hiệu suất lấy một điểm lỗi duy nhất (single point of failure) khổng lồ.

Hầu hết các hạ tầng đang phát triển cuối cùng đều gặp phải nút thắt cổ chai này. Bạn cần một hệ thống lưu trữ có khả năng mở rộng và luôn online ngay cả khi một ổ đĩa bị hỏng hoặc một máy chủ cần bảo trì. Lưu trữ cục bộ truyền thống tạo ra các “ốc đảo dữ liệu” (data silos) — những hòn đảo thông tin biến mất ngay khi phần cứng gặp lỗi. Nếu ứng dụng của bạn yêu cầu tính sẵn sàng cao (high availability), bạn không thể dựa vào thời gian hoạt động (uptime) của một máy duy nhất.

Tại sao NFS Tiêu chuẩn Không phải là Câu trả lời

NFS là lựa chọn tin cậy lâu đời trong thế giới Linux, nhưng nó có một “trần kính” (giới hạn ngầm). Nó không có tính phân tán thực thụ; đó là kiến trúc “một-nhiều” (one-to-many).

Nếu máy chủ NFS master gặp sự cố, mọi client kết nối với nó sẽ bị treo, thường dẫn đến thời gian chờ I/O (I/O wait) cao và lỗi “stale file handle” yêu cầu phải khởi động lại thủ công để khắc phục. Hơn nữa, khi bạn thêm nhiều máy chủ web, giao diện mạng duy nhất trên máy chủ NFS sẽ trở thành điểm nghẽn. Chúng ta cần một hệ thống mà bản thân lưu trữ là một cụm (cluster), trải rộng dữ liệu trên nhiều node để cân bằng tải và đảm bảo tính dự phòng (redundancy).

Chọn “Loại Thuốc Độc” của Bạn: Ceph vs. GlusterFS

Việc tìm kiếm hệ thống tệp phân tán phù hợp thường xoay quanh hai cái tên lớn:

  • Ceph: Gã khổng lồ của thế giới doanh nghiệp. Nó cực kỳ mạnh mẽ nhưng đi kèm với một lộ trình học tập gian nan. Trừ khi bạn đang quản lý hàng petabyte dữ liệu và có một đội ngũ chuyên dụng để giám sát bản đồ CRUSH, Ceph có thể cho cảm giác như đang dùng động cơ tên lửa để chạy máy cắt cỏ.
  • GlusterFS: Đây là lựa chọn thực tế cho hầu hết các kỹ sư DevOps. Nó tập hợp các hệ thống tệp hiện có (mà nó gọi là các “brick”) thành một volume ảo duy nhất. Nó dễ triển khai, mở rộng tuyến tính và chạy trên phần cứng tiêu chuẩn mà không cần kernel chuyên dụng.

Sau khi quản lý hàng chục môi trường production trong vài năm qua, tôi thấy rằng GlusterFS mang lại tỷ lệ ROI tốt nhất cho 90% các dự án quy mô vừa. Nó hoạt động âm thầm trong khi vẫn cung cấp “lưới an toàn RAID-1 qua mạng” mà các ứng dụng hiện đại yêu cầu.

Tiêu chuẩn Vàng: Volume Bản sao 3 Node

Để tránh tình trạng “split-brain” — kịch bản ác mộng nơi hai node không thống nhất về dữ liệu và làm hỏng volume — một cụm 3 node là thiết lập an toàn tối thiểu. Chúng ta sẽ sử dụng ba máy chủ Ubuntu để tạo một Replicated Volume. Điều này đảm bảo mỗi byte đều được ghi vào cả ba node đồng thời, mang lại khả năng chịu lỗi 2 node (2-node fault tolerance).

1. Mạng và Chuẩn bị

Sự nhất quán là chìa khóa. Sử dụng /etc/hosts để đảm bảo các node của bạn có thể giao tiếp với nhau ngay cả khi máy chủ DNS của bạn gặp sự cố.

# Thêm các dòng này vào /etc/hosts trên tất cả các node
10.0.0.10 storage01
10.0.0.11 storage02
10.0.0.12 storage03

Mẹo nhỏ: Luôn sử dụng ổ đĩa hoặc phân vùng riêng cho các brick của bạn. Lưu trữ dữ liệu Gluster trên phân vùng root là công thức dẫn đến hỏng hệ điều hành nếu bộ nhớ lưu trữ bị đầy. Giả sử ổ đĩa riêng của bạn được gắn (mount) tại /data/gluster.

2. Cài đặt Phần mềm

Hãy sử dụng PPA chính thức của Gluster. Các phiên bản trong kho lưu trữ mặc định của Ubuntu thường chậm hơn vài bản phát hành lớn, thiếu đi các bản sửa lỗi quan trọng.

sudo add-apt-repository ppa:gluster/glusterfs-11
sudo apt update
sudo apt install glusterfs-server -y
sudo systemctl enable --now glusterd

3. Xây dựng Nhóm Tin cậy (Trusted Pool)

Từ storage01, hãy mời hai máy chủ còn lại vào cụm. Quá trình bắt tay này thiết lập nhóm lưu trữ tin cậy (trusted storage pool).

sudo gluster peer probe storage02
sudo gluster peer probe storage03

Chạy sudo gluster peer status để xác nhận chúng đang ở trạng thái “Connected”.

4. Tạo Volume

Chúng ta sẽ đặt tên cho volume là shared_data. Việc thiết lập số lượng bản sao (replica count) là 3 có nghĩa là dữ liệu của bạn vẫn tồn tại ngay cả khi hai máy chủ bị lỗi cùng lúc.

# Tạo thư mục brick trên tất cả các node
sudo mkdir -p /data/gluster/gv0

# Chỉ chạy lệnh này on storage01
sudo gluster volume create shared_data replica 3 \
  storage01:/data/gluster/gv0 \
  storage02:/data/gluster/gv0 \
  storage03:/data/gluster/gv0

sudo gluster volume start shared_data

5. Kết nối phía Client

Việc mount volume khá đơn giản. Vẻ đẹp của Gluster client nằm ở sự thông minh của nó: ngay cả khi bạn trỏ nó vào storage01, nó vẫn lấy về một “volfile” chứa địa chỉ của tất cả các node. Nếu storage01 gặp sự cố sau đó, client sẽ tự động chuyển đổi dự phòng (failover) sang các node khác.

sudo apt install glusterfs-client -y
sudo mount -t glusterfs storage01:/shared_data /var/www/html/media

Những Bài học Xương máu từ Thực tế

Triển khai chỉ là ngày đầu tiên. Để giữ cho cụm máy chủ của bạn khỏe mạnh, hãy ghi nhớ những quy tắc sau:

  • Bắt buộc Quorum (Force Quorum): Sự cố mạng có thể cô lập một node. Hãy bật tính năng quorum phía máy chủ để đảm bảo một node “cô đơn” sẽ ngừng chấp nhận các lệnh ghi nếu nó không thể nhìn thấy phần lớn các node trong cụm. Điều này ngăn chặn sự sai lệch dữ liệu.
    sudo gluster volume set shared_data cluster.server-quorum-type server
  • Tốc độ Mạng Rất Quan trọng: Gluster sử dụng cơ chế sao chép đồng bộ (synchronous replication). Nếu mạng nội bộ của bạn là nút thắt cổ chai 100Mbps, việc ghi tệp sẽ mang lại cảm giác chậm chạp như đi bộ dưới bùn. Một mạng riêng 10Gbps chuyên dụng là lý tưởng cho lưu lượng lưu trữ.
  • Thử nghiệm Khởi động lại (The Reboot Test): Đừng tin tưởng thiết lập của bạn cho đến khi bạn đã thử phá hỏng nó. Hãy khởi động lại cứng một node và xác minh rằng ứng dụng web của bạn vẫn tiếp tục phục vụ hình ảnh mà không gặp trục trặc nào. Nếu nó bị treo, hãy kiểm tra các thiết lập timeout của bạn.

Lưu trữ phân tán không chỉ là việc có thêm nhiều gigabyte. Đó là việc có thể ngủ ngon hơn vào ban đêm khi biết rằng một lỗi phần cứng đơn lẻ sẽ không kích hoạt một cuộc gọi hỗ trợ khẩn cấp lúc 3 giờ sáng. GlusterFS là cầu nối đưa hạ tầng của bạn từ “máy chủ đơn lẻ mong manh” trở thành “cụm máy chủ bền bỉ”.

Share: