Hôm nay mình muốn kể lại cái lab EtherChannel mà mình mới làm xong, kiểu vừa làm vừa rút kinh nghiệm, chia sẻ cho ai đang mò mẫm giống mình đỡ mất công đoán mò.
Bài toán đặt ra là gì?
Sơ đồ thì đơn giản thôi: 3 con switch (SW1, SW2, SW3) đấu với nhau thành hình tam giác, mỗi cặp switch có 2 sợi cáp nối. Thay vì để 2 sợi đó chạy riêng lẻ (dễ bị loop, STP phải block bớt một đường phí phạm), người ta gom chúng lại thành một "kênh" logic duy nhất, gọi là EtherChannel (hay Port-channel). Vừa tăng băng thông, vừa tránh lãng phí đường truyền.
Cái hay của bài lab này là mỗi cặp switch lại dùng một kiểu bắt tay khác nhau:
Cấu hình thì có gì khó đâu, chủ yếu là nhớ logic
Cặp LACP (SW1 - SW2)
LACP có 2 chế độ: active và passive. Cứ tưởng tượng active là bên chủ động "alo, mình ghép kênh nhé", còn passive là bên ngồi im chờ người ta gọi tới mới trả lời. Cho nên ít nhất một bên phải active, chứ hai bên cùng passive thì... không ai gọi ai, kênh chẳng bao giờ lên.
Trong lab, SW1 để active, SW2 để passive:
SW1(config-if-range)# channel-protocol lacp
SW1(config-if-range)# channel-group 1 mode active
SW2(config-if-range)# channel-protocol lacp
SW2(config-if-range)# channel-group 1 mode passive
Cặp PAgP (SW1 - SW3)
PAgP thì logic y hệt LACP, chỉ đổi tên chế độ thôi: desirable (chủ động) và auto (bị động). Trong lab thì cả hai đầu SW1 và SW3 đều để desirable, coi như cả hai cùng chủ động bắt tay, chắc ăn hơn:
channel-group 3 mode desirable
Cặp không giao thức (SW2 - SW3)
Cái này thì "thô bạo" nhất: dùng mode on, tức là ép buộc luôn, không cần bắt tay hỏi han gì hết. Hai đầu cứ mặc định coi nhau là port-channel, ai không đồng ý thì... lỗi ráng chịu. Vì không có giao thức thương lượng nên phải cẩn thận, cấu hình sai một chút (khác VLAN, khác tốc độ, khác duplex...) là port-channel không lên, mà cũng chẳng ai báo lỗi rõ ràng cho mình biết tại sao.
Mẹo nhỏ rút ra: trước khi gộp interface vào channel-group, nhớ shutdown port trước, cấu hình xong rồi no shutdown lại. Làm vậy để tránh tình trạng port tự bầu chọn linh tinh trong lúc mình đang gõ lệnh dở dang.
Kiểm tra bằng lệnh nào?
Câu thần chú ở đây là:
show etherchannel summary
Nhìn vào cột Ports, nếu thấy chữ (P) đằng sau tên cổng (ví dụ E0/1(P)) nghĩa là cổng đó đã chui vào port-channel thành công rồi. Còn nếu vẫn còn chữ (I) (stand-alone) thì có nghĩa 2 đầu chưa nói chuyện được với nhau, phải soát lại cấu hình.
Sau khi có port-channel rồi thì làm gì tiếp?
Xong bước gộp cổng, các port-channel (Po1, Po2, Po3) được đưa lên trunk dot1q, tạo thêm VLAN 10, 20, 30. Từ đây port-channel hoạt động y như một cổng trunk vật lý bình thường, chỉ khác là nó gánh được lưu lượng của cả mấy sợi cáp gộp lại.
Phần thú vị nhất: chỉnh STP trên nền EtherChannel
Đây mới là phần mình thấy hay, vì port-channel không làm STP biến mất, nó chỉ coi cả bó cáp là MỘT cổng logic duy nhất thôi. Cho nên STP vẫn tính toán bình thường, chỉ là tính trên Po1, Po2, Po3 thay vì tính trên từng E0/x riêng lẻ.
Yêu cầu đặt ra khá vui:
Ví dụ ở VLAN 20, để Po3 của SW1 bị khóa, mình chỉ cần tăng cost trên chính Po1 của SW1 (đường ngược lại về hướng root là SW2):
SW1(config-if)# spanning-tree vlan 20 cost 13
Từ 12 tăng lên 13 thôi, đủ để STP thấy đường qua Po3 (đi vòng qua SW3) tốn kém hơn đường trực tiếp qua Po1, thế là Po3 tự động vào trạng thái Alternate Blocking, không cần đụng gì đến bên SW3 hết.
Cách suy nghĩ ở đây là: muốn khóa cổng nào, đừng chỉnh trực tiếp trên cổng đó, mà chỉnh cost/priority của con đường thay thế cho nó kém hấp dẫn đi, để STP tự thu xếp.
Vài điều rút ra sau khi làm xong lab
Bài toán đặt ra là gì?
Sơ đồ thì đơn giản thôi: 3 con switch (SW1, SW2, SW3) đấu với nhau thành hình tam giác, mỗi cặp switch có 2 sợi cáp nối. Thay vì để 2 sợi đó chạy riêng lẻ (dễ bị loop, STP phải block bớt một đường phí phạm), người ta gom chúng lại thành một "kênh" logic duy nhất, gọi là EtherChannel (hay Port-channel). Vừa tăng băng thông, vừa tránh lãng phí đường truyền.
Cái hay của bài lab này là mỗi cặp switch lại dùng một kiểu bắt tay khác nhau:
- SW1 - SW2: dùng giao thức LACP (chuẩn IEEE, ai cũng dùng được)
- SW1 - SW3: dùng giao thức PAgP (hàng riêng của Cisco)
- SW2 - SW3: không dùng giao thức gì cả, ép cứng bằng tay luôn
Cấu hình thì có gì khó đâu, chủ yếu là nhớ logic
Cặp LACP (SW1 - SW2)
LACP có 2 chế độ: active và passive. Cứ tưởng tượng active là bên chủ động "alo, mình ghép kênh nhé", còn passive là bên ngồi im chờ người ta gọi tới mới trả lời. Cho nên ít nhất một bên phải active, chứ hai bên cùng passive thì... không ai gọi ai, kênh chẳng bao giờ lên.
Trong lab, SW1 để active, SW2 để passive:
SW1(config-if-range)# channel-protocol lacp
SW1(config-if-range)# channel-group 1 mode active
SW2(config-if-range)# channel-protocol lacp
SW2(config-if-range)# channel-group 1 mode passive
Cặp PAgP (SW1 - SW3)
PAgP thì logic y hệt LACP, chỉ đổi tên chế độ thôi: desirable (chủ động) và auto (bị động). Trong lab thì cả hai đầu SW1 và SW3 đều để desirable, coi như cả hai cùng chủ động bắt tay, chắc ăn hơn:
channel-group 3 mode desirable
Cặp không giao thức (SW2 - SW3)
Cái này thì "thô bạo" nhất: dùng mode on, tức là ép buộc luôn, không cần bắt tay hỏi han gì hết. Hai đầu cứ mặc định coi nhau là port-channel, ai không đồng ý thì... lỗi ráng chịu. Vì không có giao thức thương lượng nên phải cẩn thận, cấu hình sai một chút (khác VLAN, khác tốc độ, khác duplex...) là port-channel không lên, mà cũng chẳng ai báo lỗi rõ ràng cho mình biết tại sao.
Mẹo nhỏ rút ra: trước khi gộp interface vào channel-group, nhớ shutdown port trước, cấu hình xong rồi no shutdown lại. Làm vậy để tránh tình trạng port tự bầu chọn linh tinh trong lúc mình đang gõ lệnh dở dang.
Kiểm tra bằng lệnh nào?
Câu thần chú ở đây là:
show etherchannel summary
Nhìn vào cột Ports, nếu thấy chữ (P) đằng sau tên cổng (ví dụ E0/1(P)) nghĩa là cổng đó đã chui vào port-channel thành công rồi. Còn nếu vẫn còn chữ (I) (stand-alone) thì có nghĩa 2 đầu chưa nói chuyện được với nhau, phải soát lại cấu hình.
Sau khi có port-channel rồi thì làm gì tiếp?
Xong bước gộp cổng, các port-channel (Po1, Po2, Po3) được đưa lên trunk dot1q, tạo thêm VLAN 10, 20, 30. Từ đây port-channel hoạt động y như một cổng trunk vật lý bình thường, chỉ khác là nó gánh được lưu lượng của cả mấy sợi cáp gộp lại.
Phần thú vị nhất: chỉnh STP trên nền EtherChannel
Đây mới là phần mình thấy hay, vì port-channel không làm STP biến mất, nó chỉ coi cả bó cáp là MỘT cổng logic duy nhất thôi. Cho nên STP vẫn tính toán bình thường, chỉ là tính trên Po1, Po2, Po3 thay vì tính trên từng E0/x riêng lẻ.
Yêu cầu đặt ra khá vui:
- VLAN 10: SW1 làm root, SW2 làm dự phòng (secondary root)
- VLAN 20: SW2 làm root, và phải chặn cổng Po3 của SW1
- VLAN 30: SW3 làm root, và phải chặn cổng Po2 của SW2
Ví dụ ở VLAN 20, để Po3 của SW1 bị khóa, mình chỉ cần tăng cost trên chính Po1 của SW1 (đường ngược lại về hướng root là SW2):
SW1(config-if)# spanning-tree vlan 20 cost 13
Từ 12 tăng lên 13 thôi, đủ để STP thấy đường qua Po3 (đi vòng qua SW3) tốn kém hơn đường trực tiếp qua Po1, thế là Po3 tự động vào trạng thái Alternate Blocking, không cần đụng gì đến bên SW3 hết.
Cách suy nghĩ ở đây là: muốn khóa cổng nào, đừng chỉnh trực tiếp trên cổng đó, mà chỉnh cost/priority của con đường thay thế cho nó kém hấp dẫn đi, để STP tự thu xếp.
Vài điều rút ra sau khi làm xong lab
- EtherChannel gom tối đa 8 cổng vật lý (thường gặp) thành 1 kênh logic, tùy switch mà giới hạn có thể khác nhau, nhưng con số phổ biến nhất khi học là 8.
- Có 3 cách để dựng EtherChannel: dùng LACP (chuẩn mở), dùng PAgP (riêng Cisco), hoặc ép cứng bằng tay (mode on, không giao thức nào cả). Mỗi cách có mode riêng nhưng logic bắt tay giống nhau: một bên chủ động, một bên bị động, hoặc ép buộc thẳng không cần thương lượng.
- Đừng quên shutdown trước khi gộp cổng, tránh lỗi lặt vặt.
- STP không "biến mất" khi có EtherChannel, nó chỉ chuyển sang tính toán trên port-channel logic. Vẫn dùng đúng bài STP quen thuộc: chỉnh priority để chọn root, chỉnh cost để chọn đường bị khóa.