Amazon RDS untuk MySQL vs menginstal MySQL pada instance Amazon EC2

31

Di tempat kerja, kami meng-host semua server web kami di Amazon EC2 dan biasanya telah menggunakan database MySQL yang diinstal pada kotak yang sama dengan server web Apache kami, dan berkomunikasi dengannya localhost. Kami sekarang menghadapi kebutuhan untuk memigrasi basis data kami ke servernya sendiri untuk salah satu sistem kami. Saya punya pilihan antara dua solusi: gunakan Amazon RDS , atau luncurkan saja kotak EC2 Amazon baru dan instal MySQL di atasnya.

RDS, sebagai layanan basis data khusus yang disediakan oleh perusahaan yang sama dengan EC2, sepertinya itu seharusnya menjadi pilihan yang jelas lebih baik . Namun, ketika saya melihat harga untuk dua opsi (lihat http://aws.amazon.com/ec2/pricing dan http://aws.amazon.com/rds/pricing ) tampaknya biaya server RDS hampir mencapai dua kali lipat server EC2 untuk sebuah kotak dengan spesifikasi yang sama.

Mengingat bahwa saya mampu menangani backup sendiri dan bahwa EC2 menawarkan kemampuan yang sama untuk meningkatkan instance seperti yang disyaratkan RDS, saya tidak bisa melihat alasan sama sekali untuk menggunakan RDS daripada EC2. Sepertinya saya mungkin kehilangan sesuatu yang besar, karena, jika saya benar, tidak ada yang akan menggunakan RDS. Apa sebenarnya yang saya lewatkan, dan apa kelebihan RDS daripada menginstal basis data Anda sendiri pada instance EC2?

Mark Amery
sumber
Perlu dicatat bahwa rasio harga antara EC2 dan RDS telah berubah secara signifikan sejak saya mengajukan pertanyaan ini. Waktu operasi instan pada EC2 masih lebih murah, tetapi lebih dari dua pertiga dari harga RDS; pindah dari EC2 ke RDS (atau sebaliknya) tidak lagi berarti menggandakan (atau membagi dua) tagihan server Anda. (Mungkin masih ada perbedaan yang perlu diperhatikan, tentu saja, tergantung pada keadaan Anda.)
Mark Amery

Jawaban:

20

Saya penggemar AWS besar pada umumnya ... tapi RDS, tidak begitu banyak.

@RolandoMySQLDBA telah menunjukkan beberapa poin yang cukup bagus untuk menentangnya.

Satu-satunya keuntungan yang saya lihat di RDS dibandingkan dengan MySQL pada EC2 adalah kemampuan untuk melakukan snapshot titik dan klik, klon, dan pemulihan point-in-time, tetapi ini hampir tidak cukup untuk menebus hilangnya kontrol dan fleksibilitas dan mereka tentu saja tidak membenarkan harga menjadi lebih tinggi. Dalam beberapa hal, RDS itu seksi, tetapi pada akhirnya Anda tidak bisa memercayai apa yang akhirnya tidak bisa Anda perbaiki, karena Anda tidak bisa mencapai semua bagian yang bergerak.

Saya tidak suka tidak memiliki SUPERhak istimewa. Saya tidak suka tidak bisa mengekor log kesalahan. Saya tidak suka tidak bisa menjalankan "top" atau "iostat" pada server database saya untuk melihat bagaimana core dan drive menikmati beban. Saya tidak suka tidak memiliki akses ke mesin penyimpanan federasi. Saya tidak suka membayangkan membayar untuk master cadangan mesin hot standyby (multi-AZ) yang bahkan tidak bisa saya manfaatkan sebagai replika baca. Tentu, ada penjelasan yang masuk akal mengapa semua kendala ini harus ada agar MySQL dapat berhasil dikemas dan dijual sebagai RDBMS-in-a-box. Satu-satunya hal adalah, RDBMS-in-a-box "memecahkan" serangkaian masalah yang tidak saya miliki ... dan menghalangi saya, menyebabkan masalah baru.

Tetapi kesepakatan mutlak bagi saya dengan RDS adalah kurangnya akses ke log biner dan replikasi. Binlog, terutama berbasis baris, adalah alat pemulihan yang luar biasa untuk bencana kecil, tetapi mereka tidak membantu Anda jika Anda tidak dapat mengaksesnya. Ingin mengonfigurasi server di tempat di kantor Anda sebagai replika-baca dari basis data produksi Anda di RDS? Sesuatu untuk mengambil cadangan lokal dari, lakukan pelaporan, tersedia untuk pemulihan bencana jika sesuatu yang tidak terpikirkan terjadi pada data Anda yang hidup di RDS? Itu adalah gagasan yang secara bersamaan jelas dan cemerlang.

Ups, maaf, akses langsung ke replikasi tidak tersedia. Tentu, Anda dapat membayar replika baca ... tetapi hanya sebagai contoh RDS lainnya. Bukan proposisi nilai dalam buku saya.

Pembaruan: Satu Perubahan Signifikan dalam RDS untuk MySQL 5.6

Saya masih lebih suka menjalankan server saya sendiri (bahkan di EC2) daripada menjalankan RDS karena beberapa alasan, termasuk kurangnya dukungan untuk Fungsi yang Ditentukan Pengguna , ketidakmampuan untuk menggunakan Mesin Penyimpanan Federated , dan ketidakmampuan untuk memiliki satu. koneksi tambahan tersedia untuk akses darurat ... namun ...

Amazon telah membuat perubahan signifikan dalam MySQL 5.6 untuk RDS yang menghilangkan salah satu keberatan utama saya - mungkin keberatan terbesar saya: log biner sekarang dapat diakses dan Anda dapat menjalankan instance non-RDS sebagai budak, atau menghubungkan utilitas lain ke server yang membaca aliran binlog.

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

Secara resmi, dokumentasi menunjukkan bahwa mereka mengekspos ini sehingga Anda dapat mengatur seorang budak untuk tujuan melakukan migrasi langsung - Anda menyinkronkan server master masa depan asing dari instance RDS yang ada menggunakan mysqldump, kemudian menghubungkannya ke RDS sebagai budak untuk mendapatkan feed langsung dari pembaruan melalui aliran replikasi hingga aplikasi Anda dimigrasikan ke master baru - tetapi secara tidak resmi, Anda dapat melakukan ini secara berkelanjutan selama Anda tidak mengharapkannya mendukung Anda ... yang, bagi saya, tampaknya masuk akal.

Ini dikonfirmasi dalam Webinar baru-baru ini , dalam percakapan yang dimulai sekitar 56:45:

"Anda dapat menyimpannya dalam kondisi replikasi tanpa batas ...

"... selama kamu mengambil tanggung jawab untuk mempertahankan replikasi ..."

"Kami tidak mencegah Anda dari replikasi yang sedang berlangsung jika itu yang Anda inginkan."

Kemampuan baru ini cukup bagi saya untuk menolak keberatan saya menggunakan RDS dalam contoh MySQL yang mendukung situs web kami yang terbuka untuk publik, di mana kami tidak menggunakan FEDERATEDatau beberapa hal lain sebanyak atau sama sekali.

Jadi saya masih tidak mendukungnya, tetapi saya tidak lagi menentangnya, karena memiliki aliran langsung dari log biner membuat saya akhirnya kembali mengendalikan data secara real time dan tanggung jawab untuk memastikan bahwa tidak ada transaksi yang dilakukan. hilang dalam pemadaman bencana kembali dengan saya, karena saya, sebagai DBA, kembali memegang kendali - yang persis seperti yang saya inginkan. Memiliki vendor pihak ketiga untuk menunjuk, atau mengajukan gugatan, atau apa pun, tidak mendapatkan kembali data Anda yang hilang jika menghilang ke lubang hitam di dalam kotak hitam.

Manajemen tampaknya menyukai "ide" RDS dan tidak keberatan dengan perbedaan biaya, jadi kami sekarang meluncurkan semua situs web baru dengan RDS di belakangnya.

Saya akui, titik dan klik pemulihan waktu-masuk adalah fitur yang bagus di RDS ... itu tidak mengubah atau mengganggu mesin Anda yang sudah ada - sebagai gantinya, ia menyalakan contoh yang sama sekali baru, menggunakan cadangan yang sebelumnya terdekat-ke-waktu ke titik waktu yang dipilih, dan kemudian menerapkan binlog yang diperlukan untuk membawa mesin baru itu ke titik waktu yang Anda tentukan.

Terkait dengan ini, tetapi ke arah lain, sekarang juga memungkinkan untuk menggunakan strategi serupa untuk memigrasi database MySQL langsung ke RDS ... Anda dapat menghubungkan master RDS (mungkin, biasanya, ini akan menjadi yang baru digunakan instance) sebagai budak dari sistem yang ada sehingga instance RDS memiliki versi langsung dari data pada saat Anda bermigrasi ke dalamnya. Tidak seperti akses ke binlog RDS untuk replikasi ke luar, yang hanya bekerja di 5.6, replikasi ke dalam didukung di RDS dimulai dengan 5.5.33 dan 5.6.13.

Michael - sqlbot
sumber
Bolehkah saya tahu bagaimana Anda menggunakan Mesin Penyimpanan Federated ?
Bharat Khatri
11

Jika scaling out DB Servers bukan secangkir teh Anda , maka Amazon RDS boleh digunakan karena semua lonceng dan peluit datang bersamanya. Mereka yang hanya ingin HA moderat, cadangan, dan meningkatkan skala manfaat banyak.

Di sisi lain, jika Anda ingin meningkatkan perangkat keras, itu tidak mungkin untuk RDS. Bagaimana jika Anda ingin meningkatkan kemampuan MySQL? Sayangnya, itu keluar dari pertanyaan untuk banyak aspek yang kita inginkan.

Misalnya, apakah Anda tahu bahwa dua bidang dibatasi di semua tujuh (7) model server RDS?

Perhatikan bagan berikut pada dua opsi ini:

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)

