Giới thiệu về Máy tính Khả dụng Cao: Khái niệm và Lý thuyết

Hãy tập trung nhiều hơn vào một số nguyên tắc kiến ​​trúc lớn hơn của quản lý cụm so với bất kỳ giải pháp công nghệ đơn lẻ nào.

Chúng ta sẽ thấy một số triển khai thực tế ở phần sau của cuốn sách - và bạn có thể tìm hiểu nhiều về cách hoạt động này trên AWS của Amazon trong cuốn sách Tìm hiểu Dịch vụ Web Amazon trong Một tháng Ăn trưa của tôi từ Manning. Nhưng hiện tại, trước tiên hãy đảm bảo rằng chúng ta đã cảm thấy thoải mái với những điều cơ bản.

Chạy các hoạt động máy chủ bằng cách sử dụng các cụm máy tính vật lý hoặc máy tính ảo đều nhằm cải thiện cả độ tin cậy và hiệu suất hơn và cao hơn những gì bạn có thể mong đợi từ một máy chủ duy nhất, công suất cao. Bạn tăng thêm độ tin cậy bằng cách tránh treo toàn bộ cơ sở hạ tầng của mình tại một điểm lỗi duy nhất (tức là một máy chủ duy nhất). Và bạn có thể tăng hiệu suất thông qua khả năng bổ sung rất nhanh sức mạnh và dung lượng máy tính bằng cách mở rộng và mở rộng.

Điều này có thể xảy ra thông qua việc phân bổ khối lượng công việc của bạn một cách thông minh giữa các môi trường địa lý và nhu cầu đa dạng (cân bằng tải), cung cấp

các máy chủ dự phòng có thể nhanh chóng được đưa vào sử dụng trong trường hợp một nút hoạt động bị lỗi (chuyển đổi dự phòng), tối ưu hóa cách triển khai cấp dữ liệu của bạn hoặc cho phép khả năng chịu lỗi thông qua các kiến ​​trúc được ghép nối lỏng lẻo.

Chúng tôi sẽ nhận được tất cả những điều đó. Tuy nhiên, trước tiên, đây là một số định nghĩa cơ bản:

Nút : Một máy duy nhất (vật lý hoặc ảo) chạy các hoạt động máy chủ độc lập trên hệ điều hành của chính nó. Vì bất kỳ nút đơn nào cũng có thể bị lỗi, nên việc đáp ứng các mục tiêu về tính khả dụng yêu cầu nhiều nút hoạt động như một phần của một cụm.

Cụm : Hai hoặc nhiều nút máy chủ hoạt động phối hợp với nhau để hoàn thành các nhiệm vụ riêng lẻ như một phần của dịch vụ lớn hơn, trong đó nhận thức lẫn nhau cho phép một hoặc nhiều nút bù đắp cho sự mất mát của nút khác.

Lỗi máy chủ: Nút máy chủ không thể đáp ứng đầy đủ các yêu cầu của máy khách. Điều này có thể là do sự cố hoàn toàn, sự cố kết nối hoặc do nhu cầu cao quá tải.

Chuyển đổi dự phòng : Cách một cụm cố gắng đáp ứng nhu cầu của các khách hàng không có do lỗi của một nút máy chủ duy nhất bằng cách khởi chạy hoặc chuyển hướng các nút khác để lấp đầy khoảng trống dịch vụ.

Dự phòng : Việc khôi phục các trách nhiệm đối với nút máy chủ khi nó phục hồi sau lỗi.

Nhân rộng : Việc tạo ra các bản sao của các kho lưu trữ dữ liệu quan trọng để cho phép truy cập đồng bộ đáng tin cậy từ nhiều nút máy chủ hoặc máy khách và để đảm bảo chúng sẽ tồn tại sau thảm họa. Nhân rộng cũng được sử dụng để cho phép cân bằng tải đáng tin cậy.

Dự phòng : Việc cung cấp nhiều nút máy chủ vật lý hoặc ảo giống hệt nhau mà trong đó bất kỳ nút nào cũng có thể sử dụng các máy khách mồ côi của một nút khác không thành công.

Bộ não phân chia : Một trạng thái lỗi trong đó giao tiếp mạng giữa các nút hoặc bộ nhớ được chia sẻ bằng cách nào đó bị hỏng và nhiều nút riêng lẻ, mỗi người tin rằng đó là nút duy nhất vẫn hoạt động, tiếp tục truy cập và cập nhật một nguồn dữ liệu chung. Mặc dù điều này không ảnh hưởng đến thiết kế không chia sẻ, nhưng nó có thể dẫn đến lỗi máy khách và hỏng dữ liệu trong các cụm được chia sẻ.

