Hot clone บริการ Linux ที่มีชีวิต


14

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

เรามีโหนดการคำนวณคุณสามารถพูดได้ว่าเป็นโหนดการคำนวณ NLP ซึ่งใช้งานบางรุ่นอยู่ เมื่อเราเริ่มโหนด (พร้อมบริการแน่นอน) การคำนวณจะช้ามากจนเราป้อนหลายครั้ง เราเรียกมันว่าการอุ่นเครื่อง

น่าเสียดายที่งานวอร์มอัพใช้เวลานานในการรอ (บางทีการคำนวณของเราเสร็จสิ้นก่อนที่โหนดจะอุ่นขึ้น)

ดังนั้นปัญหามามีวิธีที่เสถียรในการคัดลอกเซิร์ฟเวอร์ Linux เพื่อให้โหนดทำงานได้อย่างมีประสิทธิภาพที่สุดเพื่อให้เราสามารถโคลนและทำให้มันออนไลน์ได้ในเวลาอันสั้น


การมองเห็นเครื่องและการถ่ายรูปอย่างรวดเร็วของสถานะ "การอุ่นเครื่อง" จะเป็นประโยชน์หรือไม่?
TripeHound

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

fork () เป็นวิธีหนึ่งในการสร้างกระบวนการเพิ่มเติมในเครื่องที่กำหนดในขณะที่บันทึกสิ่งที่เริ่มต้นค่าใช้จ่าย
ผู้ใช้อื่น

ขอบคุณผู้คน @TripeHound ฉันถามเพื่อนของฉันที่ทำงานใน VMWare และเขาบอกว่ามันเป็นไปไม่ได้สำหรับพวกเขาที่จะจับภาพสถานะ "อุ่นเครื่อง" ไม่ใช่สิ่งสะท้อนบางอย่าง MSalters ฉันไม่แน่ใจ 100% ว่าจะเกิดอะไรขึ้นในช่วงที่อากาศอุ่นขึ้น แต่ดูเหมือนว่าหลังจากการให้บริการเสร็จงานขี้เกียจบางอย่างทำงานหลังจากงานคำนวณเกี่ยวข้อง
chen steven

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

คำตอบ:


28

บางทีคุณอาจไม่สามารถ "hot clone" ทั้งเซิร์ฟเวอร์ (คุณทำได้ แต่เฉพาะในกรณีที่เป็นเครื่องเสมือน) แต่คุณสามารถตรึงและกู้คืนกระบวนการเดียวได้ด้วยcriu , Checkpoint / Restore ใน Userspace

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

เพื่อรองรับการทำงานที่คุณต้องการคุณสามารถคัดลอกไฟล์ที่เป็นตัวแทนของโปรแกรมที่บันทึกไว้ไปยังเซิร์ฟเวอร์อื่นและเรียกคืนได้ที่นั่น

criu ต้องการเคอร์เนลเมื่อเร็ว ๆ นี้พร้อมกับฟีเจอร์ต่าง ๆ ที่คอมไพล์แล้วดังนั้นลีนุกซ์รุ่นเก่าจึงอาจไม่ทำงาน คุณสามารถรันcriu checkบนเครื่องเฉพาะเพื่อตรวจสอบว่ามีข้อกำหนดเบื้องต้นสำหรับ criu หรือไม่


มันดูยอดเยี่ยมและฉันจะทำการทดสอบบางอย่างกับเรื่องนี้ขอบคุณ bro
chen steven

จากประสบการณ์ของคุณการฝึกฝนนี้ใช้งานได้ดีแค่ไหน? ดูรายการข้อ จำกัด ของ criu (ซึ่งเป็นสิ่งที่ฉันคาดหวังมาก - นี่เป็นปัญหาที่ยากมาก) ฉันรู้สึกว่ามันไม่น่าที่จะทำงานกับแอพพลิเคชั่นที่ไม่ได้ออกแบบมาโดยคำนึงถึงกรณีการใช้งาน
James_pic

@James_pic อาจเป็นเวลาหนึ่งปีแล้วที่ฉันดูมันอย่างจริงจังเนื่องจากฉันไม่ได้ใช้มันในขณะนี้ สำหรับภูตที่เพิ่งรับการเชื่อมต่อและทำการคำนวณบางอย่าง (เช่นงานการเรียนรู้ของเครื่อง OP หรือเว็บเซิร์ฟเวอร์) มันใช้งานได้ดี
Michael Hampton

12

