ฉันยังใหม่กับ Elastic Beanstalk แต่ฉันสร้างสภาพแวดล้อมด้วยคอนเทนเนอร์ที่ใช้ Amazon Linux 64 บิตที่ใช้ PHP 5.3 ฉันต้องการตั้งค่า MySQL บน EBS จากนั้นติดตั้ง phpMyAdmin และนำเข้าฐานข้อมูลของฉัน

อย่างไรก็ตาม ฉันไม่ทราบวิธีการทำเช่นนี้เนื่องจากเอกสารใช้ไม่ได้สำหรับฉัน: การเรียกใช้ MySQL บน Amazon EC2 ด้วย EBS (Elastic Block Store)

เนื่องจากคู่มือนั้นได้รับการปรับปรุงครั้งล่าสุดเมื่อวันที่ 23 มีนาคม 2010 ฉันเดาว่ามันอาจล้าสมัย

นี่คือสิ่งที่ฉันทำ:

  1. ตั้งค่าอินสแตนซ์ EC2 แนบวอลุ่ม EBS เชื่อมต่อกับอินสแตนซ์ผ่าน ssh และเข้าถึงรูทด้วยคำสั่ง "sudo su -" (จนถึงตอนนี้ดีมาก)
  2. ตามคำแนะนำ ตอนนี้ฉันควรเรียกใช้คำสั่ง "sudo apt-get update && sudo apt-get upgrade -y" แต่ไม่พบคำสั่ง apt-get ไม่มีปัญหา ฉันรัน yum update และ yum upgrade
  3. ในทำนองเดียวกัน "sudo apt-get install -y xfsprogs mysql-server" ไม่ทำงาน ดังนั้นฉันจึงรัน "sudo yum install -y xfsprogs mysql-server" และ MySQL ที่ติดตั้งไว้
  4. คู่มือบอกว่าจะสร้างระบบไฟล์ XFS บน /dev/sdh แต่ไดรฟ์ข้อมูล EBS ของฉันแนบกับ /dev/sda1 (นี่เป็นค่าเริ่มต้นเมื่อคุณใช้ Elastic Beanstalk และไม่สามารถเปลี่ยนแปลงได้) และมีระบบไฟล์อยู่แล้ว มัน (ฉันเดาว่า Elastic Beanstalk สร้างโดยอัตโนมัติ) ดังนั้นจึงไม่อนุญาตให้ฉันเรียกใช้คำสั่ง "sudo mkfs.xfs /dev/sdh" (ฉันเปลี่ยนเป็น "sudo mkfs.xfs /dev/sda1" เพราะนั่นคือที่ของฉัน ปริมาณที่แนบมา)
  5. ดูเหมือนว่าคำสั่ง 3 คำสั่งถัดไปในคู่มือจะดำเนินการ (ไม่มีข้อความแสดงข้อผิดพลาด) ดังนั้นตอนนี้ฉันได้ติดตั้งไดรฟ์ข้อมูล EBS เป็น /ebsvol แล้ว อย่างไรก็ตาม ฉันสังเกตเห็นว่า /ebsvol มีสำเนาของโครงสร้างไดเรกทอรีรากใน /ebsvol อย่างไรก็ตาม /ebsvol/ebsvol เป็นไดเร็กทอรีว่าง ถึงตอนนี้ฉันกังวลนิดหน่อยแต่ฉันก็ไปต่อ
  6. ฉันหยุดเซิร์ฟเวอร์ MySQL โดยใช้คำสั่ง "/sbin/service mysqld stop" เนื่องจากคำสั่งในคู่มือ (sudo /etc/init.d/mysql stop) ไม่ทำงาน
  7. ตอนนี้ฉันต้องย้ายไฟล์ฐานข้อมูลที่มีอยู่ไปยังโวลุ่ม EBS และชี้ MySQL ไปที่โวลุ่ม EBS นี่เป็นหายนะเนื่องจากไฟล์ mysql ไม่ได้อยู่ในตำแหน่งที่คู่มือบอกว่าควรจะเป็น ตอนนี้ฉันไม่สามารถรีสตาร์ทเซิร์ฟเวอร์ MySQL ได้