Hàng rào : Để ngăn chặn não bị phân tách, daemon stonithd có thể được định cấu hình để tự động đóng một nút bị trục trặc hoặc áp đặt một hàng rào ảo giữa nó và các tài nguyên dữ liệu của phần còn lại của một cụm. Miễn là có khả năng nút vẫn hoạt động, nhưng không phối hợp đúng với phần còn lại của cụm, nó sẽ vẫn ở sau hàng rào. Stonith là viết tắt của “Bắn nút khác vào đầu”. Có thật không.

Số lượng : Bạn có thể định cấu hình hàng rào (hoặc buộc tắt máy) được áp dụng cho các nút không liên lạc với nhau hoặc với một số tài nguyên được chia sẻ. Quorum thường được định nghĩa là hơn một nửa số nút trên tổng số cụm. Sử dụng các cấu hình được xác định như vậy, bạn tránh được việc có hai nhóm nút con, mỗi nhóm tin rằng nhóm kia đang hoạt động sai, cố gắng loại bỏ nhóm kia.

Khôi phục thảm họa y: Cơ sở hạ tầng của bạn khó có thể được coi là khả dụng cao nếu bạn không có hệ thống sao lưu tự động cùng với kế hoạch khôi phục thảm họa được tích hợp và thử nghiệm. Kế hoạch của bạn sẽ cần tính đến việc triển khai lại từng máy chủ trong cụm của bạn.

Cụm hoạt động / bị động

Ý tưởng đằng sau chuyển đổi dự phòng dịch vụ là sự mất mát đột ngột của bất kỳ nút nào trong một cụm dịch vụ sẽ nhanh chóng được tạo ra bởi một nút khác thay thế nó. Để điều này hoạt động, địa chỉ IP sẽ tự động được chuyển đến nút chờ trong trường hợp chuyển đổi dự phòng. Ngoài ra, các công cụ định tuyến mạng như bộ cân bằng tải có thể được sử dụng để chuyển hướng lưu lượng truy cập khỏi các nút bị lỗi. Cách chính xác chuyển đổi dự phòng xảy ra phụ thuộc vào cách bạn đã định cấu hình các nút của mình.

Ban đầu sẽ chỉ có một nút được định cấu hình để phục vụ các máy khách và sẽ tiếp tục làm như vậy một mình cho đến khi bằng cách nào đó không thành công. Sau đó, trách nhiệm đối với các khách hàng hiện tại và mới sẽ chuyển (tức là “chuyển đổi dự phòng”) sang nút thụ động - hoặc sao lưu - mà cho đến nay vẫn được giữ một cách thụ động trong dự trữ. Áp dụng mô hình cho nhiều máy chủ hoặc các thành phần trong phòng máy chủ (như bộ nguồn), n + 1 dự phòng chỉ cung cấp đủ tài nguyên cho nhu cầu hiện tại cộng với một đơn vị nữa để trang trải khi hỏng hóc.

Hoạt động / Cụm hoạt động

Một cụm sử dụng thiết kế hoạt động / hoạt động sẽ có hai hoặc nhiều nút được cấu hình giống hệt nhau phục vụ các máy khách một cách độc lập.

Nếu một nút bị lỗi, các máy khách của nó sẽ tự động kết nối với nút thứ hai và, trong chừng mực tài nguyên cho phép, nhận toàn bộ quyền truy cập tài nguyên.

Khi nút đầu tiên phục hồi hoặc được thay thế, các máy khách một lần nữa sẽ được phân chia giữa cả hai nút máy chủ.

Lợi thế chính của việc chạy các cụm hoạt động / hoạt động nằm ở khả năng cân bằng hiệu quả khối lượng công việc giữa các nút và thậm chí cả mạng. Bộ cân bằng tải - hướng tất cả các yêu cầu từ máy khách đến máy chủ có sẵn - được định cấu hình để giám sát hoạt động của nút và mạng và sử dụng một số thuật toán định trước để định tuyến lưu lượng truy cập đến những nút có khả năng xử lý tốt nhất. Các chính sách định tuyến có thể tuân theo một mô hình vòng tròn, trong đó các yêu cầu của khách hàng chỉ đơn giản là xen kẽ giữa các nút có sẵn hoặc theo trọng số đặt trước trong đó một nút được ưu tiên hơn nút khác theo một số tỷ lệ.