อาจไม่ได้อยู่ในขอบเขตของสภาพแวดล้อมปัจจุบันของคุณ แต่วิธีมาตรฐานอุตสาหกรรมในการทำเช่นนี้คือการทำให้เซิร์ฟเวอร์เสมือนของคุณ โฮสต์การจำลองเสมือนจำนวนมาก (VMware, virtualbox และอื่น ๆ ) อนุญาตให้“ สแน็ปช็อต” ที่บันทึกสถานะของเซิร์ฟเวอร์ซึ่งสามารถถูกโคลนในอินสแตนซ์ใหม่ได้ อินสแตนซ์ใหม่เหล่านี้จะมีสถานะเหมือนกับกระบวนการลงสู่การทำงาน แน่นอนคุณจะต้องแน่ใจว่าซอฟต์แวร์ที่คุณใช้อยู่จะยังคงทำงานได้อย่างถูกต้องในสภาพแวดล้อมเสมือนจริง (CUDA / GPU คำนวณใจ)


การจำลองเสมือนนั้นยอดเยี่ยมจนกระทั่งซอฟต์แวร์ (หรือการขึ้นต่อกัน) ต้องการการอัปเดตและไม่ได้ให้กลไกการโหลดซ้ำที่งดงาม VM snapshot หรือการโยกย้ายแบบสดกำลังเรียกใช้รหัสเดิม
John Mahowald

เป็นเรื่องที่ยอมรับได้สำหรับฉันที่จะเรียกใช้โครงการในเครื่อง "ของจริง" หรือโฮสต์การจำลองเสมือนและเราสามารถใช้หลายวิธีในการจัดการสิ่งที่ "เก่า" ของโค้ดอาจจะเป็นการทดสอบ A / B หรือการอัปเดตเป็นม้วน แต่คุณแน่ใจหรือไม่ว่าสแนปชอตสามารถโคลนสถานะวอร์มอัพของโหนดการทำงานของฉันได้ทั้งหมด?
เฉิน steven

3
เมื่อคุณ "โอนย้ายข้อมูลสด" เครื่องจะต้องหยุดชั่วคราว ขณะที่หยุดชั่วคราวหน่วยความจำจะถูกคัดลอก 1: 1 ไปยังเครื่องอื่นในคลัสเตอร์ซึ่งไม่ถูกหยุดชั่วคราว - เหมือนเดิม อาจใช้เวลาสักครู่ขึ้นอยู่กับจำนวนหน่วยความจำที่ใช้งานและความเร็วของเครือข่าย คุณอาจสามารถใช้วิธีนี้ได้หากจำนวนการหยุดทำงานที่เรียกใช้นั้นต่ำพอสำหรับความต้องการของคุณ
Spooler

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

3

คำถามที่คุณพูดถึงอ้างอิงถึงลิงก์http://www.linuxfocus.org/English/March2005/article370.shtmlซึ่งอธิบายถึงวิธีการทั้งหมดที่ฉันจินตนาการว่าจะทำตามคำขอของคุณ

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

มันไม่ได้ว่าล้างสิ่งที่คุณหมายกับ"จนกว่าเราจะกินมันหลายครั้ง"

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

ในการดำเนินการ "ON / OF" หรือดีกว่าเรียกว่าสภาพแวดล้อมการทำงาน / สำรองข้อมูลเซิร์ฟเวอร์จะต้องมีการกำหนดค่าอย่างเหมาะสมในคลัสเตอร์

ฉันขอโทษถ้าไม่ใช่คำตอบที่คุณคาดหวัง แต่ตัวเลือกที่คุณได้รับนั้น


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

1

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

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

ประการแรกเพื่อกำหนดกลยุทธ์ข้อมูลที่ดีที่สุดจะช่วยให้ทราบว่ามีการอัปเดตเป็นประจำ คุณมีเซิร์ฟเวอร์ SQL ที่อัพเดตแบบไดนามิก แต่มีเนื้อหาแบบสแตติกหรือไม่? อีกทางหนึ่งคุณมีทีมนักพัฒนาระบบย่อย ๆ เช่น git ส่งการอัพเดทข้อมูลคงที่ไปยังเนื้อหาของคุณหรือไม่? ขึ้นอยู่กับสิ่งที่อัปเดตจะกำหนดแนวทางการดำเนินการที่ดีที่สุด

หากเป็นเช่นนั้นเป็น SQL เท่านั้นที่มีการอัพเดตเป็นประจำคุณสามารถโอนย้ายไปยังเซิร์ฟเวอร์ใหม่ในขณะที่เซิร์ฟเวอร์นั้นอยู่ในลักษณะดังต่อไปนี้:

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

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

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

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

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

หวังว่านี่จะช่วยได้และขอให้โชคดีกับการย้ายเซิร์ฟเวอร์ของคุณ!

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