ช่วย!

  1. มีคำแนะนำที่อัปเดตที่จะกำหนดค่า MySQL ให้ใช้โวลุ่ม EBS บน Elastic Beanstalk หรือไม่ การค้นหา Google, stackoverflow, serverfault ส่งผลให้เกิดคำแนะนำสองสามข้อตั้งแต่ปี 2008/2009 ดังนั้นจึงไม่ได้รับการทดสอบกับ Elastic Beanstalk (แก้ไข: มีบางอย่างที่เหมือนกับเอกสารของ Eric Hammond แต่สำหรับ CentOS/RHEL หรือไม่)
  2. ฉันจะยกเลิกการผูกมัดทั้งหมดที่ป้องกันไม่ให้ MySQL เริ่มทำงานได้อย่างไร ฉันควรลบอินสแตนซ์และโวลุ่มแล้วเริ่มต้นใหม่หรือไม่
  3. ฉันเสียเวลาไปกับการตั้งค่า MySQL บน EBS บน Elastic Beanstalk หรือไม่ จากการขาดข้อมูลที่มีอยู่ มันอาจเป็นก) ง่ายนิดเดียวและไม่จำเป็นต้องมีไกด์ หรือ b) ไม่มีใครตั้งค่า MySQL บน Elastic Beanstalk เพราะไม่จำเป็น/ซ้ำซ้อน (ดังนั้น ฉันไม่ควรกังวล)

แก้ไข: ขอบคุณสำหรับความคิดเห็นและคำตอบของคุณ ฉันกำลังพยายามหาวิธีที่ดีที่สุดในการตั้งค่าเว็บไซต์ PHP/MySQL บน AWS ดังนั้น Elastic Beanstalk จึงดูเหมือนเป็นความคิดที่ดีเพราะ AWS ทำการตลาดเป็น "วิธีที่ง่ายยิ่งขึ้นสำหรับคุณในการปรับใช้และจัดการแอปพลิเคชันใน AWS อย่างรวดเร็ว คลาวด์."

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

ดังนั้นฉันเดาว่าฉันเหลือตัวเลือกเหล่านี้:

1) อย่าใช้ Elastic Beanstalk: ตั้งค่าอินสแตนซ์ Ubuntu EC2 กับ MySQL ที่ทำงานบนโวลุ่ม EBS ตามเอกสารของ Eric Hammond (ดูเหมือนว่าจะมีปัญหาเรื่องความสามารถในการปรับขนาด)

2) ใช้ Elastic Beanstalk: ตั้งค่าฐานข้อมูลของฉันบน RDS (ไม่มีปัญหาเรื่องความสามารถในการปรับขนาด)

3) ใช้ Elastic Beanstalk: แต่ด้วย ubuntu AMI ที่กำหนดค่าด้วย MySQL ที่ทำงานบนโวลุ่ม EBS (เป็นไปได้ไหม Elastic Beanstalk จะทำงานกับ AMI ส่วนตัวได้หรือไม่)

4) ใช้ Elastic Beanstalk: เริ่มต้นใหม่และใช้คำแนะนำของ cyberx86 ในการปรับคำแนะนำ Ubuntu เพื่อทำงานบน CentOS/RHL

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

answer

ฉันไม่ได้ใช้ Elastic Beanstalk - แต่คำแนะนำที่คุณกำลังติดตามคือสำหรับ EC2 (ซึ่งฉันช่วยได้แน่นอน) ปัญหาแรกที่คุณมีคือคำแนะนำที่คุณใช้สำหรับ Ubuntu 9.10; Linux ของ Amazon นั้นใช้ CentOS/RHEL ดังนั้น คุณจะมีเวลามากขึ้นหากคุณสามารถหาคู่มือ CentOS 6 ได้

