คราวที่แล้วติดค้างเรื่องเอา 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 อื่นๆ ได้แล้ว

Comments are closed.