Amazon RDS cho MySQL vs cài đặt MySQL trên phiên bản Amazon EC2


31

Khi làm việc, chúng tôi lưu trữ tất cả các máy chủ web của chúng tôi trên Amazon EC2 và thường sử dụng cơ sở dữ liệu MySQL được cài đặt trên cùng một hộp với máy chủ web Apache của chúng tôi và liên lạc với chúng trên đó localhost. Bây giờ chúng tôi phải đối mặt với nhu cầu di chuyển cơ sở dữ liệu của mình sang máy chủ của riêng mình cho một trong các hệ thống của chúng tôi. Tôi có một lựa chọn giữa hai giải pháp: sử dụng Amazon RDS hoặc chỉ khởi chạy một hộp Amazon EC2 mới và cài đặt MySQL trên đó.

RDS, là một dịch vụ cơ sở dữ liệu chuyên dụng được cung cấp bởi cùng một công ty với EC2, có vẻ như nó phải lựa chọn tốt hơn rõ ràng . Tuy nhiên, khi tôi xem giá của hai tùy chọn (xem http://aws.amazon.com/ec2/pricinghttp://aws.amazon.com/rds/pricing ) có vẻ như một máy chủ RDS có giá gần như gấp đôi so với máy chủ EC2 cho một hộp có cùng thông số kỹ thuật.

Vì tôi có khả năng tự xử lý các bản sao lưu và EC2 cung cấp khả năng mở rộng thể hiện tương tự như RDS yêu cầu, tôi không thể thấy bất kỳ lý do nào để sử dụng RDS thay vì EC2. Dường như tôi có thể thiếu một cái gì đó lớn, bởi vì nếu tôi đúng, không ai sẽ sử dụng RDS. Chính xác thì tôi còn thiếu điều gì và những lợi thế của RDS so với việc cài đặt cơ sở dữ liệu của riêng bạn trên một ví dụ EC2 là gì?


Điều đáng chú ý là tỷ lệ giá giữa EC2 và RDS đã thay đổi đáng kể kể từ khi tôi hỏi câu hỏi này. Thời gian hoạt động ngay lập tức trên EC2 vẫn rẻ hơn, nhưng cao hơn hai phần ba giá RDS; chuyển từ EC2 sang RDS (hoặc vica ngược) không còn có nghĩa là nhân đôi (hoặc giảm một nửa) hóa đơn máy chủ của bạn. (Tất nhiên, nó vẫn có thể là một sự khác biệt đáng quan tâm, tùy thuộc vào hoàn cảnh của bạn.)
Mark Amery

Câu trả lời:


20

Tôi là một fan hâm mộ AWS lớn nói chung ... nhưng RDS, không nhiều lắm.

@RolandoMySQLDBA đã chỉ ra một số điểm khá tốt chống lại nó.

Ưu điểm duy nhất tôi thấy trong RDS so với MySQL trên EC2 là khả năng thực hiện các điểm chụp nhanh và nhấp chuột, nhân bản và phục hồi tại thời điểm, nhưng những điều này gần như không đủ để bù cho sự mất kiểm soát và tính linh hoạt và chúng chắc chắn là không biện minh cho giá cao hơn. RDS là gợi cảm theo một số cách, nhưng cuối cùng bạn không thể tin tưởng vào những gì cuối cùng bạn không thể sửa chữa, bởi vì bạn không thể có được tất cả các bộ phận chuyển động.

Tôi không thích không có SUPERđặc quyền. Tôi không thích không thể theo dõi nhật ký lỗi. Tôi không thích không thể chạy "top" hoặc "iuler" trên máy chủ cơ sở dữ liệu của mình để xem các lõi và ổ đĩa đang tận hưởng tải như thế nào. Tôi không thích không có quyền truy cập vào công cụ lưu trữ được liên kết. Tôi không thích nghĩ đến việc trả tiền cho một máy chủ dự phòng nóng (multi-AZ) nóng mà tôi thậm chí không thể tận dụng như một bản sao đọc. Chắc chắn, có những giải thích hoàn toàn hợp lý tại sao tất cả các ràng buộc này phải được đặt ra để MySQL được đóng gói và bán thành công dưới dạng RDBMS-in-a-box. Điều duy nhất là, RDBMS-in-a-box "giải quyết" cả loạt vấn đề tôi không gặp phải ... và cản trở tôi, gây ra những vấn đề mới.

Nhưng công cụ giảm giá tuyệt đối với tôi với RDS là thiếu hoàn toàn quyền truy cập vào nhật ký nhị phân và sao chép. Binlog, đặc biệt là dựa trên hàng, là một công cụ khôi phục tuyệt vời cho các thảm họa nhỏ, nhưng chúng không giúp ích gì cho bạn nếu bạn không thể truy cập chúng. Bạn muốn định cấu hình máy chủ tại chỗ tại văn phòng của bạn dưới dạng bản sao đọc của cơ sở dữ liệu sản xuất của bạn trong RDS? Một cái gì đó để sao lưu cục bộ từ, làm báo cáo, có sẵn để khắc phục thảm họa nếu điều gì đó không thể tưởng tượng được xảy ra với dữ liệu của bạn sống trong RDS? Đó là một ý tưởng đồng thời rõ ràng và xuất sắc.

Rất tiếc, xin lỗi, truy cập trực tiếp để nhân rộng không có sẵn. Chắc chắn, bạn có thể trả tiền để đọc bản sao ... nhưng chỉ như các trường hợp RDS khác. Không phải là một đề xuất giá trị trong cuốn sách của tôi.

Cập nhật: Một thay đổi đáng kể trong RDS cho MySQL 5.6

Tôi vẫn thích chạy máy chủ của riêng tôi (ngay cả trong EC2) như trái ngược với chạy RDS cho một số lý do, trong đó có việc thiếu hỗ trợ cho User-Defined Functions , không có khả năng sử dụng Federated Storage Engine , và không có khả năng để có một kết nối bổ sung có sẵn để truy cập khẩn cấp ... tuy nhiên ...

Amazon đã thực hiện một thay đổi đáng kể trong MySQL 5.6 cho RDS, loại bỏ một trong những phản đối chính của tôi - có lẽ là sự phản đối lớn nhất của tôi: nhật ký nhị phân hiện có thể truy cập và bạn có thể chạy một phiên bản không phải RDS làm nô lệ hoặc kết nối các tiện ích khác với máy chủ đọc luồng binlog.

http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MyQuery.Procedural.Exporting.NonRDSRepl.html

Chính thức, tài liệu chỉ ra rằng họ đang phơi bày điều này để bạn có thể thiết lập nô lệ cho mục đích di chuyển trực tiếp - bạn đồng bộ hóa máy chủ chính tương lai nước ngoài từ phiên bản RDS hiện tại bằng cách sử dụng mysqldump, sau đó kết nối nó với RDS làm nô lệ để nhận nguồn cấp dữ liệu cập nhật trực tiếp qua luồng sao chép cho đến khi ứng dụng của bạn được chuyển sang chủ mới - nhưng không chính thức, bạn có thể thực hiện việc này trên cơ sở liên tục miễn là bạn không mong đợi chúng hỗ trợ bạn ... mà, với tôi, có vẻ hợp lý

Điều này đã được xác nhận trong một Hội thảo trên web gần đây , trong một cuộc trò chuyện bắt đầu vào khoảng 56:45:

"Bạn có thể giữ nó ở trạng thái sao chép vô thời hạn ...

"... miễn là bạn có trách nhiệm duy trì việc nhân rộng ..."

"Chúng tôi không ngăn cản bạn thực hiện sao chép liên tục nếu đó là những gì bạn muốn."

Khả năng mới này đủ để tôi bỏ qua sự phản đối trong việc sử dụng RDS trong các phiên bản MySQL hỗ trợ trang web công khai của chúng tôi, nơi chúng tôi không sử dụng FEDERATEDhoặc một số thứ khác nhiều hoặc nhiều.

Vì vậy, tôi vẫn không ủng hộ nó, nhưng tôi không còn chống lại nó nữa, vì việc phát trực tiếp nhật ký nhị phân khiến tôi cuối cùng phải kiểm soát dữ liệu theo thời gian thực và trách nhiệm đảm bảo rằng không có giao dịch nào bị mất trong một lần mất điện thảm khốc đã trở lại với tôi, bởi vì tôi, với tư cách là DBA, đã trở lại trong tầm kiểm soát - đó chính xác là cách tôi muốn. Có một nhà cung cấp bên thứ ba chỉ tay hoặc nộp đơn kiện, hoặc bất cứ điều gì, sẽ không lấy lại được dữ liệu bị mất của bạn nếu nó biến mất xuống một lỗ đen bên trong hộp đen.

Ban quản lý dường như thích "ý tưởng" của RDS và không phản đối sự khác biệt về chi phí, vì vậy chúng tôi hiện đang tung ra tất cả các trang web mới có RDS phía sau chúng.

Tôi thừa nhận, phục hồi điểm và nhấp vào thời điểm, là một tính năng hay trong RDS ... nó không làm thay đổi hoặc phá vỡ máy hiện tại của bạn - thay vào đó, nó kích hoạt một phiên bản hoàn toàn mới, sử dụng bản sao lưu đó là gần nhất với thời điểm đã chọn, sau đó áp dụng các binlog cần thiết để đưa máy mới đó tiến về điểm mà bạn đã chỉ định.

Liên quan đến vấn đề này, nhưng theo một hướng khác, hiện tại cũng có thể sử dụng một chiến lược tương tự để di chuyển cơ sở dữ liệu MySQL trực tiếp vào RDS ... bạn có thể kết nối một chủ RDS (có lẽ, thông thường, đây sẽ là một triển khai mới được triển khai dụ) như một nô lệ của một hệ thống hiện có để cá thể RDS có phiên bản dữ liệu trực tiếp tại thời điểm bạn di chuyển vào nó. Không giống như truy cập vào các binlog RDS để sao chép ra bên ngoài, chỉ hoạt động trong 5.6, sao chép bên trong được hỗ trợ trong RDS bắt đầu với 5.5.33 và 5.6.13.


Tôi có thể biết cách bạn sử dụng Công cụ lưu trữ được liên kết không?
Bharat Khatri

11

Nếu nhân rộng DB Servers không phảitách trà của bạn , thì Amazon RDS vẫn ổn để sử dụng vì tất cả chuông và còi đều đi kèm với nó. Những người chỉ đơn giản muốn HA vừa phải, sao lưu và nhân rộng có lợi rất nhiều.

Mặt khác, nếu bạn muốn mở rộng quy mô phần cứng, đó là điều không cần thiết đối với RDS. Điều gì nếu bạn muốn mở rộng khả năng của MySQL? Thật không may, đó là câu hỏi cho nhiều khía cạnh người ta muốn.

Ví dụ: bạn có biết rằng hai trường được giới hạn trên tất cả bảy (7) mô hình máy chủ RDS không?

Lưu ý biểu đồ sau về hai tùy chọn sau:

MODEL      max_connections innodb_buffer_pool_size
---------  --------------- -----------------------
t1.micro   34                326107136 (  311M)
m1-small   125              1179648000 ( 1125M,  1.097G)
m1-large   623              5882511360 ( 5610M,  5.479G)
m1-xlarge  1263            11922309120 (11370M, 11.103G)
m2-xlarge  1441            13605273600 (12975M, 12.671G)
m2-2xlarge 2900            27367833600 (26100M, 25.488G)
m2-4xlarge 5816            54892953600 (52350M, 51.123G)

Bạn không được cấp đặc quyền SUPER và không có quyền truy cập trực tiếp vào my.cnf. Để giải quyết vấn đề này, để thay đổi my.cnfcác tùy chọn khởi động, trước tiên bạn phải tạo Danh sách tùy chọn tham số DB dựa trên MySQL và sử dụng RDS CLI (Command Line Interface)để thay đổi các tùy chọn mong muốn. Sau đó, bạn phải làm điều này để nhập các tùy chọn mới:

  • Tạo một nhóm tham số DB tùy chỉnh (gọi nó MySettings)
  • Tải xuống RDS CLI và thiết lập tệp cấu hình với Thông tin xác thực AWS của bạn
  • Thực hiện như sau: ./rds-modify-db-parameter-group MySettings --parameters "name=whateveroption,value=whatevervalue,method=immediate"
  • Sửa đổi bằng cách sử dụng danh sách tùy chọn tham số DB MySettings
  • Khởi động lại sơ đồ MySQL RDS

Sử dụng API để cập nhật một biến duy nhất và thực hiện khởi động lại bắt buộc đối tượng RDS để thực hiện thay đổi? Đó là một quá trình đau đớn để làm mờ bất kỳ một lựa chọn nào.

Nếu bạn muốn mở rộng quy mô MySQL, vui lòng sử dụng EC2. Sau đó, bạn có thể tăng gấp đôi my.cnftheo ý thích của bạn như bạn đã luôn luôn làm và đã quen.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.