Kỹthuật IPload balancing

Một phần của tài liệu Nghiên cứu đánh giá và phát triển các mô hình Cluster Server (Trang 29 - 38)

connections, nĩ chọn một server trong server pool để xử lý yêu cầu, duy trì trạng thái kết nối hiện tại và forward packets đến server đĩ. Tất cả các cơng việc này được thực hiện bên trong kernel vì vậy khả năng overhead trên load balancer là rất thấp. Do đĩ Load balancer cĩ khả năng tiếp nhận số lượng kết nối đến hệ thống nhiều hơn server thơng thường.

Các servers trong kiến trúc này cĩ thể được thêm vào để tăng khả năng scalability và high availability. Scalability là khả năng thêm vào hoặc bớt ra (adding or removing) một node trong hệ thống cluster mà trong suốt (transparent) với user. Khi một server được thêm vào thì performance của hệ thống tăng.

Một ưu điểm của clustering là tính dư thừa về phần cứng và phần mềm. High availability được cung cấp bằng cách kiểm tra các node (daemon hoặc service) bị lỗi, Load balancer cấu hình lại hệ thống để các yêu cầu tiếp theo sẽ khơng được chuyển đến node bị lỗi này. Chúng ta thường sử dụng monitor daemon chạy trên Load balancer để kiểm tra trạng thái của một node, nếu 1 server khơng hồi đáp ICMP Ping hoặc khơng hồi đáp service trong 1 khoảng thời gian nào đĩ thì Load balancer sẽ remove hoặc disable server bị lỗi này ra khỏi danh sách các server phục vụ, vì vậy Load balancer sẽ khơng điều phối một connection đến server bị lỗi( user sẽ khơng thấy hệ thống bị lỗi ).

Vấn đề được đặt ra là Load balancer là điểm mấu chốt (single point) cĩ thể gây ra lỗi cho tồn bộ hệ thống, một khi Load balancer bị lỗi thì hệ thống sẽ ngưng hoạt động do các yêu cầu khơng được điều phối đến các servers. Để ngăn ngừa lỗi xảy ra trên Load balancer chúng ta cần set up một backup Load balancer.

Hình 3 -13 Failover mức load balancer trong LVS

Hai heartbeat daemon chạy trên primary và backup chúng truyền thơng điệp heartbeat (health message) qua một kênh truyền heartbeat như đường serial line (sử dụng cable riêng). Khi mà heartbeat daemon trên backup khơng nghe được health message từ primary trong 1 khoảng thời gian xác định, nĩ sẽ sử dụng kỹ thuật ARP snoofing để sử dụng virtual IP address (của primary) và đảm nhiệm chức năng Load balancing thay cho primary. Khi mà primary Load balancer được phục hồi, một là nĩ sẽ trở thành backup loadbalancer luơn; hai là nĩ sẽ nhận lại IP ban đầu (bằng các thơng điệp heartbeat từ primary thay thế) và nĩ trở lại vai trị primary load balancer như ban đầu, và load balancer thay thế sẽ trở về vị trí backup như ban đầu. Đây là quá trình failover(take failover ) ở mức Load balancer.Tuy nhiên, khi quá trình này xảy ra thì bảng lưu trữ trạng thái các nối kết hiện tại sẽ bị mất và client phải thiết lập nối kết lại.

B.3 Các thành phần

Các thành phần chính của Linux virtual server được thể hiện trong hình sau:

Hình 3-14 Các thành phần trong LVS

“ VS Schedule & Control Module” đây là module chính của LVS, nĩ được “hook” ở hai nơi như hình, đặt ngay hướng các packets đi ngang qua bên trong kernel giữ lấy và rewritten lại packets để thực hiện IP load balancing. Nĩ được lookup trong “VS Rules Table” kiểm tra xem packet của một connection mới cĩ thuộc dịch vụ cung cấp load balancing khơng, và kiểm tra “Connection Hash Table” để nhận thấy gĩi tin này cĩ thuộc kết nối được thực hiện trước đĩ khơng. IPVSADM là giao diện người dùng cho phép quản trị virtual servers, nĩ sử dụng hàm setsockopt() để bổ sung các virtual server rules vào trong kernel (như loại dịch vụ đáp ứng,port, IP address,…), và đọc các rules này thơng qua/procfiles.

“Connection Hash Table” được thiết kế để cĩ thể lưu trữ thơng tin hàng triệu kết nối đồng thời, và mỗi entry lưu trữ chiếm 128 bytes bộ nhớ của loadbalancer. Ví dụ, một Load balancer 256Mbytes RAM free cĩ thể lưu trữ khoảng hai triệu kết nối cùng lúc. Kích thước của hash table cĩ thể được hiệu chỉnh bởi user cho phù hợp với ứng dụng của họ cung cấp, và client < protocol, address, port > được sử dụng như một hash key vì vậy xung đột hash rất thấp. Một đồng hồ nhảy chậm sẽ kiểm tra mỗi giây để thu gom (giải phĩng) các kết nối hết hạn.