Việc có một nút thụ động hoạt động như một sự thay thế dự phòng cho đối tác của nó trong cấu hình cụm chủ động / thụ động cung cấp khả năng dự phòng tích hợp đáng kể. Nếu hoạt động của bạn hoàn toàn yêu cầu dịch vụ không bị gián đoạn và chuyển đổi dự phòng liền mạch, thì một số biến thể của kiến ​​trúc chủ động / thụ động sẽ là mục tiêu của bạn.

Shared-Nothing so với Shared-Disk Cluster

Một trong những nguyên tắc hướng dẫn của máy tính phân tán là tránh để hoạt động của bạn dựa vào bất kỳ điểm lỗi nào. Có nghĩa là, mọi tài nguyên phải được sao chép tích cực (dự phòng) hoặc có thể thay thế độc lập (chuyển đổi dự phòng) và không được có phần tử đơn lẻ nào mà lỗi có thể làm hỏng toàn bộ dịch vụ của bạn.

Bây giờ, hãy tưởng tượng rằng bạn đang chạy một vài chục nút mà tất cả đều dựa trên một máy chủ cơ sở dữ liệu duy nhất cho chức năng của chúng. Mặc dù sự cố của bất kỳ số lượng nút nào sẽ không ảnh hưởng đến tình trạng hoạt động liên tục của các nút vẫn còn đó, nhưng nếu cơ sở dữ liệu bị hỏng, toàn bộ cụm sẽ trở nên vô dụng. Tuy nhiên, các nút trong một cụm không chia sẻ gì sẽ (thường) duy trì cơ sở dữ liệu của riêng chúng để - giả sử chúng được đồng bộ hóa và định cấu hình đúng cách để đảm bảo an toàn cho giao dịch liên tục - sẽ không có lỗi bên ngoài nào ảnh hưởng đến chúng.

Điều này sẽ có tác động đáng kể hơn đến cụm cân bằng tải, vì mỗi nút cân bằng tải có nhu cầu liên tục và quan trọng để truy cập đồng thời vào dữ liệu. Tuy nhiên, nút thụ động trên một hệ thống chuyển đổi dự phòng đơn giản có thể tồn tại một thời gian mà không cần truy cập.

Mặc dù việc thiết lập như vậy có thể làm chậm cách cụm phản hồi với một số yêu cầu - một phần vì lo ngại về lỗi bộ não có thể yêu cầu hàng rào định kỳ thông qua việc thực hiện - sự đánh đổi có thể được biện minh cho các triển khai nhiệm vụ quan trọng trong đó độ tin cậy là yếu tố chính.

khả dụng

Khi thiết kế cụm của bạn, bạn sẽ cần phải có ý thức khá tốt về mức độ khoan dung của bạn đối với thất bại. Hay nói cách khác, với nhu cầu của con người hoặc máy móc sử dụng dịch vụ của bạn, sự gián đoạn dịch vụ có thể kéo dài bao lâu trước khi đám đông tràn qua cổng trước của bạn với những chiếc nĩa và ngọn đuốc rực lửa. Điều quan trọng là phải biết điều này, bởi vì lượng dư thừa bạn xây dựng trong thiết kế của mình sẽ có tác động rất lớn đến thời gian thất bại cuối cùng bạn sẽ phải đối mặt.

Rõ ràng, hệ thống bạn xây dựng cho một dịch vụ có thể ngừng hoạt động vào cuối tuần mà không bị ai phát hiện sẽ rất khác so với một trang thương mại điện tử mà khách hàng mong đợi truy cập 24/7. Ít nhất, bạn thường nên nhắm đến mức độ khả dụng trung bình ít nhất là 99% - với một số hoạt động yêu cầu kết quả trong thế giới thực cao hơn đáng kể. 99% thời gian hoạt động sẽ chuyển thành mất ít hơn tổng cộng bốn ngày trong mỗi năm.

Có một công thức tương đối đơn giản mà bạn có thể sử dụng để xây dựng ước tính hữu ích về Tính sẵn có (A). Ý tưởng là chia Thời gian trung bình trước khi thất bại cho Thời gian trung bình trước khi thất bại cộng với Thời gian trung bình để sửa chữa.

A = MTBF / (MTBF + MTTR)

Giá trị của A càng gần 1, thì cụm của bạn sẽ càng có sẵn. Để có được giá trị thực tế cho MTBF, có lẽ bạn sẽ cần phải dành thời gian để hệ thống thực chịu một số hình phạt nghiêm trọng và xem nó cẩn thận để tìm lỗi phần mềm, phần cứng và mạng. Tôi cho rằng bạn cũng có thể tham khảo các số liệu vòng đời được công bố của các nhà cung cấp phần cứng hoặc người tiêu dùng quy mô lớn như Backblaze để biết được phần cứng được sử dụng nhiều có thể tồn tại trong bao lâu.

