Tải bản đầy đủ (.docx) (83 trang)

NGHIÊN CỨU KỸ THUẬT NETWORK LOAD BALANCING TRONG HỆ THỐNG MẠNG LINUX

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.17 MB, 83 trang )

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


CHUYÊN NGÀNH: MẠNG MÁY TÍNH & TRUYỀN THÔNG
ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC
NGƯỜI HƯỚNG DẪN
VŨ ĐỨC THI
PHẠM NGỌC HƯNG
HƯNG YÊN - 2014
2
Nghiên cứu kỹ thuật Network Load Balancing trong hệ thống mạng Linux
MỤC LỤC
3
Nghiên cứu kỹ thuật Network Load Balancing trong hệ thống mạng Linux
DANH SÁCH HÌNH VẼ
4
Nghiên cứu kỹ thuật Network Load Balancing trong hệ thống mạng Linux
5
Nghiên cứu kỹ thuật Network Load Balancing trong hệ thống mạng Linux
DANH SÁCH TỪ VIẾT TẮT
Từ viết tắt Từ đầy đủ Giải thích
DNS Domain Name System Hệ thống phân giải tên miền
DRR Dynamic Round Robin Quay vòng động
FTP File Transfer Protocol Giao thức truyền dữ liệu
GSLB Global Server Load Balancing Cân bằng tải máy chủ toàn cầu
HTTP Hypertext Transfer Protocol Giao thức truyền tin
IP Internet Protocol Giao thức Internet
LAN Local Access Network Mạng nội bộ
LB Load Balancing Cân bằng tải
LC Least Connections Ít kết nối nhất
LVS Linux Vitual Server Máy chủ Linux ảo
NAT Network Address Translate Chuyển địa chỉ IP
RR Round Robin Quay vòng

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.

1.4 Nội dung thực hiện
- Tìm hiểu về kiến trúc web với khả năng mở rộng, khả năng có sẵn cao.
- Tìm hiểu các kỹ thuật cân bằng tải web server.
- Triển khai cài đặt hệ thống web server.
- Cài đặt hệ thống cân bằng tải web server.
7
Nghiên cứu kỹ thuật Network Load Balancing trong hệ thống mạng Linux
1.5 Phương pháp tiếp cận
- Cách tiếp cận : Nghiên cứu kỹ thuật cân bằng tải trên nền tảng công nghệ
khác nhau như Windows, Linux.
- Sử dụng các phương pháp nghiên cứu:
o Phương pháp lý luận: Tham khảo tài liệu trên sách báo, trên mạng
internet, đặc biệt là các diễn đàn công nghệ và dịch tài liệu tiếng Anh.
o Phương pháp xử lý thông tin: Tiếp cận thông tin, phân loại thông tin
và phân tích thông tin, đồng thời sắp xếp các thông tin một cách logic.
o Phương pháp thực nghiệm: Dựa vào lý thuyết để áp dụng vào triển
khai xây dựng hệ thống và đánh giá kết quả thực nghiệm nhiều lần
nhằm xây dựng hệ thống đáp ứng yêu cầu hiệu quả.
o Phương pháp chuyên gia: Nhờ sự giúp đỡ của các thầy giáo có kiến
thức chuyên môn về lĩnh vực để nhận xét, đánh giá, đóng góp ý kiến
cho đề tài hoàn thiện hơn.
8
Nghiên cứu kỹ thuật Network Load Balancing trong hệ thống mạng Linux
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT
2.1 Tổng quan về Cân bằng tải
2.1.1 Khái niệm
Ngày nay, khi nhu cầu truy cập internet bùng nổ thì các máy chủ cung cấp
dịch vụ đang trở nên quá tải. Việc lựa chọn một máy chủ đơn lẻ có cấu hình cực
mạnh để đáp ứng nhu cầu này sẽ kéo theo chi phí đầu tư rất lớn. Giải pháp hiệu quả
được đưa ra là sử dụng một nhóm máy chủ cùng thực hiện một chức năng, dưới sự

