Sau đây là phần trích dẫn từ sách trắng của chúng tôi “Cách thiết kế môi trường cơ sở dữ liệu nguồn mở khả dụng cao” có thể được tải xuống miễn phí.
Đôi lời về “Tính sẵn có cao”
Những ngày này tính sẵn sàng cao là điều bắt buộc đối với bất kỳ triển khai nghiêm túc nào. Đã qua một thời gian dài khi bạn có thể lên lịch cho cơ sở dữ liệu của mình ngừng hoạt động trong vài giờ để thực hiện bảo trì. Nếu dịch vụ của bạn không có sẵn, bạn đang mất khách hàng và tiền bạc. Do đó, làm cho môi trường cơ sở dữ liệu có tính khả dụng cao thường là một trong những ưu tiên cao nhất.
Điều này đặt ra một thách thức đáng kể cho các quản trị viên cơ sở dữ liệu. Trước hết, làm thế nào để bạn biết liệu môi trường của bạn có khả năng sẵn sàng cao hay không? Bạn sẽ đo lường nó như thế nào? Các bước bạn cần thực hiện để cải thiện tính khả dụng là gì? Làm thế nào để thiết kế thiết lập của bạn để làm cho nó có tính khả dụng cao ngay từ đầu?
Có rất nhiều giải pháp HA có sẵn trong hệ sinh thái MySQL (và MariaDB), nhưng làm thế nào để chúng ta biết chúng ta có thể tin tưởng những giải pháp nào? Một số giải pháp có thể hoạt động trong các điều kiện cụ thể nhất định, nhưng có thể gây ra nhiều rắc rối hơn khi áp dụng bên ngoài các điều kiện này. Ngay cả một chức năng cơ bản như sao chép MySQL, có thể được cấu hình theo nhiều cách, cũng có thể gây ra tác hại đáng kể - ví dụ:sao chép vòng tròn với nhiều bản gốc có thể ghi. Mặc dù có thể dễ dàng thiết lập một ‘thiết lập đa tổng thể’ bằng cách sử dụng sao chép, nó có thể rất dễ bị hỏng và để lại cho chúng ta các tập dữ liệu khác nhau trên các máy chủ khác nhau. Đối với cơ sở dữ liệu, thường được coi là nguồn chân lý duy nhất, tính toàn vẹn của dữ liệu bị xâm phạm có thể gây ra hậu quả thảm khốc.
Trong các chương tiếp theo, chúng ta sẽ thảo luận về các yêu cầu để có tính sẵn sàng cao trong thiết lập cơ sở dữ liệu
và cách thiết kế hệ thống từ đầu.
Đo tính khả dụng cao
Tính khả dụng cao là gì? Để có thể quyết định xem một môi trường nhất định có khả dụng cao hay không, người ta phải có một số số liệu cho điều đó. Có nhiều cách bạn có thể đo lường mức độ sẵn sàng cao, chúng tôi sẽ tập trung vào một số điều cơ bản nhất.
Tuy nhiên, trước tiên, hãy nghĩ xem toàn bộ tính khả dụng cao này là gì? Mục đích của nó là gì? Đó là về việc đảm bảo môi trường của bạn phục vụ mục đích của nó. Mục đích có thể được định nghĩa theo nhiều cách, nhưng thông thường, nó sẽ là về việc cung cấp một số dịch vụ. Trong thế giới cơ sở dữ liệu, thông thường nó có phần liên quan đến dữ liệu. Nó có thể đang cung cấp dữ liệu cho ứng dụng nội bộ của bạn. Nó có thể là để lưu trữ dữ liệu và làm cho nó có thể truy vấn được bằng các quy trình phân tích. Nó có thể là để lưu trữ một số dữ liệu cho người dùng của bạn và cung cấp nó khi được yêu cầu theo yêu cầu. Một khi chúng tôi rõ ràng về mục đích, chúng tôi có thể thiết lập các yếu tố thành công liên quan. Điều này sẽ giúp chúng tôi xác định tính khả dụng cao có ý nghĩa như thế nào trong trường hợp cụ thể của chúng tôi.
SLA's
Thỏa thuận mức dịch vụ (SLA). Việc xác định SLA cho các dịch vụ nội bộ cũng khá phổ biến. SLA là gì? Đó là định nghĩa về mức độ dịch vụ mà bạn định cung cấp cho khách hàng của mình. Điều này là để họ hiểu rõ hơn mức độ ổn định mà bạn dự định cho một dịch vụ mà họ đã mua hoặc đang định mua. Có nhiều phương pháp bạn có thể tận dụng để chuẩn bị SLA nhưng những phương pháp điển hình là:
- Tính khả dụng của dịch vụ (phần trăm)
- Khả năng đáp ứng của dịch vụ - độ trễ (trung bình, tối đa, 95 phần trăm, 99 phần trăm)
- Mất gói qua mạng (phần trăm)
- Thông lượng (trung bình, tối thiểu, 95 phần trăm, 99 phần trăm)
Tuy nhiên, nó có thể phức tạp hơn thế. Trong môi trường nhiều người dùng, chia nhỏ, bạn có thể xác định SLA của mình như sau:“Dịch vụ sẽ khả dụng 99,99% thời gian, thời gian ngừng hoạt động được khai báo khi hơn 2% người dùng bị ảnh hưởng. Không có sự cố nào có thể kéo dài hơn 15 phút để được giải quyết ”. SLA như vậy cũng có thể được mở rộng để kết hợp thời gian phản hồi truy vấn:"thời gian chết được gọi nếu 99 phần trăm độ trễ cho các truy vấn là 200 mili giây".
Nines
Tính khả dụng thường được đo bằng "nines", chúng ta hãy xem xét chính xác số lượng đảm bảo "nines" nhất định là bao nhiêu. Bảng dưới đây được lấy từ Wikipedia:
Tính khả dụng% | Thời gian ngừng hoạt động mỗi năm | Thời gian ngừng hoạt động mỗi tháng | Thời gian ngừng hoạt động mỗi tuần | Thời gian ngừng hoạt động mỗi ngày |
---|---|---|---|---|
90% ("một chín") | 36,5 ngày | 72 giờ | 16,8 giờ | 2,4 giờ |
95% ("một tuổi rưỡi") | 18,25 ngày | 36 giờ | 8,4 giờ | 1,2 giờ |
97% | 10,96 ngày | 21,6 giờ | 5,04 giờ | 43,2 phút |
98% | 7,30 ngày | 14,4 giờ | 3,36 giờ | 28,8 phút |
99% ("hai số chín") | 3,65 ngày | 7,20 giờ | 1,68 giờ | 14,4 phút |
99,5% ("hai tuổi rưỡi") | 1,83 ngày | 3,60 giờ | 50,4 phút | 7,2 phút |
99,8% | 17,52 giờ | 86,23 phút | 20,16 phút | 2,88 phút |
99,9% ("ba số chín") | 8,76 giờ | 43,8 phút | 10,1 phút | 1,44 phút |
99,95% ("3 tuổi rưỡi") | 4,38 giờ | 21,56 phút | 5,04 phút | 43,2 giây |
99,99% ("bốn số chín") | 52,56 phút | 4,38 phút | 1,01 phút | 8,64 giây |
99,995% ("bốn chín rưỡi") | 26,28 phút | 2,16 phút | 30,24 giây | 4,32 giây |
99,999% ("năm số chín") | 5,26 phút | 25,9 giây | 6,05 s | 864,3 mili giây |
99,9999% ("sáu số chín") | 31,5 giây | 2,59 giây | 604,8 mili giây | 86,4 mili giây |
99,99999% ("bảy chín") | 3,15 giây | 262,97 mili giây | 60,48 mili giây | 8,64 mili giây |
99,999999% ("tám số chín") | 315,569 mili giây | 26,297 mili giây | 6,048 mili giây | 0,864 mili giây |
99,9999999% ("chín số") | 31,5569 mili giây | 2,6297 mili giây | 0,6048 mili giây | 0,0864 mili giây |
Như chúng ta có thể thấy, nó leo thang nhanh chóng. Năm nines (khả dụng 99,999%) tương đương với 5,26 phút thời gian ngừng hoạt động trong suốt một năm. Tính khả dụng cũng có thể được tính theo các phạm vi khác nhau, nhỏ hơn:mỗi tháng, mỗi tuần, mỗi ngày. Hãy ghi nhớ những con số đó, vì chúng sẽ hữu ích khi chúng ta bắt đầu thảo luận về chi phí liên quan đến việc duy trì các mức độ sẵn có khác nhau.
Tính khả dụng của phép đo
Để biết liệu có thời gian chết hay không, người ta phải có cái nhìn sâu sắc về môi trường. Bạn cần theo dõi các chỉ số xác định tính khả dụng của hệ thống của bạn. Điều quan trọng cần ghi nhớ là bạn nên đo lường nó từ quan điểm của khách hàng, xem xét bức tranh rộng hơn. Không thành vấn đề nếu cơ sở dữ liệu của bạn đã được thiết lập nếu, giả sử, do sự cố mạng, không ứng dụng nào không thể tiếp cận chúng. Mỗi khối xây dựng trong quá trình thiết lập của bạn đều có tác động đến tính khả dụng.
Một trong những nơi tốt để tìm kiếm dữ liệu về tính khả dụng là nhật ký máy chủ web. Tất cả các yêu cầu kết thúc bằng lỗi có nghĩa là một cái gì đó đã xảy ra. Đó có thể là lỗi HTTP 500 do ứng dụng trả về do kết nối cơ sở dữ liệu không thành công. Đó có thể là lỗi lập trình chỉ đến một số sự cố cơ sở dữ liệu và kết thúc trong nhật ký lỗi của Apache. Bạn cũng có thể sử dụng số liệu đơn giản làm thời gian hoạt động của máy chủ cơ sở dữ liệu, mặc dù, với SLA phức tạp hơn, có thể khó xác định mức độ không có sẵn của một cơ sở dữ liệu ảnh hưởng đến cơ sở người dùng của bạn như thế nào. Bất kể bạn làm gì, bạn nên sử dụng nhiều hơn một chỉ số - điều này là cần thiết để nắm bắt các vấn đề có thể đã xảy ra trên các lớp khác nhau của môi trường của bạn.
Số ma thuật:“Ba”
Mặc dù tính khả dụng cao cũng là do dự phòng, trong trường hợp cụm cơ sở dữ liệu, ba là một con số kỳ diệu. Không đủ để có hai nút để dự phòng - thiết lập như vậy không cung cấp bất kỳ tính sẵn sàng cao nào được tích hợp sẵn. Chắc chắn, nó có thể tốt hơn chỉ một nút đơn lẻ, nhưng cần có sự can thiệp của con người để khôi phục các dịch vụ. Hãy xem tại sao nó lại như vậy.
Giả sử chúng ta có hai nút, A và B. Có một liên kết mạng giữa chúng. Giả sử rằng cả A và B đều phục vụ ghi và ứng dụng chọn ngẫu nhiên nơi kết nối (có nghĩa là một phần của ứng dụng sẽ kết nối với nút A và phần kia sẽ kết nối với nút B). Bây giờ, hãy tưởng tượng chúng ta gặp sự cố mạng dẫn đến mất kết nối mạng giữa A và B.
Gì bây giờ? Cả A và B đều không thể biết trạng thái của nút kia. Có hai hành động có thể được thực hiện bởi cả hai nút:
- Họ có thể tiếp tục chấp nhận lưu lượng truy cập
- Họ có thể ngừng hoạt động và từ chối phục vụ bất kỳ lưu lượng truy cập nào
Hãy nghĩ về lựa chọn đầu tiên. Miễn là nút khác thực sự không hoạt động, đây là hành động được ưu tiên thực hiện - chúng tôi muốn cơ sở dữ liệu của mình tiếp tục phục vụ lưu lượng truy cập. Rốt cuộc, đây là ý tưởng chính đằng sau tính khả dụng cao. Tuy nhiên, điều gì sẽ xảy ra nếu cả hai nút tiếp tục chấp nhận lưu lượng truy cập trong khi bị ngắt kết nối với nhau? Dữ liệu mới sẽ được thêm vào cả hai bên và các bộ dữ liệu sẽ không đồng bộ. Khi sự cố mạng được giải quyết, sẽ là một nhiệm vụ khó khăn khi hợp nhất hai tập dữ liệu đó. Do đó, không thể chấp nhận được việc duy trì hoạt động của cả hai nút. Vấn đề là - làm sao nút A có thể biết được nút B còn sống hay không (và ngược lại)? Câu trả lời là - nó không thể. Nếu tất cả kết nối bị ngắt, không có cách nào để phân biệt một nút bị lỗi với mạng bị lỗi. Do đó, hành động an toàn duy nhất là cả hai nút ngừng mọi hoạt động và từ chối
phân phát lưu lượng truy cập.
Bây giờ chúng ta hãy nghĩ xem nút thứ ba có thể giúp chúng ta như thế nào trong tình huống như vậy.
Vì vậy, bây giờ chúng ta có ba nút:A, B và C. Tất cả đều được kết nối với nhau, tất cả đều xử lý việc đọc và ghi.
Một lần nữa, như trong ví dụ trước, nút B đã bị cắt khỏi phần còn lại của cụm do sự cố mạng. Điều gì có thể xảy ra tiếp theo? Chà, tình hình khá giống với những gì chúng ta đã thảo luận trước đó. Hai tùy chọn - nút B có thể ngừng hoạt động (và phần còn lại của cụm sẽ tiếp tục) hoặc có thể lên, trong trường hợp đó, nút này không được phép xử lý bất kỳ lưu lượng nào. Bây giờ chúng ta có thể cho biết trạng thái của cụm là gì không? Trên thực tế, có. Chúng ta có thể thấy rằng các nút A và C có thể nói chuyện với nhau và kết quả là chúng có thể đồng ý rằng nút B không khả dụng. Họ sẽ không thể biết tại sao nó lại xảy ra, nhưng những gì họ biết là trong số ba nút trong cụm, hai nút vẫn có kết nối với nhau. Do hai nút đó tạo thành phần lớn của cụm, nên có thể tiếp tục xử lý lưu lượng truy cập. Đồng thời nút B cũng có thể suy luận rằng vấn đề nằm ở phía của nó. Nó không thể truy cập cả nút A và nút C, làm cho nút B bị tách khỏi phần còn lại của cụm. Vì nó bị cô lập và không phải là một phần của đa số (1 trong 3), hành động an toàn duy nhất mà nó có thể thực hiện là ngừng cung cấp lưu lượng truy cập và từ chối chấp nhận bất kỳ truy vấn nào, đảm bảo rằng dữ liệu sẽ không xảy ra.
Tất nhiên, điều đó không có nghĩa là bạn chỉ có thể có ba nút trong cụm. Nếu bạn muốn khả năng chịu đựng thất bại tốt hơn, bạn có thể muốn bổ sung thêm. Tuy nhiên, hãy nhớ rằng nó phải là một số lẻ nếu bạn muốn cải thiện tính khả dụng cao. Ngoài ra, chúng ta đã nói về "các nút" trong các ví dụ trên. Xin lưu ý rằng điều này cũng đúng đối với các trung tâm dữ liệu, vùng khả dụng, v.v. Nếu bạn có hai trung tâm dữ liệu, mỗi trung tâm dữ liệu có cùng số lượng nút (giả sử mỗi trung tâm ba nút) và bạn mất kết nối giữa hai DC đó, các nguyên tắc tương tự áp dụng ở đây - bạn không thể biết nửa của cụm sẽ bắt đầu xử lý lưu lượng. Để có thể nói được điều đó, bạn phải có một người quan sát trong một trung tâm dữ liệu thứ ba. Nó có thể là một tập hợp các nút khác hoặc chỉ là một máy chủ duy nhất, với nhiệm vụ
quan sát trạng thái của các bộ đo dữ liệu còn lại và tham gia vào việc đưa ra quyết định (ví dụ ở đây là trọng tài Galera).
Điểm lỗi duy nhất
Tính sẵn sàng cao là tất cả về việc loại bỏ các điểm lỗi đơn lẻ (SPOF) và không giới thiệu những điểm mới trong quy trình. SPOF là gì? Bất kỳ phần nào trong cơ sở hạ tầng của bạn, khi bị lỗi, mang lại thời gian chết như được định nghĩa trong SLA, được gọi là SPOF. Thiết kế cơ sở hạ tầng đòi hỏi một cách tiếp cận tổng thể, các thành phần khác nhau không thể được thiết kế độc lập với nhau. Rất có thể, bạn không chịu trách nhiệm về toàn bộ thiết kế - người quản trị cơ sở dữ liệu
có xu hướng tập trung vào cơ sở dữ liệu chứ không phải lớp mạng chẳng hạn. Tuy nhiên, bạn phải ghi nhớ các phần khác và làm việc với các nhóm chịu trách nhiệm về chúng, để đảm bảo rằng không chỉ phần bạn chịu trách nhiệm được thiết kế chính xác mà còn các phần còn lại của cơ sở hạ tầng được thiết kế bằng cách sử dụng các nguyên tắc giống nhau. Trên hết, kiến thức về cách toàn bộ cơ sở hạ tầng
được thiết kế cũng giúp bạn thiết kế ngăn xếp cơ sở dữ liệu. Biết được những vấn đề nào có thể xảy ra sẽ giúp xây dựng một số cơ chế để ngăn chúng ảnh hưởng đến tính khả dụng của cơ sở dữ liệu.