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.