1. Tổng quan.
Tổng quan về cách thiết lập High Availability – HA cho môi trường cloud, cụ thể là OpenStack.
- Tài liệu tham khảo.
- Hướng dẫn này được chia thành hai phần:
- Phần đầu tiên giới thiệu về kiến trúc tổng quan của môi trường HA.
- Phần thứ hai cung cấp các ví dụ về kiến trúc tham chiếu, cũng như các phương pháp giám sát và kiểm thử.
Khuyến nghị sử dụng hướng dẫn này như một nguồn tham khảo khi xem xét việc thiết lập môi trường HA và không khuyến nghị sử dụng hướng dẫn này để xây dựng môi trường HA từ đầu. Thay vào đó, hãy bắt đầu với một giải pháp đã được kiểm thử trước và điều chỉnh theo nhu cầu của bạn.
High Availability không phù hợp với mọi người dùng. Nó đặt ra một số thách thức, như việc quản lý dữ liệu lớn và việc sao chép dữ liệu có thể làm chậm hệ thống. Các cài đặt khác nhau có các yêu cầu tiên quyết khác nhau, vì vậy bạn nên đọc kỹ hướng dẫn cho mỗi cài đặt.
Theo mặc định, tính năng High Availability không được bật trong cài đặt OpenStack.
2. Giới thiệu về High Availability.
Dưới đây là mục tiêu của các hệ thống High Availability – HA và những vấn đề mà chúng cố gắng giảm thiểu
Hệ thống HA cố gắng giảm thiểu thời gian hệ thống không hoạt động (downtime) và mất mát dữ liệu. Downtime xảy ra khi một dịch vụ hướng đến người dùng không khả dụng quá một khoảng thời gian tối đa được chỉ định. Mất mát dữ liệu có thể xảy ra do việc xóa hoặc hủy dữ liệu một cách vô tình.
Hầu hết các hệ thống HA đảm bảo bảo vệ khỏi downtime và mất mát dữ liệu chỉ trong trường hợp xảy ra một lỗi duy nhất.
Tuy nhiên, chúng cũng cần thiết phải được bảo vệ khỏi các lỗi xảy ra liên tiếp (cascading failures), nơi một lỗi duy nhất dẫn đến một chuỗi các lỗi tiếp theo.
Nhiều nhà cung cấp dịch vụ đảm bảo một Thỏa thuận Mức độ Dịch vụ (SLA) bao gồm tỷ lệ thời gian hoạt động của dịch vụ tính toán, được tính dựa trên thời gian khả dụng và thời gian hệ thống không hoạt động, không tính thời gian dừng hoạt động được lên kế hoạch.
3. Các khái niệm liên quan đến High Availability.
HA được thực hiện bằng cách sử dụng phần cứng dự phòng chạy các phiên bản dự phòng của mỗi dịch vụ. Nếu một phần cứng chạy một phiên bản của một dịch vụ bị lỗi, hệ thống có thể chuyển sang sử dụng một phiên bản khác của dịch vụ đang chạy trên phần cứng không bị lỗi.
Trong cấu hình active/passive, một phiên bản dự phòng được duy trì để có thể được đưa vào hoạt động khi dịch vụ hoạt động gặp lỗi. Trong cấu hình active/active, mỗi dịch vụ cũng có một bản sao lưu nhưng quản lý cả hệ thống chính và hệ thống dự phòng cùng một lúc.
Quorum chỉ định số lượng tối thiểu các nút phải hoạt động trong một cụm của các nút dự phòng để cụm vẫn còn hoạt động. Mỗi cụm trong một môi trường HA nên có một số lượng nút lẻ và quorum được định nghĩa là nhiều hơn một nửa số nút.
Cân bằng tải là một phần quan trọng của hệ thống HA, giúp phân phối công việc đến các nút hoạt động trong hệ thống để tối ưu hóa hiệu suất và đảm bảo không có nút nào bị quá tải.
4. Sự khác biệt giữa các dịch vụ không trạng thái (stateless) và dịch vụ có trạng thái (stateful).
Dịch vụ không trạng thái (Stateless services).
Đây là các dịch vụ cung cấp một phản hồi sau yêu cầu của bạn và sau đó không yêu cầu sự chú ý thêm. Để làm cho một dịch vụ không trạng thái có khả năng sẵn sàng cao, bạn cần cung cấp các phiên bản dự phòng và cân bằng tải chúng. Một số ví dụ về dịch vụ OpenStack không trạng thái bao gồm nova-api, nova-conductor, glance-api, keystone-api, neutron-api và nova-scheduler.
Dịch vụ có trạng thái (Stateful services).
Đây là các dịch vụ mà các yêu cầu tiếp theo đến dịch vụ phụ thuộc vào kết quả của yêu cầu đầu tiên. Dịch vụ có trạng thái khó quản lý hơn vì một hành động duy nhất thường liên quan đến nhiều hơn một yêu cầu. Cung cấp thêm các phiên bản và cân bằng tải không giải quyết vấn đề. Ví dụ, nếu Horizon tự đặt lại mỗi khi bạn đi đến một trang mới, nó sẽ không hữu ích. Các dịch vụ OpenStack có trạng thái bao gồm cơ sở dữ liệu OpenStack và message queue. Việc làm cho các dịch vụ có trạng thái có khả năng sẵn sàng cao có thể phụ thuộc vào việc bạn chọn cấu hình active/passive hay active/active.
Các thành phần OpenStack có thể được chia thành ba danh mục.
OpenStack APIs là các dịch vụ không trạng thái HTTP(s) được viết bằng python, dễ dàng nhân đôi và hầu như dễ dàng cân bằng tải.
Máy chủ cơ sở dữ liệu quan hệ SQL cung cấp loại có trạng thái được tiêu thụ bởi các thành phần khác. Các cơ sở dữ liệu được hỗ trợ là MySQL, MariaDB và PostgreSQL. Việc làm cho cơ sở dữ liệu SQL dự phòng là phức tạp.
Advanced Message Queuing Protocol (AMQP) cung cấp dịch vụ truyền thông có trạng thái nội bộ OpenStack.
5. Cluster managers.
Ở cốt lõi, một cụm là một máy trạng thái phân tán có khả năng điều phối việc khởi động và phục hồi các dịch vụ liên quan trên một tập hợp các máy.
Ngay cả một ứng dụng phân tán hoặc được nhân bản có khả năng tồn tại sau các lỗi trên một hoặc nhiều máy cũng có thể được hưởng lợi từ một trình quản lý cụm vì trình quản lý cụm có các khả năng sau:
- Nhận biết các ứng dụng khác trong stack.
- Nhận biết các phiên bản trên các máy khác.
- Một cách thức chung để thực hiện và tính toán quorum.
- Đảm bảo tính toàn vẹn của dữ liệu thông qua việc fencing (một quy trình không phản hồi không có nghĩa là nó không làm gì cả).
- Phục hồi tự động các phiên bản đã thất bại.
Pacemaker và Systemd là hai ví dụ về các trình quản lý cụm.