Bài trước: MongoDB (9) - Đọc ghi dữ liệu trên Replica Set
1. Khi nào Replica Set thực hiện bầu chọn nút chính?
Trong môi trường MongoDB Replica Set, các tình huống sau sẽ kích hoạt cơ chế bầu chọn:
1. Nút chính gặp sự cố và ngừng hoạt động
2. Mất kết nối mạng đến nút chính (cơ chế kiểm tra trạng thái: mặc định nếu không phản hồi trong 10 giây sẽ coi như nút chính bị lỗi)
3. Người quản trị chỉ định nút chính thủ công
4. Thay đổi mức ưu tiên của các nút
2. Quy tắc bầu chọn?
1. Nút có số phiếu cao nhất và đạt được sự ủng hộ từ hơn một nửa số thành viên sẽ chiến thắng
Khi số lượng thành viên còn sống sót trong Replica Set ít hơn một nửa, hệ thống sẽ không thể tiến hành bầu chọn nút chính. Trong trường hợp này, hệ thống chỉ cho phép đọc dữ liệu mà không thể ghi.
2. Khi các nút có số phiếu bằng nhau và đều nhận được sự hỗ trợ từ đa số thành viên, nút có dữ liệu cập nhật nhất sẽ giành chiến thắng
Nút nào đồng bộ hóa dữ liệu từ nút chính nhanh hơn, giữ dữ liệu mới nhất sẽ chiến thắng trong cuộc đua.
3. Mức ưu tiên ảnh hưởng đáng kể đến khả năng nhận phiếu bầu
Phạm vi thiết lập mức ưu tiên là từ 0 đến 100, giá trị mặc định là 1. Việc cấu hình mức ưu tiên giúp các nút có ưu tiên cao hơn dễ dàng trở thành nút chính, trong khi các nút có ưu tiên thấp hơn khó trở thành nút chính hơn. (Can thiệp thủ công: ví dụ như máy chủ nào có cấu hình tốt hơn có thể đặt mức ưu tiên cao hơn cho nút tương ứng)
3. Mức ưu tiên nút?
1. Xem mức ưu tiên của nút
Sử dụng lệnh `rs.conf()` để xem mức ưu tiên của các nút.
Quan sát thấy: hai nút chính-phụ tại cổng `27017` và `27018` đều có mức ưu tiên là 1, nhưng nút trọng tài tại cổng `27019` lại có mức ưu tiên là 0. Điều này chứng tỏ nút trọng tài sẽ không bao giờ trở thành nút chính.
2. Thiết lập mức ưu tiên cho nút
Có thể chỉ định mức ưu tiên khi thêm nút mới, như sau:
rs.add({_id:0,host:'192.168.247.14:27017',priority:2})
Cũng có thể thiết lập mức ưu tiên cho nút đã tồn tại:
// Lấy cấu hình ban đầu
var config = rs.conf()
// Thiết lập mức ưu tiên cho nút trong cấu hình
config.members[0].priority = 99
// Cập nhật cấu hình
rs.reconfig(config)
Ví dụ muốn đặt mức ưu tiên cho cổng 27017 thành 5:
Cổng 27017 nằm ở vị trí index 0 trong mảng `members`. Sau đó thiết lập mức ưu tiên:
Sau đó cập nhật cấu hình `config`:
Tiếp tục truy vấn lại cấu hình hiện tại của Replica Set:
Thấy rằng mức ưu tiên của cổng `27017` đã thay đổi từ 1 thành 5. Nếu bây giờ điều chỉnh mức ưu tiên của nút phụ `27018` lên cao nhất, nút `27017` sẽ không còn là nút chính nữa, nút chính sẽ chuyển sang `27018`.