Tổng quan.
Nếu bạn có các máy ảo với HA chạy trên mỗi node và Corosync chạy chung mạng vật lý với các dịch vụ gây độ trễ cao, các node có thể không thể giao tiếp với nhau kịp thời, dẫn đến việc cụm bị phân mảnh và mất khả năng hình thành quorum (đồng thuận) giữa các node. Nếu một node không thể giao tiếp với phần còn lại của cụm, nó sẽ tự động khởi động lại (fence) sau khoảng 2 phút. Trong bối cảnh này, “fence” có nghĩa là node sẽ tự khởi động lại (reset) để đảm bảo tính nhất quán của hệ thống và tránh tình trạng dữ liệu bị xung đột hoặc lỗi khi các node không đồng bộ với nhau.
Do đó, nếu nhiều node gặp tình trạng mất kết nối cùng lúc, có thể dẫn đến hiện tượng cả cụm tự động khởi động lại mà không rõ nguyên nhân. Điều này có thể gây nhầm lẫn và khiến người quản trị tưởng rằng cụm khởi động lại một cách ngẫu nhiên
.
Giả sử bạn có một cụm (cluster) với 5 node: Node A, B, C, D và E. Cụm này được cấu hình HA (High Availability) để đảm bảo rằng nếu có lỗi xảy ra, hệ thống vẫn hoạt động một cách ổn định.
Một số ví dụ minh họa.
Với 5 node, để cụm duy trì hoạt động ổn định, cần có ít nhất 3 node để tạo quorum, tức là đủ đồng thuận để xác định rằng cụm vẫn hoạt động bình thường. Nếu một node bị mất kết nối và chỉ còn 4 node, hệ thống vẫn hoạt động được (vì vẫn còn 4/5). Tuy nhiên, nếu chỉ còn 2 node, cụm sẽ không thể duy trì quorum và có thể gặp lỗi.
Ví dụ về HA cho máy ảo.
Giả sử có 5 node (A, B, C, D, và E) trong cụm, với các máy ảo được bật HA:
- Một máy ảo đang chạy trên Node A. Nếu Node A gặp sự cố, các node còn lại sẽ phát hiện Node A không còn đáp ứng.
- Do cụm vẫn còn quorum (vì còn 4 node hoạt động), cụm sẽ tự động di chuyển máy ảo từ Node A sang một trong các node khác (ví dụ Node B) và khởi động lại máy ảo đó.
Trong trường hợp cụm bị chia thành hai nhóm như sau:
- Nhóm 1: Node A và Node B (2 node)
- Nhóm 2: Node C, D và E (3 node)
Trong trường hợp Nhóm 1 chỉ có 2 node (Node A và Node B) và nếu Node B gặp sự cố (chết), Node A sẽ không còn đủ quorum (thiếu node để đạt đồng thuận). Do đó, Node A sẽ tự khởi động lại (fence) sau khoảng thời gian 2 phút khi không thể kết nối với các node còn lại trong cụm.
Tóm tắt quá trình.
- Ban đầu:
- Nhóm 1: Node A và Node B (2 node) đang bị cách ly, không có kết nối với Nhóm 2 (Node C, D và E).
- Vì cụm yêu cầu ít nhất 3 node để có quorum, Nhóm 1 không thể hoạt động như một cụm độc lập, nhưng các node này vẫn “cố gắng duy trì kết nối” với nhau.
- Sự cố xảy ra trên Node B:
- Khi Node B gặp sự cố (mất kết nối hoặc ngừng hoạt động), Node A chỉ còn lại một mình, không thể liên lạc với bất kỳ node nào khác để đạt quorum.
- Quyết định của Node A:
- Sau khi không liên lạc được với Node B trong thời gian khoảng 2 phút, Node A sẽ tự khởi động lại (fence).
- Việc này nhằm đảm bảo rằng Node A không tiếp tục hoạt động độc lập, tránh trường hợp dữ liệu bị xung đột khi Node A có thể hoạt động ngoài sự kiểm soát của cụm.
Quá trình tự khởi động lại (fence) này giúp cụm bảo vệ tính nhất quán của dữ liệu, đảm bảo rằng chỉ các node trong nhóm có quorum mới được phép tiếp tục quản lý các tài nguyên, bao gồm các máy ảo có HA.
Khi Node B gặp sự cố mất kết nối với cụm và sau đó Node A tự khởi động lại (fence), các máy ảo (VM) có cấu hình HA trên Node A và Node B sẽ được xử lý như sau:
Máy ảo có cấu hình HA.
Các máy ảo có cấu hình HA (High Availability) sẽ tự động được khởi động lại trên các node khác trong cụm có quorum (tức là Nhóm 2 với Node C, D, và E). Điều này xảy ra vì:
- Khi cụm phát hiện Node A và Node B bị cách ly, nó sẽ xác định rằng các máy ảo HA trên hai node này không còn hoạt động ổn định.
- Cụm sẽ kích hoạt tính năng HA và di chuyển các máy ảo này sang các node còn lại (C, D, hoặc E) để tiếp tục duy trì dịch vụ.
Máy ảo không có cấu hình HA.
Các máy ảo không có cấu hình HA sẽ không được tự động khởi động lại trên các node khác. Những máy ảo này sẽ ở trạng thái dừng (down) và cần được khởi động lại thủ công sau khi Node A hoặc Node B được kết nối lại với cụm.
Vậy quá trình xử lý sẽ như sau:
- Khi Node A tự khởi động lại, các máy ảo có cấu hình HA trên cả Node A và Node B sẽ được cụm tự động khởi động lại trên các node khác trong nhóm đạt quorum (Node C, D, hoặc E).
- Các máy ảo không có HA sẽ vẫn ở trạng thái dừng, đợi đến khi Node A hoặc Node B quay lại và được quản trị viên khởi động lại thủ công.
Giả sử bạn có các máy ảo sau:
- VM1 và VM2 trên Node A với cấu hình HA.
- VM3 và VM4 trên Node B với cấu hình HA.
- VM5 trên Node A không có cấu hình HA.
Khi Node A và Node B bị cách ly:
- VM1, VM2, VM3, và VM4 sẽ tự động khởi động lại trên các node còn lại trong cụm (C, D hoặc E) nhờ vào tính năng HA.
- VM5 sẽ không được tự động khởi động lại và sẽ cần phải được quản trị viên khởi động thủ công khi Node A được kết nối lại.
Điều này đảm bảo các dịch vụ quan trọng có cấu hình HA vẫn được duy trì hoạt động dù có sự cố xảy ra với một số node trong cụm.
Để tránh tình trạng này, bước đầu tiên là thiết lập Corosync trên một đường truyền vật lý riêng. Ngoài ra, nên cấu hình nhiều links cho Corosync. Corosync có khả năng tự xử lý lỗi mạng và chuyển đổi giữa các links mà không cần sử dụng bonding, vì bonding thường chuyển đổi giữa các kết nối vật lý chậm hơn so với khả năng tự động chuyển của Corosync.