BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC MỞ THÀNH PHỐ HỒ CHÍ MINH
KHOA CÔNG NGHỆ THÔNG TIN
# "
KHÓA LUẬN TỐT NGHIỆP
Đề tài:
NGHIÊN CỨU VÀ XÂY DỰNG
HỆ THỐNG SERVER CLUSTER
BẰNG MÃ NGUỒN MỞ
GVHD: THS. NINH XUÂN HƯƠNG
SVTH: NGUYỄN TRÍ THỨC
MSSV: 106H1093
Thành phố Hồ Chí Minh - Năm 2009
Trường Đại Học Mở TP.HCM
XD Hệ Thống Server Cluster Bằng Mã Nguồn Mở
LỜI CẢM ƠN
Qua thời gian học tại Trường Đại Học Mở Thành phố Hồ Chí Minh, thời gian làm
đề tài khoá luận tốt nghiệp là lúc em đem kiến thức đã học áp dụng vào thực tế, áp dụng
những kiến thức vào việc triển khai các hệ thống server. Là sinh viên khoa CNTT Trường
Đại học Mở Thành phố Hồ Chí Minh, em đã được học rất nhiều điều bổ ích, áp dụng vào
trong đề tài khóa luận của mình.
CNTT là một ngành đòi hỏi tính kiên trì, sáng tạo, luôn tìm hiểu những cái mới. Sau
khi học xong em càng hiểu rằng công việc này rất quan trọng, và là một bộ phận không thể
thiếu trong bất kỳ Cơ quan nào. Đây cũng là lý do em chọn ngành CNTT với mong muốn
có thể làm được ở bất kỳ môi trường làm việc nào.
Trong quá trình làm đề tài khóa luận, mặc dù đã có nhiều cố gắng song do hạn chế
về thời gian và kinh nghiệm nên không tránh khỏi những thiếu sót nhất định. Em rất mong
được tiếp thu những ý kiến đóng góp chân thành, những nhận xét, đánh giá, phê bình của
Khoa Công Nghệ Thông Tin và Ban Giám Hiệu nhà trường để kiến thức chuyên môn ngày
càng hoàn thiện hơn. Mỗi lần như thế là mỗi lần em rút ra được những kinh nghiệm quý báo
cho bản thân.
Với lòng biết ơn sâu sắc, em xin chân thành cảm ơn Quý Thầy, Cô Trường Đại Học
Mở Thành phố Hồ Chí Minh khoa Công Nghệ Thông Tin, mà đặc biệt là Thầy hướng dẫn
khóa luận thầy Ths.Ninh Xuân Hương đã nhiệt tình dìu dắt và luôn giành hết tâm huyết để
truyền đạt kiến thức cho em trong suốt quá trình học tập và hoàn thành khoá luận.
Kính chúc quý Thầy, Cô tiếp tục gặt hái nhiều thành công trên con đường giảng dạy.
TP.Hồ Chí Minh, ngày tháng năm 2009
Sinh viên thực hiện
GVHD: Ths Ninh Xuân Hương
Trang 1/108
SVTH: Nguyễn Trí Thức
Trường Đại Học Mở TP.HCM
XD Hệ Thống Server Cluster Bằng Mã Nguồn Mở
MỤC LỤC
PHẦN A:
CƠ SỞ LÝ THUYẾT
CHƯƠNG I: GIỚI THIỆU HỆ THỐNG SERVER CLUSTER BẰNG MÃ NGUỒN
MỞ ................................................................................................................................................8
I. Linux Virtual Server(LVS): ................................................................................................ 8
II. Tại sao cần sử dụng LVS ? ................................................................................................. 9
III. Nguyên lý hoạt động của LVS: .......................................................................................... 9
IV. IP load balancing: ............................................................................................................... 10
1. Network Address Translation (NAT):..................................................................... 11
2. Direct Routing: .......................................................................................................... 13
3. IP-IP Encapsulation (Tunneling):............................................................................. 14
V. Các thuật toán phân chia request trên load balancer:..................................................... 15
1. Round-Robin Scheduling: ........................................................................................ 15
2. Weighted Round-Robin Scheduling:....................................................................... 15
3. Least-Connection Scheduling: ................................................................................. 15
4. Weighted Least-Connection Scheduling: ................................................................ 16
5. Destination Hasing Scheduling:............................................................................... 16
6. Source Hashing Scheduling:..................................................................................... 16
7. Shortest Expected Delay Scheduling:...................................................................... 16
8. Never Queue Scheduling:......................................................................................... 16
VI. Kiến trúc của LVS cluster: ................................................................................................ 16
VII. High Availability của LVS: ............................................................................................. 18
1. Hoạt động high availability: ..................................................................................... 18
2. Các phần mềm xây dựng LVS trên Linux:.............................................................. 20
CHƯƠNG II: DỊCH VỤ DNS...................................................................................................36
I. Các khái niệm: .................................................................................................................... 36
II. Cấu trúc DNS:..................................................................................................................... 36
III. Các loại Query DNS: ......................................................................................................... 38
1. Recursive Query:....................................................................................................... 39
2. Iterative Query:.......................................................................................................... 40
IV. Các bản ghi thông dụng của DNS:................................................................................... 41
1. Bản ghi SOA (Start Of Authority): .......................................................................... 41
2. Bản ghi NS (Name Server):...................................................................................... 43
3. Bản ghi A (Address) và bản ghi CNAME (Canonical Name):.............................. 43
4. Bản ghi MX (Mail Exchanger): ............................................................................... 43
5. Bản ghi PTR (Pointer): ............................................................................................. 44
V. Các kiểu DNS: .................................................................................................................... 46
1. Master (Primary) DNS:............................................................................................. 46
2. Slave (Secondary) DNS:........................................................................................... 47
3. Caching DNS:............................................................................................................ 48
VI. Một số chức năng khác của DNS:.................................................................................... 48
1. Khai báo uỷ quyền (Delegate):................................................................................. 48
2. Cân bằng tải (DNS Load Balancing):...................................................................... 52
3. Kiểm tra dịch vụ DNS: ............................................................................................. 53
GVHD: Ths Ninh Xuân Hương
Trang 2/108
SVTH: Nguyễn Trí Thức
Trường Đại Học Mở TP.HCM
XD Hệ Thống Server Cluster Bằng Mã Nguồn Mở
PHẦN B: XÂY DỰNG HỆ THỐNG
“DNS SERVER CLUSTER BẰNG MÃ NGUỒN MỞ”
CHƯƠNG I: GIỚI THIỆU .......................................................................................................57
I. Mô hình hệ thống: .............................................................................................................. 57
II. Nguyên Lý Hoạt Động: ..................................................................................................... 59
III. yêu cầu hệ thống: ................................................................................................................ 59
CHƯƠNG II: XÂY DỰNG HỆ THỐNG DNS SERVER ...................................................60
I. Cài đặt hệ điều hành:.......................................................................................................... 60
II. Một số cấu hình cần thiết cho hệ thống server: .............................................................. 79
1. Cấu hình server chạy mode command line: ............................................................ 79
2. Loại bỏ một số tiến trình không cần thiết khi khởi động server:............................ 80
3. Một số lệnh kiểm tra server: ..................................................................................... 81
III. Cấu hình địa chỉ IP và Host name cho server:................................................................ 82
IV. Cài đặt và cấu hình DNS Server: ..................................................................................... 84
1. Cài đặt DNS Server:.................................................................................................. 84
2. Cấu hình DNS Server: .............................................................................................. 85
3. Tạo Zone trên DNS:.................................................................................................. 86
V. Kiểm tra dịch vụ DNS: ...................................................................................................... 89
CHƯƠNG III: CÀI ĐẶT VÀ CẤU HÌNH CLUSTER........................................................92
I. Cài đặt Cluster: ................................................................................................................... 92
1. Cài đặt Heartbeat – Ldirectord: ................................................................................ 92
2. Cài đặt arptbales: ....................................................................................................... 92
3. Cài đặt ipvsadm:........................................................................................................ 93
II. Cấu hình Cluster: ................................................................................................................ 93
1. File cấu hình /etc/ha.d/ha.cf:..................................................................................... 93
2. File cấu hình /etc/ha.d/authkeys: .............................................................................. 94
3. File cấu hình /etc/ha.d/haresource:........................................................................... 95
4. File cấu hình /etc/ha.d/conf/ldirectord.cf: ................................................................ 96
5. Script /etc/init.d/int_virtual_init: .............................................................................. 98
6. Script /etc/ha.d/resource.d/arptables_init:.............................................................. 100
7. File cấu hình /etc/sysconfig/arptables:................................................................... 100
CHƯƠNG IV: KIỂM TRA HOẠT ĐỘNG DNS SERVER CLUSTER ..................... 101
I. Các bước khởi tạo DNS Server Cluster: ....................................................................... 101
II. Chạy script int_virtual_init: ............................................................................................ 101
III. Chạy heartbeat: ................................................................................................................. 103
IV. Kiểm tra tính năng failover: ............................................................................................ 105
1. Giả sử dịch vụ DNS trên load balancer master down:.......................................... 105
2. Giả sử load balancer master down: ........................................................................ 105
3. Khi load balancer master hoạt động trở lai:........................................................... 106
CHƯƠNG IV: NHẬN XÉT VÀ KẾT LUẬN ..................................................................... 107
TÀI LIỆU THAM KHẢO ...................................................................................................... 108
GVHD: Ths Ninh Xuân Hương
Trang 3/108
SVTH: Nguyễn Trí Thức
Trường Đại Học Mở TP.HCM
XD Hệ Thống Server Cluster Bằng Mã Nguồn Mở
DANH MỤC CÁC CHỮ VIẾT TẮT
STT
01
02
03
04
05
06
07
08
09
10
Chữ viết tắt
DNS
LVS
TLD
SLD
LAN
WAN
IP
TCP
UDP
HĐH
Mô tả
Domain Name System
Linux Virtual Server
Top Level Domain
Second Level Domain
Local Area Network
Wide Area Network
Internet Protocol
Transmission Control Protocol
User Datagram Protocol
Hệ Điều Hành
DANH MỤC CÁC HÌNH VẼ
STT
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
25
25
26
Ký hiệu hình
h1.1.1
h1.1.2
h1.1.3
h1.1.4
h1.1.5
h1.1.6
h1.1.7
h1.1.8
h1.1.9
h1.1.10
h1.1.11
h1.1.12
h1.1.13
h1.1.14
h1.2.1
h1.2.2
h1.2.3
h1.2.4
h1.2.5
h1.2.6
h1.2.7
h1.2.8
h1.2.9
h2.1.1
h2.1.2
h2.4.1
Mô tả
Mô hình LVS
Layer 4 Switching trong LVS
Kỹ thuật Network Address Translation
NAT dùng trong LVS web server
Kỹ thuật Direct Routing
Kỹ thuật Tunneling
Kiến trúc three-tie trong LVS
High Availability của LVS
Mô hình Piranha
Mô hình Keepalived
Mô hình UltraMonkey
Mô hình Heartbeat + Mon + Coda
Mô hình Heartbeat + Ldirectord
Ipfail trong mô hình LVS sử dụng heartbeat + ldirectord
Cấu trúc của Domain Name System
Top Level Domain
Query DNS
Recursive query
Iterative DNS
Top Level Domain của reverse DNS
Cấu trúc phân cấp của reverse DNS
Query reverse DNS
Zone Tranfer
Mô hình vật lý DNS Server Cluster
Mô hình đấu nối vật lý DNS Server Cluster
Khởi tạo DNS Server Cluster
GVHD: Ths Ninh Xuân Hương
Trang 4/108
SVTH: Nguyễn Trí Thức
Trường Đại Học Mở TP.HCM
XD Hệ Thống Server Cluster Bằng Mã Nguồn Mở
LỜI MỞ ĐẦU
Với sự phát triển rất mạnh mẽ của internet, và vai trò của internet ngày càng trở nên
hết sức quan trọng trong cuộc sống của chúng ta. Lưu lượng truy cập internet tăng lên một
cách đáng kể, và tốc độ tăng trưởng trên 100% hàng năm. Điều này đòi hỏi khả năng xử lý
của các server ngày càng cao với tốc độ nhanh. Để giải quyết vấn đề này, cần xây dựng hệ
thống server có khả năng chịu tải và sẵn sàng cao. Xây dựng hệ thống server cluster là một
giải pháp, khi nhu cầu xử lý tăng, ta có thể mở rộng cluster bằng cách tăng thêm server, việc
làm này hoàn toàn trong suốt với người dùng và dể dàng thực hiện.
Đề tài khoá luận này, tìm hiểu về hệ thống server cluster bằng mã nguồn mở (Linux
Virtual Server), nhằm thiết kế hệ thống server có khả năng chịu tải cao “load balancing” và
khả năng sẵn sàng cao “high availability”.
Linux Virtual Server là một phần mềm load balancing chạy trên nền Linux, Unix cho
phép xây dựng một server rất mạnh bao gồm tập hợp của nhiều server thực. Cấu trúc của Linux
Virtual Server (thường gọi tắt là LVS) thông suốt đối với người dùng nên phía người dùng chỉ
nhận thấy LVS là một server mạnh chứ không biết được cấu trúc thực bên trong. Linux Virtual
Server cung cấp cơ chế clustering tức là hệ thống có khả năng high availability (khả năng sẵn
sàng cao), bảo mật tốt và chịu được số lượng truy cập lớn vvv…
LVS server sẽ tạo ra một địa chỉ IP ảo, khi các users gửi yêu cầu truy cập vào LVS server
qua địa chỉ IP ảo này. Sau đó requests sẽ được phân chia cho các real server xử lý (có nhiều
thuật toán để phân chia requests như: Round-Robin, Weighted Round-Robin, LeastConnection, Weighted Least-Connection, ... Nếu một real server nào bị down thì sẽ loại ra khỏi
cluster, khi real server hoạt động lại sẽ được phân chia request trở lại.
Mặc dù hệ thống server cluster có thể triển khai cho rất nhiều hệ thống mạng như:
DNS, HTTP, HTTPS, FTP, IMAP, POP, SMTP, LDAP, NNTP,… nhưng do thời gian có
hạn, nên đề tài khóa luận này chỉ đi sâu vào phần tìm hiểu và xây dựng hệ thống mạng DNS
server cluster. Hệ thống DNS server cluster được thử nghiệm chạy trong môi trường Linux.
Báo cáo khóa luận bao gồm 2 phần chính như sau:
Phần A: Cơ sở lý thuyết.
¾ Chương I : Trình bày lý thuyết về hệ thống server cluster trên Linux, các
phần mềm có thể xây dựng hệ thống server cluster trên Linux.
¾ Chương II : Trình bày lý thuyết về dịch vụ mạng DNS, tìm hiểu và cách
khai báo các bản ghi của DNS.
Phần B: Xây dựng hệ thống DNS server cluster bằng mã nguồn mở.
¾ Chương I : Giới thiệu mô hình DNS server cluster và nguyên lý hoạt
động của DNS server cluster.
¾ Chương II : Cách cài đặt và cấu hình hệ thống DNS server trên Linux.
¾ Chương III : Cách cài đặt và cấu hình hệ thống DNS server cluster.
¾ Chương IV : Kiểm tra hoạt động của hệ thống DNS server cluster.
Mặc dù đã có nhiều cố gắng để hoàn thành đề tài này, tuy nhiên trong quá trình thiết
kế hệ thống, cũng như trong quá trình viết báo cáo không sao tránh khỏi những sơ xuất,
thiếu sót nhất định. Rất mong sự phê bình, góp ý chân thành từ Quý Thầy, Cô để đề tài này
ngày càng hoàn thiện hơn và thật sự hữu dụng trong thực tế.
GVHD: Ths Ninh Xuân Hương
Trang 5/108
SVTH: Nguyễn Trí Thức
Trường Đại Học Mở TP.HCM
XD Hệ Thống Server Cluster Bằng Mã Nguồn Mở
ĐỀ TÀI:
XÂY DỰNG HỆ THỐNG
SERVER CLUSTER BẰNG MÃ NGUỒN MỞ
MÔ PHỎNG “HỆ THỐNG DNS SERVER CLUSTER”
`
`
`
users
Response
Internet/Intranet
Load Balancer
Master
eth0
eth1
Real server 1
Internetwork
eth1
Virtual IP
Real server 2
Eth0
Load Balancer
Slave
Real server 3
Cluster System
GVHD: Ths Ninh Xuân Hương
Trang 6/108
SVTH: Nguyễn Trí Thức
Trường Đại Học Mở TP.HCM
XD Hệ Thống Server Cluster Bằng Mã Nguồn Mở
PHẦN A:
CƠ SỞ LÝ THUYẾT
GVHD: Ths Ninh Xuân Hương
Trang 7/108
SVTH: Nguyễn Trí Thức
Trường Đại Học Mở TP.HCM
XD Hệ Thống Server Cluster Bằng Mã Nguồn Mở
CHƯƠNG I: GIỚI THIỆU HỆ THỐNG
SERVER CLUSTER BẰNG MÃ NGUỒN MỞ
I. Linux Virtual Server(LVS):
-
Linux Virtual Server (LVS): là một hệ thống các servers có khả năng chịu tải và khả
năng sẵn sàng cao. LVS được xây dựng trên một hệ thống server cluster bao gồm
nhiều servers thật (real servers). Hệ thống server cluster này hoàn toàn trong suốt đối
với người dùng, người dùng tương tác với hệ thống cluster như một server đơn có khả
năng chịu tải và khả năng sẵn sàng cao.
Hình 1.1.1: Mô hình LVS
-
-
Các real server và load balancer được kết nối với nhau thông qua hệ thống mạng LAN
hay WAN. Người dùng tương tác với cluster thông qua một địa chỉ IP ảo, đến load
balancer, load balancer sẽ điều phối các requests đến các real servers.
LVS có khả năng xác định tình trạng của một real server và dịch vụ chạy trên real
server. Nếu có một real server failures, cluster sẽ tự động loại bỏ real server đó ra khỏi
cluster và ngược lại cluster sẽ tự động thêm real server vào cluster trong trường hợp
real server hoạt động trở lại. Việc thêm hay loại bỏ các real server hoàn toàn trong suốt
và không ảnh hưởng đến người dùng.
LVS còn được biết đến với cái tên “Load Balancing Server cluster”.
GVHD: Ths Ninh Xuân Hương
Trang 8/108
SVTH: Nguyễn Trí Thức
Trường Đại Học Mở TP.HCM
XD Hệ Thống Server Cluster Bằng Mã Nguồn Mở
II. Tại sao cần sử dụng LVS ?
-
-
Với sự phát triển rất mạnh mẽ của internet, và vai trò của internet ngày càng trở nên
hết sức quan trọng trong cuộc sống của chúng ta. Lưu lượng truy cập internet tăng lên
một cách đáng kể, và tốc độ tăng trưởng trên 100% hàng năm. Điều này đòi hỏi khả
năng xử lý của các server ngày càng cao với tốc độ nhanh. Để giải quyết vấn đề này,
có 2 giải pháp được đưa ra:
¾ Thứ 1: Nếu sử dụng một server, để đáp ứng khả năng xử lý ngày càng cao thì
cần phải năng cấp server. Tuy nhiên việc năng cấp này thực hiện khá phức tạp,
đôi khi không thể nâng cấp được và chi phí cho việc nâng cấp khá cao so với khả
năng xử lý sau khi nâng cấp.
¾ Thứ 2: Nếu sử dụng nhiều server và xây dựng hệ thống cluster, khi nhu cầu xử
lý tăng, ta có thể tăng thêm server vào cluster hoàn toàn trong suốt với người
dùng và dể dàng thực hiện.
Có nhiều giải pháp hiệu quả để xây dựng hệ thống cluster:
¾ DNS based load balancing cluster: là giải pháp đơn giản nhất để xây dụng hệ
thống cluster cho một dịch vụ mạng như: DNS, WWW, MAIL, FPT,… Nó sử
dụng hệ thống tên miền để điều phối các requests đến các servers khác nhau
thông qua việc phân giải một tên miền thành nhiều địa chỉ IP khác nhau tương
ứng với địa chỉ IP của các servers. Khi có một request đến DNS server yêu cầu
phân giải tên miền, DNS server sẽ trả về một trong số các địa chỉ IP của các
server tuy theo thuật toán phân chia requets được qui định trong thuộc tính rrsetorder của DNS. Tuy nhiên do cơ chế caching DNS từ phía người dùng nên giải
pháp này không cân bằng tải một cách tuyệt đối.
¾ Dispatcher based load balancing cluster: Dispatcher còn được biết đến với tên
load balancer, Dispatcher được sử dụng để điều phối các requests đến các real
server trong cluster. Người dùng tương tác với hệ thống cluster như là một server
đơn có khả năng chịu tải và khả năng sẵn sàng cao. So sánh với giải pháp DNS
based thì Dispatcher phân chia requests một cách hiệu quả hơn, Dispatcher phân
chia requests dựa trên số connecion đến nên khắc phục được nhược điểm
caching phía người dùng của giải pháp DNS based. Ngoài ra Dispatcher còn có
thể phát hiện được real server fail, có thể thêm và loại bỏ các real server một
cách dể dàng.
III. Nguyên lý hoạt động của LVS:
-
-
Linux Virtual Server Project triển khai layer 4 switching trên Linux Kernel, nó cho
phép load balance các TCP và UDP sessions giữa nhiều real servers. Chính vì thế nó
có khả năng mở rộng các dịch vụ mạng như: DNS Server, Web Server, Mail Server,
FTP Server,… bằng cách tăng thêm real server.
Mặc dù LVS chạy trên HĐH Linux, nhưng nó có thể thực hiện load balance các kết
nối từ người dùng đầu cuối đang chạy bất kỳ HĐH nào đến các real server đang chạy
bất kỳ HĐH nào.
Khả năng xử lý của hệ thống LVS là rất cao, nó có thể xử lý lên đến 100,000
connections cùng lúc mà không cần đến một thiết bị phần cứng đắt tiền (ví dụ thiết bị
phần cứng có khả năng load balance và high availability là F5).
Các thuật ngữ dùng trong LVS:
GVHD: Ths Ninh Xuân Hương
Trang 9/108
SVTH: Nguyễn Trí Thức
Trường Đại Học Mở TP.HCM
-
XD Hệ Thống Server Cluster Bằng Mã Nguồn Mở
¾ Linux director (hay load balancer): Là sever linux được cài đặt phần mềm LVS,
server này sẽ nhận packet từ các end users và forward chúng đến các real servers.
¾ End User: Máy tính khởi tạo kết nối, thường là các PC của người dùng.
¾ Real server: Server nhận và xử lý các request từ end users.
¾ Virtual IP Address (VIP): Địa chỉ IP ảo được sinh ra từ cluster, thường địa chỉ
Vitual IP này nằm trên load balancer master. End users sẽ gửi requests đến IP ảo
này, sau đó requests sẽ phân chia cho các real servers.
Layer 4 Switching:
Hình 1.1.2: Layer 4 Switching trong LVS
¾ Layer 4 switching được thực hiện bằng cách forwarding các TCP/IP connections
và UDP/IP datagrams từ ngoài vào đến các real servers. Các packet được đi vào
linux director (hay còn gọi là load balancer), sau đó sẽ được quyết định forward
đến một real server nào tuỳ theo từng thuật toán phân chia request. Khi phân chia
requests, các subrequest packet (các bộ packet con) của cùng một connection sẽ
được gửi đến cùng một real server để bảo đảm tính toàn vẹn của connection.
IV. IP load balancing:
Có 3 kỹ thuật có thể triển khai trên linux director (load balancer) để chuyển tiếp packet từ
load balancer đến các real server đó là: Virtual server qua NAT (VS/NAT), Virtual server
qua Direct Routing (VS/DR), và Virtual server qua IP Tunneling (VS/TUN).
BẢNG SO SÁNH 3 KỸ THUẬT CHUYỂN TIẾP PACKET
VS/NAT
VS/TUN
VS/DR
Any
tunneling
non-arp device
server network Private
LAN/WAN
LAN
server number low (10~20)
High(>100) High(>100)
Server
server gateway load balancer own router
GVHD: Ths Ninh Xuân Hương
Trang 10/108
own router
SVTH: Nguyễn Trí Thức
Trường Đại Học Mở TP.HCM
XD Hệ Thống Server Cluster Bằng Mã Nguồn Mở
1. Network Address Translation (NAT):
-
-
Vì số lượng địa chỉ IP public ngoài internet có giới hạn, và vì một vài lý do bảo mật,
mà có nhiều máy tính sử dụng địa chỉ IP private. Những địa chỉ private này không thể
sử dụng trên internet. Chính vì thế người ta đưa ra khái niệm NAT.
Có 2 dạng NAT:
¾ Network Address Translation (NAT): ánh xạ một địa chỉ IP thành một địa chỉ
IP (thường dùng để ánh xạ một địa chỉ IP private thành một địa chỉ IP public).
¾ Port Address Translation (PAT): ánh xạ một dãy địa chỉ IP thành một địa chỉ
IP (thường dùng để ánh xạ một dãy địa chỉ IP private thành một địa chỉ IP
public).
LVS qua NAT trên Linux được thực hiện bằng Port Address Translation (PAT).
Hình 1.1.3: Kỹ thuật Network Address Translation
-
Khi người dùng truy cập dịch vụ, được cung cấp bởi server cluster, request packet đi
đến load balancer (linux director) thông qua Virtual IP. Load balancer sẽ kiểm tra địa
chỉ destination (IP và port) của packet, sử dụng thuật toán phân chia request để chỉ
định real server sẽ xử lý packet, đồng thời sẽ ánh xạ địa chỉ destination (IP và port) của
packet thành địa chỉ IP và port của real server tương ứng. Khi packet trả về từ real
server đến load balancer, sẽ được ánh xạ ngược lại địa chỉ source (IP và port) của
packet thành địa chỉ của load balancer (Virtual IP và port) sau đó chuyển tiếp packet
đến người dùng.
Ví dụ: Hệ thống cluster dành cho Web Server như hình vẽ sau:
GVHD: Ths Ninh Xuân Hương
Trang 11/108
SVTH: Nguyễn Trí Thức
Trường Đại Học Mở TP.HCM
XD Hệ Thống Server Cluster Bằng Mã Nguồn Mở
Hình 1.1.4: NAT dùng trong LVS Web server
-
-
Khi người dùng truy cập web server thông qua IP ảo 202.103.106.5, request sẽ đi đến
load balancer, sau khi sử dụng thuật toán phân chia request, giả sử request được chi
cho real server 172.16.0.3. Khi đó load balancer sẽ ánh xạ destination IP thành
172.16.0.3 và chuyển tiếp packet đến real server 172.16.0.3. Packet trả về từ real
server 172.16.0.3 đến load balancer sẽ được ánh xạ ngược lại có Source IP thành
Virtual IP của cluster 203.103.106.5 và sẽ chuyển tiếp packet đến người dùng.
Ưu điểm của kỹ thuật này là các real server có thể sử dụng địa chỉ IP Private, chỉ có
load balancer là cần có địa chỉ IP Public => tiết kiệm được địa chỉ IP Public.
Tuy nhiên, nhược điểm lớn nhất của LVS qua NAT đó là sẽ xảy ra tình trạng
“bottleneck” (thắt nút cổ chai) tại load balancer vì mọi requests và responses điều đi
qua load balancer và nếu dùng kỹ thuật NAT thì load balancer chỉ có thể phân chia tối
đa cho 22 real servers.
GVHD: Ths Ninh Xuân Hương
Trang 12/108
SVTH: Nguyễn Trí Thức
Trường Đại Học Mở TP.HCM
XD Hệ Thống Server Cluster Bằng Mã Nguồn Mở
2. Direct Routing:
Hình 1.1.5: Kỹ thuật Direct Routing
-
-
-
Trong kỹ thuật Virtual server qua NAT, tất cả các requests và responses điều
phải đi xuyên qua load balancer dẫn đến tình trạng load balancer bị “bottleneck”.
Trong Virtual server qua Direct routing, load balancer chỉ phân chia requests
đến các real servers, các real server xử lý requests và trả về trực tiếp cho người
dùng. Vì thế load balancer có thể handle số lượng requests lớn và có thể phân
chia requests cho hơn 100 real servers.
Việc điều phối các requests của cơ chế này giống với cơ chế NetDispatcher của
IBM. Virtual IP được khởi tạo tại load balancer và tại các real servers, nhưng tại
các real server sẽ được cấu hình chặn không cho packet đi vào real server thông
qua Virtual IP (chặn ARP reply). Đồng thời cho phép các packet từ ngoài vào
load balancer thông qua Virtual IP, load balancer sẽ kiểm tra địa chỉ destination
(IP và port) của packet, sử dụng thuật toán phân chia request để chỉ định real
server sẽ xử lý packet đó, đồng thời định tuyến trực tiếp packet đến real server
tương ứng (load balancer chỉ làm nhiệm vụ thay đổi địa chỉ MAC destination
của packet thành MAC của real server tương ứng). Packet trả về từ real server sẽ
được trả lời trực tiếp cho ngươi dùng không đi qua load balancer.
Chú ý: việc sử dụng Direct Routing thì yêu cầu load balancer và các real server
phải nằm cùng trên một đoạn mạng.
GVHD: Ths Ninh Xuân Hương
Trang 13/108
SVTH: Nguyễn Trí Thức
Trường Đại Học Mở TP.HCM
XD Hệ Thống Server Cluster Bằng Mã Nguồn Mở
3. IP-IP Encapsulation (Tunneling):
-
Sự khác biệt nhất giữa LVS qua Tunneling và LVS qua NAT đó là load balancer
sẽ gửi request đến real server thông qua việc đóng gói IP tunnel và reply packet
từ các real server sẽ được trả lời trực tiếp cho người dùng.
Hình 1.1.6: Kỹ thuật Tunneling
-
-
Khi người dùng truy cập dịch vụ, được cung cấp bởi server cluster, request
packet đi đến load balancer (Linux director) thông qua Virtual IP. Load balancer
sẽ kiểm tra địa chỉ destination (IP và port) của packet, sử dụng thuật toán phân
chia request để chỉ định real server sẽ xử lý packet, đồng thời sẽ encapsulate
packet với một IP datagram và chuyển tiếp packet đến real server tương ứng.
Real server sau khi nhận được packet đã được encapsulate, nó sẽ decapsulate, xử
lý request và trả lời trực tiếp cho người dùng.
Chú ý: Cơ chế này không đòi hỏi load balancer và các real server phải nằm
cùng chung trên một đoạn mạng, nhưng buộc hệ thống mạng phải hỗ trợ IP
encapsulate/decapsulate protocol.
GVHD: Ths Ninh Xuân Hương
Trang 14/108
SVTH: Nguyễn Trí Thức
Trường Đại Học Mở TP.HCM
XD Hệ Thống Server Cluster Bằng Mã Nguồn Mở
V. Các thuật toán phân chia request trên load balancer:
1. Round-Robin Scheduling:
-
-
Thuật toán Round-Robin sẽ chuyển các incoming packet đến server tiếp theo,
theo một danh sách các real server có sẵn. Giả sử cluster gồm 3 servers (server
A, server B và server C), thì request 1 sẽ chuyển đến server A, request 2 sẽ
chuyển đến server B, request 3 sẽ chuyển đến server C, và request 4 sẽ chuyển
đến server A, … cứ như vậy sẽ tạo thành một chu trình hay “round-robin”. Thuật
toán này sẽ xem khả năng xử lý của các real server như nhau, không có server
nào mạnh hơn server nào hay server nào ưu tiên hơn server nào. Và tất cả các
real server sẽ được chia số request bằng nhau.
LVS cung cấp một vài đặt tính thuận lợi hơn kiểu round-robin DNS truyền
thống. Round-robin DNS truyền thống sẽ phân giải một tên miền thành nhiều địa
chỉ IP. Khi một host truy cập đến một tên miền nào đó, sẽ gửi query đến DNS
Server, yêu cầu phân giải tên miền thành địa chỉ IP, và khi đó DNS sẽ phân giải
tên miền này thành một địa chỉ IP. Khi có một host khác gửi yêu cầu phân giải
cùng tên miền này, khi đó DNS sẽ phân giải thành một địa chỉ IP khác, như vậy
sẽ tạo thành load balance. Đây còn gọi là load balance dạng Host-Based, Tuy
nhiên, giải pháp này sẽ gặp trở ngại đối với caching trên DNS, dẫn đến tình trạng
load imbalance. LVS thực hiện load balance theo dạng Connection-Based tức là
load balance dựa vào số connection đến và vì thế sẽ cân bằng tải hơn.
2. Weighted Round-Robin Scheduling:
-
Weighted Round-Robin được thiết kế để áp dụng tốt hơn trong trường hợp khả
năng xử lý của các real server không bằng nhau, Tức là sẽ có server mạnh hơn và
server yếu hơn. Khi đó, load balance sẽ round robin theo một trọng số được qui
định sẵn. Server với trọng số cao hơn sẽ get nhiều connections hơn. Ví dụ có các
read server là A, B và C lần lược có các trọng số là 4,3 và 2, thuật toán sẽ phân
chia số request theo trọng số như sau: AABABCABC.
3. Least-Connection Scheduling:
-
-
Least-Connection sẽ chuyển tiếp các request đến real server có số connection
đang được thiết lập ít nhất. Khi có request đến load balancer sẽ đếm số
connection đang được thiết lập trên từng real server, và sẽ gửi request đến real
server có số connecion đang được thiết lập ít nhất.
Thoạt nhìn ta thấy thuật toán Least-Connection có thể thực hiện cân bằng tải tốt
khi khả năng xử lý của các real server không bằng nhau, bởi vì server mạnh sẽ
get được nhiều connection hơn. Nhưng thực tế, nó còn phụ thuộc vào trạng thái
TIME_WAIT của TCP connecition. TIME_WAIT của TCP thường là 2 phút. Ví
dụ: một server A mạnh gấp 2 lần server B, server A đã xử lý vài ngàn requests và
đang giữ chúng trong TCP TIME_WAIT, nhưng server B cũng đã xử lý vài
ngàn requests, nhưng không giữ chúng trong TCP TIME-WAIT. Vì thế khi có
request mới đến thì sẽ chia cho server B => tạo ra việc mất cân bằng trong thuật
toán Least-Connection.
GVHD: Ths Ninh Xuân Hương
Trang 15/108
SVTH: Nguyễn Trí Thức
Trường Đại Học Mở TP.HCM
XD Hệ Thống Server Cluster Bằng Mã Nguồn Mở
4. Weighted Least-Connection Scheduling:
-
Giống như Least-Connection, Weighted Least-Connection cũng phân chia
request dựa vào số connection đang được thiết lập ít nhất, ngoài ra nó còn dựa
vào trọng số. Real server nào có số connection đang được thiết lập ít nhất và có
trọng số lớn nhất sẽ được ưu tiên forward request nhất.
5. Destination Hasing Scheduling:
-
Request được chia cho real server phụ thuộc vào kết quả tìm kiếm destination IP
address và hash table. Hash table chứa danh sách các connection đã được chia
cho các real server.
6. Source Hashing Scheduling:
-
Request được chia cho real server phụ thuộc vào kết quả tìm kiếm source IP
address và hash table. Hash table chứa danh sách các connection đã được chia
cho các real server.
7. Shortest Expected Delay Scheduling:
-
Request được chia cho real server dựa vào thời gian delay tại real server ít nhất.
8. Never Queue Scheduling:
-
Khi có một idle server trong cluster, thì request sẽ được chia cho idle server đó,
nhưng khi không còn idle server trong cluster thì request sẽ chia cho real server
theo thuật toán “Shortest Expected Delay”.
VI. Kiến trúc của LVS cluster:
-
Nhằm mục đích xây dựng hệ thống trong suốt đối với người dùng, khả năng sẵn sàng
cao, dể quản lý và nâng cấp, nên LVS được xây dựng theo kiến trúc three-tie ( 3 lớp).
GVHD: Ths Ninh Xuân Hương
Trang 16/108
SVTH: Nguyễn Trí Thức
Trường Đại Học Mở TP.HCM
XD Hệ Thống Server Cluster Bằng Mã Nguồn Mở
Hình 1.1.7: Kiến trúc three-tie trong LVS
-
-
Kiến trúc 3 lớp bao gồm:
¾ Load balancer: là các servers nằm ngoài cùng, chịu trách nhiệm nhận các
requests từ người dùng, thực hiện phân chia các requests đến các real server bên
trong.
¾ Server cluster (real server): là các servers chạy một dịch vụ mạng nào đó như:
DNS, WEB, MAIL, FTP,… Server cluster chịu trách nhiệm nhận các requests từ
load balancer, xử lý requests, và trả kết quả về cho người dùng đầu cuối.
¾ Shared Storage: Cung cấp vùng không gian lưu trữ chung cho các server cluster
(real server). Vì thế sẽ dễ dàng cho các real server sử dụng cùng một nội dung
cung cấp cùng một dịch vụ.
Load balancer: Là điểm vào (entry-point) duy nhất của toàn bộ hệ thống cluster. Nó
có thể triển khai kỹ thuật IP load balancing hay application-level load balancing
bên trong linux kernel. Khi IP load balancing được sử dụng thì tất cả các real server
phải chạy cùng một dịch vụ và cung cấp cùng nội dung. Load balancer chuyển tiếp các
requests đến các real server theo một thuật toán phân chia request. Khi sử dụng
application-level load balancing thì các real server có thể cung cấp các nội dung khác
nhau trong cùng một cluster, và load balancer có thể chuyển tiếp các requests đến các
real server khác nhau tuy theo nội dung yêu cầu.
GVHD: Ths Ninh Xuân Hương
Trang 17/108
SVTH: Nguyễn Trí Thức
Trường Đại Học Mở TP.HCM
-
-
-
XD Hệ Thống Server Cluster Bằng Mã Nguồn Mở
Server cluster: Là các node bên trong của cluster, các node này có thể tăng hay giảm
tuỳ theo từng dịch vụ và lưu lượng của hệ thống. Ví dụ như dịch vụ web các requests
thường độc lập và có thể chạy song song trên các server khác nhau. Vì thế, số node
của cluster có thể tăng lên để đáp ứng khả năng truy cập web và khả năng xử lý của hệ
thống.
Shared Storage: Có thể là một hệ thống Database, network file systems, or
distributed file systems. Những dữ liệu này cần cho các real server để tra cứu và cập
nhật một cách tự động. Khi các real server ghi dữ liệu song song thì hệ thống dữ liệu
phải bảo đảm tính kiên định, không xảy ra tranh chấp dữ liệu trong trường hợp truy
cập dữ liệu đồng thời.
Load balancer, server cluster và shared storage thường được kết nối bằng được truyền
tốc độ cao như 100Mbps Ethernet network và Gigabit Ethernet network. Vì thế về
phần network bên trong cluster sẽ không xảy ra tình trạng “nghẽn” trong trường hợp
lưu lượng tăng cao.
VII. High Availability của LVS:
1. Hoạt động high availability:
-
-
Ngày càng có nhiều ứng dụng “mission-critical” chạy trên mạng internet. Việc cung
cấp các dịch vụ high availability là hết sức quan trọng và cần thiết. Một trong số
những thuận lợi của hệ thống cluster là khả năng redundance cả về phần cứng lẫn
phần mềm, bởi vì hệ thống cluster bao gồm nhiều nodes hoạt động độc lập, và mỗi
node chạy một bản sao của hệ điều hành và ứng dụng phần mềm. High availability
được thực hiện bằng việc định kỳ kiểm tra, xác định node fail, dịch vụ fail trên mỗi
node, sau đó tự động loại bỏ node nếu node fail và thêm node nếu node hoạt động trở
lại.
Thông thường, trên load balancer có những tiến trình giám sát các dịch vụ chạy trên
các real servers, để định kỳ kiểm tra trạng thái của các real server. Định kỳ, load
balancer sẽ gửi request đến các real server để kiểm tra, nếu trong một khoảng thời gian
mà real server không có trả lời thì load balancer sẽ xem như real server đó fail và sẽ
loại bỏ real server đó ra khỏi cluster. Và nếu real server fail hoạt động trở lại, tiến trình
giám sát trên load balancer sẽ phát hiện và thêm real server đó vào cluster.
GVHD: Ths Ninh Xuân Hương
Trang 18/108
SVTH: Nguyễn Trí Thức
Trường Đại Học Mở TP.HCM
XD Hệ Thống Server Cluster Bằng Mã Nguồn Mở
Hình 1.1.8: High Availability của LVS
-
-
Tuy nhiên, nếu như load balancer chỉ chạy trên một server đơn thì khi load balancer
fail toàn bộ hệ thống sẽ ngưng hoạt động. Để ngăn chặn điều này, ta nên cấu hình một
server load balancer master và một server load balancer slave (backup). Tiến trình
heartbeat chạy trên cả load balancer master và load balancer slave, chúng định kỳ gửi
heartbeat message “I’m alive” cho nhau thông qua cổng serial hay ethernet. Khi tiến
trình heartbeat trên load balancer slave không thể nhận được heartbeat meassage gửi
từ load balancer master sang trong một khoảng thời gian được xác định trước, nó sẽ
xem như load balancer master fail và tự động “takeover” thành master để nhận và
phân chia các requests. Khi load balancer master hoạt động trở lại, có hai giải pháp,
một là nó tự động trở thành load balancer slave, hai là nó sẽ “takeove” thành load
balancer master tuỳ thuộc vào cấu hình.
Khi người dùng gửi requests đến load balancer master, thì load balancer master sẽ lưu
lại trạng thái và các thông tin của kết nối đó. Việc lưu lại các thông tin và trạng thái kết
nối này nhằm hai mục đích: thứ 1 lưu giữ các kết nối chưa được forward đến các real
server để xử lý, thứ 2 nhờ lưu lại trạng thái kết nối nên các sub connections của
connection trước được phân chia cho cùng một real server (tránh mất mát thông tin).
Tuy nhiên, trong trường hợp load balancer master fail, load balancer slave sẽ
GVHD: Ths Ninh Xuân Hương
Trang 19/108
SVTH: Nguyễn Trí Thức
- Xem thêm -