Đây là cách Redis Cluster xử lý các lỗi nút:
Tự động chuyển đổi dự phòng
Khi nút chính của Redis Cluster bị lỗi, cụm sẽ tự động thăng cấp một trong các nút sao chép để nút chính đó trở thành nút chính mới. Quá trình chuyển đổi dự phòng này diễn ra tự động mà không cần bất kỳ sự can thiệp thủ công nào.
Các bước chính trong quá trình chuyển đổi dự phòng là:
1. Các nút khác trong cụm phát hiện rằng nút chính đã bị lỗi, thông qua giao thức tin đồn của cụm hoặc bằng cách cố gắng kết nối với nút.
2. Sau đó, cụm tổ chức một cuộc bầu cử giữa các nút bản sao cho nút chủ đó. Bản sao có dữ liệu cập nhật nhất được bầu làm bản chính mới.
3. Nút bản sao được bầu chọn sẽ được thăng cấp trở thành nút chính mới. Các bản sao khác sau đó được cấu hình lại để sao chép từ bản gốc mới.
4. Máy khách được chuyển hướng đến nút chính mới bằng cách sử dụng phản hồi lỗi `MOVED`, phản hồi này chứa ánh xạ giữa các vị trí với nút mới.
Vùng phủ sóng khe
Để duy trì khả dụng khi nút bị lỗi, Redis Cluster yêu cầu phần lớn các nút chính phải sẵn sàng và có thể giao tiếp. Điều này được gọi là duy trì "vùng phủ sóng".
Mỗi nút chính trong cụm chịu trách nhiệm cho một tập hợp con trong số 16.384 vị trí băm. Miễn là phần lớn các máy chính đều có sẵn và có thể phục vụ các vị trí được chỉ định của chúng thì cụm có thể tiếp tục hoạt động.
Nếu có quá nhiều nút chính bị lỗi khiến các nút chính còn lại không thể bao phủ toàn bộ phạm vi vùng băm, thì cụm sẽ không khả dụng cho đến khi các nút bị lỗi được phục hồi hoặc được thay thế.
Khuyến mãi bản sao
Redis Cluster dựa vào các nút bản sao để cung cấp tính sẵn sàng cao. Khi một nút chính bị lỗi, một trong các nút bản sao của nó sẽ tự động được thăng cấp để trở thành nút chính mới.
Bản sao có dữ liệu cập nhật nhất được bầu làm bản chính mới. Điều này đảm bảo tính nhất quán của dữ liệu được duy trì trong quá trình chuyển đổi dự phòng.
Xử lý Split-Brain
Redis Cluster sử dụng cách tiếp cận dựa trên số đại biểu để xử lý các phân vùng mạng và tránh các tình huống "phân chia não" trong đó cụm được chia thành nhiều cụm độc lập.
Nếu phần lớn các master không còn khả dụng, các nút còn lại sẽ từ chối yêu cầu của máy khách cho đến khi phân vùng được giải quyết. Điều này đảm bảo tính nhất quán của dữ liệu được bảo tồn.
Bằng cách tận dụng các cơ chế chuyển đổi dự phòng tự động và dựa trên số đại biểu này, Redis Cluster có thể cung cấp tính sẵn sàng và khả năng phục hồi cao khi gặp lỗi nút và phân vùng mạng.
Trích dẫn:[1] https://yifan-online.com/en/km/article/detail/16750
[2] https://stackoverflow.com/questions/63878562/two-failure-support-in-3-node-redis-cluster
[3] https://redis.io/docs/latest/Opera/oss_and_stack/management/scaling/
[4] https://redis.io/docs/latest/commands/cluster-nodes/
[5] https://github.com/lettuce-io/lettuce-core/issues/2318