Dựa theo phần 6 của RFC 3074, có vẻ như quy trình chọn máy chủ cân bằng tải trong ISC DHCP như sau:
- Máy khách phát một thông báo khám phá, thông báo này trực tiếp đến máy chủ DHCP ở trạng thái hoạt động-hoạt động hoặc được chuyển tiếp đến cả hai máy chủ (chúng tôi đang bỏ qua khả năng mục 5.4 "HBA Dành cho Người giao nhận" cho ví dụ này).
- Máy chủ chỉ định ID giao dịch dịch vụ (STID) cho giao dịch để sử dụng nội bộ (?). Địa chỉ phần cứng của khách hàng (
chaddr
) được băm bằng thuật toán băm Pearson, thuật toán này lặp lại khóa (chaddr
) và thực hiện KHÔNG theo chiều bit đối với lần lặp trước đó và đặt kết quả là số được tìm thấy tại chỉ mục của giá trị đó trong bảng giả ngẫu nhiên gồm 256 số từ 1 - 255.
- Kết quả của hàm băm, một số từ 1 - 255, được so sánh với HBA, trong trường hợp máy chủ ISC DHCP chỉ có
tách ra
trường được xác định trong cấu hình HA, là một bitmap trong đó số 1 bắt đầu từ bên trái (hoặc bên phải, trên máy chủ phụ) khớp với giá trị của tách ra
trường cấu hình. Ví dụ, một tách ra
của 100 sẽ tương ứng với một HBA trên cơ sở như FF FF FF FF FF FF FF FF FF FF FF FF FF F0 00 00 00 00
và trên thứ cấp như 00 00 00 00 00 00 00 00 00 00 00 00 0F FF FF FF FF ...
. Nếu HBA có bit 1 tại chỉ mục đã cho (từ kết quả băm), thì máy chủ sẽ gửi thông báo ưu đãi DHCP cho máy khách.
Theo hiểu biết của tôi, miễn là HBA không có sự chồng chéo giữa các máy chủ, thì cả hai máy chủ cuối cùng đều không thể quyết định phục vụ máy khách.
TL;DR: thuật toán cân bằng tải DHCP đảm bảo rằng chỉ một máy chủ DHCP sẽ phản hồi cho một máy khách nhất định.
Câu hỏi của tôi bây giờ là tại sao tôi có một khách hàng nhận được ưu đãi từ cả hai máy chủ. Trên thực tế, tôi thấy rằng số lượng ưu đãi hiển thị trên giao diện bộ định tuyến của tôi gần gấp đôi số lượng yêu cầu, điều này ngụ ý rằng đây không chỉ là vấn đề đối với một khách hàng mà tôi có (nhưng tôi chưa xác nhận điều này). Ý tưởng duy nhất của tôi là kể từ khi cân bằng tải giây tối đa
trường trong phần HA của máy chủ của tôi là 3, có thể máy khách này nhận quá chậm nên máy chủ DHCP của đối tác nhảy vào.
Trong những điều kiện nào thì hai máy chủ DHCP cân bằng tải sẽ cung cấp cho khách hàng một địa chỉ?
Đây là nơi quá trình này xảy ra trong ISC Kea:
Nơi quyết định máy chủ được thực hiện:
https://gitlab.isc.org/isc-projects/kea/-/blob/master/src/hooks/dhcp/high_availability/query_filter.cc#L330
Hàm băm chaddr:
https://gitlab.isc.org/isc-projects/kea/-/blob/master/src/hooks/dhcp/high_availability/query_filter.cc#L384
Tôi không biết mã dành cho ISC DHCP tiêu chuẩn ở đâu.