ต้นตอของปัญหาของคุณน่าจะมาจาก 'การแนบโวลุ่ม EBS' บน EC2 คุณสามารถแนบวอลุ่ม EBS หลายรายการกับอินสแตนซ์เดียวได้ อินสแตนซ์ทั้งหมดมีวอลุ่มรูท - สามารถสนับสนุน S3 หรือ EBS ได้ จนถึงตอนนี้ แนวทางที่ต้องการคือการใช้ไดรฟ์ข้อมูลรากที่ได้รับการสนับสนุนโดย EBS (มีค่าใช้จ่ายเพิ่มขึ้นเล็กน้อย แต่ชดเชยด้วยความยืดหยุ่นและความทนทาน) อินสแตนซ์ที่มีไดรฟ์ข้อมูลราก EBS มักจะมีไดรฟ์ข้อมูลนี้แนบเป็น /dev/sda1 - ในระบบ Linux สมัยใหม่ อุปกรณ์จะแสดงเป็น /dev/xvda1 (และเป็นรุ่นหลังที่ควรส่งผ่านไปยังคำสั่งใดๆ) (นอกเหนือจากการพยายามฟอร์แมตวอลุ่มที่เมาท์ - คุณกำลังพยายามฟอร์แมตระบบไฟล์รูทของคุณด้วยอินสแตนซ์ที่ทำงานอยู่ - เช่น คุณกำลังพยายามลบระบบปฏิบัติการของคุณ ซึ่งไม่ใช่ความคิดที่ดีเลย หากเป็นไปได้)

ในกรณีนี้ คำแนะนำคือให้เพิ่มโวลุ่ม EBS ที่สอง - แนบไปกับอินสแตนซ์ของคุณ (เช่น /dev/sdh แต่ใช้ /dev/xvdh สำหรับคำสั่ง) และใช้สำหรับจัดเก็บข้อมูล MySQL ของคุณ (แม้จะไม่ได้ใช้ Elastic Beanstalk) ฉันพบว่ามันยากที่จะเชื่อว่า Elastic Beanstalk จะไม่อนุญาตให้คุณแนบวอลุ่มที่สอง เนื่องจากฟังก์ชันนี้ค่อนข้างเป็นศูนย์กลางของ EC2

คุณควรจะสามารถรับรายการอุปกรณ์ EBS ได้โดยการเรียกใช้cat /proc/partitions(หรือใช้fdisk -l)

คุณจะสังเกตได้ว่าในขั้นตอนที่ 5 ของสิ่งที่คุณทำ คุณกำลังติดตั้งไดรฟ์ข้อมูลรูทในตัวมันเอง (เช่น /dev/sda1 ติดตั้งเป็น / และคุณกำลังติดตั้ง /dev/sda1 เป็น /ebsvol) - ทางที่ดีควร หลีกเลี่ยงการทำอย่างนั้น

นอกจากนี้ในขณะที่/etc/init.d/mysql stopไม่ทำงาน/etc/init.d/mysqld stopอาจจะได้ทำงาน (อีกครั้ง คุณสามารถรับรายการสคริปต์ init.d ได้ด้วยการรันls /etc/init.dและควรจะใช้เส้นทางเหล่านั้นได้ เช่นเดียวกับคุณ ฉันมักจะใช้serviceคำสั่งนี้)

ฐานข้อมูล MySQL ควรอยู่ใน /var/lib/mysql - อย่างไรก็ตาม จุดเชื่อมต่อของคุณใน /etc/fstab อาจไม่ถูกต้อง (เนื่องจาก ebsvol ภายใน /ebsvol ปัญหา) เมื่อคุณcd /var/lib/mysqlควรจะสามารถเห็นฐานข้อมูลของคุณ - ถ้าไม่ใช่การเมานท์ของคุณก็ทำงานไม่ถูกต้อง (ตรวจสอบว่า /var/lib/mysql ติดตั้งบนอุปกรณ์อื่นโดยmountpoint -d /var/lib/mysqlและเปรียบเทียบอุปกรณ์กับcat /proc/partitions)

