วิธีการเรียกใช้ WordPress ใน 2 VMs เพื่อความพร้อมใช้งานสูง


12

Microsoft Azure ต้องการให้แอปพลิเคชันใช้สองอินสแตนซ์สำหรับดาต้าเซ็นเตอร์หลายแห่งเพื่อให้ได้ SLA "ความพร้อมใช้งานสูง" และมั่นใจได้ว่าไซต์ของคุณจะไม่ได้รับการบำรุงรักษาตามปกติ พวกเขายังบอกให้คุณทราบว่าศูนย์ข้อมูลแห่งใดที่จะไม่มีการบำรุงรักษาในเวลาเดียวกัน

ทั้งหมดนี้เป็นเรื่องดีและดี แต่คุณจะทำสิ่งนี้ได้อย่างไรในทางปฏิบัติสำหรับแอปอย่าง WordPress กับฐานข้อมูล MySQL บน VM เดียวกัน ฉันไม่ใช่คนแปลกหน้าในการโหลดบาลานซ์ระหว่าง VMs สองเครื่อง แต่การตั้งค่าการจำลองแบบฐานข้อมูลทำให้ฉันไม่ได้ เราไม่ต้องการข้อมูลสองรุ่นที่ไม่สามารถซิงค์ได้ การเรพลิเคท MySQL ดูเหมือนว่าจะต้องมีการตั้งค่า master-slave ซึ่งจะไม่สามารถซิงค์การเปลี่ยนแปลงไปยังฐานข้อมูลหลักได้หากผู้ใช้ลงในอินสแตนซ์สเลฟ

ฉันเพิ่งเข้าใจแนวคิดนี้ผิดหรือเปล่า? ความช่วยเหลือใด ๆ ที่ชื่นชมมาก!


1
ทำไมคุณต้องโฮสต์ WordPress บน Azure มีโฮสติ้งที่ดีกว่าและราคาถูกกว่าสำหรับ WordPress มหาสมุทรดิจิตอลเช่น
Alexus

1
Alexus นั้นไม่เกี่ยวข้องกันที่นี่ แต่เรามีกองซ้อนขนาดใหญ่กระจายอยู่ทั่วโครงสร้างพื้นฐานของ Azure ซึ่ง WordPress เป็นเพียงองค์ประกอบเดียว สีฟ้าเป็นแพลตฟอร์มที่ยอดเยี่ยมและเรามีความสุขมากกับมัน
Yaron

1
gotcha คุณต้องทำสิ่งที่คุณต้องทำ :) ฉันก็ชอบ Azure สำหรับสิ่ง. NET ส่วนใหญ่ของฉัน แต่โฮสต์เว็บไซต์ WP แยกต่างหาก
Alexus

ใช่แล้วคุณคิดว่าคำตอบด้านล่างมีประโยชน์หรือไม่? มันได้รับ 3 upvotes แล้วเพียงแค่ต้องการตรวจสอบว่าคุณพบแนวคิดที่สำคัญใด ๆ หายไปหรือไม่
Bryan 'BJ' Hoffpauir Jr.

1
ขอบคุณมากสำหรับคำตอบอย่างละเอียด @ Bryan'BJ'Hoffpauir และขออภัยฉันไม่มีเวลาลองทำตามคำแนะนำของคุณเพื่อดูว่าพวกเขาทำงานกับการใช้งานของเราหรือไม่ ฉันทำเครื่องหมายคำตอบว่าถูกต้องและจะยื่นมือออกไปอีกครั้งหากพบปัญหาใด ๆ ขอบคุณอีกครั้ง!!
Yaron

คำตอบ:


11

ข่าวร้าย: ฐานโอเพ่นซอร์สหลักของ Wordpress นั้นมีข้อสันนิษฐานบางประการเกี่ยวกับการเรียกใช้บนเซิร์ฟเวอร์เดียว (เนื้อหา wp, การอัพโหลดผู้ใช้และไลบรารีสื่อเพื่อบอกชื่อ)

ข่าวดี: ผู้ให้บริการคลาวด์ทุกคน (รวมถึง Azure) มีนามธรรมที่ช่วยให้คุณสามารถแก้ไขข้อ จำกัด การออกแบบเหล่านี้ได้