LVS thực hiện lưu giữ các gĩi ICMP cho virtual services. Các gĩi imcoming ICMP packet sẽ được forward đến đúng realserver đáp ứng, và các outgoing ICMP packets nhận được từ realserver cũng sẽ được hiệu chỉnh cho phù hợp và gửi chúng ra ngồi đúng cho client. Điều này đặc biệt quan trọng để phát hiện lỗi và điều khiển cảnh báo giữa client và các servers như thơng tin về MTU.

LVS xây dựng 3 kỹ thuật IP load balancing, chúng cĩ thể được sử dụng cho nhiều loại hệ thống cluster, hoặc cĩ thể kết hợp chúng với nhau trong một cluster, ví dụ : các packets

được forward cho một vài server qua phương pháp LVS/NAT, một vài servers khác thì qua LVS/DR, và với các servers ở khoảng cách vật lý xa (kết nối WAN) sử dụng LVS/TUN.

C. Kỹ thuật IP load balancing

Kỹ thuật IP Load balancing mang lại tính sẵn sàng cao (high scalability), chúng ta phải patch lại Kernel Linux để nĩ hỗ trợ tính năng này. Gồm cĩ 3 loại: LVS/NAT, LVS/TUN (tunnelling), LVS/DR (direct routing). Một máy chạy Linux Virtual Server hoạt động như Load balancer cho các nối kết từ client. Thơng thường, các real server cung cấp các dịch vụ với cùng một nội dung. Các nội dung này được nhân bản (replicate) trên đĩa local của server hoặc hệ thống share-file.

C.1 Linux Virtual Server – NAT

Do sự giới hạn khơng gian địa chỉ của IPv4 và một vài lý do về bảo mật, nhiều network sử dụng địa chỉ IP riêng cho các máy trong mạng mình và nĩ khơng nối kết được Internet. NAT (Network Address Translation) được phát triển khi các host trong mạng cục bộ muốn truy cập đến hoặc được truy cập từ Internet. Cơ chế NAT dựa vào đặc điểm header của các packet cĩ thể điều chỉnh được và các client nối kết tới hệ thống server bằng một IP duy nhất-IP của NAT, các real server sử dụng các IP khác nhau kết nối với NAT server, trên NAT server sử dụng 2 network interfaces với một IP mạng riêng (cùng mạng với các server ) và một IP Internet (nối ra mạng ngồi). Đặc điểm này được sử dụng để xây dựng một virtual server.

Trong kiến trúc này Load balancer và các real server nối kết với nhau bằng switch hoặc hub. Hoạt động của LVS-NAT như sau: khi 1 user truy cập vào virtual service được cung cấp bởi cluster server, một request packet được gửi đến virtual IP address (IP chấp nhận yêu cầu cho virtual service ) đến Load balancer. Load balancer xác định địa chỉ đích và port number của packet nếu nĩ hợp lệ với virtual service được cung cấp bởi các virtual server dựa vào bảng rule table. Một real server sẽ được chọn để phục vụ bằng các thuật tốn Load balancing, thơng tin về kết nối này được lưu vào bảng hash table để ghi nhận kết nối. Tiếp theo, địa chỉ đích và port number của packet được re-written cho phù hợp với server được chọn và packet được forward đến server. Khi mà các packet tiếp theo của kết nối đã được thiết lập trước đĩ ( kết nối này được tìm thấy trong bảng hash table) và các packet này sẽ được re-written và forward đến cùng server đã phục vụ nĩ trước đĩ. Khi Load balancer nhận được response packet, nĩ re- write lại <source address, port number> cho phù hợp với virtual service và trả về cho client. Khi một kết nối bị đứt hoặc timeout, record ghi nhận thơng tin kết nối sẽ được xố bỏ khỏi bảng hash table.

Một ví dụ về LVS/NAT mơ tả như hình sau:

Hình 3-16 Một ví dụ LVS-NAT

Ta cĩ 3 server như hình trên, một máy cĩ 2 network interfaces làm Loadbalancer (external IP Address :202.103.106.5 và internal IP Address: 172.16.0.1), 2 máy cịn lại làm real server với IP lần lượt là : 172.16.0.2 và 172.16.0.3

Bảng sau mơ tả việc cấu hình phân tải cho các real server với 2 dịch vụ web và ftp:

Protocol Virtual IP Address Port Real IP address Port Weight

172.16.0.2 80 1

TCP 202.103.106.5 80 172.16.03 8000 2

