Skip to content

Latest commit

 

History

History
120 lines (68 loc) · 9.84 KB

12.What-is-High-Availability.md

File metadata and controls

120 lines (68 loc) · 9.84 KB

High Availability là gì?

Mục lục

1. Giới thiệu

2. High Availability là gì?

3. Đo lường tính sẵn sàng

4. High Availability làm việc như thế nào?

5. High Availability quan trọng khi nào?

6. Điều gì khiến một hệ thống có tính sẵn sàng cao?

7. Những thành phần nào cần thiết cho một hệ thống có độ sẵn sàng cao?

8. Những ứng dụng nào có thể được dùng để cấu hình HA?

9. Kết luận


1. Giới thiệu

Với sự gia tăng về nhu cầu cho các cơ sở hạ tầng có độ tin cậy và hiệu năng cao dành để phục vụ các hệ thống quan trọng thì các khái niệm về khả năng mở rộng cũng như tính sẵn sàng đang ngày càng trở lên phổ biến hơn.

Trong bài viết này, chúng ta sẽ cùng thảo luận về định nghĩa của tính sẵn sàng cao và tìm hiểu xem làm cách nào mà nó có thể tăng độ tin cậy của hạ tầng hệ thống.

2. High Availability là gì?

Trong khoa học máy tính, khái niệm "Availability" được dùng dể diễn tả một khoảng thời gian mà dịch vụ luôn sẵn sàng để phản hồi lại những request từ phía người dùng.

"High Availability" là chất lượng của hệ thống hoặc các thành phần có thể đảm bảo hiệu năng vận hành của hệ thống luôn cao trong một khoảng thời gian nhất định.

3. Đo lường tính sẵn sàng

Tính sẵn sàng thường được diễn tả bằng phần trăm thời gian sống của hệ thống trong một khoảng thời gian nhất định, ở đây giá trị 100% có nghĩa là hệ thống sẽ không bao giờ fail. Ví dụ nếu hệ thống đảm bảo 99% tính sẵn sàng trong khoảng thời gian là 1 năm thì nó cũng có tới 3.65 ngày downtime (1%)

4. High Availability làm việc như thế nào?

High Availability thường có tính năng như một phương thức đối phó với các lỗi xảy ra đối với hạ tầng hệ thống. Cách hoạt động của nó khá đơn giản tuy nhiên cần một vài phần mềm cũng như cấu hình cụ thể.

5. High Availability quan trọng khi nào?

Khi thiết lập một hệ thống mang tính thương mại thì việc giảm thiểu thời gian downtime cũng như những sự gián đoạn là điều cần ưu tiên hàng đầu. Bất kể hệ thống hay phần mềm bạn đang dùng có đáng tin cậy đến đâu thì một lỗi nhỏ xảy ra cũng có thể khiến hư hỏng cả hệ thống.

Việc triển khai một hạ tầng hệ thống mang tính sẵn sàng cao là một chiến lược rất hữu ích nhằm giảm thiểu những yếu tố không mong muốn kể trên. Những hệ thống mang tính sẵn sàng cao có thể tự động phục hồi nhanh chóng khi có một server hoặc một thành phần nào trong đó gặp lỗi.

6. Điều gì khiến một hệ thống có tính sẵn sàng cao?

Một trong những mục tiêu của HA đó là loại bỏ một "điểm" bị chết trên hạ tầng. Điểm bị chết ở đây có thể là một thành phần trong một chuỗi các công nghệ mà bạn xây dựng. Nếu nó bị hư hại, cả hệ thống cũng như các dịch vụ đang chạy có thể bị gián đoạn. Như vậy, bất kì một thành phần nào quan trọng cho hệ thống của bạn mà không có sự dự trù có thể trở thành điểm chết bất cứ lúc nào.

Để loại bỏ điều này, mỗi một layer trên hệ thống của bạn đều cần có sự backup. Ví dụ, hãy tưởng tượng rằng bạn có một hệ thống bao gồm 2 điểm với các web server và một load balancer. Traffic đi từ client sẽ được phân bổ giữa các web server. Nếu một web server bị down thì load balancer sẽ chuyển các traffic tới các server còn lại.

Layer của web server ở trường hợp này không thể trở thành điểm bị chết bởi:

  • Nó có các thành phần dự trù đảm đương nhiệm vụ tương tự
  • Cơ chế của load balancer ở đây có thể phát hiện lỗi trong các thành phần và phục hồi hệ thống nhanh chóng.

Nhưng khoan đã, điều gì sẽ xảy ra nếu load balancer bị chết?

Thực tế thì ngữ cảnh này thường không xuất hiện bên ngoài thực tế khi mà load balancing layer vẫn có thể trở thành điểm bị chết. Loại bỏ điều này là điều khá khó khăn. Mặc dù bạn có thể cấu hình thêm một chiếc load balancer làm nhiệm vụ tương tự nhưng làm sao để chúng tương tác được với nhau, tự nhận biết khi một trong 2 cái bị lỗi và tự phục hồi mới là vấn đề khó giải quyết.

