การทำ Web Server Load Balance แบบ Direct Routing (CentOS 6.4)

การทำ Web Server Load Balance แบบ Direct Routing (CentOS 6.4)

lvs-direct-routing

 

ทรัพยากรที่ใช้
ในที่นี้ผู้เขียนจะใช้ CentOS 6.4 ทั้งหมด 5 เครื่อง (VM) โดยตั้งชื่อตาม Diagram ดังนี้

Virtual IP : 192.168.0.215
lvs1 : 192.168.0.216
lvs2 : 192.168.0.217
rs1 : 192.168.0.218
rs2 : 192.168.0.219
rs3 : 192.168.0.220

ขั้นตอนที่ 1 ติดตั้ง Load Balancer

yum install piranha ipvsadm -y

กำหนด Firewall ให้ allow port ตามนี้

Piranha: 3636
HTTP: 80
Hearbeat: 539

เปิดการใช้งาน Piranha

service piranha-gui start

หลังจาก restart หรือ reboot ให้ service เหล่านี้เปิดขึ้นอัตโนมัติ

chkconfig piranha-gui on
chkconfig pulse on

กำหนด password สำหรับ Login เข้าส่วนจัดการของ piranha

piranha-passwd

เปิดให้ทำการ forward packet ผ่านเครื่อง Load Balance ได้ ซึ่งสามารถกำหนดได้ 2 วิธี

echo 1 > /proc/sys/net/ipv4/ip_forward

แก้ไขไฟล์ /etc/sysctl.conf โดยกำหนดให้ net.ipv4.ip_forward = 1
หลังจากนั้น ใช้คำสั่ง

 

sysctl -p

ขั้นตอนการตั้งค่า Load Balancer ใน Piranha

User : piranha
Password : ***** (จากคำสั่ง piranha-passwd)

21-6-2556 12-39-23

21-6-2556 12-40-55

virtual server

 

Round-Robin Scheduling
กระจายคำร้องเรียงไปตามลำดับของ server ที่มีอยู่ การใช้ algorith
m นี้ ทุก server จะมีความสำคัญเท่ากันหมด ไม่เกี่ยวข้องกับความสามารถของ server หรือความสามารถของ b
andwidth หรือ load แต่อย่างใด รูปแบบการกระจายคำร้องแบบ Round-Robin นี้ จะคล้ายกับ round-robin แบบ DNS แต่จะมีรายละเอียดมากกว่าเนื่องจากรูปแบบ
โครงข่ายของระบบ network และรูปแบบการกระจายคำร้องแบบ Round-Robin นี้ ไม่จะได้รับผลกระทบจากความไม่สมดุลย์จากคำร้องของ DNS cache query

 

Weighted Round-Robin Scheduling
การกระจายคำร้องขอจะเหมือนกับ round-robin แต่จะซับซ้อนกว่าตรงที่เราสามารถกำหนดน้ำหนักการส่งคำร้องไปยัง server ได้ในแบบ dynamic (ไม่ fix) เช่นเครื่อง server

แต่ละเครื่อง เรามี performance ที่จะรับ request ไม่เท่ากัน ก็สามารถกำหนด weight ได้ ทำให้ request ที่เข้ามา กระจายไปยัง server ได้เหมาะสมที่สุด

การกระจายคำร้องแบบ Weighted Round-Robin Scheduling จะเห็นผล หากเครื่อง server แต่ละตัว มีประสิทธิภาพที่แตกต่างกันมาก ๆ มากว่า server ที่มีประสิทธิภาพที่พอ ๆ กัน

 

Least-Connection (แบบเชื่อมต่อน้อยสุด)
รูปแบบการกระจายคำร้อง จะส่งไปยังเครื่อง server ที่มีคำร้องที่ยังคงทำงานอยู่น้อยสุด (fewer active connection) เนื่องจากระบบจะตรวจสอบการเชื่อมต่อกับ server แบบ realtive ผ่านทางตาราง IPVS

รูปแบบ Least-Connection เป็นรูปแบบการกระจายคำร้องแบบ dynamic ชนิดหนึ่ง และเหมาะสำหรับลักษณะคำร้องที่มีการเรียกใช้ที่มีความแตกต่างกันมาก ๆ เช่น อยู่ ๆ

ก็มีคำร้องมามาก ๆ อยู่ ๆ ก็เหลือน้อย เป็นต้น โดยรูปแบบการกระจายตัวลักษณะนี้ เหมาะสำหรับกลุ่มของ server ที่มีประสิทธิภาพพอ ๆ กัน

 

Weighted Least-Connections  (Default)
รูปแบบจะเหมือนกับ Least-Connection แต่ว่าเราจะกำหนดทิศทางการกระจาย load ไปยัง server ได้จำเพาะเจาะจงในแต่ละ server ในรูปแบบ weight หรือ factor

ทำให้การกระจาย load มีประสิทธิภาพมากขึ้น เหมาะสำหรับเครื่อง server ที่มา pool กัน มีประสิทธิภาพที่ต่างกัน

 

rs1

rs2

rs3

ซึ่งการ config piranha ทั้งหมดจะเก็บค่าไว้ที่ไฟล์

/etc/sysconfig/ha/lvs.cf

ซึ่งเราสามารถนำ config ไปใช่กับเครื่อง lvs2 ที่ทำงานเป็น passive ได้

scp /etc/sysconfig/ha/lvs.cf 192.168.0.217:/etc/sysconfig/ha/

หลังจากแก้ค่า config ใน piranha ทุกครั้งเราต้องทำการ restart pulse ซึ่งเป็นตัวจัดการ piranha

ทำการ restart ทั้ง 2 เครื่อง (LVS1,LVS2) ด้วยคำสั่ง

service pulse restart

ในส่วนของ web server

ติดตั้ง arptables_jf ให้กับ rs1 , rs2 , rs3

yum install arptables_jf -y

เครื่อง #rs1:

arptables -A IN -d 192.168.0.215 -j DROP
arptables -A OUT -d 192.168.0.215 -j mangle –mangle-ip-s 192.168.0.218

เครื่อง #rs2:

arptables -A IN -d 192.168.0.215 -j DROP
arptables -A OUT -d 192.168.0.215 -j mangle –mangle-ip-s 192.168.0.219

เครื่อง #rs3:

arptables -A IN -d 192.168.0.215 -j DROP
arptables -A OUT -d 192.168.0.215 -j mangle –mangle-ip-s 192.168.0.220

เซฟค่า config และให้ทำการ auto start ทุกครั้งที่มีการเปิดเครื่อง

service arptables_jf save
chkconfig arptables_jf on

หลังจากนั้นทำการ add virtual ip address ทั้ง 3 เครื่อง

ip addr add 192.168.0.215 dev eth0

เปิดไฟล์ /etc/rc.local และเพิ่มคำสั่งไว้ด้านล่างของไฟล์ เพื่อให้เปิดเครื่องทุกครั้งจะทำการ add virtual ip ให้อัตโนมัติ

/sbin/ip addr add 192.168.0.215 dev eth0

หลังจากนี้ทดสอบให้ Client เชื่อมต่อมาที่ 192.168.0.215

LVS1
ดูการ Routing ได้ด้วยคำสั่ง

ipvsadm -L
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.215:80 wlc
-> 192.168.0.218:2525 Route 1 3 1
-> 192.168.0.219:2525 Route 1 2 0
-> 192.168.0.220:2525 Route 1 1 0

ข้อมูลเพิ่มเติม
Direct Routing
Load Balancer Add-On via Direct Routing
Load Balancer Add-On Scheduling Overview