แนวคิดพื้นฐานของคำแนะนำที่คุณกำลังติดตามนั้นค่อนข้างใช้ได้ - เป็นเรื่องปกติที่จะใส่ข้อมูลและฐานข้อมูลของคุณบนโวลุ่ม EBS ที่แตกต่างจากโวลุ่มรูทของคุณ เนื่องจากมีข้อดีมากมาย (ประสิทธิภาพ การทำสแนปชอตที่ง่าย ง่ายต่อการย้ายระหว่างอินสแตนซ์ ฯลฯ) และคำสั่งพื้นฐานสำหรับ Linux ไม่ได้เปลี่ยนแปลง - คำสั่งเหล่านี้มีไว้สำหรับ Ubuntu เท่านั้น

เลิกทำการเมานต์ของคุณด้วยumount /path- แน่นอน คุณจะต้องแน่ใจว่าอุปกรณ์ไม่ยุ่ง (ซึ่งอาจไม่ใช่ปัญหาหากคุณยังไม่ได้เริ่ม MySQL) umount เป็นเพียงชั่วคราว - ดังนั้นคุณจะต้องแก้ไข/etc/fstabและลบการอ้างอิงใด ๆ ไปยังจุดเชื่อมต่อออกจากที่นั่นด้วย หากคุณไม่มีค่าอะไรในอินสแตนซ์ คุณอาจจะเริ่มต้นใหม่ได้ดีกว่า (ไม่ใช่เพราะเป็นการยากที่จะเลิกเมาต์วอลุ่มบางรายการ แต่เนื่องจากมันง่ายกว่าเสมอที่จะรู้ว่าคุณผิดพลาดจากจุดใดเมื่อเริ่มต้นจาก สถานะที่ทราบ)

สุดท้าย เกี่ยวกับ MySQL บน Elastic Beanstalk: ประเด็นของ Elastic Beanstalk ควรจะเป็นการจัดการการจัดเตรียมทรัพยากรและการปรับขนาดโดยอัตโนมัติ - ยังคงอิงตามส่วนประกอบหลักของ AWS (เช่น EC2, S3, ELB เป็นต้น) แต่ จะทำบางสิ่งให้คุณ Elastic Beanstalk มักใช้ RDS เพื่อจัดการฐานข้อมูล MySQL RDS คือ MySQL เวอร์ชันที่ได้รับการจัดการของ Amazon ซึ่งทำให้การจัดเตรียมและการปรับขนาดของอินสแตนซ์ MySQL ง่ายขึ้น โปรดทราบว่า MySQL นั้นไม่สามารถให้การปรับขนาดอัตโนมัติได้ดีหากไม่มีการตั้งค่าจำนวนมาก คุณไม่สามารถเปิดอินสแตนซ์ MySQL ตัวที่สองและแบ่งโหลดระหว่างสองอินสแตนซ์ได้ - คุณต้องตั้งค่าการจำลองแบบ ซึ่งอาจไม่ใช่งานง่าย)

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


แก้ไข:

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