โดยพื้นฐานคุณจะต้องจัดการกับข้อกังวลดังต่อไปนี้:

  • โหลดทราฟฟิกที่สมดุลระหว่างสองเว็บเซิร์ฟเวอร์ / แอพ Wordpress "front-end" หรือมากกว่า ไม่ยากเกินไปเนื่องจาก Wordpress นั้นไร้สัญชาติมากที่สุดเว้นแต่คุณจะให้ผู้ใช้เข้าสู่ระบบของเว็บไซต์ สิ่งนี้ทำผ่านการรวมกันของ DNS และ Load Balancer คุณจะต้องการการสนับสนุนสำหรับ 2 IP สำหรับเซิร์ฟเวอร์แอปของคุณ - 1 ชุดจะเชื่อมต่อกับเครือข่ายย่อยที่กำหนดเส้นทางผ่านอินเทอร์เน็ต (แม้ว่าหวังว่าจะได้รับการป้องกันโดยไฟร์วอลล์ที่ไม่ได้ระบุไว้ด้านล่าง) และอีกสองเครือข่ายย่อยนั้นจะแยกจากกัน เครือข่ายอื่นและมีอินสแตนซ์ของเซิร์ฟเวอร์ฐานข้อมูล แต่มีโครงร่างพื้นฐานดังนี้:
                     / - (10.0.0.1 - eth0) wp1.domain.com (10.0.1.1 - eth2)
(IP สาธารณะ) wp.domain.com          
                     \ - (10.0.0.2 - eth1) wp2.domain.com (10.0.1.2 - eth3)
  • การจัดการเซสชันหากคุณให้ผู้ใช้เข้าสู่เว็บไซต์ ถ้าเป็นเช่นนั้นคุณจะต้องแน่ใจว่าเมื่อพวกเขาลงชื่อเข้าใช้เซิร์ฟเวอร์ 1 ว่าคำขอในอนาคตทั้งหมดของพวกเขาจะถูกส่งไปยังเซิร์ฟเวอร์นั้น (เซสชันที่มีการยึดติด) หรือไม่สำคัญว่าเซิร์ฟเวอร์ใดที่พวกเขาเข้าถึง (ผ่านZend Server Session Clusteringเป็นต้น)

  • การจัดการการเข้าสู่ระบบของผู้ดูแลระบบหากคุณให้ผู้ใช้บางคนเข้าสู่ระบบเพื่อจัดการเนื้อหา (คล้ายกับด้านบน)

  • การเลือกระบบฐานข้อมูลที่พร้อมใช้งานสูง ไม่มีจุดที่จะมีเซิร์ฟเวอร์หน้าสองตัวหากการขัดข้องของฐานข้อมูลทำให้ระบบทั้งหมดล่ม คุณจะต้องใช้ประโยชน์จากการจำลองแบบ MySQL Master / Slave ผ่าน ClearDB หรือแก้ไข WordPress ผ่านทางปลั๊กอินเพื่อใช้ประโยชน์จาก SQL Serverเพื่อให้คุณสามารถใช้ระบบการจัดกลุ่มแบบเนทีฟ นี่หมายความว่าคุณต้องการ VM อย่างน้อย 4 แห่งหากคุณต้องการจัดการเลเยอร์ DB ด้วยตัวคุณเอง (2 x App & 2 x DB) นี่คือลักษณะที่อาจมีลักษณะ:

               / - wp1.domain.com (10.0.1.1) \ --- / (10.0.1.3) db1.domain.com (10.0.2.3) \
         wp.domain.com X |           
               \ - wp2.domain.com (10.0.1.2) / --- \ (10.0.1.4) db2.domain.com (10.0.2.3) /

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

  • การเปิดใช้งานการรวมการเชื่อมต่อเพื่อเพิ่มประสิทธิภาพและความน่าเชื่อถือของการเชื่อมต่อฐานข้อมูลเซิร์ฟเวอร์แอปของคุณ

  • การใช้ประโยชน์จากปลั๊กอินสำหรับการแคชเช่น W3 Total Cache หรือ Super Cache เพื่อลดการโหลดบนเซิร์ฟเวอร์ส่วนหน้า

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

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