MTTR sẽ là một sản phẩm trong thời gian cụm của bạn thay thế chức năng của một nút máy chủ bị lỗi (một quy trình tương tự như, mặc dù không giống với khôi phục thảm họa - tập trung vào việc thay thế nhanh phần cứng và kết nối bị lỗi). Lý tưởng nhất, đó sẽ là một giá trị càng gần 0 giây càng tốt.

Vấn đề là, trong thế giới thực, thường có quá nhiều biến chưa biết để công thức này thực sự chính xác, vì các nút chạy các cấu hình phần mềm khác nhau và được xây dựng bằng phần cứng có cấu hình và độ tuổi khác nhau sẽ có nhiều kỳ vọng về tuổi thọ. Tuy nhiên, nó có thể là một công cụ tốt để giúp bạn xác định thiết kế cụm phù hợp nhất cho dự án của bạn.

Với thông tin đó, bạn có thể dễ dàng tạo ước tính về thời gian ngừng hoạt động tổng thể mà dịch vụ của bạn có thể sẽ xảy ra trong suốt một năm.

Một cân nhắc liên quan, nếu bạn đang triển khai tài nguyên của mình trên một nhà cung cấp nền tảng bên thứ ba như VMWare hoặc Amazon Web Services, là Thỏa thuận mức dịch vụ (SLA) của nhà cung cấp. Ví dụ: EC2 của Amazon đảm bảo rằng các phiên bản máy tính của họ và thiết bị lưu trữ khối trong cửa hàng sẽ cung cấp Tỷ lệ phần trăm thời gian hoạt động hàng tháng ít nhất là 99,95% - tức là thời gian ngừng hoạt động dưới 5 giờ mỗi năm. AWS sẽ cấp các khoản tín dụng cho những tháng mà họ đã trượt mục tiêu - mặc dù gần như không đủ để bù đắp cho tổng chi phí kinh doanh trong thời gian ngừng hoạt động của bạn. Với thông tin đó, bạn có thể sắp xếp mức dự phòng dịch vụ phù hợp với nhu cầu riêng của mình.

Đương nhiên, với tư cách là nhà cung cấp dịch vụ cho khách hàng của chính mình, bạn có thể cần xuất bản SLA của riêng mình dựa trên ước tính MTBF và MTTR của bạn.

Xử lý phiên

Đối với bất kỳ mối quan hệ máy chủ-máy khách nào, dữ liệu được tạo bởi các phiên HTTP trạng thái cần được lưu theo cách sẵn sàng cho các tương tác trong tương lai. Kiến trúc cụm có thể tạo ra sự phức tạp nghiêm trọng cho các mối quan hệ này, vì máy chủ cụ thể mà khách hàng hoặc người dùng tương tác có thể thay đổi giữa bước này và bước tiếp theo.

Để minh họa, hãy tưởng tượng bạn đã đăng nhập vào Amazon.com, duyệt qua các sách của họ về đào tạo LPIC và định kỳ thêm một mặt hàng vào giỏ hàng của bạn (hy vọng sẽ có thêm nhiều bản sao của cuốn sách này). Tuy nhiên, vào thời điểm bạn đã sẵn sàng nhập thông tin thanh toán của mình và thanh toán, máy chủ bạn đã sử dụng để duyệt có thể không còn tồn tại nữa. Làm cách nào máy chủ hiện tại của bạn biết được bạn đã quyết định mua sách nào?

Tôi không biết chính xác cách Amazon xử lý vấn đề này, nhưng vấn đề thường được giải quyết thông qua một công cụ sao chép dữ liệu như memcached chạy trên một

nút bên ngoài (hoặc các nút). Mục tiêu là cung cấp quyền truy cập liên tục vào nguồn dữ liệu nhất quán và đáng tin cậy cho bất kỳ nút nào có thể cần đến nó.

Bài viết này được điều chỉnh từ “ Tự dạy về ảo hóa Linux và tính khả dụng cao: chuẩn bị cho kỳ thi chứng chỉ LPIC-3 304 ”. Xem các cuốn sách khác của tôi về quản trị AWS và Linux , bao gồm Linux in Action Linux in Motion  - một khóa học kết hợp bao gồm hơn hai giờ video và khoảng 40% nội dung của Linux in Action.