KVM Live Migration on Localhost
posted on 22 Jul 2009 13:54 by pajuad in VirtualMachineKVM Live Migration on Localhost
ลองจินตาการว่าหากเรามี server ที่ให้บริการตลอด 24 ชั่วโมง เช่น server ของธนาคารที่ต้องรอรับ transaction จากลูกค้าตลอดเวลา และหากเรามีความจำเป็นต้อง maintain เครื่องเหล่านั้น ทำให้ธนาคารไม่สามารถให้บริการได้ นั่นหมายถึงมูลค่าความเสียหายทั้งในด้านตัวเงินและความน่าเชื่อถือของลูกค้า ที่มีต่อธนาคารซึ่งความเสียหายจะยิ่งเพิ่มมากขึ้นตามเวลาที่เราไม่สามารถให้ บริการได้ จากปัญหาในข้างต้นจึงเป็นที่มาของการทำ live migration ซึ่งเป็น service ที่ให้บริการการย้ายการทำงานจากเครื่องหนึ่งไปยังอีกเครื่องโดยยังคง state ของการทำงานจากเครื่องเก่าไว้และเสีย Down Time หรือ เวลาที่ระบบไม่สามารถให้บริการได้ น้อยที่สุดเท่าที่จะเป็นไปได้
Concept of Migration
1. เปิดเครื่องปลายทางที่จะทำการ migrate ไว้รอการติดต่อจากเครื่องต้นทาง
2. เริ่มการโอนถ่ายหน่วยความจำจากเครื่องที่ต้นทาง ไปยังเครื่องปลายทาง
3. เมื่อทำการโอนถ่ายหน่วยความจำจากเครื่องต้นทางไปยังเครื่องปลายทางจนจะหมดแล้ว
เครื่องจะหยุดการทำงาน แล้วโอนหน่วยความจำชุดสุดท้ายไปยังเครื่องปลายทาง
4. เครื่องต้นทางทำการโอนถ่าย state การทำงานไปยังเครื่องปลายทาง
5. เครื่องปลายทางเริ่มการทำงานต่อไปreferrence : http://knowlagecom.blogth.com/
คำชี้แจง
บทความนี้มีจุดประสงค์เพื่อเป็น How To การทำ Live Migration เท่านั้น ผู้เขียนจึงขอข้ามขั้นตอนการติดตั้ง Ubuntu รวมทั้ง package KVM ที่ใช้ในการทำ migration ซึ่งผู้เขียน assume ว่าท่านที่อ่านได้ติดตั้ง Ubuntu และ KVM เรียบร้อยแล้ว รวมทั้งสามารถสร้าง image file ของ KVM ซึ่งติดตั้ง OS ไว้ภายในแล้ว
สิ่งที่ต้องเตรียม
1. Linux Ubuntu + KVM/QEMU package
2. Image file สำหรับ KVM/QEMU ใน format qcow ที่ติดตั้ง Damn Small Linux เรียบร้อยแล้ว
- src_dsl.img
- dst_dsl.img
ขั้นตอนการทำ Live Migration
1. สั่งให้เครื่อง Source เริ่มการทำงานเพื่อเตรียมพร้อมในการทำ Migrate
$kvm -name SOURCE -hda /home/pajuad/kvm/src_dsl.img -boot c -net nic -net userเมื่อใช้คำสั่งดังกล่าวแล้วจะได้ Source ที่พร้อมจะทำการ Migrate ดังรูป![]()
$kvm -name DESTINATION -hda /home/pajuad/kvm/dst_dsl.img -boot c -net nic -net user -incoming tcp:localhost:1234
เมื่อ ใช้คำสั่งดังกล่าวแล้วเครื่อง Destination จะทำการเตรียม port 1234 เพื่อรอการ migrate จาก option "-incoming tcp:localhost:1234" หากมี error message ... อาจเปลี่ยนเป็นคำสั่ง "-incoming tcp:0:1234"
Note: หมายเลข port ที่รอรับการ migration ควรมากกว่า 1024
ในขณะที่เครื่อง Destination กำลังรอการ Migrate นั้น สถานะของเครื่องจะเปลี่ยนเป็น Stoppedดังรูป![]()
4. ที่เครื่อง Source ให้ทำการเปลี่ยนหน้าจอเพื่อเข้าสู่ Command Mode เพื่อทำการ Migrate โดยใช้คำสั่ง 'Ctrl+Alt+2'
Note: Ctrl+Alt+1 (switch to graphic mode)
Ctrl+Alt+2 (switch to command mode)
5. จากนั้นให้ใช้คำสั่งการ Migrate
migrate -d tcp:localhost:1234
เป็นคำสั่งที่ใช้ในการ migrate สถานะจากเครื่อง source ไปที่เครื่อง destination ทาง port ที่เปิดไว้ในขั้นตอนที่ 2
6. หลังจากนั้นที่เครื่อง Source จะขึ้น status เป็น stopped เพื่อที่จะทำการ Migration
ไปยังเครื่อง Destination จะสังเกตุเห็นได้ว่าหน้าจอจะนิ่งไปสักพักนึงขณะที่ทำ Migration
สุดท้ายแล้วเราจะได้เครื่องทั้ง Source และ Destination ที่มีหน้าตาเหมือนกัน
7. ทดสอบว่าการ migration ประสบความสำเร็จหรือไม่ โดยการปิดเครื่อง destination แล้วเปิดขึ้นมาใหม่ แล้วตรวจดูว่าไฟล์ test.txt ที่มาจากเครื่อง source มาปรากฏที่เครื่อง destination จริง
$kvm -name DESTINATION -hda /home/pajuad/kvm/dst_dsl.img -boot c -net nic -net user
![]()
System & Environment
Host Machine: Ubuntu 9.04 + KVM package
Virtual Machine: Damn Small Linux 4.4.10
External Link
http://www.puysoft.com/kvm/p2.php
http://tucs51.exteen.com/live-migration-1
edit @ 23 Jul 2009 00:54:33 by Pajuad
