Đăng ký Đăng nhập
Trang chủ Nghiên cứu và xây dựng hệ thống server cluster bằng mã nguồn mở...

Tài liệu Nghiên cứu và xây dựng hệ thống server cluster bằng mã nguồn mở

.PDF
109
664
140

Mô tả:

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 -

Tài liệu liên quan