đ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.

- Cung cấp khả năng nhận thức nội dung phân tán bằng cách đọc URL, chặn
cookie và biên dịch XML. Đây được coi là một trong những tiêu chí chia tải của hệ
thống.
2.1.3 Ưu điểm của cân bằng tải
Khả năng của cân bằng tải thể hiện ở các mặt sau:
- Tính linh hoạt (Flexibility)
- Tính sẵn sàng cao (High availability)
- Khả năng mở rộng (Scalability)
Những ưu điểm này sẽ được thể hiện cụ thể ở các phần dưới đây.
2.2 Các khái niệm cơ bản về kiến trúc Webserver
Một website với khả năng mở rộng nghĩa là khi số lượng người dùng tăng lên
nhanh chóng trong một khoảng thời gian nhất định, website vẫn đáp ứng được nhu
cầu, hơn nũa website có khả năng dễ dàng nâng cấp lên để phù hợp với tình hình
mới. Tại thời điểm ban đầu, các website với khả năng mở rộng lớn thường được
thiết kế để phục vụ hàng triệu yêu cầu mỗi ngày, sau đó nó được nâng cấp để phục
vụ thêm nếu như có yêu cầu. Để phục vụ được hàng chục triệu lượt truy cập mỗi
ngày, website cần phải đáp ứng được yêu cầu về khả năng mở rộng (Scalability), về
tính linh hoạt (Flexibility), tính đáp ứng (Responsiveness), tính sẵn sàng cao (High
10
Nghiên cứu kỹ thuật Network Load Balancing trong hệ thống mạng Linux
Availability), tránh được thời gian chết của hệ thống (downtime impact), khả năng
bảo trì tốt và được xây dựng với giá thành tốt nhất. Dưới đây là các khái niệm về
kiến trúc web với khả năng mở rộng: [6]
2.2.1 Khả năng mở rộng (Scalability)
Cân bằng tải chịu trách nhiệm phân phối tải tới nhiều máy chủ trong một hệ
thống (Server Farm theo mặt vật lý và được gọi là Server Cluser – các bó Server),
với mục đích là nâng cao hiệu quả, tăng sức mạnh phục vụ với số lượng lớn các
máy chủ. Điều này mang lại lợi ích lớn về kinh tế, vì chỉ phải chi phí cho nhiều máy
chủ nhỏ, thay vì đầu tư cho một máy chủ lớn, thiết bị chuyên dụng. Ngoài ra, trong
quá trình hoạt động, số các máy chủ có thể thay đổi, thêm/bớt, loại bỏ, thay thế một

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

