ขณะนี้เราใช้เว็บเซิร์ฟเวอร์หลายเครื่องเข้าถึงเซิร์ฟเวอร์ mysql และไฟล์เซิร์ฟเวอร์ เมื่อมองไปที่คลาวด์ฉันสามารถใช้การตั้งค่าเดียวกันนี้และแนบ EBS กับอินสแตนซ์ของเครื่องหลายเครื่องหรือมีวิธีแก้ไขปัญหาอื่นอีกหรือไม่
ขณะนี้เราใช้เว็บเซิร์ฟเวอร์หลายเครื่องเข้าถึงเซิร์ฟเวอร์ mysql และไฟล์เซิร์ฟเวอร์ เมื่อมองไปที่คลาวด์ฉันสามารถใช้การตั้งค่าเดียวกันนี้และแนบ EBS กับอินสแตนซ์ของเครื่องหลายเครื่องหรือมีวิธีแก้ไขปัญหาอื่นอีกหรือไม่
คำตอบ:
อัปเดต (เมษายน 2558) : สำหรับกรณีการใช้งานนี้คุณควรเริ่มต้นดูที่ระบบไฟล์ยืดหยุ่นของ Amazon (EFS)ใหม่ซึ่งได้รับการออกแบบมาให้เชื่อมต่อแบบทวีคูณตามที่คุณต้องการ ความแตกต่างที่สำคัญระหว่าง EFS และ EBS คือสิ่งที่พวกเขามี abstractions ที่แตกต่าง: EFS exposes โปรโตคอล NFSv4 ในขณะที่ EBS ให้การเข้าถึง IO บล็อกดิบ
ด้านล่างคุณจะพบคำอธิบายเริ่มต้นของฉันว่าทำไมจึงไม่สามารถติดตั้งอุปกรณ์บล็อกดิบบนเครื่องหลายเครื่องได้อย่างปลอดภัย
โพสต์ต้นฉบับ (2011):
แม้ว่าคุณจะสามารถเพิ่มปริมาณ EBS แนบกับอินสแตนซ์ได้มากกว่าหนึ่งอินสแตนซ์ก็จะเป็น _REALLY_BAD_IDEA_ เพื่ออ้างอิง Kekoa "นี่เหมือนกับการใช้ฮาร์ดไดรฟ์ในคอมพิวเตอร์สองเครื่องพร้อมกัน"
ทำไมนี่เป็นความคิดที่ไม่ดี ... เหตุผลที่คุณไม่สามารถแนบไดรฟ์ข้อมูลกับมากกว่าหนึ่งอินสแตนซ์ได้คือ EBS ให้สิ่งที่เป็นนามธรรม "block storage" ที่ลูกค้าเรียกใช้ระบบไฟล์เช่น ext2 / ext3 / etc ระบบไฟล์เหล่านี้ส่วนใหญ่ (เช่น ext2 / 3, FAT, NTFS และอื่น ๆ ) ถูกเขียนขึ้นโดยสมมติว่าพวกเขามีการเข้าถึงแบบพิเศษไปยังอุปกรณ์บล็อก สองอินสแตนซ์ที่ใช้งานระบบไฟล์เดียวกันอาจทำให้น้ำตาและข้อมูลเสียหาย
กล่าวอีกนัยหนึ่งการติดตั้งไดรฟ์ข้อมูล EBS เป็นสองเท่าจะทำงานได้ก็ต่อเมื่อคุณใช้ระบบไฟล์คลัสเตอร์ที่ออกแบบมาเพื่อแบ่งปันอุปกรณ์บล็อกระหว่างเครื่องหลายเครื่อง นอกจากนี้แม้จะไม่เพียงพอ EBS จะต้องได้รับการทดสอบสำหรับสถานการณ์นี้และเพื่อให้แน่ใจว่ามีการรับประกันความสอดคล้องเช่นเดียวกับโซลูชันอุปกรณ์บล็อกที่ใช้ร่วมกันอื่น ๆ ... นั่นคือบล็อกนั้นจะไม่ถูกแคชในระดับกลางที่ไม่แชร์เช่นเคอร์เนล Dom0, Xen layer และเคอร์เนล DomU และจากนั้นก็มีข้อควรพิจารณาด้านประสิทธิภาพของการซิงโครไนซ์บล็อกระหว่างไคลเอนต์หลายแห่ง - ระบบไฟล์แบบคลัสเตอร์ส่วนใหญ่ได้รับการออกแบบมาเพื่อทำงานบน SAN ที่มีความเร็วสูงโดยเฉพาะ ฟังดูง่ายมาก แต่สิ่งที่คุณขอเป็นสิ่งที่ไม่สำคัญมาก
หรือดูว่าสถานการณ์การแชร์ข้อมูลของคุณอาจเป็น NFS, SMB / CIFS, SimpleDB หรือ S3 โซลูชันเหล่านี้ใช้โปรโตคอลเลเยอร์ที่สูงกว่าซึ่งมีจุดประสงค์เพื่อใช้ไฟล์ร่วมกันโดยไม่ต้องมีระบบย่อยของอุปกรณ์บล็อกที่ใช้ร่วมกัน หลายครั้งที่โซลูชันดังกล่าวมีประสิทธิภาพมากขึ้น
ในกรณีของคุณคุณยังสามารถมีอินสแตนซ์ MySql / ไฟล์เซิร์ฟเวอร์เดียวที่เข้าถึงได้จากหลายหน้าเว็บ ไฟล์เซิร์ฟเวอร์นั้นจะสามารถจัดเก็บข้อมูลไว้ในไดรฟ์ข้อมูล EBS เพื่อให้คุณสามารถสำรองข้อมูลทุกคืนได้ หากอินสแตนซ์ที่ใช้งานเซิร์ฟเวอร์ไฟล์หายไปคุณสามารถแยกวอลลุ่ม EBS ออกแล้วใส่กลับเข้าไปในอินสแตนซ์ของไฟล์เซิร์ฟเวอร์ใหม่และทำการสำรองและใช้งานได้ในไม่กี่นาที
"มีอะไรเหมือน S3 เป็นระบบไฟล์หรือไม่" - ใช่และไม่. ใช่มีโซลูชันของบุคคลที่สามเช่นs3fsที่ทำงานได้ "ok" แต่ภายใต้ประทุนพวกเขายังคงต้องใช้บริการทางเว็บที่มีราคาค่อนข้างแพงสำหรับการอ่าน / เขียนแต่ละครั้ง สำหรับเครื่องมือที่ใช้ร่วมกันจะใช้งานได้ดี สำหรับการใช้งาน FS แบบคลัสเตอร์ที่คุณเห็นในโลก HPC ไม่ใช่โอกาส เพื่อให้ดีขึ้นคุณจะต้องมีบริการใหม่ที่ให้บริการโปรโตคอลการเชื่อมต่อแบบไบนารีเช่น NFS การเสนอระบบไฟล์แบบติดตั้งหลายตัวที่มีประสิทธิภาพและพฤติกรรมที่เหมาะสมจะเป็นคุณสมบัติเสริมที่ยอดเยี่ยมสำหรับ EC2 ฉันเป็นผู้สนับสนุนให้ Amazon สร้างอะไรแบบนี้มานานแล้ว
ตอนนี้เป็นไปได้ด้วยอินสแตนซ์ใหม่ล่าสุดที่ทำงานใน AWS Nitro ภายในโซนความพร้อมใช้งานเดียวกัน มีข้อแม้บางประการ แต่นี่เป็นวิธีที่ดีสำหรับกรณีการใช้งานบางอย่างที่ต้องการความเร็วของ EBS และตำแหน่งที่ EFS ไม่สามารถทำได้
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volumes-multi.html
ไม่เหมือนการใช้ฮาร์ดไดรฟ์ในคอมพิวเตอร์สองเครื่อง
หากคุณต้องการข้อมูลที่แชร์คุณสามารถตั้งค่าเซิร์ฟเวอร์ที่ทุกอินสแตนซ์ของคุณสามารถเข้าถึงได้ หากคุณต้องการพื้นที่เก็บข้อมูลที่เรียบง่ายสำหรับอินสแตนซ์ทั้งหมดของคุณคุณสามารถใช้บริการเก็บข้อมูล S3 ของ Amazon เพื่อเก็บข้อมูลที่สามารถกระจายและปรับขนาดได้
ย้ายไปที่คลาวด์คุณสามารถตั้งค่าแบบเดียวกัน แต่คุณสามารถแทนที่ไฟล์เซิร์ฟเวอร์ด้วย S3 หรือให้อินสแตนซ์ทั้งหมดของคุณเชื่อมต่อกับไฟล์เซิร์ฟเวอร์ของคุณ
คุณมีตัวเลือกมากมาย แต่การแชร์ฮาร์ดไดรฟ์ระหว่างอินสแตนซ์อาจไม่ใช่ตัวเลือกที่ดีที่สุด
ไม่อ้างอิงเอกสาร EBS: "สามารถแนบไดรฟ์ข้อมูลกับอินสแตนซ์ครั้งละหนึ่งรายการเท่านั้น"
ปัจจุบันคุณใช้พื้นที่เก็บข้อมูลร่วมกันอย่างไร หากเป็นเพียงการให้บริการไฟล์จาก fileserver คุณได้พิจารณาการตั้งค่าระบบเพื่อให้คุณสามารถพร็อกซีคำขอบางอย่างไปยังกระบวนการใน fileserver แทนที่จะให้ webservers ให้บริการไฟล์เหล่านั้นหรือไม่
aws ec2 describe-volumes
กลับอาร์เรย์ของสิ่งที่แนบ
ฉันค่อนข้างแน่ใจว่าคุณทำไม่ได้ แต่คุณสามารถโคลน EBS และแนบไปกับอินสแตนซ์อื่นได้
สิ่งนี้มีประโยชน์สำหรับชุดข้อมูลคงที่หรือสำหรับการทดสอบกับข้อมูล 'ของจริง' แต่ไม่อนุญาตให้มีมากกว่า 1 อินสแตนซ์ให้ทำงานบนที่เก็บบล็อกเดียว
เว็บเซิร์ฟเวอร์หลายเครื่องที่เข้าถึง MySQL เซิร์ฟเวอร์และไฟล์เซิร์ฟเวอร์เป็นเรื่องปกติใน AWS แนวปฏิบัติที่ดีที่สุดบางประการที่ควรปฏิบัติตามสำหรับสถาปัตยกรรมที่กล่าวถึงข้างต้นคือ:
จุดที่ 1) MySQL บน EC2 สามารถตั้งค่าเป็น Master-Slave ในโหมด async / semi sync ใน AWS แนะนำให้ใช้ EBS-OPT + PIOPS ใน RAID 0 สำหรับฐานข้อมูลประสิทธิภาพสูง
จุดที่ 2) อีกทางหนึ่งคุณสามารถใช้โหมด Amazon RDS + Multi-AZ สำหรับการปรับสเกลการอ่าน RDS ที่อ่านได้หลายอันสามารถแนบกับ MySQL RDS ได้
จุดที่ 3) EBS Volume ไม่สามารถต่อกับ Multiple EC2 ได้ในเวลาเดียวกัน คุณสามารถสร้างไฟล์เซิร์ฟเวอร์ตาม GlusterFS บน Amazon EC2 โดยใช้ EBS เว็บเซิร์ฟเวอร์หลายเครื่องสามารถพูดคุยกับ GlusterFS เดียวพร้อมกันบน AWS infra
จุดที่ 4) ในกรณีที่แอปพลิเคชันของคุณสามารถรวมเข้ากับ S3 เป็นที่เก็บไฟล์ได้ดังนั้นจึงเป็นที่ต้องการเนื่องจากความเสถียรที่นำมาสู่สถาปัตยกรรม คุณสามารถเข้าถึง S3 โดยใช้เครื่องมือเช่น S3fuse เช่นกันจากแอปพลิเคชันของคุณ
EBS เพิ่งประกาศว่าเป็นไปได้: https://aws.amazon.com/about-aws/whats-new/2020/02/ebs-multi-attach-available-provisioned-iops-ssd-volumes/
มีบางสิ่งในโลกไอทีที่เรียกว่า Clustered Filesystem, Redhat GFS, Oracle OCFS2, Veritas CFS ...
คำตอบสั้น ๆ คือหมวดหมู่ "ไม่" คนอื่นได้กล่าวไว้ข้างต้น
คนที่พูดว่า "ใช่" ไม่ตอบคำถาม แต่เป็นคำถามที่แตกต่าง หาก EFS เป็นเพียงบริการ NFS แสดงว่าไม่ใช่คำตอบสำหรับคำถามตามที่ระบุไว้ แต่เดิม และมันก็ไม่สำคัญว่า EFS จะ "เปิดตัวในทุกโซน" หรือไม่เพราะคุณสามารถทำอินสแตนซ์ NFS ของคุณเองได้และมีเซิร์ฟเวอร์หลายตัวติดตั้ง NFS นั่นไม่ใช่สิ่งใหม่เราได้ทำเช่นนั้นในปี 1992 แล้ว SMB และ sshfs ทั้งหมดเหล่านี้เป็นเพียงวิธีการเมานต์ไดรฟ์เป็นระบบไฟล์ระยะไกล
คนที่พูดว่า "ทำไมคุณถึงอยากทำเช่นนั้น" หรือ "มันจะจบลงด้วยน้ำตา" ผิด เราได้ติดตั้งดิสก์หลายตัวกับเซิร์ฟเวอร์หลายเครื่องมานานหลายทศวรรษ หากคุณเคยทำงานกับ SAN (Storage Area Network) ความสามารถในการเชื่อมต่ออุปกรณ์เดียวกันกับหลาย ๆ โหนดโดยทั่วไปผ่าน FibreChannel SAN นั้นเป็นเรื่องปกติ ดังนั้นทุกคนที่ใช้งานเซิร์ฟเวอร์เมื่อสิบปีก่อนก่อนที่เซิร์ฟเวอร์เวอร์ช่วลไลเซชั่น / คลาวด์จะแพร่หลายทุกหนทุกแห่ง
ในไม่ช้าก็มีระบบไฟล์แบบคลัสเตอร์ที่ทั้งสองระบบสามารถอ่านและเขียนลงในโวลุ่มเดียวกันได้ ฉันเชื่อว่าสิ่งนี้เริ่มต้นด้วยเวลา VAX และ Alpha VMS ในประวัติศาสตร์มาแล้ว ระบบไฟล์แบบคลัสเตอร์ใช้รูปแบบการแยกซึ่งกันและกันแบบกระจายเพื่อให้สามารถจัดการบล็อกได้โดยตรง
ข้อได้เปรียบของการติดตั้งดิสก์เดียวกันกับหลาย ๆ โหนดคือความเร็วและลดความผิดพลาดเพียงจุดเดียว
ตอนนี้ระบบไฟล์แบบคลัสเตอร์ยังไม่เป็นที่นิยมอย่างมากในธุรกิจโฮสติ้ง "ของผู้บริโภค" ซึ่งเป็นจริง และมีความซับซ้อนและมีข้อผิดพลาดบางอย่าง แต่คุณไม่จำเป็นต้องมีระบบไฟล์แบบคลัสเตอร์เพื่อใช้ประโยชน์จากดิสก์ที่เชื่อมต่อกับโหนดการคำนวณหลาย ๆ ตัว ถ้าคุณต้องการไดรฟ์แบบอ่านอย่างเดียว คุณไม่จำเป็นต้องมีระบบไฟล์แบบคลัสเตอร์! คุณเพิ่งใส่ / etc / fstab ลงในอุปกรณ์ฟิสิคัลเดียวกันกับอ่านอย่างเดียว (ro) จากนั้นคุณเชื่อมต่อกับเซิร์ฟเวอร์ 2 หรือ 10 EC2 และทั้งหมดสามารถอ่านได้โดยตรงจากอุปกรณ์นั้น!
มีกรณีการใช้งานที่ชัดเจนสำหรับสิ่งนี้ในโลกของเซิร์ฟเวอร์คลาวด์เมื่อสร้างฟาร์มที่ขยายขนาดอย่างรวดเร็ว คุณสามารถเตรียมดิสก์ระบบหลักของคุณได้ทั้งหมดและใช้ดิสก์สำหรับบูตและตั้งค่าขนาดเล็กมากสำหรับเซิร์ฟเวอร์แต่ละเครื่อง คุณยังสามารถบูตได้ทั้งหมดจากดิสก์สำหรับบูตเดียวกันและก่อนที่จะนับใหม่ / ในโหมดอ่าน - เขียนคุณสามารถแทรก Union-FS ด้วย 3 เลเยอร์:
ดังนั้นใช่คำถามทำให้รู้สึกมากและน่าเสียดายที่คำตอบคือ (ยัง) "ไม่" และไม่มี NFS ไม่ใช่สิ่งทดแทนที่ยอดเยี่ยมสำหรับกรณีการใช้งานเนื่องจากเป็นการลงโทษกิจกรรมการอ่านทั้งหมดจากดิสก์ระบบ อย่างไรก็ตามการบู๊ตเครือข่ายจากดิสก์ระบบ NFS เป็นทางเลือกเดียวสำหรับการนำเคสไปใช้งานที่ฉันอธิบายไว้ข้างต้น น่าเสียดายเนื่องจากการตั้งค่าเอเจนต์การบูตเครือข่ายและ NFS นั้นมีความซับซ้อนกว่าการเข้าถึงอุปกรณ์บล็อกเดียวกัน
PS: ฉันอยากจะส่งรุ่นสั้นกว่านี้เป็นความคิดเห็น แต่ฉันไม่สามารถทำได้เพราะมีคะแนนเครดิต 51 คะแนนดังนั้นฉันต้องเขียนคำตอบที่สำคัญเหมือนกันว่า "ไม่" แต่รวมประเด็นของฉันด้วย คำถามที่เกี่ยวข้องซึ่งยังไม่ได้รับคำตอบที่สมควร
PPS: ฉันเพิ่งพบใครบางคนที่ StackExchange พูดถึง iSCSI iSCSI นั้นค่อนข้างคล้าย NFS แต่มีเหตุผลเหมือนกับ FibreChannel SAN คุณสามารถเข้าถึง (และแบ่งปัน) อุปกรณ์บล็อกแบบฟิสิคัล มันจะทำให้การแชร์ดิสก์สำหรับบูตง่ายขึ้นดังนั้นคุณไม่จำเป็นต้องตั้งค่าการบูทเครือข่าย bootd ซึ่งอาจเป็นปัญหาได้ แต่แล้วใน AWS ก็ไม่มีการบูทเครือข่ายเช่นกัน
แม้ว่าก่อนหน้านี้ EBS จะอนุญาตให้แนบ EC2 อินสแตนซ์เดียวกับไดรฟ์ข้อมูลที่กำหนดได้ แต่การเชื่อมต่อแบบหลายจุดสามารถทำได้อย่างน้อยตอนนี้สำหรับโวลุ่ม io1 สำหรับข้อมูลเพิ่มเติมดูโพสต์บล็อก AWSนี้
ทำไมคุณไม่สร้างอินสแตนซ์หนึ่งที่มีโวลุ่มและ sshfs ไปที่โวลุ่มนั้นในอินสแตนซ์อื่น
คุณสามารถใช้หนึ่งไดรฟ์กับเซิร์ฟเวอร์หลายเครื่องใน AWS ฉันใช้ sshfs เพื่อติดตั้งไดรฟ์ภายนอกและแบ่งปันกับเซิร์ฟเวอร์หลายตัวใน EC2
เหตุผลที่ฉันต้องการเชื่อมต่อไดรฟ์เดียวกับเซิร์ฟเวอร์หลายเครื่องก็คือมีที่เดียวสำหรับสำรองข้อมูลทั้งหมดของฉันก่อนที่จะดึงข้อมูลลงในเครื่อง