Redis Master-Slave là gì? Tổng quan về Redis Sentinel và Cluster
Redis là hệ quản trị cơ sở dữ liệu in-memory được sử dụng rộng rãi nhờ tốc độ truy xuất cực nhanh và tính năng đa dạng. Trong đó, kiến trúc Redis master-slave, hệ thống Redis Sentinel và Redis Cluster đóng vai trò quan trọng trong việc đảm bảo tính sẵn sàng, khả năng mở rộng và sao lưu dữ liệu.
Redis Master-Slave là gì?#
Redis master-slave là mô hình sao chép dữ liệu trong đó:
Master (chủ) chịu trách nhiệm ghi và xử lý các yêu cầu thay đổi dữ liệu.
Slave (bản sao) nhận bản sao dữ liệu từ master để phục vụ các truy vấn đọc, giúp phân tải và tăng khả năng chịu lỗi.
Khi master có sự cố, dữ liệu vẫn được giữ trên các slave và có thể chuyển đổi để duy trì hoạt động hệ thống.
Redis Sentinel hoạt động như thế nào?#
Redis Sentinel là hệ thống giám sát, tự động chuyển đổi và cảnh báo dành cho môi trường master-slave của Redis. Cách hoạt động chính của Sentinel bao gồm:
Giám sát liên tục trạng thái của các master và slave.
Tự động phát hiện master bị lỗi (failover).
Chuyển đổi slave thành master khi master gốc gặp sự cố.
Thông báo cho các client để họ kết nối lại với master mới.
Sentinel giúp hệ thống Redis có khả năng tự phục hồi và tăng tính sẵn sàng mà không cần can thiệp thủ công.
Redis Cluster là gì?#
Redis Cluster là kiến trúc phân tán giúp Redis mở rộng theo chiều ngang, bao gồm nhiều node hoạt động song song.
Redis Cluster chia dữ liệu thành các hash slot và phân phối đều trên các node.
Mỗi node có thể là master hoặc slave để đảm bảo tính chịu lỗi.
Cluster tự động quản lý dữ liệu, chuyển đổi master-slave khi có lỗi xảy ra.
Hỗ trợ mở rộng quy mô linh hoạt và cân bằng tải truy vấn.
Khác biệt giữa Sentinel và Cluster?#
| Tiêu chí | Redis Sentinel | Redis Cluster |
|---|---|---|
| Mục đích | Giám sát và chuyển đổi master trong master-slave | Phân tán dữ liệu, mở rộng quy mô theo chiều ngang |
| Kiến trúc | 1 master + nhiều slave | Nhiều master + slave, dữ liệu phân vùng trên các node |
| Khả năng mở rộng | Hạn chế, chỉ có thể tăng slave | Mở rộng quy mô bằng cách thêm node master mới |
| Cân bằng tải | Phụ thuộc client kết nối slave để đọc | Tự động cân bằng tải qua hash slot |
| Độ phức tạp | Thấp hơn | Phức tạp hơn |
Làm sao để set up Redis master-slave?#
Để thiết lập Redis master-slave, bạn thực hiện các bước cơ bản:
Cài đặt Redis trên cả hai server (master và slave).
Cấu hình file
redis.conftrên slave với dòng:
replicaof <IP_master> <port_master>
Khởi động lại Redis trên slave để nó tự động kết nối và sao chép dữ liệu từ master.
Client có thể kết nối đọc ghi với master, và đọc từ slave nếu cần.
Làm sao để set up Redis Cluster?#
Để thiết lập Redis Cluster:
Chuẩn bị nhiều node Redis (ít nhất 3 master để đảm bảo tính chịu lỗi).
Mỗi node Redis cần cấu hình file
redis.confbậtcluster-enabled yes.Khởi chạy tất cả các node.
Sử dụng công cụ
redis-cli --cluster createđể tạo cluster và phân phối hash slot tự động.Xác nhận cluster hoạt động ổn định, client sẽ kết nối với cluster thông qua các node.
Redis hỗ trợ replication chéo vùng không?#
Redis hỗ trợ replication chéo vùng (cross-region replication) nhưng không tích hợp sẵn tính năng này theo chuẩn. Thông thường, bạn cần cấu hình master-slave qua các vùng địa lý hoặc dùng công cụ bên ngoài để đồng bộ dữ liệu đa vùng.
Các dịch vụ Redis managed như AWS ElastiCache hoặc Azure Redis Cache có thể hỗ trợ replication đa vùng dễ dàng hơn.
Redis hỗ trợ multi-master không?#
Redis truyền thống không hỗ trợ multi-master (nhiều master ghi đồng thời) trong cùng một cluster. Việc ghi dữ liệu vẫn tập trung vào master chính của từng phân vùng hash slot.
Nếu cần multi-master thật sự, bạn sẽ phải dùng các giải pháp ngoài hoặc kết hợp Redis với các hệ thống dữ liệu phân tán khác.
Làm sao xử lý node bị lỗi trong Redis Cluster?#
Khi một node bị lỗi trong Redis Cluster:
Cluster tự động phát hiện node lỗi thông qua cơ chế heartbeat.
Nếu node là master, cluster sẽ tự động promote một slave thành master thay thế.
Các node khác trong cluster sẽ cập nhật trạng thái mới và client được hướng dẫn kết nối đến master mới.
Người quản trị có thể thêm hoặc loại bỏ node bằng lệnh
redis-cli --cluster add-nodehoặc--cluster del-node.
Redis Cluster có tự động cân bằng tải không?#
Redis Cluster có cơ chế tự động cân bằng tải đọc và ghi dựa trên việc phân phối dữ liệu theo các hash slot đều trên các master node.
Tuy nhiên, việc cân bằng lại khi có node mới hoặc node bị lỗi không hoàn toàn tự động mà cần thực hiện thao tác rebalancing bằng công cụ redis-cli --cluster rebalance.
Kết luận
Redis Master-Slave giúp sao lưu và phân tải đọc hiệu quả, Sentinel đảm bảo tự động chuyển đổi và giám sát.
Redis Cluster là giải pháp phân tán, mở rộng quy mô và tăng độ sẵn sàng dữ liệu tốt hơn.
Hai kiến trúc Sentinel và Cluster phục vụ các mục đích khác nhau và có những ưu nhược điểm riêng.
Việc thiết lập, quản lý và xử lý lỗi đều có công cụ hỗ trợ chuẩn mực từ Redis.
Redis không hỗ trợ multi-master ghi đồng thời và replication chéo vùng cần thêm cấu hình hoặc dịch vụ bổ sung.
Nếu bạn cần hướng dẫn chi tiết hơn hoặc tư vấn kỹ thuật về Redis Cluster, Sentinel hay Master-Slave, mình rất sẵn lòng giúp đỡ nhé!
Dưới đây mình viết thêm phần ví dụ cấu hình và hướng dẫn thực hành cơ bản để bạn dễ hình dung cách set up Redis master-slave, Sentinel và Cluster nhé.
Ví dụ cấu hình và hướng dẫn thực hành Redis Master-Slave, Sentinel, Cluster
1. Ví dụ set up Redis Master-Slave đơn giản#
Bước 1: Cài Redis trên 2 server (hoặc 2 port khác nhau trên cùng máy)#
Bước 2: Cấu hình master (redis.conf):#
- Mặc định Redis đã hoạt động như master, bạn không cần chỉnh gì thêm.
Bước 3: Cấu hình slave (redis.conf):#
replicaof 192.168.1.100 6379
Thay 192.168.1.100 bằng IP của server master.
Bước 4: Khởi động Redis slave, nó sẽ tự động kết nối và đồng bộ dữ liệu.#
Kiểm tra trên master:#
redis-cli info replication
Bạn sẽ thấy slave đã kết nối.
2. Ví dụ set up Redis Sentinel#
Giả sử bạn có 1 master và 2 slave đã cấu hình như trên.
Bước 1: Tạo file cấu hình sentinel.conf trên mỗi node Sentinel#
port 26379 sentinel monitor mymaster 192.168.1.100 6379 2 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 60000 sentinel parallel-syncs mymaster 1
mymaster: tên master group.192.168.1.100 6379: IP và port master Redis.2: số Sentinel cần đồng thuận mới chuyển master.
Bước 2: Chạy Sentinel trên mỗi node:#
redis-sentinel /path/to/sentinel.conf
Hoạt động:#
Sentinel giám sát master và slave.
Khi master chết, Sentinel tự động promote slave làm master mới.
Client phải cấu hình lại kết nối master mới hoặc dùng Sentinel API để lấy master hiện tại.
3. Ví dụ set up Redis Cluster (3 master + 3 slave)#
Bước 1: Chuẩn bị 6 node Redis (có thể trên cùng máy với các port khác nhau: 7000-7005)#
Bước 2: Cấu hình redis.conf mỗi node bật cluster:#
port 7000 cluster-enabled yes cluster-config-file nodes-7000.conf cluster-node-timeout 5000 appendonly yes
Thay port tương ứng cho từng node.
Bước 3: Khởi chạy các node Redis:#
redis-server /path/to/redis-7000.conf redis-server /path/to/redis-7001.conf ...
Bước 4: Tạo cluster:#
redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1
- Tham số
--cluster-replicas 1nghĩa là mỗi master có 1 slave.
Bước 5: Kết nối với cluster#
Bạn có thể kết nối client đến bất kỳ node nào trong cluster, Redis sẽ tự động phân phối lệnh đúng node chứa dữ liệu.
4. Xử lý node bị lỗi trong Redis Cluster#
Cluster tự động detect node lỗi.
Slave tương ứng được promote thành master.
Bạn có thể kiểm tra trạng thái cluster bằng:
redis-cli -c -p 7000 cluster nodes
- Dùng lệnh rebalance nếu muốn cân bằng lại dữ liệu:
redis-cli --cluster rebalance 127.0.0.1:7000