Anda tidak diberi hak SUPER dan tidak ada akses langsung ke my.cnf. Sehubungan dengan ini, untuk mengubah my.cnfopsi untuk startup, Anda harus terlebih dahulu membuat Daftar Opsi Parameter DB berbasis MySQL dan menggunakannya RDS CLI (Command Line Interface)untuk mengubah Opsi yang diinginkan. Kemudian, Anda harus melakukan ini untuk mengimpor opsi baru:

  • Buat Grup Parameter DB Kustom (sebut saja MySettings)
  • Unduh RDS CLI dan siapkan file konfigurasi dengan Kredensial AWS Anda
  • Jalankan yang berikut ini: ./rds-modify-db-parameter-group MySettings --parameters "name=whateveroption,value=whatevervalue,method=immediate"
  • Ubah menggunakan Daftar Opsi Parameter DB MySettings
  • Mulai ulang MySQL RDS Instance

Menggunakan API untuk memperbarui variabel tunggal dan melakukan restart wajib contoh RDS untuk mengimplementasikan perubahan? Itu proses yang cukup menyakitkan untuk tweek salah satu opsi.

Jika Anda ingin meningkatkan MySQL, silakan gunakan EC2. Kemudian, Anda dapat menyesuaikan my.cnfkeinginan Anda seperti yang selalu Anda lakukan dan sudah terbiasa.

RolandoMySQLDBA
sumber