đó để không phải tốn mất nhiều thời gian họ sẽ tìm một công việc khác để làm đôi
khi họ quên mất rằng mình đang truy cập vào một dịch vụ web và đóng luôn trình
duyệt đó lại hoặc sẽ quay trở lại sau một khoảng thời gian khá lâu. Điều này rất
không tốt bởi trong hệ thống mà họ truy cập vẫn hoạt động và lưu giữ phiên session
mà không phục vụ cho bất cứ ai, đó chính là một sự lãng phí lớn. Tính đáp ứng và
tính thực hiện là độc lập với nhau, một hệ thống có hiệu năng tốt vẫn có thể có khả
năng đáp ứng rất tồi tệ.[8]
2.2.5 Downtime impact
Đây là một vấn đề mà tất cả các hệ thống đều gặp phải, đó là thời gian mà hệ
thống bị “chết”, khi mà số lượng các chức năng chính bị down, đây là vấn đề có
tính tuần hoàn đối với các nhà phát triển hệ thống. Một hệ thống tốt sẽ giúp người
dùng truy cập nhanh làm họ cảm thấy hài lòng dẫn đến số lượng người dùng tăng
lên và khi số lượng người dùng tăng lên hệ thống sẽ lại bị tắc nghẽn và nhà quản trị
mạng sẽ phải đối phó với vấn đề đó, giải quyết nó nhằm tạo ra hệ thống hoạt động
được tốt nhất. Điều quan trọng là một hệ thống tốt cần phải kéo thời gian chu kì này
lên, sao cho hệ thống hoạt động tốt nhất trong thời gian đủ dài trước khi cần phải
nâng cấp, cũng như làm sao để xây dựng được hệ thống tốt nhất có khả năng mở
12
Nghiên cứu kỹ thuật Network Load Balancing trong hệ thống mạng Linux
rộng lớn. Cùng với các đòi hỏi này, hệ thống cũng cần phải có thể dễ dàng bảo trì và
giá thành vừa phải, không quá cao. Xây dựng một hệ thống web như vậy sẽ gặp rất
nhiều vấn đề khó, những vấn đề quan trọng nhất trong việc thiết kế một website có
khả năng mở rộng mà bất cứ nhà phát triển hệ thống web nào cũng phải giải quyết
đó là cân bằng tải cho application server, cân bằng tải cho database-server, tổ chức
lưu trữ dữ liệu trên đĩa cứng và cân bằng tải cho cache. [8]
2.3 Các vấn đề liên quan tới cân bằng tải
2.3.1 Cân bằng tải cho Application Server
Một trang web phục vụ hàng triệu lượt người truy cập mỗi ngày thì điều quan
trọng đầu tiên là phải có một hệ thống server đủ mạnh, khi người dùng tăng lên theo
thời gian, hệ thống máy chủ cũng phải được nâng cấp, mở rộng. Có hai sự lựa chọn

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

được phân phối đều đặn vào trong các máy server. Các server phải được nối với
nhau như thế nào đều là những bài toán khó. Dưới đây là ưu điểm và nhược điểm
của từng phương pháp:
Hình 1-1: So sánh giữa Scale out và Scale up
So sánh giá thành khi sử dụng hai phương pháp này:
14
Nghiên cứu kỹ thuật Network Load Balancing trong hệ thống mạng Linux
Hình 1-2: Biểu đồ so sánh giá thành phương pháp scale down và scale up
Như vậy, sự lựa chọn một server chỉ phù hợp cho các hệ thống đòi hỏi sự ổn
định cao, với số lượng người dùng tăng lên không quá nhanh và có tiềm lực mạnh
về kinh tế như các hệ thống chứng khoán, ngân hàng …, còn đối với các mạng xã
hội khác hay các trang chia sẻ video trực tuyến thì sự lựa chọn nhiều server hoạt
động song song là hiệu quả nhất. Khi sử dụng phương pháp scale out, yêu cầu từ
phía người dùng sẽ được chuyển vào một trong các server này xử lý, từ đó xuất hiện
bài toán cân bằng tải (Load Balancing-LB) cho cluster này. Nhà phát triển hệ thống
làm sao để các server hoạt động cân bằng, nghĩa là các server được phục vụ một
lượng yêu cầu phù hợp, tránh không để bất cứ server nào bị quá tải (overload), đồng
thời tận dụng được hết tài nguyên hệ thống để phục vụ được lượng truy cấp lớn
nhất.[6]
Để cân bằng tải cho hệ thống Web Server cần phải xây dựng một bộ cân bằng
tải (Load Balancer). Bộ cân bằng tải này được đặt trước cluster, nhận request từ
phía người dùng, xử lý các yêu cầu và chuyển hướng chúng đến server phù hợp.
Mô hình tổng quát được miêu tả dưới đây:
15
Nghiên cứu kỹ thuật Network Load Balancing trong hệ thống mạng Linux
Hình 1-3: Mô hình cân bằng tải Web Server cơ bản
Chi tiết về nguyên lý, kỹ thuật và các phương pháp cân bằng tải server cũng
như thiết kế bộ cân bằng tải sẽ được làm rõ trong các nội dung về sau.
2.3.2 Mở rộng Database Server
Bên cạnh các Web Server, các database server cũng đóng vai trò vô cùng quan

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