หากคุณกำลังใช้ EC2 มีวิธีสองสามอย่างสำหรับ PHP/MySQL:

  1. คุณสามารถโฮสต์ทั้งเว็บเซิร์ฟเวอร์และฐานข้อมูลของคุณในอินสแตนซ์เดียว - เมื่อคุณเริ่มต้น วิธีนี้อาจเป็นวิธีที่สมเหตุสมผล อย่างไรก็ตาม มันไม่สามารถปรับขนาดในแนวนอนได้ดีมาก (แต่คุณยังสามารถปรับขนาดในแนวตั้งได้ โดยใช้อินสแตนซ์ที่ใหญ่ขึ้น) หวังว่าเมื่อถึงเวลาที่คุณใช้อินสแตนซ์ x-large เกินความจุ คุณจะอยู่ในตำแหน่งที่จะตั้งค่าการตั้งค่าที่ซับซ้อนยิ่งขึ้นได้ ที่กล่าวมาไม่ดีสำหรับความซ้ำซ้อน - ทุกอย่างอยู่ในอินสแตนซ์เดียวและความล้มเหลวของส่วนประกอบใด ๆ จะทำลายการตั้งค่าทั้งหมดของคุณ
  2. คุณสามารถโฮสต์เว็บเซิร์ฟเวอร์ของคุณในอินสแตนซ์เดียว และใช้ RDS สำหรับฐานข้อมูลของคุณ แอปพลิเคชั่นที่ออกแบบมาอย่างดีส่วนใหญ่จะเก็บภาษีเว็บเซิร์ฟเวอร์มากกว่าฐานข้อมูล ในสถานการณ์เช่นนี้ คุณสามารถปรับขนาดอินสแตนซ์ของเว็บเซิร์ฟเวอร์ได้ค่อนข้างง่าย (เช่น โดยวางไว้หลัง ELB โดยใช้ความพยายามเพียงเล็กน้อยเพื่อให้แน่ใจว่าทั้งหมดให้บริการเนื้อหาเดียวกัน) RDS คือ MySQL ที่จัดการโดย AWS ซึ่งไม่ใช่ระบบอัตโนมัติทั้งหมด แต่ใช้งานได้ยาวนานในการปรับขนาดอัตโนมัติ โดยพื้นฐานแล้ว RDS จะจัดเตรียมสเลฟแบบอ่านอย่างเดียวหลายตัว และไรท์มาสเตอร์ตัวเดียว พร้อมการสำรองข้อมูลแบบด่วนหลายรายการที่สามารถเข้าควบคุมได้หากคุณต้องการ ข้อเสียคือคุณจ่ายเงินสำหรับอินสแตนซ์ทั้งหมดที่ทำงานอยู่ (และคุณไม่สามารถควบคุมการตั้งค่าที่ซับซ้อนบางอย่างของ MySQL ได้อย่างเต็มที่)
  3. แนวทางสุดท้ายคือการใช้คลัสเตอร์เว็บเซิร์ฟเวอร์และคลัสเตอร์ MySQL ของคุณเอง โดยพื้นฐานแล้ว คุณสามารถปรับขนาดอินสแตนซ์เว็บของคุณ (ดังด้านบน) จากนั้นคุณจะตั้งค่าอินสแตนซ์ MySQL ที่จะปรับขนาดแยกต่างหาก คุณจะต้องพิจารณาการจำลองแบบ MySQL (หรืออาจใช้คลัสเตอร์ MySQL หากคุณสามารถปรับแอปพลิเคชันของคุณให้เข้ากับโครงสร้างข้อมูลได้)

คำตอบอื่น ๆ ในหัวข้อเดียวกัน:

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

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

สำหรับทางเลือกของระบบปฏิบัติการ ฉันเป็นส่วนหนึ่งของ Linux ของ Amazon AWS รองรับเป็นอย่างดีและใช้ทรัพยากรขั้นต่ำ - เข้ากันได้กับ CentOS อย่างสมบูรณ์ (ตามจริงแล้วจะรวมที่เก็บ EPEL ตามค่าเริ่มต้นในเวอร์ชันล่าสุด) มุมมองปกติคือการใช้ลีนุกซ์รุ่นใดก็ตามที่คุณพอใจ เนื่องจากความแตกต่างมักจะเล็กน้อย (CentOS จะทำงานเช่นเดียวกับอูบุนตูสำหรับคำแนะนำที่คุณใช้ - คำสั่งส่วนใหญ่ (ยกเว้น apt-get) เหมือนกันบน CentOS เนื่องจากการตั้งค่าของฉันเองมีฐานข้อมูลในไดรฟ์ข้อมูล EBS แยกต่างหากโดยใช้ Linux ของ Amazon ฉันจึงรับรองได้ว่าทำได้ไม่ยาก)

