หากเราคำนึงถึง Single Point of Failure การทำ HA หรือ High Availibity เป็นส่วนที่สำคัญอีกส่วนหนึ่งในระบบเครือข่ายคอมพิวเตอร์ เช่น หากมีเราเตอร์อยู่เพียงแค่ชุดเดียวในระบบเครือข่าย วันดีคืนดีเกิดเราเตอร์ตัวที่เรามีอยู่ ได้ตายในหน้าที่ ทุกการเชื่อมต่อที่อยู่ภายในไม่ว่าจะเป็น Host หรืออะไรก็ตามก็จะไม่สามารถออกสู่อินเตอร์เน็ต หรือเชื่อมต่อไปยัง HQ หรือสาขาต่าง ๆ ได้
ลองนึกภาพดูครับ หากธนาคารหนึ่งมีเราเตอร์ตัวเดียว และเราเตอร์ตัวนั้นเกิดปัญหาไฟฟ้าขึ้นมา UPS หรือตัว Stabilizer เอาไม่อยู่ ทำให้เราเตอร์นั้นเสียหาย ไม่สามารถใช้งานได้ วินาทีนั้นเอง การโอนเงิน, ถอนเงิน, การทำธุรกรรมทางด้านการเงินอาจจะเสียหายเป็นหลักสิบล้าน ร้อยล้านเลยก็เป็นไปได้ เพราะ Transaction ของธุรกรรมของธนาคารมีมูลค่ามหาศาล พนักงานไม่สามารถคีย์ข้อมูลเพื่อทำรายการให้กับทางลูกค้าได้
ดังนั้นการมีอุปกรณ์ที่ทำหน้าที่เป็น Active-Active หรือ Active-Standby จึงเป็นเรื่องที่สำคัญมาก ซึ่งจะส่งผลให้การทำงานไม่มีสะดุดหรือ Downtime เกิดขึ้น ธุรกิจก็ยังสามารถดำเนินไปได้อย่างต่อเนื่อง ถึงแม้ว่าจะมีอุปกรณ์เกิดความเสียหายขึ้น
ในบทความนี้เอง จึงพูดถึงเรื่องของการทำ Redundancy ระบบ เพื่อไม่ให้เกิด Single Point of Failure ขึ้น โดยเราต้องมีอุปกรณ์เพิ่มเติม และการคอนฟิกบางอย่างเพื่อช่วยการทำงานของระบบนั้น ๆ
หลายคนคงคุ้นเคยกับการทำ HSRP และ VRRP มาแล้ว แต่วันนี้เราจะมาดูว่า GLBP คืออะไร มันมีประโยชน์อย่างไร และคอนฟิกอุปกรณ์จะต้องทำอย่างไรบ้างครับ จะทยอยอธิบายไปทีละอย่างเพื่อให้เข้าใจหลักการ และการใช้คำสั่งต่าง ๆ บน Cisco IOS นะครับ เอาหล่ะ! เราไปเริ่มกันเลยนะครับ
GLBP คืออะไร?
GLBP (Gateway Load Balancing Protocol) เป็นโปรโตคอลของ Cisco ที่เกิดจากการสร้างและพัฒนาขึ้นมา หรือ Cisco proprietary พูดในอีกแนวนึงคือ Cisco ทำได้ยี่ห้อเดียว ถ้าจะใช้ GLBP ต้องซื้อ Cisco มาใช้งานครับ อย่างไรก็ตาม GLBP อัลกอริทึมจะไม่เหมือนกับ HSRP และ VRRP โดย GLBP จะช่วยให้ทราฟฟิกสามารถทำ Load Balancing ส่งผ่านเราเตอร์หลายตัวได้ แต่ HSRP และ VRRP นั้นในเราเตอร์ที่ทำงานทั้งสองแบบจะต้องทำ Manual หรือบังคับทราฟฟิกเจาะจงเท่านั้นว่าจะให้ผ่านไปยังเราเตอร์ตัวใด เช่น VLAN10 จะให้ทราฟฟิกไหลผ่านไปยัง R1 และ VLAN20 ทราฟฟิกจะไหลผ่านไปยัง R2 ซึ่งเป็นเราเตอร์อีกตัวหนึ่ง เป็นต้น
AVG/AVF
GLBP จะมี 2 องค์ประกอบหลัก คือ:
1. AVG (Active Virtual Gateway) – ทำหน้าที่เป็นตัวตอบกลับ ARP (ARP Responder) จากโฮสต์ต่าง ๆ ที่มายัง Virtual IP สำหรับกลุ่ม GLBP โดยการตอบกลับจะประกอบด้วย MAC Address เสมือน (Virtual MAC Address) สำหรับสมาชิกของกลุ่ม GLBP ซึ่ง AVG จะเป็นผู้มอบหมายให้นั่นเอง AVG จะถูกเลือกมาจากค่า Priority หากอุปกรณ์ไหนมีค่า Priority สูงกว่า ก็จะกลายเป็น AVG แต่หากค่า Priority เท่ากัน จะไปดูค่า IP Address หากอุปกรณ์ใดมีค่า IP Address มากกว่าหรือสูงกว่าก็จะทำหน้าที่เป็นผู้จัดการ หรือ AVG ครับ
2. AVF (Active Virtual Forwarder) – เป็นสมาชิกของกลุ่ม GLBP เรียนรู้จาก AVG โดยการส่ง Hello packet ครับ AVF คือ อินเทอร์เฟซของ GLBP ที่มีหน้าที่กำหนดเส้นทางการรับส่งข้อมูลสำหรับ Virtual IP การใช้งาน GLBP สามารถมี AVF ได้สูงสุด 4 ตัวต่อ 1 กลุ่ม และ AVF แต่ละตัวมี Virtual MAC Address ที่แตกต่างกัน แต่มี Virtual IP เดียวกัน นี่คือวิธีการสร้าง Load Balance ให้กับทราฟฟิกที่ไหลผ่านมานั่นเองครับ
Load Balancing
GLBP จะทำงานดังนี้: AVF แต่ละตัวจะมี MAC Address เสมือนซึ่งเรียนรู้จาก AVG เมื่อไคลเอนต์ส่ง ARP สำหรับ VIP (Virtual IP) AVG จะตอบกลับและระบุ MAC Address เสมือนของ AVF ซึ่งส่งผลให้ไคลเอ็นต์ต่างๆ ส่งทราฟฟิกไปยังเราเตอร์ที่แตกต่างกัน โดยขึ้นอยู่กับการตอบกลับของ ARP ที่ได้รับผ่านทาง AVG นั่นเองครับ
ตัวเลือกการทำ Load Balancing มี 3 แบบคือ:
1. Round Robin – AVG ตอบสนองต่อคำขอ ARP โดยใช้ AVF แต่ละตัวเท่าๆ กัน วนกันไป ในลักษณะคล้ายกับเจ้ามือที่แจกไพ่วนไปเรื่อย ๆ เท่า ๆ กัน นี่เป็นการทำงาน Default ของ GLBP เลยครับ หากเราไม่คอนฟิกโหมด Load Balancing อื่น ๆ ตัว GLBP ก็จะทำงานในโหมดนี้ครับ
2. Host-Dependent – กำหนดโฮสต์ หรือไคลเอนต์ที่จะส่งไปยัง AVF ใด ๆ อัลกอริทึมที่ขึ้นอยู่กับโฮสต์ ซึ่งจะรับประกันว่าเกตเวย์เดียวกันจะถูกใช้เสมอสำหรับไคลเอ็นต์เฉพาะ ตราบใดที่ไม่มีการเปลี่ยนแปลงหมายเลข AVF
3. Weighted – กำหนดน้ำหนักให้กับ AVF เพื่อให้สามารถรับส่งข้อมูลได้มากขึ้นสำหรับ AVF/เราเตอร์ที่กำหนด พูดง่าย ๆ คือใครน้ำหนักเยอะ ก็จะรับโหลดได้เยอะนั่นเอง
Additional
GLBP มีลักษณะบางอย่างที่คล้ายคลึงกันกับของ HSRP
STP – หากใช้สวิตช์ร่วมกับ Spanning Tree Protocol ไม่แนะนำให้ใช้ GLBP แนะนำให้ใช้ทั้ง HSRP หรือ VRRP แทน เช่นบน Nexus Switch ที่เรานำไปทำเป็น Spine และต้องการแยก Spanning ในแต่ละ VLAN ให้วิ่งคนละ Switch กัน ถ้าเป็นแบบนี้แนะนำให้ใช้ HSRP ครับ
VIP – Virtual IP ไม่สามารถเป็น IP Address ของอินเทอร์เฟซของเราเตอร์ได้ เช่นเดียวกันกับ HSRP และ VRRP เมื่อไหร่เราออกแบบ HSRP, VRRP และ GLBP สำหรับเราเตอร์ 2 ตัว เราจำเป็นจะต้องใช้ไอพีทั้งหมด 3 ตัวด้วยกันครับ สูตรก็คือ All IP = จำนวนของเราเตอร์ +1
Multicast Group – ข้อความจะถูกส่งไปยัง multicast group ที่เบอร์ Multicast Address เบอร์ 224.0.0.102
Timers – ใช้ Timers เดียวกันกับ HSRP (Hello=3 วินาที, Hold=10 วินาที)
Security – รองรับการทำ Authentication ทั้งแบบ MD5 และ Plain Text
Configuration
ภายในตัวอย่างการกำหนดค่า เราจะทำการตั้งค่า GLBP เบื้องต้น จากนั้นจึงกำหนด Weight ให้กับเราเตอร์ของเรา ซึ่งไดอะแกรมทั้งหมดจะเป็นไปตามรูปด้านล่างนี้ครับ
Initial Setup
R1
R1(config)#int gi0/2
R1(config-if)# glbp 10 ip 10.0.128.10
R1(config-if)# glbp 10 priority 120
R1(config-if)# glbp 10 preempt
R2(config)#int gi0/2
R2(config-if)# glbp 10 ip 10.0.128.10
R2(config-if)# glbp 10 priority 110
R2(config-if)# glbp 10 preempt
R3
R3(config)#int gi0/2
R3(config-if)# glbp 10 ip 10.0.128.10
R1(config-if)#do show glbp br
Interface Grp Fwd Pri State Address Active router Standby router
Gi0/2 10 - 120 Active 10.0.128.10 local 10.0.128.2
Gi0/2 10 1 - Active 0007.b400.0a01 local -
Gi0/2 10 2 - Listen 0007.b400.0a02 10.0.128.2 -
Gi0/2 10 3 - Listen 0007.b400.0a03 10.0.128.3 -
R2(config-if)#do show glbp br
Interface Grp Fwd Pri State Address Active router Standby router
Gi0/2 10 - 110 Standby 10.0.128.10 10.0.128.1 local
Gi0/2 10 1 - Listen 0007.b400.0a01 10.0.128.1 -
Gi0/2 10 2 - Active 0007.b400.0a02 local -
Gi0/2 10 3 - Listen 0007.b400.0a03 10.0.128.3 -
R3(config-if)#do show glbp br
Interface Grp Fwd Pri State Address Active router Standby router
Gi0/2 10 - 100 Listen 10.0.128.10 10.0.128.1 10.0.128.2
Gi0/2 10 1 - Listen 0007.b400.0a01 10.0.128.1 -
Gi0/2 10 2 - Listen 0007.b400.0a02 10.0.128.2 -
Gi0/2 10 3 - Active 0007.b400.0a03 local -
R1
R1(config-if)# glbp 10 weighting 3
R2
R2(config-if)# glbp 10 weighting 2
R3(config-if)# glbp 10 weighting 1
เราใช้คำสั่ง show glbp | include เพื่อตรวจสอบค่า Weight ต่าง ๆ ตามด้านล่างนี้
R1# show glbp | inc (Forwarder|weight)
Forwarder 1
Active is local, weighting 3
Forwarder 2
Active is 10.0.128.2 (primary), weighting 2 (expires in 9.152 sec)
Forwarder 3
Active is 10.0.128.3 (primary), weighting 1 (expires in 10.464 sec)
Note: หากเราต้องการที่จะ troubleshooting เราสามารถใช้คำสั่ง show glbp
ซึ่งเป็น Key command ที่สำคัญในการสรุปเพื่อตรวจสอบค่า GLBP ที่คอนฟิกให้กับเราเตอร์ทุกตัวได้ และสามารถแยกเป็น GLBP Group ในรายละเอียดต่าง ๆ ได้ครับ
ลองเอาฝึกทำ Lab กันดูนะครับ หรือคนที่กำลังจะนำ GLBP ไปใช้งานในองค์กร เชื่อว่าบทความจะเป็นประโยชน์กับเราอย่างแน่นอนครับ ฝากกดไลค์ กดแชร์ให้เพื่อน ๆ ที่เป็น Network Engineer, Network Admin, ผู้ดูแลระบบ กันด้วยนะครับ 🙂
อ้างอิง: https://www.mustbegeek.com/configure-glbp-in-cisco-ios-router
https://www.packetcoders.io/first-hop-redundancy-protocols-on-cisco-ios-glbp-part-3
https://www.cisco.com/c/en/us/td/docs/switches/lan/catalyst3650/software/release/16-2/configuration_guide/b_162_consolidated_3650_cg/b_162_consolidated_3650_cg_chapter_011000.pdf