Amazon RDS สำหรับ MySQL และการติดตั้ง MySQL บนอินสแตนซ์ Amazon EC2


31

ที่ทำงานเราเป็นเจ้าภาพเว็บเซิร์ฟเวอร์ของเราทั้งหมดใน Amazon EC2 และมักจะมีฐานข้อมูล MySQL ที่ใช้ติดตั้งในกล่องเดียวกับเว็บเซิร์ฟเวอร์ Apache localhostของเราและการสื่อสารกับพวกเขาใน ตอนนี้เราต้องเผชิญกับความต้องการโยกย้ายฐานข้อมูลของเราไปยังเซิร์ฟเวอร์ของตัวเองสำหรับหนึ่งในระบบของเรา ฉันมีทางเลือกระหว่างสองวิธี: ใช้Amazon RDSหรือเพียงแค่เปิดตัวกล่องAmazon EC2ใหม่และติดตั้ง MySQL บน

RDS ซึ่งเป็นบริการฐานข้อมูลเฉพาะที่จัดทำโดย บริษัท เดียวกันกับ EC2 ดูเหมือนว่าควรเป็นตัวเลือกที่ดีกว่าอย่างเห็นได้ชัด อย่างไรก็ตามเมื่อฉันดูการกำหนดราคาสำหรับสองตัวเลือก (ดูhttp://aws.amazon.com/ec2/pricingและhttp://aws.amazon.com/rds/pricing ) ดูเหมือนว่าเซิร์ฟเวอร์ RDS มีค่าใช้จ่ายเกือบ สองเท่าของเซิร์ฟเวอร์ EC2 สำหรับกล่องที่มีสเปคเดียวกัน

เนื่องจากฉันสามารถจัดการการสำรองข้อมูลด้วยตนเองและ EC2 นั้นมีความสามารถในการเพิ่มขนาดอินสแตนซ์ตามที่ RDS ทำดังนั้นฉันไม่เห็นเหตุผลที่จะใช้ RDS แทน EC2 เลย ดูเหมือนว่าฉันอาจจะพลาดบางสิ่งบางอย่างที่ยิ่งใหญ่เพราะถ้าฉันพูดถูกไม่มีใครจะใช้ RDS ฉันพลาดอะไรไปบ้างและข้อดีของ RDS ในการติดตั้งฐานข้อมูลของคุณเองบนอินสแตนซ์ EC2 คืออะไร


เป็นที่น่าสังเกตว่าอัตราส่วนราคาระหว่าง EC2 และ RDS มีการเปลี่ยนแปลงอย่างมีนัยสำคัญตั้งแต่ฉันถามคำถามนี้ อินสแตนซ์ uptime ของ EC2 ยังคงมีราคาถูกกว่า แต่มีมากกว่าสองในสามของราคา RDS; การย้ายจาก EC2 ไปเป็น RDS (หรือ vica ในทางกลับกัน) ไม่ได้หมายถึงการเรียกเก็บเงินจากเซิร์ฟเวอร์ของคุณเป็นสองเท่า (หรือลดลงครึ่งหนึ่ง) (มันอาจจะเป็นความแตกต่างที่ควรค่าแก่การพิจารณาแน่นอนขึ้นอยู่กับสถานการณ์ของคุณ)
— Mark Amery

คำตอบ:


20

ฉันเป็นแฟนตัวยงของ AWS โดยทั่วไป ... แต่ RDS ก็ไม่มาก

@RolandoMySQLDBA ได้ชี้ให้เห็นว่ามีบางจุดที่ดีงามกับมัน

ข้อได้เปรียบเพียงอย่างเดียวที่ฉันเห็นใน RDS เมื่อเทียบกับ MySQL บน EC2 คือความสามารถในการทำชี้และคลิกภาพรวมโคลนและการกู้คืน ณ เวลา แต่สิ่งเหล่านี้ไม่เพียงพอที่จะชดเชยการสูญเสียการควบคุมและความยืดหยุ่น แน่นอนที่สุดไม่ได้ปรับราคาให้สูงขึ้น RDS มีความเซ็กซี่ในบางวิธี แต่ในที่สุดคุณก็ไม่สามารถไว้วางใจในสิ่งที่คุณไม่สามารถแก้ไขได้ในที่สุดเพราะคุณไม่สามารถไปยังส่วนที่เคลื่อนไหวทั้งหมดได้

ฉันไม่ชอบไม่มีSUPERสิทธิ์ ฉันไม่ชอบที่ไม่สามารถจัดทำบันทึกข้อผิดพลาด ฉันไม่ชอบที่จะไม่สามารถเรียกใช้ "top" หรือ "iostat" บนเซิร์ฟเวอร์ฐานข้อมูลของฉันเพื่อดูว่าแกนและไดรฟ์เพลิดเพลินกับการโหลดอย่างไร ฉันไม่ชอบที่จะไม่เข้าถึงเอนจินการเก็บข้อมูลส่วนกลาง ฉันไม่ชอบความคิดที่จะจ่ายเงินให้กับเครื่องสำรองข้อมูลหลักแบบสแตนด์อะโลน (หลาย AZ) ที่ฉันไม่สามารถใช้เป็นแบบจำลองการอ่านได้ แน่นอนว่ามีคำอธิบายที่สมเหตุสมผลอย่างสมบูรณ์แบบว่าทำไมข้อ จำกัด ทั้งหมดเหล่านี้จึงต้องมีไว้เพื่อให้ MySQL สามารถทำการบรรจุและขายได้อย่างสมบูรณ์ในรูปแบบ RDBMS ในกล่อง สิ่งเดียวคือ RDBMS-in-a-box "แก้ปัญหา" ทั้งชุดที่ฉันไม่มี ... และเข้ามาทำให้เกิดปัญหาใหม่

แต่ตัวจัดการที่ดีที่สุดสำหรับฉันด้วย RDS คือการไม่สามารถเข้าถึงบันทึกและการจำลองแบบไบนารีได้อย่างสมบูรณ์ Binlogs โดยเฉพาะอย่างยิ่งแถวที่ใช้เป็นเครื่องมือการกู้คืนที่ยอดเยี่ยมสำหรับภัยพิบัติเล็ก ๆ น้อย ๆ แต่พวกเขาจะไม่ช่วยให้คุณถ้าคุณไม่สามารถเข้าถึงพวกเขา ต้องการกำหนดค่าเซิร์ฟเวอร์ในสถานที่ที่สำนักงานของคุณเป็นแบบจำลองการอ่านของฐานข้อมูลการผลิตของคุณใน RDS หรือไม่? มีบางสิ่งที่ต้องใช้การสำรองข้อมูลในท้องถิ่นจากการรายงานมีการกู้คืนระบบจากภัยพิบัติหากมีสิ่งใดที่คิดไม่ถึงเกิดขึ้นกับข้อมูลของคุณที่อาศัยอยู่ใน RDS นั่นเป็นความคิดที่ชัดเจนและยอดเยี่ยมพร้อมกัน

โอ๊ะโอขออภัยไม่สามารถเข้าถึงการจำลองแบบได้โดยตรง แน่นอนว่าคุณสามารถจ่ายสำหรับการอ่านซ้ำ ... แต่เป็นอินสแตนซ์ RDS อื่นเท่านั้น ไม่ใช่คุณค่าในหนังสือของฉัน

อัปเดต: การเปลี่ยนแปลงที่สำคัญหนึ่งใน RDS สำหรับ MySQL 5.6

ฉันยังคงต้องการใช้เซิร์ฟเวอร์ของตัวเอง (แม้ใน EC2) เมื่อเทียบกับการทำงาน RDS สำหรับจำนวนของเหตุผลรวมถึงการขาดการสนับสนุนสำหรับฟังก์ชั่นที่ผู้ใช้กำหนดไม่สามารถที่จะใช้สหพันธ์เก็บโปรแกรมและไม่สามารถที่จะมีหนึ่ง มีการเชื่อมต่อพิเศษสำหรับการเข้าถึงฉุกเฉิน ... อย่างไรก็ตาม ...

อเมซอนได้ทำการเปลี่ยนแปลงที่สำคัญใน MySQL 5.6 สำหรับ RDS ที่กำจัดหนึ่งในการคัดค้านที่สำคัญของฉัน - บางทีการคัดค้านที่ใหญ่ที่สุดของฉัน: ขณะนี้สามารถเข้าถึงบันทึกไบนารีและคุณสามารถเรียกใช้อินสแตนซ์ที่ไม่ใช่ RDS เป็นทาสหรือเชื่อมต่อสาธารณูปโภคอื่น ๆ เซิร์ฟเวอร์ที่อ่านสตรีม binlog

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

เอกสารระบุอย่างเป็นทางการว่าพวกเขากำลังเปิดเผยสิ่งนี้เพื่อให้คุณสามารถตั้งค่าทาสเพื่อการโยกย้ายสด - คุณซิงโครไนซ์เซิร์ฟเวอร์หลักในอนาคตจากต่างประเทศจากอินสแตนซ์ RDS ที่มีอยู่โดยใช้mysqldumpจากนั้นเชื่อมต่อกับ RDS เพื่อรับฟีดข้อมูลสดของการอัปเดตผ่านสตรีมการจำลองแบบจนกว่าแอปพลิเคชันของคุณจะถูกย้ายไปยังต้นแบบใหม่ - แต่ไม่เป็นทางการคุณสามารถทำสิ่งนี้ได้อย่างต่อเนื่องตราบใดที่คุณไม่คาดหวังว่า สำหรับฉันดูเหมือนว่าสมเหตุสมผล

สิ่งนี้ได้รับการยืนยันในการสัมมนาผ่านเว็บเมื่อเร็ว ๆนี้ในการสนทนาที่เริ่มต้นที่ประมาณ 56:45:

"คุณสามารถเก็บไว้ในสถานะที่จำลองแบบไม่สิ้นสุด ...

"... ตราบใดที่คุณรับผิดชอบในการรักษาการจำลองแบบ ... "

"เราไม่ได้ป้องกันไม่ให้คุณทำการจำลองแบบต่อเนื่องหากนั่นคือสิ่งที่คุณต้องการ"

ความสามารถใหม่นี้ก็เพียงพอแล้วสำหรับฉันที่จะคัดค้านผ้าห่มของฉันที่จะใช้ RDS ในอินสแตนซ์ MySQL ที่สนับสนุนเว็บไซต์ของเราซึ่งเราไม่ได้ใช้FEDERATEDหรือสิ่งอื่น ๆ

ดังนั้นฉันยังคงไม่ชอบมัน แต่ฉันไม่ได้ต่อต้านอีกต่อไปเนื่องจากการมีสตรีมสดของบันทึกไบนารีทำให้ฉันกลับมาควบคุมข้อมูลในเวลาจริงและรับผิดชอบในการรับรองว่าไม่มีธุรกรรมใด ๆ การสูญเสียในเหตุการณ์ภัยพิบัติกลับมาพร้อมกับฉันเพราะฉันในฐานะ DBA กลับมาอยู่ในการควบคุม - ซึ่งเป็นสิ่งที่ฉันต้องการ มีผู้ขายบุคคลที่สามที่จะชี้นิ้วหรือยื่นฟ้องหรืออะไรก็ตามที่ไม่ได้รับข้อมูลที่หายไปของคุณกลับมาถ้ามันหายไปลงหลุมดำในกล่องดำ

ฝ่ายบริหารดูเหมือนจะชอบ "ความคิด" ของ RDS และไม่คัดค้านความแตกต่างของราคาดังนั้นเราจึงเปิดตัวเว็บไซต์ใหม่ทั้งหมดที่มี RDS อยู่ด้านหลัง

ฉันยอมรับว่าการกู้คืนจุดและการคลิกในเวลานั้นเป็นคุณสมบัติที่ดีใน RDS ... มันไม่ได้เปลี่ยนแปลงหรือรบกวนเครื่องที่คุณมีอยู่ - แต่มันจะทำให้เกิดอินสแตนซ์ใหม่ทั้งหมดโดยใช้การสำรองข้อมูล ใกล้เคียงกับเวลาที่เลือกมากที่สุดจากนั้นนำ binlogs ที่จำเป็นไปใช้เพื่อนำเครื่องใหม่ไปยังจุดที่คุณระบุไว้

เกี่ยวข้องกับสิ่งนี้ แต่ในอีกทางหนึ่งตอนนี้ก็เป็นไปได้เช่นกันที่จะใช้กลยุทธ์ที่คล้ายกันในการย้ายฐานข้อมูล MySQL แบบสดไปยัง RDS ... คุณสามารถเชื่อมต่อต้นแบบ RDS ได้ (โดยทั่วไปแล้ว อินสแตนซ์) เป็นทาสของระบบที่มีอยู่เพื่อให้อินสแตนซ์ RDS มีข้อมูลสดในขณะที่คุณย้ายข้อมูล ซึ่งแตกต่างจากการเข้าถึง RDS binlogs สำหรับการจำลองแบบขาออกซึ่งใช้งานได้เฉพาะใน 5.6 เท่านั้นการจำลองแบบขาเข้าได้รับการสนับสนุนใน RDS ที่ขึ้นต้นด้วย 5.5.33 และ 5.6.13


ฉันขอทราบวิธีการใช้งานFederated Storage Engine ได้อย่างไร
— Bharat Khatri

11

หากการขยายฐานข้อมูล DB Servers ไม่ใช่ถ้วยชาของคุณ Amazon RDS ก็สามารถใช้งานได้เพราะระฆังและนกหวีดทั้งหมดมาพร้อมกับมัน ผู้ที่ต้องการปานกลาง HA, การสำรองข้อมูลและการขยายขนาดจะได้รับประโยชน์อย่างมาก

ในทางกลับกันหากคุณต้องการขยายขนาดฮาร์ดแวร์นั่นไม่เป็นปัญหาสำหรับ RDS ถ้าคุณต้องการเพิ่มความสามารถของ MySQL? น่าเสียดายที่มันเป็นไปไม่ได้สำหรับหลาย ๆ ด้านที่เราต้องการ

ตัวอย่างเช่นคุณรู้หรือไม่ว่ามีสองเขตข้อมูลต่อยอดในเซิร์ฟเวอร์รุ่น RDS ทั้งเจ็ด (7)

บันทึกแผนภูมิต่อไปนี้ในสองตัวเลือกเหล่านี้:

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)

