Yêu cầu phần cứng tối thiểu cho Redis Cluster
Để triển khai Redis Cluster với kiến trúc 3 Master và 3 Replica (tổng cộng 6 node), bạn cần chuẩn bị hạ tầng vật lý hoặc ảo hóa đáp ứng các tiêu chuẩn sau để đảm bảo hiệu năng và độ tin cậy.
Mỗi node Redis yêu cầu tối thiểu 2 nhân CPU (vCPU) để xử lý các tác vụ I/O và mạng song song, cùng với 2GB RAM. Tuy nhiên, trong môi trường production, khuyến nghị tối thiểu là 4GB RAM cho mỗi node để dành bộ nhớ cho các bộ đệm hệ thống (buffer cache) và tránh tình trạng OOM (Out Of Memory).
Đĩa cứng (Disk I/O) là yếu tố quan trọng nhất cho tính năng Persistence (RDB/AOF). Bạn bắt buộc phải sử dụng SSD hoặc NVMe. Tốc độ ghi (Write IOPS) nên đạt tối thiểu 5000 IOPS cho mỗi node để đảm bảo thời gian đồng bộ dữ liệu (synchronization) giữa Master và Replica không bị trễ.
Bảng tổng hợp yêu cầu cho 6 node (3 Master + 3 Replica):
- CPU: 12 vCPU tổng (2 vCPU/node).
- RAM: 12GB tổng (2GB/node).
- Disk: SSD/NVMe, dung lượng tùy theo kích thước dataset, tối thiểu 50GB mỗi node.
- Mạng: Băng thông nội bộ (LAN) tối thiểu 1Gbps, độ trễ (latency) dưới 2ms giữa các node.
Verify: Kiểm tra cấu hình phần cứng hiện tại của máy chủ trước khi cài đặt bằng lệnh lscpu và free -h.
Cài đặt Ubuntu Server 24.04 và cấu hình Hostname
Bước đầu tiên là chuẩn bị 6 máy ảo hoặc vật lý cài đặt Ubuntu Server 24.04 LTS. Bạn cần tải file ISO từ trang chủ Ubuntu và boot máy chủ để cài đặt theo thông số mặc định, nhưng cần chú ý bật SSH server trong quá trình cài đặt để truy cập từ xa.
Sau khi cài đặt xong, bạn cần đổi tên (hostname) cho từng node để dễ quản lý trong cụm. Chúng ta sẽ đặt tên theo quy ước: redis-node-01 đến redis-node-06. Việc này giúp Redis Cluster tự động phát hiện và giao tiếp qua hostname thay vì IP cố định.
Thực hiện lệnh thay đổi hostname trên từng máy (thay thế NEW_HOSTNAME bằng tên tương ứng của node đó):
hostnamectl set-hostname redis-node-01
Áp dụng ngay lập tức bằng cách reload systemd hoặc đăng xuất và đăng nhập lại. Kết quả mong đợi là prompt terminal hiển thị tên mới thay vì ubuntu mặc định.
Tiếp theo, bạn cần cập nhật file /etc/hosts trên tất cả 6 node để ánh xạ IP địa chỉ công hoặc nội bộ sang hostname. Điều này cực kỳ quan trọng để các node trong cluster có thể giải quyết tên miền (DNS resolution) nội bộ mà không cần server DNS.
Vào file /etc/hosts trên mỗi node và thêm nội dung như sau (thay thế 192.168.1.X bằng IP thật của từng node):
192.168.1.1 redis-node-01
192.168.1.2 redis-node-02
192.168.1.3 redis-node-03
192.168.1.4 redis-node-04
192.168.1.5 redis-node-05
192.168.1.6 redis-node-06
Kết quả mong đợi: Chạy lệnh ping redis-node-02 từ node-01 và thấy phản hồi thành công, chứng tỏ DNS nội bộ đã hoạt động.
Cập nhật hệ thống và cài đặt công cụ cần thiết
Trước khi tiến hành biên dịch hoặc cài đặt Redis, hệ điều hành cần được cập nhật lên phiên bản mới nhất để vá các lỗ hổng bảo mật và đảm bảo tương thích với các thư viện hệ thống.
Thực hiện lệnh cập nhật repository và nâng cấp các gói hiện có trên tất cả 6 node:
sudo apt update && sudo apt upgrade -y
Quá trình này có thể mất vài phút. Kết quả mong đợi là thông báo "System is up to date" sau khi lệnh hoàn thành.
Chúng ta cần cài đặt các gói công cụ cơ bản để hỗ trợ việc tải xuống source code, biên dịch và quản lý mạng. Các gói bắt buộc gồm: build-essential (chứa gcc, make, g++), wget để tải file, và gcc-13 (hoặc phiên bản mới nhất) để biên dịch Redis 7.x/8.x trên Ubuntu 24.04.
Chạy lệnh cài đặt trên tất cả các node:
sudo apt install -y build-essential wget gcc-13 curl net-tools
Verify kết quả bằng cách kiểm tra phiên bản của các công cụ vừa cài đặt:
gcc --version && make --version && wget --version
Đảm bảo không có thông báo lỗi "command not found". Nếu thấy phiên bản gcc được hiển thị (ví dụ: GCC 13.x), bạn đã sẵn sàng cho phần biên dịch trong bài tiếp theo.
Giới thiệu kiến trúc Redis Cluster: Slot, Node Role và Gossip Protocol
Hiểu rõ kiến trúc là bước then chốt để cấu hình đúng đắn. Redis Cluster sử dụng mô hình phân tán ngang (horizontal sharding) thay vì mô hình Master-Slave đơn truyền thống. Kiến trúc này dựa trên 3 khái niệm cốt lõi: Hash Slots, Node Roles và Gossip Protocol.
Hash Slots (Các khe băm): Redis Cluster chia không gian dữ liệu thành 16384 slots (từ 0 đến 16383). Mỗi key trong Redis sẽ được tính toán hash và ánh xạ vào một slot cụ thể thông qua công thức CRC16(key) % 16384. Các slot này được phân bổ cho các node Master. Khi bạn thêm node mới, bạn chỉ cần di chuyển (migrate) một phần các slot từ node cũ sang node mới, không cần rebuild toàn bộ dữ liệu.
Node Roles (Vai trò Node): Trong cụm 6 node của chúng ta, sẽ có 3 node đóng vai trò Master và 3 node đóng vai trò Replica. Mỗi Master chịu trách nhiệm lưu trữ một phần các slots (ví dụ: Master 1 giữ slots 0-5461). Các Replica không lưu trữ slots độc lập mà sao chép dữ liệu từ Master tương ứng để đảm bảo tính sẵn sàng cao (High Availability). Nếu Master bị lỗi, một Replica sẽ tự động thăng chức (promote) thành Master mới.
Gossip Protocol (Giao thức đồn đại): Đây là cơ chế trao đổi thông tin trạng thái giữa các node. Thay vì một node trung tâm điều phối, mỗi node sẽ gửi tin nhắn trạng thái (heartbeat) đến một vài node ngẫu nhiên khác trong cụm. Nếu một node không nhận được phản hồi từ một node khác sau một khoảng thời gian nhất định, nó sẽ coi node đó là "Offline" và kích hoạt cơ chế tự chữa lành (failover). Cơ chế này giúp cluster có khả năng chịu lỗi mạng (network partition tolerance).
Để hình dung rõ hơn, trong bài thực hành Phần 4, bạn sẽ thấy lệnh CLUSTER NODES hiển thị danh sách các node, vai trò (master/replica), và dải slot mà mỗi node đang quản lý. Hiểu kiến trúc này giúp bạn phân bổ slot hợp lý và xử lý sự cố khi cluster bị split.
Verify kiến thức: Không cần lệnh thực thi, nhưng bạn cần nắm vững rằng 16384 slots là con số cố định, và mỗi key chỉ thuộc về duy nhất một slot. Hãy ghi nhớ điều này để tránh lỗi CROSSSLOT khi sử dụng các key liên quan đến nhau trong các bài học sau.
Điều hướng series:
Mục lục: Series: Triển khai Database Caching với Redis Cluster và Ubuntu 24.04
Phần 2: Tải xuống, biên dịch và cài đặt Redis từ nguồn code trên Ubuntu »