BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT HƯNG YÊN
TRẦN HUY ĐÔNG
NGHIÊN CỨU KỸ THUẬT NETWORK LOAD
BALANCING TRONG HỆ THỐNG MẠNG LINUX
ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC
HƯNG YÊN - 2014
TR
ẦN HUY
ĐÔNG NGHIÊN
CỨU KỸ
THUẬT
NETWO
RK
LOAD
BALAN
CING
2014
TRONG HỆ
THỐNG MẠNG
LINUX
Nghiên cứu kỹ thuật Network Load Balancing trong hệ thống mạng Linux
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT HƯNG YÊN
TRẦN HUY ĐÔNG
NGHIÊN CỨU KỸ THUẬT NETWORK LOAD
BALANCING TRONG HỆ THỐNG MẠNG LINUX
NGÀNH: CÔNG NGHỆ THÔNG TIN
SAN Storage Area Network Vùng mạng lưu trữ
SBL Server Load Balancing Cân bằng tải máy chủ
WAN Wide Area Network Mạng diện rộng
WRR Weight Round Robin Quay vòng có trọng số
6
Nghiên cứu kỹ thuật Network Load Balancing trong hệ thống mạng Linux
CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI
1.1 Lý do chọn đề tài
Ngày nay, công nghệ mạng và các hệ thống máy chủ đã có những bước phát
triển vượt bậc. Việc truy cập ứng dụng trên các server ngày càng phát triển nhiều và
rộng rãi. Vì thế các server mắc phải hiện tượng quá tải, lỗi hệ thống gây khó khăn
cho người dùng và người quản trị.
Một hệ thống mạng phải đảm bảo khả năng mở rộng tối ưu để đáp ứng được
một lượng lớn yêu cầu của người dùng mà không gây ra bất kỳ một vấn đề rủi ro
nào và đồng thời tăng khả năng chịu lỗi cho server. Đứng trước sự cạnh tranh về giá
thành, việc phát triển và xây dựng các phương pháp cân bằng tải trở nên vô cùng
hữu ích.
Từ thực tế như vậy em quyết định chọn đề tài “Nghiên cứu kỹ thuật Network
Load Balancing trong hệ thống mạng Linux” nhằm tìm hiểu các nguyên lý hoạt
động cũng như các thuật toán cân bằng tải để xây dựng một nền tảng vững chắc về
vấn đề cân bằng tải cho Web Server, từ đó góp phần thúc đẩy quá trình xây dựng
nên một bộ cân bằng tải hoạt động hiệu quả có khả năng đáp ứng nhu cầu cho các
Web Server.
1.2 Mục tiêu của đề tài
- Phân tích các kỹ thuật cân bằng tải Web Server.
- Cài đặt hệ thống Web Server trên nền tảng Linux.
- Triển khai cài đặt hệ thống cân bằng tải cho Web Server.
1.3 Giới hạn và phạm vi của đề tài
- Nghiên cứu lý thuyết về cân bằng tải đối với Webserver.
- Thực hiện bài Lab Cân bằng tải Webserver trên VMware.
điều khiển của một công cụ phân phối tải - Giải pháp cân bằng tải.
Cân bằng tải là một kỹ thuật để phân phối khối lượng công việc phải xử lý một
cách đồng đều trên hai hoặc nhiều máy tính về các vấn đề liên kết mạng, CPU, ổ
cứng để có thể sử dụng tài nguyên một cách tối ưu, giảm thiểu thời gian hoạt
động, tránh tình trạng quá tải.
Sử dụng nhiều dịch vụ với cân bằng tải thay vì một dịch vụ duy nhất có thể
làm tăng độ tin cậy thông qua các máy dự phòng. Trong đó, cân bằng tải mạng là
một kỹ thuật nhằm mở rộng hiệu năng của các máy chủ ứng dụng, chẳng hạn như
máy chủ Web, nhờ phân phối các yêu cầu của máy khách cho các máy chủ trong
nhóm. Khi đó, các máy chủ đều nhận gói IP đến nhưng gói chỉ được xử lý bởi một
máy chủ nhất định. Các máy chủ trong nhóm sẽ đồng thời đáp ứng các yêu cầu khác
nhau của các máy trạm. Với kỹ thuật cần bằng tải, quá trình xử lý và thời gian đáp
ứng yêu cầu của máy trạm sẽ nhanh hơn nhiều.
2.1.2 Chức năng của cân bằng tải
Cân bằng tải có một số chức năng cơ bản sau:
- Chặn lưu lượng mạng (chẳng hạn lưu lượng web) đến một trang web. Bản
thân thiết bị cân bằng tải có thể là một Proxy hay một Firewall tầng ứng dụng
(Application Layer), nó sẽ là đối tượng đầu tiên nhận các yêu cầu trước khi chia tải,
do đó, chức năng này được coi như là thiết yếu của một cân bằng tải.
9
Nghiên cứu kỹ thuật Network Load Balancing trong hệ thống mạng Linux
- Tách các lưu lượng thành các yêu cầu riêng biệt và quyết định máy chủ nào
nhận các yêu cầu đó. Đây là chức năng chủ chốt của cân bằng tải. Tùy vào thuật
toán áp dụng mà sẽ có từng cách thức khác nhau để phân chia cụ thể cho mỗi máy
chủ.
- Duy trì một cơ chế ở những máy chủ đang sẵn sàng. Giữa cân bằng tải và
máy chủ luôn phải có liên lạc với nhau (Keep Alive) để biết được máy chủ đó còn
“sống” hay không.
- Cung cấp khả năng dự phòng bằng cách sử dụng nhiều hơn một kịch bản
fail- over.
cách dễ dàng mà không ảnh hưởng đến hoạt động của hệ thống, giữ cho hệ thống
luôn có tính sẵn sàng cao.
2.2.2 Tính linh hoạt (Flexibility)
Hệ thống cho phép bổ sung và loại bỏ các máy chủ bất kỳ khi nào cần và hiệu
quả ngay tức thì. Thực tế, việc này không làm gián đoạn tới hoạt động của cả hệ
thống, mà chỉ tại một điểm (node) trong hệ thống đó. Điều này cho phép duy trì, sửa
chữa bất kỳ máy chủ nào trong hệ thống (thậm chí trong giờ cao điểm) mà ít tác
động hoặc không có tác động nào tới hệ thống. Một cân bằng tải (Load Balancer)
cũng có thể trực tiếp điều khiển lưu lượng mạng bằng cách sử dụng tập tin cookie,
phân tích cú pháp URL, các thuật toán tĩnh/động để tìm ra cách phân tải tối ưu
cho hệ thống. [8]
2.2.3 Khả năng sẵn sàng cao (High Availability)
Hệ thống sẽ liên tục kiểm tra trạng thái của các máy chủ trong hệ thống và tự
động “loại” bất kỳ máy chủ nào không “trả lời” trong một chu kỳ, cũng như tự động
bổ sung máy chủ đó ngay khi nó hoạt động trở lại. Quá trình này là hoàn toàn tự
động, thông qua cơ chế giao tiếp của cân bằng tải và các máy chủ, không cần có sự
tham gia điều khiển trực tiếp của người quản trị. Do dó, một hệ thống cân bằng tải
11
Nghiên cứu kỹ thuật Network Load Balancing trong hệ thống mạng Linux
hướng đến tính dự phòng cho thiết bị chính trong trường hợp có thiết bị nào đó bị
“hỏng”. [8]
2.2.4 Tính đáp ứng (Responsiveness)
Tính đáp ứng ở đây có thể hiểu là khả năng phục vụ người dùng của hệ thống
làm sao để hệ thống có thể phục vụ người dùng tại mọi thời điểm và thời gian đáp
ứng là bao lâu. Hệ thống gửi response về càng nhanh thì tính đáp ứng của nó càng
cao, ngược lại nếu thời gian trì hoãn (delay) càng lớn sẽ khiến người dùng thất vọng
và dẫn tới việc họ tin rằng trang web bị hỏng hay không hoạt động bình thường,
điều này rất có hại vì nếu đã mất đi niềm tin nơi người dùng thì chắc rằng họ sẽ
không quay trở lại trang web đó nữa. Chẳng hạn như khi người dùng truy cập vào
một trang web mà phải chờ đợi quá lâu cho việc load dữ liệu, thông tin thì thay vào
là mở rộng theo chiều ngang (scaling out) và mở rộng theo chiều dọc (scaling up).
Mở rộng theo chiều dọc nghĩa là khi số lượng người dùng tăng lên, nhà phát
triển sẽ nâng cấp server của mình bằng cách tăng cấu hình của máy server, hệ thống
vẫn chỉ có một server với cấu hình ngày một mạnh hơn (tăng số lượng chip, tăng
dung lượng Ram…). Sử dụng phương pháp này, người quản trị hệ thống sẽ không
phải quan tâm đến vấn đề cân bằng tải cho cụm server, hệ thống hoạt động rất tốt
khi số lượng người dùng vừa phải. Tuy nhiên, phương pháp này cũng có một số vấn
đề hạn chế, đầu tiên là về giá thành, sử dụng một server sẽ tốn kém hơn rất nhiều so
với nhiều servers, một ván đề nữa cũng rất quan trọng đó là vấn đề downtime
impact, vì chỉ có một server nên nó sẽ trở thành SPOF (single point of failure), nếu
như server này bị chết, thì ngay lập tức toàn bộ hệ thống sẽ ngừng hoạt động.
Phương pháp này còn dẫn đến giới hạn cho hệ thống, bởi đến một mức nào đó hệ
thống tổng thể còn phụ thuộc vào nhiều yếu tố như bandwith hay khả năng vào ra
của file trên đĩa cứng.
Ví dụ sau đây sẽ cho thấy rõ điều đó, giả sử với một site video, băng thông để
xem được một clip ở dạng chất lượng trung bình sẽ vào khoảng 512kb/s đến
0.5mb/s. Vậy đường truyền 100MB sẽ cho phép tối đa 200 người dùng xem đồng
13
Nghiên cứu kỹ thuật Network Load Balancing trong hệ thống mạng Linux
thời. Điều gì sẽ xảy ra nếu muốn có hơn số người dùng đó? Người ta có thể tăng
băng thông cho đường truyền lên 1gigabit nhưng sẽ rơi vào tình trạng của scale up
và gặp giới hạn. Ngoài ra, tốc độ đọc đĩa cứng chỉ vào khoảng 400mb/s nên dù có
tăng tốc độ đường truyền lên thì server vẫn không thể đáp ứng và phục vụ được
nhiều hơn nữa. Như vậy sử dụng scale up không thể giải quyết vấn đề này.
Giải pháp thứ hai là lắp nhiều server song song và chúng hoạt động thành một
cụm cluster. Theo như ví dụ ở trên, cứ lắp thêm một server lại có khả năng đáp ứng
cho 200 người dùng nữa và càng nhiều server thì khả năng mở rộng lại càng lớn.
Thêm nữa chi phí được giảm thiểu khi sử dụng phương pháp này. Vậy thì điểm yếu
của giải pháp này là gì? Đó chính là vấn đề cân bằng tải, để cứ mỗi server sẽ thêm
được 200 người dùng, hệ thống phải được cân bằng tải một cách tốt nhất sao cho tải
trọng trong hệ thống web. Sự phát triển của website sẽ dẫn đến yêu cầu phải mở
rộng database server, chẳng hạn như lắp thêm server để phục vụ nhu cầu tại một địa
điểm đã có server từ trước hoặc lắp mới server ở các vùng khác nhau trên thế giới.
Cũng như cân bằng tải ở Application Server, mở rộng Database Server cũng có hai
phương pháp: mở rộng theo chiều ngang và mở rộng theo chiều dọc.
Mở rộng theo chiều dọc: hiện nay các nhà phát triển hệ thống sử dụng kiến
trúc SAN (Storage Area Network), DB sẽ được phân chia (partitioning out) theo
kiến trúc này. SAN là một kiểu kiến trúc kết nối những thiết bị lưu trữ máy tính từ
xa (như disk arrays, tape libraries and optical jukeboxes) để phục vụ theo cách mà
những thiết bị ấy được xem như là cục bộ (local) đối với hệ điều hành. Như vậy, hệ
thống lưu trữ chỉ được xem như một Database Server duy nhất, vì vậy mà nó hoạt
động rất hiệu quả.
16
Nghiên cứu kỹ thuật Network Load Balancing trong hệ thống mạng Linux
Kiến trúc này sẽ tăng đáng kể khả năng của Database Server, tuy vậy vì giá
thành của nó rất đắt nên nó không được sử dụng rộng rãi mà chỉ được dùng trong
các hệ thống lớn và quan trọng.
Hình 1.4: Mở rộng database server sử dụng kiến trúc SAN
Mở rộng DB theo chiều ngang (scaling out), nghĩa là tăng số lượng các node
Database Server, như minh họa sau đây:
17
Nghiên cứu kỹ thuật Network Load Balancing trong hệ thống mạng Linux
Hình 1.5: Mở rộng database theo chiều ngang
Có 2 lựa chọn để cài đặt theo phương pháp này:
• Shared Nothing Cluster
• Real Application Cluster (Shared storage cluster)
a) Shared Nothing Cluster
Trong phương pháp Shared nothing cluster, mỗi database server sẽ chứa một
bản coppy hoàn toàn của database, tức là tất cả các DBServer sẽ giống nhau. Không
có dữ liệu được chia sẻ giữa các DB Server Nodes, các file DB thực sự sẽ dược
system (GFS/OFS). Phương pháp này chỉ được cung cấp bởi công ty Oracle do giá
thành của nó rất cao. Hiện nay chỉ có các doanh nghiệp lớn hoặc các tập đoàn mới
triển khai được phương pháp này.[4]
2.3.3 Mô hình khuyên dùng
Tổng hợp lại, dựa theo ưu nhược điểm và kinh nghiệm của các nhà phát triển,
mô hình Database mở rộng nên dùng là:
• Master – Slave replication
• Sao chép không đồng bộ
• Ghi dữ liệu tại DAO layer
20
Nghiên cứu kỹ thuật Network Load Balancing trong hệ thống mạng Linux
Hình 1-7: Mô hình mở rộng database khuyên dùng
2.4 Cơ sở xây dựng bộ cân bằng tải cho Web-Server
Một bộ cân bằng tải cần phải thực hiện được 4 chức năng chính sau đây:
• Cân bằng tải cho server (server load balancing): có nhiệm vụ phân phối
tải giữa các server, tăng khả năng mở rộng của hệ thống, giúp cho hệ
thống vẫn hoạt động khi có server xảy ra sự cố hay bị “chết” –không
hoạt động.
• Cân bằng tải cho Global server (global server load balancing): có
nhiệm vụ chuyển hướng yêu cầu của người dùng đến các data center
khác nhau trong trường hợp website có nhiều trung tâm dữ liệu trên thế
giới. Góp phần tăng tốc độ phản hồi cho người dùng và giúp cho hệ
thống vẫn có khả năng hoạt động khi có trung tâm dữ liệu xảy ra sự cố.
21
Nghiên cứu kỹ thuật Network Load Balancing trong hệ thống mạng Linux
• Cân bằng tải cho firewall (firewall balancing): có nhiệm vụ phân phối
tải giữa các firewall, giúp cho hệ thống vẫn hoạt động được khi có
firewall bị lỗi.
• Chuyển mạch cache trong suốt (transparent cache switching): giúp
chuyển hướng lưu lượng một cách “trong suốt” đến các caches, góp
nguyên của hệ thống như là CPU, threads, …
Do đó, cân bằng thời gian kiểm tra chính là vấn đề khó nhất trong kỹ thuật lựa
chọn server.Khoảng thời gian kiểm tra giữa 2 lần test liên tiếp phải đủ dài để không
tốn quá nhiều tài nguyên của hệ thống và cũng cần đủ ngắn để nhanh chóng phát
hiện ra những server “chết”. Vì “health checks” là một trong những khía cạnh phức
tạp nhất của kỹ thuật cân bằng tải, nên thông thường sau một vài kiểm tra các nhà
phát triển ứng dụng sẽ thực thi một yêu cầu đặc biệt dành riêng cho bộ cân bằng tải,
giúp cho nó thực hiện một số kiểm tra nội bộ.
Phần mềm cân bằng tải có khả năng cung cấp scripting, do đó nó đạt được độ
linh hoạt rất cao. Hơn nữa, nếu như một lần kiểm tra nào đó đòi hỏi phải chỉnh sửa
code, nó có thể thực hiện trong một khoảng thời gian ngắn
b) Lựa chọn server tốt nhất
Việc lựa chọn server tốt nhất chính là phần chính của thuật toán cân bằng tải
được đề cập trong phần 2. Phương pháp dễ nhất và thường được sử dụng nhất trong
các hệ thống nhỏ là Round Robin, các server được lựa chọn quay vòng, tuy nhiên
phương pháp này có nhược điểm là 2 requests liên tục từ một người dùng sẽ vào 2
server khác nhau, thông tin giữa hai yêu cầu liên tiếp sẽ bị mất, như vậy sẽ không
thể tối ưu hóa được sử dụng tài nguyên. Đặc biệt là khi cần phải cài đặt kết nối cho
các phiên chạy, ví dụ như SSL key negociation- sẽ tốn rất nhiều thời gian.
Một cách khắc phục nhược điểm này là sử dụng một hàm băm theo địa chỉ IP,
như vậy requests từ cùng một địa chỉ IP sẽ chỉ vào một server duy nhất. Tuy vậy
phương pháp này đòi hỏi người dùng phải có IP tĩnh.
23
Nghiên cứu kỹ thuật Network Load Balancing trong hệ thống mạng Linux
c) Kỹ thuật Sesion Persistence
Vấn đề cần giải quyết chính là làm sao để giữ cho các yêu cầu của một người
dùng được gửi vào một máy duy nhất trong suốt phiên làm việc của người đó. Tất
cả các yêu cầu của người dùng này cần phải được chuyển vào cùng một server. Nếu
server bị chết hoặc ngừng để bảo trì, cần phải có cơ chế để chuyển session của
người dùng này sang máy server khác. Đó chính là kỹ thuật Session Persistence.
tải sẽ đọc được cookie này và sẽ chuyển yêu cầu của người dùng vào server RS1.
Như vậy, người dùng sẽ luôn được kết nối vào server 1 cho đến khi nào cookie còn
tồn tại, cho dù người dùng có thể vào website từ các địa chỉ IP khác nhau.
Hình 2-2: Cookie Read
25