chứa trong SAN. Kiến trúc này được hỗ trợ một cách tự nhiên bởi hầu hết các
RDBMs hoặc các phần mềm 3rd party.
Một vấn đề nữa là phải chọn cơ chế sao bản (replication) phù hợp, vì các DB
sẽ chứa cùng một bản sao hoàn chỉnh của cơ sở dữ liệu. Có rất nhiều lựa chọn để
tạo sao bản đó là lựa chọn giữa phương pháp Master – Slave và Multi – Master,
đồng bộ hay không đồng bộ và tạo sao bản ở mức nào của dữ liệu.
Trong phương pháp master – slave, các yêu cầu đọc sẽ được gửi tới một
master, và sau đó sẽ được sao ra ở các slave DB, thêm nữa việc tạo sao bản có thể
sẽ bị lặp (cascaded). Tuy vậy phương pháp này dễ cài đặt và không đòi hỏi phải
quản lý xung đột. Với trường hợp Multi-Master, các lệnh đọc sẽ được gửi đến cho
nhiều master, sau đó sẽ được sao ra ở các master khác cũng như các slave. Phương
pháp này sẽ đòi hỏi nhà quản trị phải quản lý xung đột và rất dễ xảy ra hiện tượng
deadlock (khi mà dữ liệu được sửa ở nhiều nơi cùng một lúc).
Giữa phương pháp đồng bộ và không đồng bộ, phương pháp đồng bộ được
đảm bảo nhưng bản sao không được đồng nhất (out-of-band replication) từ Master
đến Slave. Master cập nhật DB riêng của nó và hồi đáp trở lại client. Việc sao lưu từ
Master đến slave xảy ra không đồng bộ, tuy vậy ưu điểm của phương pháp này là
khả năng trả về client nhanh. Nhưng nhược điểm của nó là dữ liệu slave bị giới hạn
sau Master, nó cũng yêu cầu App phải thay đổi để các critical reads được gửi đến
master.
18
Nghiên cứu kỹ thuật Network Load Balancing trong hệ thống mạng Linux
19
Nghiên cứu kỹ thuật Network Load Balancing trong hệ thống mạng Linux
b) Real Application Cluster
Lựa chọn thứ hai để cài đặt DB Server theo chiều ngang là Real Application
Cluster.
Hình 1-6: Real Application Cluster
Trong phương pháp này, các nodes ở DB cùng chia sẻ một phần chung ở SAN,
ràng buộc của phương pháp này là file system phải được định dạng là clustered file

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

phần tăng thời gian đáp ứng và hiệu năng của hệ thống.
2.4.1 Kỹ thuật cân bằng tải server (Server Load Balancing – SLB)
Bộ cân bằng tải có nhiệm vụ kết nối giữa người dùng và server, do đó nó có
thể hoạt động như một proxy hoặc gateway. Một proxy có nhiệm vụ luân chuyển
yêu cầu và dữ liệu đáp trả giữa người dùng và server, trong khi đó một gateway chỉ
có nhiệm vụ tạo ra một kết nối hai đối tượng này và không làm gì thêm. Có thể sử
dụng phần cứng hoặc phần mềm được cài đặt thêm một front server hoặc trên chính
web server. Thêm nữa, khi số lượng người dùng tăng lên, để tránh SPOF cần thiết
phải cài đặt 2 bộ cân bằng tải song song, hoạt động theo cơ chế active-active hoặc
active-backup.
Các phần mềm cân bằng tải thường được cài đặt như một proxy. Để xây dựng
một bộ cân bằng tải phần mềm, các kỹ thuật cần phải chú trọng đó là kiểm tra trạng
thái server, lựa chọn server tốt nhất để gửi yêu cầu và kỹ thuật duy trì kết nối của
người dùng.
a) Kiểm tra trạng thái server
Để chọn được server phù hợp để gửi request, bộ cân bằng tải cần phải biết
được server nào đang có sẵn. Vì vậy, nó cần phải dùng biện pháp nào đó để kiểm tra
trạng thái của server, chẳng hạn như gửi lệnh ping, các yêu cầu, thử kết nối hay bất
cứ phương pháp nào mà người quản trị dùng. Kỹ thuật kiểm tra này thường được
gọi là “health checks”.
Một server bị down có thể trả lời lệnh ping nhưng không thể trả lời các kết nối
TCP, một server bị treo có khả năng trả lời kết nối TCP nhưng không thể trả lời các
22
Nghiên cứu kỹ thuật Network Load Balancing trong hệ thống mạng Linux
yêu cầu HTTP. Khi một ứng dụng web nhiều lớp được kích hoạt, một số yêu cầu
HTTP có thể trả lời ngay lập tức trong khi số khác sẽ thất bại.
Chính vì thế, việc lựa chọn một phương pháp test phù hợp được chấp nhận bởi
ứng dụng web và bộ cân bằng tải là một công việc rất khó khăn. Một số test đôi khi
cần phải truy xuất dữ liệu database nhằm ddaammr bảo rằng toàn bộ quá trình của
nó là đúng. Hạn chế lớn nhất là những phương pháp kiểm tra này sẽ chiếm tài

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.