ฉันขอแนะนำว่ามีข้อควรพิจารณาหลักบางประการ:

  • ความสบายพร้อม/เต็มใจที่จะเรียนรู้ระบบ Linux - ถ้าคุณไม่รังเกียจที่จะตั้งค่าเซิร์ฟเวอร์ของคุณเองและต้องการทำความเข้าใจระบบเหล่านี้ให้ดีขึ้น ฉันจะไปที่เส้นทาง EC2 อย่างแน่นอน คุณจะลงเอยด้วยผลลัพธ์ที่ดีขึ้นหากคุณทำถูกต้องและจะมีความเก่งกาจมากขึ้นในระยะยาว ฉันจะพูดถึงว่าถ้าคุณใช้วิธีนี้ คุณต้องการที่จะเข้าใจจริงๆ ว่าคำสั่งที่คุณกำลังเรียกใช้ทำ - เพียงแค่ทำตามคำแนะนำจะไม่เพียงพอหากคุณต้องการยอมรับจริง ๆ
  • งบประมาณ - จำไว้ว่าด้วย AWS ทุกอย่างมีราคา ยิ่ง AWS ทำเพื่อคุณมากเท่าไหร่ พวกเขาก็ยิ่งเรียกเก็บเงินคุณมากเท่านั้น อินสแตนซ์ RDS มีค่าใช้จ่ายมากกว่าอินสแตนซ์ EC2 ที่เทียบเท่ากันประมาณ 30% (และไม่มีอินสแตนซ์ขนาดเล็ก) และหากคุณต้องการความซ้ำซ้อนที่มีให้ คุณจะต้องใช้งานอินสแตนซ์ RDS หลายรายการ (และชำระเงินสำหรับแต่ละรายการ) Elastic Beanstalk จะจัดเตรียมอินสแตนซ์ ตัวจัดสรรภาระงาน อินสแตนซ์ RDS ฯลฯ ให้คุณ - ค่าใช้จ่ายจะเพิ่มขึ้นอย่างรวดเร็ว
  • เวลา - หากคุณไม่มีเวลา ต้องการกดปุ่มสองสามปุ่มและมีบางอย่างที่ใช้งานได้ Elastic Beanstalk น่าจะเป็นแนวทางที่ดีที่สุดสำหรับคุณ

ฉันขอแนะนำว่าอย่าใช้ Elastic Beanstalk กับ MySQL ที่ฝังอยู่ใน AMI ของคุณ - มันอาจจะค่อนข้างไม่เสถียร ถ้ามันใช้งานได้เลย (ลองคิดดูว่าเกิดอะไรขึ้นเมื่อเพิ่มและลบอินสแตนซ์ไปยังคลัสเตอร์ของคุณ หรือเมื่อข้อมูลไปที่อินสแตนซ์หนึ่งแทนที่จะเป็นอีกอินสแตนซ์...)

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

ฉันขอแนะนำว่าหากแอปพลิเคชันของคุณได้รับการออกแบบมาเพื่อให้สามารถใช้ประโยชน์จากการแคชได้ แอปพลิเคชันของคุณจะใช้งานได้ไกล

