Các cơ chế cân bằng tải Load-Sharing trên Router
Tại R3, có thể tùy chỉnh để Router sử dụng một trong các cơ chế cân bằng tải sau:
Nếu CEF được cấu hình trên “inbound interface”, các gói tin packets sẽ được chuyển mạch bằng cơ chế “CEF switched” bất chấp cấu hình trên “outbound interface” là gì. Nếu “inbound interface” không được cấu hình để sử dụng cơ chế CEF, cấu hình trên các “exit interface” sẽ quyết định cơ chế chuyển mạch “switching method” là gì.
Per-Destination Load-Sharing sử dụng Fast Switching: IOS thực hiện “Per-Destination Load-Sharing” nếu “exit interfaces” cấu hình “Fast Switching” và CEF không được kích hoạt trên “inbound interface”. Fast-switching được kích hoạt mặc định theo hướng outbound cho dù cơ chế CEF có được kích hoạt trên interface hay không.
Với cơ chế Fast-Switching, tất cả các packets gửi tới một đích nhất định (specific destination) luôn luôn được gửi đi trên cùng một interface. Theo sơ đồ minh họa, tất cả lưu lượng traffic gửi tới 172.16.1.1 luôn luôn được gửi qua cùng một interface/link. Nếu 172.16.1.1 là một SQL database server thì cơ chế “Per-Destination Load-Sharing” không còn phù hợp nữa khiến cho lưu lượng trên “top link” chịu tải nhiều hơn so với lưu lượng traffic trên “bottom link”.
Per-Source-Destination Load-Sharing sử dụng CEF: Phương thức cân bằng tải phổ biến nhất là “Per-Destination Load-Balancing”, đây là cơ chế cân bằng tải mặc định nếu CEF được kích hoạt. Cơ chế cân bằng tải “CEF Per-Destination Load-Balancing” được thực hiện bằng cách “hashing” thông tin “source và destination IP address” tính ra được giá trị “unique hash ID” rồi sau đó dựa vào giá trị này mà các gói tin được phân phối một cách ngẫu nhiên (randomize) theo các hướng “end-to-end paths”.
Các hướng đi “Active paths” được đánh dấu internally các định danh “hash buckets” dao động từ 1 cho tới 16. Lựa chọn đường đi path-to-bucket được phân phối khác nhau tùy vào loại “load balancing” sử dụng và số lượng các “active paths”. Tất cả các traffic có cùng “source address” gửi tới cùng một “destination address” sẽ luôn di chuyển trên cùng một interface.
Đây là cơ chế cần bằng tải load-sharing có nhiều ưu điểm, nhưng lưu lượng traffic có thể vẫn chưa thật sự được phân phối đều ra tất cả các hướng. 16 buckets sẽ được phân phối đều cho tất cả các “active paths”. Nếu có “2 paths”, 16 buckets/2 paths = 8 hash sẽ được phân phối cho mỗi hướng đi path theo phương thức xen kẽ (interlace).
Lưu lượng traffic theo đó cũng được gửi đi theo cách thức tương tự: Top, bottom, top, bottom, top, bottom, top, bottom, ... Để kiểm tra tỉ lệ phân phối các bucket cho các “active path”, ta có thể thực hiện câu lệnh “hidden command” sau: Router# show ip cef internal
Tại R3, kiểm tra tỉ lệ phân phối các bucket cho “2 active path”.
Để kiểm tra kết quả chọn đường theo cơ chế cân bằng tải Per-Source-Destination, ta có thể sử dụng câu lệnh sau: Router# show ip cef exact-route
Kiểm tra kết quả chọn hướng trên R3.
Nếu có “3 paths” giữa R3 và R2 thì “16 hash buckets” không thể phân phối đều cho các “active paths” thì các buckets cuối cùng còn lại sẽ rơi vào trạng thái disabled. Nếu có “3 paths”, “16 hash buckets” sẽ được làm tròn thành số chia hết được cho 3 là “15 hask buckets”, từ đó 15/3 = 5 hash buckets sẽ được phân phối đều cho mỗi path theo phương thức xen kẽ (interlace).
Lưu lượng traffic trong tình huống này sẽ được phân phối theo các hướng 1st interface, 2nd interface, 3rd interface, 1st interface, 2nd interface, 3rd interface, ... Tỉ lệ phân phối hiển thị trong câu lệnh “show ip cef 172.16.1.1 internal” tương ứng Load-Distribution sẽ là 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2, giá trị “hash bucket 16” không được sử dụng và được gỡ bỏ (removed).
Per-Packet Load-Balancing sử dụng Process Switching: Đây là phương thức cân bằng tải “Load-Balancing” cổ điển nhất, mỗi packet sẽ được punt tới “processing level” để thực hiện tiến trình “destination look-up”, mỗi gói tin packet sẽ được phân phối đều ra tất các cả các interface lần lượt từng gói một.
Cơ chế cân bằng tải “Per-Packet Load-Balancing” sử dụng Process-Switching có nhiều nhược điểm đối với hệ thống mạng network lớn, CPU có thể bị lạm dụng quá mức, thời gian gói tin đến, lưu trữ vào bộ nhớ memory rồi gửi đi (in-memory data transfer time to & from the I/O Memory) sẽ tăng lên đáng kể, và một nhược điểm khác nữa là các gói tin packet có thể đến đích không đúng thứ tự. Do đó, CEF vẫn là cơ chế cân bằng tải khả thi nhất.
Per-Packet Load-Balancing sử dụng CEF: Cơ chế cân bằng tải “Per-Packet Load-Balancing” là một hình thái khác của cơ chế chuyển mạch CEF. Để kích hoạt cơ chế cân bằng tải “Per-Packet Load-Balancing”, ta thực hiện câu lệnh sau trên các “outgoing interfaces”: Router(config-if)# ip load-sharing per-packet
Với cơ chế cân bằng tải “Per-Packet Load-Balancing”, một packet được gửi trên liên kết link đầu tiên, packet tiếp theo sẽ được gửi trên liên kết link kế tiếp cho dù gói tin này có thông tin destination giống thông tin destination của gói đầu tiên, cơ chế này thường được áp dụng trên những đường có cost bằng nhau (equal-cost paths).
Cơ chế cân bằng tải “Per-Packet Load-Balancing” sẽ phân phối tải (load) đều trên tất cả các đường và có nhiều ưu điểm hơn so với các cơ chế cân bằng tải (switching mechanism) khác nhưng chi phí cho các thiết bị hỗ trợ cho cơ chế này cũng khá đắt đỏ. Bởi vì các gói tin packets tới cùng một destination theo các hướng khác nhau (different paths) nên có thể các packets sẽ đến đích không đúng thứ tự (out of order), và không phù hợp với một số ứng dụng applications nhất định.
Thực hiện câu lệnh sau để kiểm tra tỉ lệ cân bằng tải của cơ chế “Per-Packet Load-Balancing”. The output from the “show ip cef internal“: Router# show ip cef internal
Để khảo sát quá trình cân bằng tải Per-Packet ta sử dụng câu lệnh “show ip cef exact-route“.
Tại R3, có thể tùy chỉnh để Router sử dụng một trong các cơ chế cân bằng tải sau:
- Per-Destination Load-Sharing sử dụng Fast Switching
- Per-Source-Destination Load-Sharing sử dụng CEF
- Per-Packet Load-Balancing sử dụng Process Switching
- Per-Packet Load-Balancing sử dụng CEF
Nếu CEF được cấu hình trên “inbound interface”, các gói tin packets sẽ được chuyển mạch bằng cơ chế “CEF switched” bất chấp cấu hình trên “outbound interface” là gì. Nếu “inbound interface” không được cấu hình để sử dụng cơ chế CEF, cấu hình trên các “exit interface” sẽ quyết định cơ chế chuyển mạch “switching method” là gì.
Per-Destination Load-Sharing sử dụng Fast Switching: IOS thực hiện “Per-Destination Load-Sharing” nếu “exit interfaces” cấu hình “Fast Switching” và CEF không được kích hoạt trên “inbound interface”. Fast-switching được kích hoạt mặc định theo hướng outbound cho dù cơ chế CEF có được kích hoạt trên interface hay không.
Với cơ chế Fast-Switching, tất cả các packets gửi tới một đích nhất định (specific destination) luôn luôn được gửi đi trên cùng một interface. Theo sơ đồ minh họa, tất cả lưu lượng traffic gửi tới 172.16.1.1 luôn luôn được gửi qua cùng một interface/link. Nếu 172.16.1.1 là một SQL database server thì cơ chế “Per-Destination Load-Sharing” không còn phù hợp nữa khiến cho lưu lượng trên “top link” chịu tải nhiều hơn so với lưu lượng traffic trên “bottom link”.
Per-Source-Destination Load-Sharing sử dụng CEF: Phương thức cân bằng tải phổ biến nhất là “Per-Destination Load-Balancing”, đây là cơ chế cân bằng tải mặc định nếu CEF được kích hoạt. Cơ chế cân bằng tải “CEF Per-Destination Load-Balancing” được thực hiện bằng cách “hashing” thông tin “source và destination IP address” tính ra được giá trị “unique hash ID” rồi sau đó dựa vào giá trị này mà các gói tin được phân phối một cách ngẫu nhiên (randomize) theo các hướng “end-to-end paths”.
Các hướng đi “Active paths” được đánh dấu internally các định danh “hash buckets” dao động từ 1 cho tới 16. Lựa chọn đường đi path-to-bucket được phân phối khác nhau tùy vào loại “load balancing” sử dụng và số lượng các “active paths”. Tất cả các traffic có cùng “source address” gửi tới cùng một “destination address” sẽ luôn di chuyển trên cùng một interface.
Đây là cơ chế cần bằng tải load-sharing có nhiều ưu điểm, nhưng lưu lượng traffic có thể vẫn chưa thật sự được phân phối đều ra tất cả các hướng. 16 buckets sẽ được phân phối đều cho tất cả các “active paths”. Nếu có “2 paths”, 16 buckets/2 paths = 8 hash sẽ được phân phối cho mỗi hướng đi path theo phương thức xen kẽ (interlace).
Lưu lượng traffic theo đó cũng được gửi đi theo cách thức tương tự: Top, bottom, top, bottom, top, bottom, top, bottom, ... Để kiểm tra tỉ lệ phân phối các bucket cho các “active path”, ta có thể thực hiện câu lệnh “hidden command” sau: Router# show ip cef internal
Tại R3, kiểm tra tỉ lệ phân phối các bucket cho “2 active path”.
Để kiểm tra kết quả chọn đường theo cơ chế cân bằng tải Per-Source-Destination, ta có thể sử dụng câu lệnh sau: Router# show ip cef exact-route
Kiểm tra kết quả chọn hướng trên R3.
Nếu có “3 paths” giữa R3 và R2 thì “16 hash buckets” không thể phân phối đều cho các “active paths” thì các buckets cuối cùng còn lại sẽ rơi vào trạng thái disabled. Nếu có “3 paths”, “16 hash buckets” sẽ được làm tròn thành số chia hết được cho 3 là “15 hask buckets”, từ đó 15/3 = 5 hash buckets sẽ được phân phối đều cho mỗi path theo phương thức xen kẽ (interlace).
Lưu lượng traffic trong tình huống này sẽ được phân phối theo các hướng 1st interface, 2nd interface, 3rd interface, 1st interface, 2nd interface, 3rd interface, ... Tỉ lệ phân phối hiển thị trong câu lệnh “show ip cef 172.16.1.1 internal” tương ứng Load-Distribution sẽ là 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2, giá trị “hash bucket 16” không được sử dụng và được gỡ bỏ (removed).
Per-Packet Load-Balancing sử dụng Process Switching: Đây là phương thức cân bằng tải “Load-Balancing” cổ điển nhất, mỗi packet sẽ được punt tới “processing level” để thực hiện tiến trình “destination look-up”, mỗi gói tin packet sẽ được phân phối đều ra tất các cả các interface lần lượt từng gói một.
Cơ chế cân bằng tải “Per-Packet Load-Balancing” sử dụng Process-Switching có nhiều nhược điểm đối với hệ thống mạng network lớn, CPU có thể bị lạm dụng quá mức, thời gian gói tin đến, lưu trữ vào bộ nhớ memory rồi gửi đi (in-memory data transfer time to & from the I/O Memory) sẽ tăng lên đáng kể, và một nhược điểm khác nữa là các gói tin packet có thể đến đích không đúng thứ tự. Do đó, CEF vẫn là cơ chế cân bằng tải khả thi nhất.
Per-Packet Load-Balancing sử dụng CEF: Cơ chế cân bằng tải “Per-Packet Load-Balancing” là một hình thái khác của cơ chế chuyển mạch CEF. Để kích hoạt cơ chế cân bằng tải “Per-Packet Load-Balancing”, ta thực hiện câu lệnh sau trên các “outgoing interfaces”: Router(config-if)# ip load-sharing per-packet
Với cơ chế cân bằng tải “Per-Packet Load-Balancing”, một packet được gửi trên liên kết link đầu tiên, packet tiếp theo sẽ được gửi trên liên kết link kế tiếp cho dù gói tin này có thông tin destination giống thông tin destination của gói đầu tiên, cơ chế này thường được áp dụng trên những đường có cost bằng nhau (equal-cost paths).
Cơ chế cân bằng tải “Per-Packet Load-Balancing” sẽ phân phối tải (load) đều trên tất cả các đường và có nhiều ưu điểm hơn so với các cơ chế cân bằng tải (switching mechanism) khác nhưng chi phí cho các thiết bị hỗ trợ cho cơ chế này cũng khá đắt đỏ. Bởi vì các gói tin packets tới cùng một destination theo các hướng khác nhau (different paths) nên có thể các packets sẽ đến đích không đúng thứ tự (out of order), và không phù hợp với một số ứng dụng applications nhất định.
Thực hiện câu lệnh sau để kiểm tra tỉ lệ cân bằng tải của cơ chế “Per-Packet Load-Balancing”. The output from the “show ip cef internal“: Router# show ip cef internal
Để khảo sát quá trình cân bằng tải Per-Packet ta sử dụng câu lệnh “show ip cef exact-route“.
Thầy Bùi Quốc Kỳ – VnPro