คราวที่แล้วติดค้างเรื่องเอา services ของเราไปใส่ไว้ที่ Elastic Block Storage (EBS) แต่…ทำไมต้องทำเช่นนั้น ? หลังจากสร้าง Instance จาก EMI แล้วก็ได้ VM เป็น Instance สมชื่อ ถ้า terminate ตัว VM นั้นไปทุกอย่างที่อยู่ใน Instance นั้นก็ไปทั้งหมด หากไม่มีการสำรองข้อมูลโยกมาไว้ที่ EBS ดังนั้นการขอใช้บริการ Cloud จึงเลี่ยงไม่ได้ที่จะต้องใช้ EBS ด้วยเสมอๆ ซึ่งผู้ที่เป็นเจ้าของสามารถสร้าง snapshot เองได้ หากว่าเราติดตั้ง services ลงบน EBS แทนเราก็จะสามารถ snapshot ทั้ง services และ data ได้ในตัว อีกทั้งยังประหยัด resource อื่นๆ ได้อีกมาก ที่สำคัญเราไม่ต้องซื้อ services ที่มีจำหน่ายบน Cloud Cateloge เลย อืมมมลืมบอกไปว่าวิธีการนี้ใช้ได้กับ Amazon EC2 และ Amazon S3 ด้วยครับ เอ้ามาเริ่มกันเลย
ให้คุณ start instance ขึ้นมาครับ (ขอเป็น debian instance นะครับ) จากนั้นสร้าง volume ขนาดที่คิดว่าคุณจะต้องใช้ของผมใช้ประมาณ 8GB ให้ชื่อว่า mekha
euca-create-volume -s 8 -z mekha
จากนั้น attach volume กับ instance ที่กำลังทำงานอยู่ (debian ของเรา)
euca-attach-volume -i i-31AB05AF vol-5959961D -d /dev/sdc
ตัวเลข i-31AB05AF คือ instance-id และ vol-5959961D คือ volume-id ที่เราได้มาจากตอนสร้าง instance และ volumn เปลี่ยนตามของคุณนะครับ เอ้าตอนนี้เราจะมีอุปกรณ์ /dev/sdc เพิ่มเข้ามาใน instance ของเราแล้ว จากนั้นก็เริ่มขั้นตอนการใช้ disk ปกติทั่วไป ให้ login เป็น root ใน instance ของเรา จากนั้นสร้าง partition และ format ให้เรียบร้อย
mk2efs /dev/sdc1
จากนั้นสร้าง mount point ไปยัง volume (ใช้ชือว่า /esb) และ mount ให้เรียบร้อย
mkdir /ebs
mount /dev/sdc1 /ebs
ถึงขั้นตอนนี้คุณจะได้ /ebs ที่ mount มาจาก volume ที่สร้างขึ้นแล้ว จากนั้นเรามาเริ่มประกอบระบบปฏิบัติการใหม่โดยใช้ debootstrap กัน ให้ติดตั้ง debootsrap ดังนี้
apt-get install debootstrap
จากนั้นประกอบ LSB ขั้นมาก่อน
debootstrap squeeze /ebs
หลังจาก debootstrap ประกอบ LSB เสร็จ ใน /ebs คุณก็จะได้โครงสร้างเหมือน LSB จริงๆ แต่ไม่มี kernel และ initrd เท่านั้น ทีนี้ได้เวลาลุยแล้ว mount dev, proc, sys เพื่อใช้ในการ chroot
mount proc /ebs/proc -t proc
mount sysfs /ebs/sys -t sysfs
mount -o bind /dev /ebs/dev
เอาล่ะหลังจาก mount แล้วคุณจะได้ระบบปฏิบัติการซ้อนขึ้นมาใหม่อีก 1 ตัว มา chroot กันครับ
chroot /ebs
จากนั้นให้ตั้งค่า locale ดังนี้
apt-get install locales
dpkg-reconfigure locales
ตอนนี้คุณจะได้ระบบปฏิบัติการอีกหนึ่งตัวที่พร้อมทำงานแล้ว คราวนี้มาลองติดตั้ง services สักตัวครับ ขอเป็น web server ง่ายๆ อย่าง apache2 ก็แล้วกันครับ
apt-get install apache2
ตอนนี้เราก็ได้ web server ลงบน EBS ของเราแล้ว หากเรา browse ไปที่ Public IP คุณจะเห็นหน้าเว็บ default ของ apache ละ ทีนี้เพื่อความง่าย เขียน script ชื่อ ebs-services.sh เพื่อ start/stop services บน EBS ของเราครับ
---
#!/bin/bash
if [ ! -e /ebs/start_ebs.sh ]; then
echo "EBS volume is not mounted!"
exit 1
fi
if [ "$1" = "stop" ]; then
umount /ebs/sys
umount /ebs/proc
umount /ebs/dev
chroot /ebs /etc/init.d/apache2 stop
umount -lf /ebs
else
mount -t proc proc /ebs/proc
mount -t sysfs sysfs /ebs/sys
mount -o bind /dev /ebs/dev
chroot /ebs /etc/init.d/apache2 start
fi
---
เอาไฟล์ script นี้ไปใส่ไว้ใน /ebs ตอนนี้เราก็ได้ service ติดไปพร้อมกับ volume แล้ว เวลาย้าย volume ไป attach กับ instance อื่นๆ คุณก็สามารถ start services ของคุณได้ แถมยังสร้าง snaptshot ให้กับ volume เพื่อสำรองข้อมูลได้ด้วย
มาดูวิธีการย้าย ESB volume ไปใส่ instance อื่นที่สร้างไว้รอ เราต้อง stop service ก่อนครับ ก็ run script ของเราเมื่อกี้
./ebs-services.sh
จากนั้นก็ปลด volume ออกจาก instance เดิม
euca-detach-volume vol-5959961D
จากนั้นก็ attach ไปยัง instance อื่น ของผมชื่อ i-42B208D7
euca-attach-volume -i i-42B208D7 -d /dev/sdc vol-5957061D
จากนั้นก็ login ไปที่ instance แล้วก็ mount ให้เรียบร้อย
mkdir /ebs
mount /dev/sdc1 /ebs
จากนั้นก็ start services ของเรา
./ebs/start-ebs-services.sh
แค่นี้เราก็ย้าย EBS volume พร้อม sevices ไปต่อกับ instance อื่นๆ ได้แล้ว