โดยปกติ ใน EC2 จะดีกว่าที่จะปรับขนาดในแนวตั้ง (เป็นอินสแตนซ์ที่ใหญ่กว่า) มากกว่าในแนวนอน (เป็นอินสแตนซ์จำนวนมากขึ้น) อย่างไรก็ตาม ในการเริ่มต้น คุณต้องปรับขนาดเป็นสองอินสแตนซ์ เพื่อให้คุณมีความซ้ำซ้อนและลดจุดล้มเหลวเพียงจุดเดียว แนวทางที่เป็นไปได้อาจเป็นดังนี้:

  1. เริ่มต้นด้วยอินสแตนซ์ขนาดเล็ก - มีทั้งฐานข้อมูลและแอปพลิเคชันของคุณ (คุณไม่สามารถเล็กกว่านี้ได้อีก ซึ่งทำให้เป็นจุดเริ่มต้นที่ดี)
    • แน่นอนว่าการปรับขนาดในแนวตั้งทำได้ง่ายมาก เพียงอัปเกรดอินสแตนซ์ของคุณต่อไปจนกว่าคุณจะใช้อินสแตนซ์ขนาดใหญ่ x ปัญหาเกิดจากความซ้ำซ้อน หากมีปัญหากับอินสแตนซ์ แอปพลิเคชันของคุณออฟไลน์
  2. ในตอนนี้ คุณมักจะต้องการแยกฐานข้อมูลของคุณไปยังอินสแตนซ์อื่น (เนื่องจาก a) ฐานข้อมูลจะเห็นการโหลดที่แตกต่างจากแอปพลิเคชันของคุณ และ b) คุณไม่สามารถปรับขนาดอัตโนมัติของ MySQL ในลักษณะเดียวกับเว็บเซิร์ฟเวอร์) แต่อินสแตนซ์ขนาดเล็กก็ทำไม่ได้ รองรับการโหลดได้ไม่ดี ดังนั้นฉันขอแนะนำให้อัปเกรดเป็นอินสแตนซ์ที่ใหญ่กว่าก่อน อย่างน้อยก็ขนาดเล็ก และอาจเป็นสื่อ (โดยพื้นฐานแล้ว แนวคิดก็คือเมื่อคุณต้องการประเภทอินสแตนซ์ที่ใหญ่ขึ้น เอฟเฟกต์น่าจะมากกว่า)
  3. แยกฐานข้อมูลของคุณออกจากเว็บเซิร์ฟเวอร์ของคุณ สิ่งนี้จะช่วยให้คุณสามารถตอบสนองความต้องการที่แตกต่างกันสำหรับฐานข้อมูล (เช่น หน่วยความจำสูง) กับเว็บเซิร์ฟเวอร์ (เช่น cpu ที่สูงกว่า) และความแตกต่างระหว่างวิธีการปรับขนาดแต่ละฐานข้อมูล ( Recommend reading ) ณ จุดนี้ คุณอาจตัดสินใจใช้ RDS แทนการเรียกใช้อินสแตนซ์ MySQL ของคุณเอง
  4. เมื่อคุณให้แอปพลิเคชันของคุณทำงานบนอินสแตนซ์เฉพาะแล้ว คุณสามารถปรับขนาดได้และไม่ต้องกังวลกับฐานข้อมูลของคุณ - ตั้งค่าการปรับขนาดอัตโนมัติเพื่อให้คุณมีความซ้ำซ้อน สิ่งนี้ควรเพิ่มโหนดของแอปพลิเคชันโดยอัตโนมัติ เนื่องจากโหนดใดโหนดหนึ่งล้มเหลวหรือเมื่อโหลดเกินขีดจำกัดที่คุณระบุ
  5. เพิ่มโหนดฐานข้อมูลที่สองและกำหนดค่าการจำลองแบบระหว่างโหนดของคุณ (หากคุณเลือกใช้คลัสเตอร์ MySQL หรือโซลูชัน NoSQL คุณควรตั้งค่าการปรับขนาดอัตโนมัติได้เช่นกัน) ณ จุดนี้ทุกอย่างควรมีความซ้ำซ้อน และแม้ว่าโหนดจะล้มเหลว คุณก็ยังควรออนไลน์อยู่
  6. อัปเกรดครั้งละหนึ่งอินสแตนซ์เป็นขนาดอินสแตนซ์ที่ใหญ่ขึ้นตามความต้องการ

ตอนนี้ฉันคุ้นเคยกับ Elastic Beanstalk และ EC2 มากขึ้นแล้ว ฉันจึงตัดสินใจเลิกใช้ Elastic Beanstalk เพราะถึงแม้ว่ามันจะมีคุณสมบัติเจ๋งๆ บ้าง แต่ก็เข้มงวดเกินไปสำหรับความชอบของฉัน ตัวอย่างเช่น ฉันไม่ชอบความจริงที่ว่าฉันไม่สามารถเปลี่ยนไฟล์ httpd.conf ได้ (คุณสามารถเปลี่ยนได้ แต่การเปลี่ยนแปลงเหล่านั้นจะหายไปเมื่อคุณรีสตาร์ทสภาพแวดล้อมของคุณ) อีกเหตุผลหนึ่งก็คือ วิธีเดียวที่จะเรียกใช้ Elastic Beanstalk กับ MySQL (อย่างถูกต้อง เช่น ด้วยการปรับขนาดอัตโนมัติและการสำรองข้อมูลอัตโนมัติ) คือการใช้ RDS แม้ว่าคุณจะได้รับ RDS ฟรี 3 เดือนเมื่อลงชื่อสมัครใช้ใหม่ แต่ฉันยังไม่ถึงขนาดที่ฉันต้องการคุณสมบัติของมัน ดังนั้นจึงไม่คุ้มค่าสำหรับฉันที่จะจ่ายประมาณ $76/เดือนสำหรับ RDS

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

