Virtual server là một server ảo được xây dựng trên nhiều server thực, các server thực này dùng chung một public ip, do đó tương tác giữa người dùng với tập hợp server này không khác gì với một server bình thường. Request của người dùng được gởi đến load balancer(public ip của load balancer này là ip chung cho cả hệ thống server), load balancer sẽ chọn ra một real server và chuyển gói tin đến real server đó để xử lí。
Tại sao cần virtual server?
Có thể chỉ ra vài nguyên nhân sau đây:
Scalability: khi lượng request của người dùng tăng lên, vượt quá khả năng xử lí của hệ thống hiện tại, chúng ta có thể thêm vào một vài real server để đảm bảo hệ thống không “đi bụi”.
Availability: khi một trong các real server xảy ra sự cố, load balancer sẽ chọn các real server khác để xử lí request người dùng, đảm bảo không bị gián đoạn.
Cost-effectiveness: nếu chỉ dùng 1 server thì việc năng cấp sẽ rất khó khăn, chi phí cũng rất lớn. Trong khi đó, việc kết nối các real server hết sức đơn giản và chi phí thấp.
Linux Virtual Server (LVS) là một phần mềm cho phép chọn lựa và chuyển hướng request đến nhiều real server, đã được dùng trong nhiều site có lượng truy cập lớn như linux.com, sourceforge.net,…Việc lựa chọn real server nào là tùy thuộc vào thuật toán và kĩ thuật balance được dùng. Có 3 kỹ thuật cơ bản như sau:
NAT: load balancer và real servers kết nối với nhau thông qua switch hoặc hub. Khi người dùng gởi gói tin đến virtual server (ip của load balancer), load balancer sẽ kiểm tra gói tin có hợp lệ không (cổng trong gói tin có được phép truy cập không), nếu hợp lệ gói tin sẽ được viết lại địa chỉ đến và cổng (thay ip & port của load balancer thành của real server), sau đó gởi cho real server được chọn. Việc chọn lựa có thể tiến hành ngẫu nhiên hoặc luân phiên hoặc xét đến năng lực xử lí khác nhau của các real server, mục đích là đảm bảo công việc của các real server hài hòa, không real server nào bị quá tải. Gói tin phản hồi từ real server cho người dùng sẽ đi qua load balancer, được balancer viết lại địa chỉ cần đến và cổng cho đúng với đầu bên kia người dùng.
IP Tunneling: là một kĩ thuật đóng gói IP này vào gói IP khác. Như hình dưới đây, gói tin người dùng gởi đến load balancer được load balancer đóng gói gởi cho real server. Real server nhận được gói tin thì cũng biết được ip của người dùng, do đó có thể trả phản hồi trực tiếp đến người dùng mà không thông qua load balancer.
Direct Routing: card mạng của load balancer và real server phải được liên kết trên cùng một LAN. Load balancer sau khi nhận được gói tin, chỉ cần thay đổi địa chỉ MAC trong gói tin là có thể chuyển đến real server trong LAN, real server sẽ gởi kết quả trực tiếp đến người dùng, không thông qua load balancer.
Ưu khuyết điểm của 3 phương pháp trên có thể tổng kết như sau:
|
VS/NAT
|
VS/TUN
|
VS/DR
|
Server
|
any
|
Tunneling
|
Non-arp device
|
server network
|
private
|
LAN/WAN
|
LAN
|
server number
|
low (10~20)
|
High (100)
|
High (100)
|
server gateway
|
load balancer
|
own router
|
own router
|
Tham khảo thêm tại http://www.linuxvirtualserver.org