Có một số giải pháp được đưa ra để tiếp cận kỹ thuật này, chẳng hạn như sử
dụng một respone HTTP 302 hay tạo ra liên kết giữa người dùng – server. Tuy vậy
2 phương pháp này đều có những hạn chế, sử dụng HTTP 302 sẽ khiến người dùng
luôn luôn tìm cách kết nối với một server duy nhất, kể cả khi server này đã “chết”.
Dùng cách tạo liên kết đòi hỏi user phải có IP tĩnh trong suốt phiên làm việc.
Như vậy, sử dụng Cookie - là một đối tượng được điều khiển bởi Web Server.
Trong kết quả trả về cho người dùng web server sẽ chèn thêm một số thông tin.
Những yêu cầu tiếp theo của người dùng gửi đến server sẽ chứa thêm thông tin của
cookie này, server sẽ đọc các cookie và biết phải làm gì với các yêu cầu này.
d) Cookie
Một cookie được định nghĩa bằng cặp tên = giá trị (name=value). Hình dưới
đây miêu tả hoạt động của cookie với cặp user =1, cho biết tên cookie là user và giá
trị của nó là 1. Bên phía người dùng, cookie được điều khiển bởi trình duyệt và
“trong suốt” đối với người dùng.
Hình 2-1: Cách làm việc của cookie user =1
24
Nghiên cứu kỹ thuật Network Load Balancing trong hệ thống mạng Linux
Trong thiết kế của bộ cân bằng tải, có 3 cách để sử dụng cookie: cookie chỉ
đọc (cookie-read), bộ cân bằng tải chèn cookie nhằm chứng thực server (cookie-
insert) và ghi đè cookie (cookie-rewrite).
• Cookie-Read
Cách thức hoạt động của cookie-read được mô tả trong hình dưới đây, khi
người dùng lần đầu tiên gửi yêu cầu đến server, do không có cookie trong yêu cầu
nên nó sẽ được phân tải đến server RS1 (1). Server RS1 sẽ tạo và đặt cookie
server=1 vào trong dữ liệu trả về cho người dùng (2). Trình duyệt của người dùng sẽ
nhận trả về, đọc thấy cookies và lưu trữ nó vào trong đĩa cứng (3). Sau đó người
dùng có thể đóng trình duyệt hoặc ngắt kết nối (giả sử rằng trình duyệt của người
dùng không tự động xóa cookie sau khi đóng). Một thời gian sau người dùng kết nối
lại và gửi yêu cầu đến bộ cân bằng tải. Sau khi kết nối được thiết lập, trình duyệt
người dùng sẽ gửi cookie server=1 như là một phần yêu cầu HTTP (4). Bộ cân bằng

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

×