สิ่งที่ฉันทำ: ฉันเลือกใช้ "Synthetic Elastic Beanstalk": ฉันสามารถสร้างฟังก์ชันการทำงานขึ้นใหม่ได้โดยใช้ข้อเสนอต่างๆ จาก AWS และมีความยืดหยุ่นในการกำหนดค่าตามที่ฉันต้องการ ในขณะที่ฉันกำลังเริ่มใช้งาน AWS ฉันได้ตั้งค่า MySQL บนอินสแตนซ์ EC2 เดียวกันกับเว็บแอปของฉัน (ไม่เหมาะเมื่อคุณต้องการปรับขนาด แต่ใช้ได้อย่างสมบูรณ์ในขณะที่คุณเรียนรู้เกี่ยวกับการใช้ AWS)

คู่มือนี้คือสิ่งที่ฉันใช้ในการตั้งค่า LAMP stack บนอินสแตนซ์ EC2 ที่รัน Amazon linux AMI ฉันพบว่าการนำเข้าฐานข้อมูลของฉันด้วย phpmyadmin ง่ายขึ้น เนื่องจากฉันใช้อินสแตนซ์ขนาดเล็ก จึงใช้ EBS โดยค่าเริ่มต้น และคุณสามารถถ่ายภาพสแนปชอตเพื่อสำรองข้อมูลของคุณได้ ฉันอยากจะแนะนำให้ตั้งค่าเครื่องมือ CLI สำหรับ EC2 และใช้งานอยู่

ec2-modify-instance-attribute --block-device-mapping "/dev/sda1=:false" i-xxxxxxx

โดยที่ i-xxxxxxxx คืออินสแตนซ์ EC2 ที่ไดรฟ์ข้อมูล EBS แนบอยู่ สิ่งนี้จะป้องกันไม่ให้วอลลุม EBS ถูกลบหากอินสแตนซ์ของคุณยุติลง เนื่องจากโวลุ่ม EBS นั้นเป็นที่ที่ทุกอย่างถูกเรียกใช้และจัดเก็บฐานข้อมูลของฉัน ฉันไม่ต้องการที่จะสูญเสียมันไป (ในขณะที่ฉันกำลังเล่นกับ Elastic Beanstalk อินสแตนซ์ EC2 ของฉันถูกยกเลิกและ Elastic Beanstalk เริ่มต้นอีกอันหนึ่งด้วย EBS ใหม่ทันที แนบไดรฟ์ข้อมูลแล้ว แต่ฉันโชคดีที่เปลี่ยนการตั้งค่า DeleteOnTermination เป็น "เท็จ" สำหรับโวลุ่ม EBS ดั้งเดิม ดังนั้นฉันจึงสามารถหยุดอินสแตนซ์ใหม่ ถอดวอลลุม EBS ใหม่ และแนบโวลุ่ม EBS เก่า เพื่อรักษาการติดตั้ง MySQL ของฉันและ ฐานข้อมูล)

โดยรวมแล้ว กระบวนการทั้งหมดในการย้ายเว็บแอปไปยัง AWS ยังคงเป็นเรื่องยุ่งยาก ตอนนี้ฉันได้ผ่านช่วงการเรียนรู้แล้ว ฉันรู้สึกสบายใจกับมันมากขึ้น แต่ฉันอดคิดไม่ได้ว่าควรมีเอกสารประกอบที่ดีกว่าสำหรับการเริ่มต้น