คุณจะไม่ได้รับSUPER สิทธิ์my.cnfและไม่มีการเข้าถึงโดยตรงไปยัง ด้วยเหตุนี้ในการที่จะเปลี่ยนตัวmy.cnfเลือกสำหรับการเริ่มต้นคุณต้องสร้างรายการตัวเลือกพารามิเตอร์ฐานข้อมูลบนฐานข้อมูล MySQL และใช้ตัวเลือกRDS CLI (Command Line Interface)เพื่อเปลี่ยนตัวเลือกที่ต้องการ จากนั้นคุณต้องทำสิ่งนี้เพื่อนำเข้าตัวเลือกใหม่:

  • สร้างกลุ่มพารามิเตอร์ฐานข้อมูลที่กำหนดเอง (เรียกว่าMySettings)
  • ดาวน์โหลด RDS CLI และตั้งค่าไฟล์กำหนดค่าด้วย AWS Credentials ของคุณ
  • ดำเนินการต่อไปนี้: ./rds-modify-db-parameter-group MySettings --parameters "name=whateveroption,value=whatevervalue,method=immediate"
  • แก้ไขโดยใช้รายการตัวเลือกพารามิเตอร์ฐานข้อมูล MySettings
  • รีสตาร์ทอินสแตนซ์ของ MySQL RDS

ใช้ API สำหรับการปรับปรุงตัวแปรเดี่ยวและทำการรีสตาร์ทภาคบังคับของอินสแตนซ์ RDS เพื่อใช้การเปลี่ยนแปลงหรือไม่ นั่นเป็นกระบวนการที่เจ็บปวดมากในการเลือกหนึ่งทางเลือก

หากคุณต้องการเพิ่มระดับ MySQL กรุณาใช้ EC2 จากนั้นคุณสามารถประจบประแจงmy.cnfความชอบของคุณเหมือนที่คุณเคยทำและคุ้นเคย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.