Việc chỉ tạo ra backup thực chất không giải quyết triệt để vấn đề HA. Cần có một cơ chế tự động phát hiện lỗi và thực thi hành động phù hợp khi mà một trong những thành phần của hệ thống gặp sự cố.

Việc phát hiện lỗi và phục hồi cho những hệ thống có backup có thể được thực hiện bằng cách sử dụng phương thức top-to-bottom. Layer trên cùng sẽ có nhiệm vụ giám sát layer phía dưới để tránh sự cố. Quay trở lại ví dụ ở phần trước, load balancer sẽ là layer cao nhất. Nếu một trong những máy chủ ở layer bên dưới bị lỗi, load balancer sẽ dừng các traffic tới nó và chuyển sang server khác.

Các thức tiếp cận này có vẻ đơn giản hơn nhưng nó có những hạn chế: có một điểm trên hệ thống của bạn sẽ trở nên "nonexistent" hoặc "out of reach", đó chính là load balancer. Nếu bạn cố tạo thêm một service đảm đương nhiệm vụ check lỗi cho load balancer sẽ chỉ đơn giản tạo thêm một điểm có thể bị chết nữa.

Với những ngữ cảnh như vậy, phương thức phân chia là thực sự cần thiết. Các node khác nhau sẽ được kết nối để tạo thành cluster nới mà chúng đều có khả năng bị lỗi và tự phục hồi như nhau.

Đối với load balancer thì có phần phức tạp hơn bởi cách nameservers hoạt động. Việc phục hồi một load balancer kéo theo việc phải thay đổi DNS trỏ tới ip của server còn lại. Việc làm này có thể gây downtime cho hệ thống.

Một trong những giải pháp đó là sử dụng DNS round-robin load balancing. Tuy nhiên cách này không thực sự hiệu quả.

Một giải pháp khác nữa đó là sử dụng hệ thống cho phép chỉnh sửa IP linh hoạt giống như floating IP. Nó sẽ loại bỏ một số vấn đề tồn tại khi thay đổi DNS bằng cách cung cấp một địa chỉ ip tĩnh có thể dễ dàng remmap khi cần thiết. Domain name có thể giữ nguyên một ip, bản thân ip đó sẽ tự di chuyển giữa các server.

Dưới đây là mô hình HA sử dụng floating IPs:

7. Những thành phần nào cần thiết cho một hệ thống có độ sẵn sàng cao?

Có một vài thành phần mà chúng ta cần xem xét một cách kĩ lưỡng trước khi tiến hành xây dựng một hệ thống HA:

  • Môi trường: Nếu tất cả các server của bạn đều được đặt trên một môi trường địa lí, một số thứ như động đất hoặc lũ lụt có thể gây hư hại cho hệ thống. Bạn nên đặt server ở các vị trí khác nhau.
  • Phần cứng: Các máy chủ cần phải có khả năng phục hồi trong trường hợp mất điện đột ngột.
  • Phần mềm: Cần phải được chuẩn bị cho những tình huống hư hại không mong muốn.
  • Dữ liệu: Việc mất dữ liệu hoặc dữ liệu không đồng bộ có thể do một vài yếu tố bao gồm việc hỏng hóc ở ổ cứng. Các hệ thống HA cần phải đảm bảm tính toàn vẹn của dữ liệu.
  • Network: Các sự cố về mạng có thể gây hại lớn đối với các hệ thống. Cần có những kế hoạch đề phòng trước những rủi ro.

8. Những ứng dụng nào có thể được dùng để cấu hình HA?

Mỗi một layer của một hệ thống HA lại cần những phần mềm và cấu hình riêng biệt. HAProxy là một lựa chọn phổ biến cho việc cân bằng tải, nó có thể đảm đương nhiệm vụ này ở các layers khác nhau cho những loại server khác nhau.

Đồng thời một việc cũng rất quan trọng đó là tạo tính sẵn sàn cho load balancer. Ta thường sử dụng một cluster gồm nhiều node balancer theo kèm bởi floating ip. Corosync và Pacemaker là lựa chọn phổ biến để thực hiện điều này.

9. Kết luận

HA là một yếu tố quan trọng trong việc xây dựng một hệ thống có độ tin cậy cao, nó tập trung vào việc đảm bảo cho hệ thống có thể vận hành với hiệu năng tốt nhất trong một khoảng thời gian nhất định. Nếu mới nhìn qua, bạn có thể thấy nó khá phức tạp và khó thực hiện nhưng nó có thể đem lại những lợi ích rất lớn đến với những hệ thống yêu cầu độ tin cậy cao.

Link bài viết gốc:

https://www.digitalocean.com/community/tutorials/what-is-high-availability