MySQL ควรจะติดตั้งเพียงอย่างเดียวหรือไม่


20

ฉันมักจะได้ยินคนทำงบเช่น "เครื่องเซิร์ฟเวอร์ MySQL ของเราล้มเหลว" ซึ่งทำให้ฉันรู้สึกว่าพวกเขาอุทิศเครื่องเดียวเป็นเซิร์ฟเวอร์ MySQL ของพวกเขา (ฉันเดาว่าพวกเขาเพิ่งติดตั้งระบบปฏิบัติการและมีเพียง MySQL เท่านั้น) ในฐานะนักพัฒนาไม่ใช่ผู้ดูแลระบบฉันคุ้นเคยกับ MySQL ที่ติดตั้งเป็นส่วนหนึ่งของ LAMP stack พร้อมกับเว็บเซิร์ฟเวอร์และ PHP

บางคนสามารถอธิบายให้ฉัน:

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

คำตอบ:


30

เมื่อแพลตฟอร์มแอปพลิเคชันของคุณและฐานข้อมูลของคุณแข่งขันกับทรัพยากรนั่นเป็นข้อบ่งชี้แรกว่าคุณพร้อมสำหรับเซิร์ฟเวอร์ฐานข้อมูลเฉพาะ

ประการที่สองความพร้อมใช้งานสูง: การตั้งค่าคลัสเตอร์ฐานข้อมูล (และโดยปกติจะเป็นคลัสเตอร์ของเว็บ / แอปพลิเคชันเซิร์ฟเวอร์ที่สมดุล)

ฉันจะบอกว่าการรักษาความปลอดภัยมีบทบาทอย่างมากในการย้ายไปยังเซิร์ฟเวอร์ที่แยกจากกันเนื่องจากคุณสามารถมีนโยบายที่แตกต่างกันสำหรับการเข้าถึงเครือข่ายสำหรับแต่ละเซิร์ฟเวอร์ (เช่นเว็บเซิร์ฟเวอร์ DMZ'ed พร้อมเซิร์ฟเวอร์ฐานข้อมูลบน LAN)

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


นอกจากนี้เครื่องเฉพาะยังอนุญาตให้ปรับแต่งการตั้งค่าดิสก์ได้อย่างเหมาะสม เว็บเซิร์ฟเวอร์มีความสุขมากเมื่อข้อมูลอยู่ใน RAID 6 เซิร์ฟเวอร์ฐานข้อมูลต้องการ RAID 1
Simon Richter

12

เซิร์ฟเวอร์ฐานข้อมูลแยกเป็นส่วนหนึ่งของการออกแบบที่ดีและปรับขนาดได้ สิ่งนี้ไม่สำคัญว่าทราฟฟิกของคุณจะไม่สูงมากและเซิร์ฟเวอร์เดียวก็เพียงพอแล้ว

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

นอกจากนี้จากมุมมอง sysadmin จะชัดเจนยิ่งขึ้นถ้ามีเซิร์ฟเวอร์เฉพาะที่ตั้งชื่ออย่างสมเหตุสมผลเช่น "mysql-01.yourcompany.com" และ "webserver-01.yourcompany.com" เมื่อพวกเขาได้รับการแจ้งเตือนพวกเขาจะเห็นสิ่งที่เกิดขึ้นทันทีอย่างน้อยก็ในแง่ของ "ตกลงมีสิ่งผิดปกติกับฐานข้อมูล" ฉันรู้ว่านี่เป็นอาร์กิวเมนต์ที่อ่อนแอเนื่องจากชื่อ DNS หลายชื่อสามารถชี้ไปที่เซิร์ฟเวอร์เดียว แต่ก็ยัง

แอปพลิเคชันของคุณจะเชื่อมต่อกับเซิร์ฟเวอร์ฐานข้อมูลระยะไกลโดยไม่มีปัญหาผ่านเครือข่าย Aieeeeeee! เว็บเบราว์เซอร์ของคุณเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลได้อย่างไร มันวิเศษ! เอ่อ .... จริงจังมากขึ้นแทนที่จะ 'localhost' คุณเพียงแค่ระบุที่อยู่เซิร์ฟเวอร์ใน $ programming_language_of_your_choice และคุณก็พร้อมแล้ว


2
นอกจากความคิดเห็นของ Janne เรื่องมุมมองดูแลระบบ ... เมื่อคุณมีปัญหาด้านประสิทธิภาพหรือจำเป็นต้องทำการดีบักแอปพลิเคชั่นมันเป็นเรื่องที่ง่ายกว่ามากถ้าเว็บเซิร์ฟเวอร์และเซิร์ฟเวอร์ฐานข้อมูลอยู่บนเครื่องที่แยกต่างหาก
HTTP500

5
  • เว็บไซต์ / แอปพลิเคชั่นบางตัวใช้ฐานข้อมูลอย่างหนักจนต้องใช้เซิร์ฟเวอร์หนึ่งตัวขึ้นไปที่อุทิศให้กับฐานข้อมูลนั้น
  • ผ่านเครือข่าย

3

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

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

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


2

ข้อความค้นหา MySQL มีศักยภาพที่จะใช้ทรัพยากรอย่างเข้มข้นซึ่งอาจทำให้เซิร์ฟเวอร์ LAMP ของคุณช้าลง

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

เว็บเซิร์ฟเวอร์เพียงแค่ต้องเชื่อมต่อกับที่อยู่เซิร์ฟเวอร์ฐานข้อมูลแทนที่จะlocalhostทำให้มันเป็นแบบสอบถามฐานข้อมูล

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