Cấu hình địa chỉ IP và cổng kết nối cho từng node
Mỗi node trong Redis Cluster cần được cấu hình để chỉ lắng nghe (bind) trên địa chỉ IP nội bộ của nó, tránh việc mở cổng ra toàn bộ mạng công cộng gây rủi ro bảo mật.
Đường dẫn file cấu hình là /etc/redis/redis.conf. Chúng ta sẽ chỉnh sửa file này cho từng node (ví dụ: node 1, node 2, node 3).
Trong file cấu hình, tìm dòng bind 127.0.0.1 -::1 và thay thế bằng IP nội bộ của server hiện tại. Giả sử IP của 3 node lần lượt là 192.168.1.10, 192.168.1.11 và 192.168.1.12. Cổng mặc định là 6379.
Sử dụng lệnh nano để chỉnh sửa file cấu hình cho Node 1 (IP 192.168.1.10):
sudo nano /etc/redis/redis.conf
Sửa dòng bind thành:
bind 192.168.1.10
Làm tương tự cho Node 2 (IP 192.168.1.11):
sudo nano /etc/redis/redis.conf
Sửa dòng bind thành:
bind 192.168.1.11
Và cho Node 3 (IP 192.168.1.12):
sudo nano /etc/redis/redis.conf
Sửa dòng bind thành:
bind 192.168.1.12
Thao tác này đảm bảo Redis chỉ chấp nhận kết nối từ địa chỉ IP cụ thể đã khai báo, giúp giảm thiểu diện tích tấn công từ mạng bên ngoài.
Để xác nhận cấu hình đã lưu, bạn có thể kiểm tra lại nội dung file bằng lệnh:
grep "^bind" /etc/redis/redis.conf
Kết quả mong đợi là thấy dòng bind hiển thị đúng IP nội bộ của từng node tương ứng.
Thiết lập mật khẩu bảo vệ (requirepass)
Để bảo vệ dữ liệu, Redis Cluster yêu cầu thiết lập mật khẩu truy cập. Trong môi trường production, không được phép để Redis chạy ở chế độ không mật khẩu.
Chúng ta sẽ sử dụng tham số requirepass trong file cấu hình. Mật khẩu này sẽ dùng để xác thực khi các node trong cluster giao tiếp với nhau và khi client kết nối.
Trên tất cả các node (Node 1, Node 2, Node 3), mở file cấu hình và tìm dòng # requirepass foobared.
Thay thế bằng dòng khai báo mật khẩu thực tế. Ở đây ta dùng mật khẩu mẫu là MySecureClusterPass123!:
sudo nano /etc/redis/redis.conf
Xóa dấu # ở đầu dòng và thay đổi giá trị:
requirepass MySecureClusterPass123!
Tiếp theo, cấu hình tham số cluster-announce-ip và cluster-announce-port (nếu cần) nhưng quan trọng hơn là tham số cluster-require-full-coverage (mặc định là yes) để đảm bảo cluster chỉ hoạt động khi đủ số shard. Tuy nhiên, bước bảo mật cốt lõi là mật khẩu.
Trong Redis Cluster, các node giao tiếp với nhau cũng cần xác thực. Do đó, mật khẩu này phải giống nhau trên tất cả các node để cluster có thể hình thành.
Để kiểm tra xem cấu hình đã được nhận diện, chạy lệnh:
grep "^requirepass" /etc/redis/redis.conf
Kết quả mong đợi là dòng requirepass hiện rõ mật khẩu đã đặt, không có dấu # comment.
Cấu hình Protected Mode và kết nối nội bộ
Tham số protected-mode là một cơ chế bảo mật mặc định của Redis. Khi bật, nếu Redis không bind với địa chỉ cụ thể (bind 0.0.0.0) hoặc không có mật khẩu, nó sẽ từ chối kết nối từ bên ngoài.
Vì chúng ta đã cấu hình bind với IP nội bộ cụ thể ở bước 1, nên về mặt kỹ thuật, protected-mode sẽ không chặn các kết nối nội bộ hợp lệ.
Tuy nhiên, để đảm bảo an toàn tuyệt đối và tuân thủ quy tắc bảo mật, hãy giữ nguyên hoặc bật protected-mode:
sudo nano /etc/redis/redis.conf
Đảm bảo dòng protected-mode có giá trị yes:
protected-mode yes
Điều quan trọng nhất cho Redis Cluster là cấu hình cluster-enabled yes. Dòng này cho phép node hoạt động ở chế độ Cluster, hỗ trợ giao thức giao tiếp nội bộ.
Trong file cấu hình, tìm và đảm bảo dòng này được bật (không có dấu #):
cluster-enabled yes
Đồng thời, cần thiết lập cluster-config-file để Redis lưu trạng thái cluster vào file riêng. Tên file mặc định thường là nodes-6379.conf nằm trong thư mục /var/lib/redis/.
Đảm bảo dòng này hiện diện trong file cấu hình:
cluster-config-file nodes-6379.conf
Cấu hình này giúp Redis tự động quản lý trạng thái các node, shard và replica mà không cần can thiệp thủ công vào file cấu hình gốc sau khi khởi tạo.
Để xác minh các tham số Cluster đã được bật, sử dụng lệnh:
grep "^cluster-enabled" /etc/redis/redis.conf
Kết quả mong đợi là hiển thị cluster-enabled yes.
Khởi động dịch vụ và kiểm tra trạng thái
Sau khi hoàn tất cấu hình mạng và bảo mật trên tất cả các node, bước tiếp theo là khởi động lại dịch vụ Redis để áp dụng các thay đổi.
Sử dụng systemctl để khởi động lại dịch vụ trên từng node:
sudo systemctl restart redis
Lệnh này đọc lại file /etc/redis/redis.conf và khởi động tiến trình Redis với các tham số mới.
Kiểm tra trạng thái của dịch vụ để đảm bảo nó đang chạy và không bị lỗi khởi động:
sudo systemctl status redis
Kết quả mong đợi là trạng thái active (running). Nếu thấy failed, cần kiểm tra log lỗi bằng lệnh sudo journalctl -u redis -e.
Tiếp theo, kiểm tra khả năng kết nối có bảo mật. Thử kết nối bằng redis-cli mà không có mật khẩu:
redis-cli -h 192.168.1.10 ping
Kết quả mong đợi là thông báo lỗi NOAUTH Authentication required.. Điều này chứng tỏ cấu hình requirepass đã hoạt động đúng, từ chối kết nối chưa xác thực.
Thử kết nối lại với mật khẩu đã đặt:
redis-cli -h 192.168.1.10 -a MySecureClusterPass123! ping
Lưu ý: Trong môi trường thực tế, thay vì dùng -a, nên dùng -a chỉ cho testing hoặc dùng -a trong script có biến môi trường an toàn hơn, nhưng lệnh này vẫn chạy được để verify.
Kết quả mong đợi là hiển thị PONG. Điều này xác nhận node đã lắng nghe đúng IP, đúng cổng và chấp nhận kết nối đã xác thực.
Thực hiện các bước khởi động và kiểm tra này trên cả 3 node (192.168.1.10, 192.168.1.11, 192.168.1.12) để đảm bảo tất cả đều sẵn sàng cho bước tạo Cluster ở phần tiếp theo.
Đ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
Phần 4: Xây dựng và khởi tạo Redis Cluster với 3 Master và 3 Replica »