สถานการณ์เป้าหมายในอุดมคติ
ใช่คุณควรใช้ load balancer และอัพเดตครั้งละหนึ่งอินสแตนซ์ ฉันไม่แน่ใจว่ามีการสื่อสารระหว่างคอนเทนเนอร์ที่ใด
ตัวอย่างเช่นสมมติว่าคุณมี load balancer ซึ่งให้บริการเว็บไซต์ของคุณ A. ผู้ใช้เชื่อมต่อกับมันและรู้ว่ามันเป็น "A" เท่านั้น ตัวโหลดบาลานซ์รู้ว่ามีแบ็กเอนด์สองตัวหรือมากกว่า (B, C, ฯลฯ ) และไม่ว่าจะเป็น VMs หรือคอนเทนเนอร์ไม่สำคัญ
จากนั้นคุณต้องการอัพเกรดแบ็กเอนด์ซึ่งในกรณีนี้คืออินสแตนซ์ของ Apache
- นำ B ออกจากแบ็กเอนด์ที่มีสิทธิ์สำหรับ load balancer ดังนั้นจึงไม่ยอมรับการรับส่งข้อมูลอีกต่อไป
- รอคำร้องขอปัจจุบันที่จะให้บริการและปิดการเชื่อมต่อที่มีอยู่
- อัปเดตคอนเทนเนอร์หรือ VM พื้นฐานที่ให้บริการ B
- รีสตาร์ท B รอให้โหลดแล้วเริ่มทำงาน
- ทดสอบ B เพื่อให้แน่ใจว่าบริการคำขอใหม่อย่างถูกต้อง
- เพิ่ม B กลับไปที่พูลแบ็คเอนด์ของตัวโหลดบาลานซ์เพื่อเปิดใช้งานทราฟฟิกอีกครั้ง
จากนั้นทำกระบวนการเดียวกันสำหรับ C, D และอื่น ๆ
โปรดทราบว่ามีการร้องขอแบบเปิดสำหรับการอัปเกรดคอนเทนเนอร์ Docker แบบแทนที่ตั้งแต่เดือนพฤศจิกายน 2013 แต่ดูเหมือนว่าจะไม่มีความคืบหน้ามากนักดังนั้นโซลูชันด้านบนจึงเป็นสิ่งที่คุณควรทำในเวลาเฉลี่ย
สิ่งที่ต้องทำสำหรับเว็บไซต์สดที่มีอยู่
สมมุติว่าคุณกำลังถามสิ่งนี้อยู่เพราะคุณใช้งานเว็บไซต์จริงในรุ่นนี้อยู่แล้วและต้องการอัปเกรดโดยไม่ต้องหยุดทำงาน ดังนั้นเราจำเป็นต้องได้รับสถานะเป้าหมายในอุดมคติด้านบน แต่เพิ่มขึ้นเรื่อย ๆ
สมมติว่า:
- คุณมีชื่อ DNS ที่ชี้ไปที่คอนเทนเนอร์ของคุณ
- ที่เก็บของคุณทำงานบนที่อยู่ IP บางส่วน
- ผู้ใช้ของคุณไม่ทราบที่อยู่ IP ของคอนเทนเนอร์และไม่ได้กำหนดรหัสไว้ที่ใดเลย
หากสมมติฐานเหล่านี้เป็นเท็จคุณควรแก้ไขให้ถูกต้องเสียก่อน
จากนั้นทำตามขั้นตอนเหล่านี้:
- สร้าง load balancer ที่ IP ใหม่และชี้ไปที่ container ที่มีอยู่เป็น backend เท่านั้น
- เปลี่ยน DNS เพื่อชี้ไปที่ load balancer แทน IP container โดยตรง
- เพิ่ม Apache แบ็กเอนด์ตัวเดียวกันด้วยการตั้งค่าคอนเทนเนอร์ VM + เดียวกัน
- ตอนนี้คุณมี load balancer สองแบ็กเอนด์ B และ C ดังนั้นให้ทำตามคำแนะนำในส่วน "สถานการณ์เป้าหมายในอุดมคติ" เพื่ออัปเกรดหนึ่งครั้ง
วิธีอัพเดตตัวโหลดบาลานซ์
วิธีที่ง่าย (โฮสต์)
ตัวเลือกที่ง่ายที่สุดคือไม่เรียกใช้เครื่องสร้างสมดุลของคุณเอง ตัวอย่างเช่นหากคุณกำลังใช้แพลตฟอร์มคลาวด์ซึ่งให้บริการโหลดบาลานซ์เป็นบริการให้พิจารณาใช้และจากนั้นการบำรุงรักษาและการปรับปรุงของโหลดบาลานซ์จะไม่เป็นปัญหา
คู่มือวิธี
หากคุณใช้ load balancer ของคุณเองการเพิ่มเลเยอร์ทางอ้อม (เช่น DNS) จะช่วยคุณได้ สมมติว่า:
- ว่าเรามีชื่อโฮสต์ที่แปลงเป็น IP ของ load balancer ของเราที่เราต้องการอัพเดท
- ตัวโหลดบาลานซ์ของเรามีพูลแบ็คเอนด์ที่ P1, P2 และอื่น ๆ
เราดำเนินการดังนี้:
และคุณทำเสร็จแล้ว
รายละเอียดไดอะแกรมและเครื่องมือ
ดูการเขียนและเครื่องมือเหล่านี้ที่สามารถช่วยคุณดำเนินการอัตโนมัติ แต่แนวคิดทั่วไปเหมือนกัน:
คุณธรรม
"ปัญหาทั้งหมดในวิทยาการคอมพิวเตอร์สามารถแก้ไขได้โดยการอ้อมอีกระดับหนึ่งยกเว้นหลักสูตรสำหรับปัญหาที่เกิดจากการอ้อมมากเกินไป" - เดวิดวีลเลอร์