Tất cả các kết nối đến IP address : 202.103.106.5 (địa chỉ Load balancer) ở port 80 sẽ được load balancer chuyển đến realserver IP address 172.16.0.2 port 80 và 172.16.0.3 port 8000. Như vậy đối với dịch vụ web sẽ được chia tải cho 2 real server này . Tương tự với dịch vụ ftp , các kết nối đến địa chỉ 202.103.106.5 ở port 21 sẽ được chuyển đến server IP address 172.160.0.3 port 21, trong trường hợp này thì ta chỉ cĩ một máy phục vụ ftp service. (Ghi chú: giá trị Weight trong bảng trên chỉ là một con số “integer” cho thấy khả năng xử lý của 2 máy cĩ sự khác nhau, giá trị mặc định bằng 1).

Hai real server trên cĩ thể chạy dưới bất kỳ hệ điều hành nào miễn là cĩ hỗ trợ TCP/IP và cấu hình default route của realservers phải là Virtual IP Address (172.16.0.1 trong trường hợp này).

Với trường hợp LVS/NAT thì việc rewrite lại các packets được thực hiện như sau: Các packets yêu cầu dịch vụ Web cĩ địa chỉ nguồn và địa chỉ đích:

SOURCE 202.100.1.2:3456 DEST 202.103.106.5:80

Load balancer sẽ chọn một real server phục vụ chẳn hạn 172.16.0.3:8000. Packet được rewriten và forward đến server : (adsbygoogle = window.adsbygoogle || []).push({});

SOURCE 202.100.1.2:3456 DEST 172.16.0.3:8000

Packet hồi đáp từ real server sau khi xử lý:

SOURCE 172.16.0.3:8000 DEST 202.100.1.2:3456

Và cuối cùng packet được rewriten lại tại load balancer để gửi trả kết quả về cho client:

SOURCE 202.103.106.5:80 DEST 202.100.1.2:3456

C.3 Linux Virtual Server – TUN (Tunnelling)

IP Tunneling(IP encapsulation) là cơng nghệ đĩng gĩi IP datagram vào một IP datagram, định hướng datagram từ một IP address đến một IP address khác. Cơng nghệ này cho phép xây dựng một virtual server mà Load balancer chuyển các request packet theo tunnel đến các server khác nhau, server xử lý các yêu cầu và trả kết quả trực tiếp về cho client.Vì vậy, dịch vụ cung cấp được xem như virtual service trên một IP address. Kiến trúc LVS-IP Tunneling được mơ tả như hình sau:

Hình 3-17 LVS-TUN

Với kiến trúc này real server cĩ thể cĩ real IP address của bất cứ mạng nào, trên cả mạng cĩ khoảng cách xa(WAN) nhưng phải hỗ trợ IP Tunneling protocol và tất cả phải cĩ tunnel device được cấu hình với VIP (virtual IP address-IP của Load balancer ) giống như cấu hình “ifconfig tunl0 VIP” trên Linux.

Hình 3-18 Hoạt động của LVS-TUN

Trong LVS/TUN Load balancer đĩng gĩi (encapsulation) packet với một IP datagram và forward nĩ đến server được chọn phục vụ. Khi server nhận packet đĩng gĩi này, nĩ mở gĩi (de-capsulation) và tìm trong packet địa chỉ VIP, sau đĩ xử lý yêu cầu và trả về kết quả trực tiếp cho user.

C.3 Linux Virtual Server – DR (Direct Routing)

Hình 3-19 LVS-DR

Trong kiến trúc này Load balancer và real servers phải thuộc cùng một segment của LAN như Hub/Switch. Virtual IP address được dùng chung cho Load balancer và Real servers. Tất cả các Real servers phải hỗ trợloopback alias interface(lo trên Linux) cấu hình với VIP, và Load balancer phải cĩ một network interface khác cấu hình với địa chỉ IP cĩ thể nhận được các packets từ bên ngồi.

Hình 3- 20 Hoạt động của LVS-DR

Load balancer chuyển hướng các request packets đến server được chọn để phục vụ bằng cách đơn giản thay đổi MAC address của frame dữ liệu sau đĩ chuyển chúng vào LAN. Khi server trong LAN nhận được packet, nĩ tìm trong packet địa chỉ phù hợp với IP trên loopback interface của nĩ, xử lý và trả kết quả trực tiếp về cho user. Điều chú ý là realserver phải được cấu hình cùng virtual IP address và khơng thực hiện hồi đáp arp.

Bảng so sánh giữa LVS/NAT, LVS/TUN, LVS/DR

LVS/NAT LVS/TUN LVS/DR

Server Any Tunneling Non-arp dev

Server network private LAN/WAN LAN

Server number Low (10~20) High (100) High(100)

Server gateway Load balancer Own router Own router

Một phần của tài liệu Nghiên cứu đánh giá và phát triển các mô hình Cluster Server (Trang 29 - 38)