สร้างระบบ Private Cloud ด้วย Eucalyptus

กระแส cloud computing กำลังมาแรง วันนี้เลยแนะนำการสร้าง private cloud ด้วย Eucalyptus เพื่อให้ผู้สนใจได้ทดลองใช้งานกันบน Debian ครับ สำหรับ Eucalyptus แบ่งการทำงานออกเป็น 4 ส่วนหลักคือ

  • Cloud Controller (CLC) มีลักษณะเป็นเว็บเซอร์วิส เขียนด้วย Java เป็นส่วนที่มีไว้เพื่อติดต่อกับผู้ใช้งานระบบ และควบคุมการทำงานของคอมโพเนนท์อื่นๆ ติดต่อใช้งานผ่าน https พอร์ท 8443
  • Cluster Controller (CC) มีลักษณะการทำงานเป็นเซอร์วิส ทำงานที่พอร์ต 8774 ทำหน้าที่ควบคุมการทำงานของ Node Controller
  • Node Controller (NC) ควบคุมการทำงานของ Virtual Matchine (VM) ในแต่ละคอมพิวเตอร์ ที่งานที่พอร์ต 8775
  • Storage Controller (SC) เป็นส่วนเก็บข้อมูลของระบบใช้ Walrus เป็นหลัก

สำหรับวิธีการติดตั้งนี้จะแยกเครื่องคอมพิวเตอร์ที่ใช้ติดตั้งออกเป็นสองส่วนคือส่วนที่เป็น front-end และส่วนที่เป็น compute-node โดยที่เครื่องที่ทำหน้าที่เป็น front-end จะติดตั้ง CLC CC และ SC เอาไว้ และส่วนที่เป็น compute-node จะติดตั้ง NC สำหรับการติดตั้งนี้เน้นการติดตั้งตามเพกเกจที่มีอยู่ในคลังของเดเบียนเท่านั้น ทดสอบติดตั้งบน sid แต่ในขณะที่เขียนนี้เพกเกจ libhibernate3 ในคลัง sid ใช้การไม่ได้จึงเลี่ยงไปใช้ libhibernate3 ในคลังของ testing แทน เพกเกจกับคอมโพเนนท์สามารถจับคู่ได้ดังนี้

  • CLC คือ eucalyptus-cloud
  • SC คือ eucalyptus-sc และ eucalyptus-walrus
  • CC คือ eucalyptus-cc
  • NC คือ eucalyptus-nc

แนะนำให้ติดตั้งเครื่องสำหรับ compute-node ก่อน แล้วจะได้ติดตั้งและปรับแต่งเครื่อง front-end ในครั้งเดียว สำหรับเครื่อง compute-node สามารถติดตั้ง hipervisor ได้สองตัวคือ xen กับ kvm แต่ในที่นี้จะติดตั้งบน xen
การติดตั้งบนเครื่อง compute-node

# aptitude install xen-linux-system-kernel-xen-architechture xen-utils xen-utils xen-tools
# aptitude install eucalyptus-nc

สำหรับการติดตั้ง xen ให้เลือก kernel ตามที่ต้องการติดตั้ง และ architechture เป็น amd64 หรือ 686 หากติดตั้งตามที่แนะนำไว้ระบบจะติดตั้ง xen เวอร์ชัน 4 มาให้และการปรับแต่งค่าอาจแตกต่างกับที่เอกสาร Eucalyptus แนะนำบ้าง เมื่อติดตั้งเรียบร้อยแล้วให้ปรับแต่งค่าที่ไฟล์ /etc/xen/xend-config.sxp ให้ uncomment ตามที่ระบุไว้

(xend-http-server yes)
(xend-unix-server yes)
(xend-unix-path /var/lib/xend/xend-socket)
(xend-address localhost)
(network-script network-bridge)
(vif-script vif-bridge)
(dom0-min-mem 196)
(dom0-cpus 0)
(vncpasswd '')

ส่วนสำคัญต่อมาที่ต้องปรับแต่งคือระบบเครือข่าย ในการติดตั้งนี้เลือกการปรับแต่แบบ SYSTEM Mode นั้นคือจะให้ทั้งเครื่อง front-end และเครื่อง compute-node ได้ dhcp จากระบบ ไม่มีการปรับแต่ง dhcp เอง ดังนั้นจึงต้องปรับแต่ง Eucalyptus ที่ไฟล์ /etc/eucalyptus/eucalyptus.conf ดังต่อไปนี้

HYPERVISOR="xen" เลือกใช้งาน xen
VNET_BRIDGE="eth0"
VNET_MODE="SYSTEM"

ปรับแต่ง Axis2c ให้พร้อมใช้งานที่ไฟล์ /etc/axis2.xml ในส่วนนี้จะต้องทำทั้ง front-end และ compute-node ดังต่อไปนี้

ในส่วน 'inflow'

 <!--phase name="Security"/-- >

เป็น

 <phase name="Security"/>
 <phase name="Rahas"/>

ในส่วนของ 'outflow' หากยังคอมเมนท์อยู่ให้เอาออก

 <!--phase name="Security"/-->

เป็น

 <phase name="Security"/>

หลังจากนั้นใหัรีบูตเขาสู่ debian ในโหมดของ xen สังเกตที่ bootloader เช่น Debian GNU/Linux, with Linux 2.6.32-5-xen-amd64 and XEN 4.0-amd64 เป็นต้น

รอจนบูตเรียบร้อยจากนั้นทดสอบดูว่า xen ทำงานเรียบร้อยดีหรือไม่

# virsh list
 Id Name                 State
----------------------------------
  0 Domain-0             running

ถ้าขึ้นอย่างขั้นต้นแสดงว่า xen ทำงานเรียบร้อยดี ต่อไปตรวจสอบ bridge interface ที่ xen สร้างขึ้น

# brctl show
bridge name	bridge id		STP enabled	interfaces
eth0		8000.080027bbd243	no		peth0

แสดงว่า bridge ไม่มีปัญหา ส่วนสุดท้ายตรวจสอบว่า NC ทำงานหรือไม่

$ ps aux | grep eucalyptus
root      1776  0.0  0.0  54624  1548 ?        Ss   17:26   0:00 /usr/sbin/apache2 -f //etc/eucalyptus/httpd-nc.conf
107       1795  0.4  2.4 269040 41956 ?        Sl   17:26   0:02 /usr/sbin/apache2 -f //etc/eucalyptus/httpd-nc.conf

หากปรากฎข้อความอย่างข้างต้นแสดงว่าน่าจะไม่มีปัญหาในการติดตั้ง เพื่อให้แน่ใจทดสอบตรวจสอบพอร์ตที่ใช้ติดต่อ NC ที่พอร์ต 8775

# netstat -an | grep 8775
tcp       0      0 :::8775                 :::*                    LISTEN

ขั้นสุดท้ายให้ตรวจสอบ log ที่ /var/log/eucalyptus/ สามไฟล์ คือ axis2c.log euca_test_nc.log และ httd-nc_error_log ว่ามีข้อผิดพลาดอะไรหรือไม่ ถ้าไม่มีแสดงว่าน่าจะใช้งานได้แล้วครับ

สำหรับขั้นตอนการติดตั้ง front-end นั้นไม่ยุ่งยากเหมือน NC แต่ต้องเข้าใจในทุกๆ คอมโพเนนท์ของ Eucalyptus เสียก่อน มีปัญหาเพียงส่วนเดียวคือ libhibernate3 ที่ไม่สามารถติดตั้งได้แต่ libhibernate3 จำเป็นสำหรับการติดตั้ง eucalyptus-cloud eucalyptus-sc eucalyptus-walrus ซึ่งเป็นส่วนสำคัญจึงแนนำให้เพิ่มคลังเก็บเพกเกจของ testing หรือ squeeze เข้าไปด้วย (สามารถอ่านเพิ่มเติมได้ที่ เรื่องของ repository) ให้ทดลองติดตั้งระบบโดยรวมก่อนเพราะ ณ วันที่ติดตั้งทาง debian อาจแก้ไขให้แล้ว

# aptitude install eucalyptus-cloud eucalyptus-sc eucalyptus-walrus eucalyptus-cc

หากติดตั้งไม่ได้ให้ตรวจสอบดูว่ามีปัญหาที่ libhibernate3 ใช้หรือไม่ถ้าใช้ให้ติดตั้ง libhibernate3 จาก testing

# aptitude install libhibernate3/testing

รอให้ระบบติดตั้งให้เรียบร้อย จากนั้นปรับแต่งคอนฟิกของ Axis2c แบบเดียวกับที่ปรับแต่งไว้ที่ compute-node แล้วสั่งให้ eucalyptus ทำงานคอมโพเนนท์อะไรบ้าง

# euca_conf --enable cloud --enable walrus --enable sc

เริ่มต้นการทำงานของเซอร์วิสต่างๆ

# /etc/init.d/eucalyptus-cloud restart
# /etc/init.d/eucalyptus-cc restart

ตรวจสอบว่าสามารถทำงานได้หรือไม่

$ ps aux | grep eucalyptus
root      1114  0.0  0.1  54888  1272 ?        Ss   09:07   0:05 /usr/sbin/apache2 -f //etc/eucalyptus/httpd-cc.conf
104       1117  0.3  4.3 1244704 44660 ?       Sl   09:07   2:31 /usr/sbin/apache2 -f //etc/eucalyptus/httpd-cc.conf

root      1191  0.0  0.0  16524   196 ?        Ss   09:07   0:00 eucalyptus-cloud --remote-dns --disable-iscsi -h / -u eucalyptus --pidfile //var/run/eucalyptus/eucalyptus-cloud.pid -f -L console-log
104       1192  3.0 70.2 1260572 721444 ?      Sl   09:07  21:03 eucalyptus-cloud --remote-dns --disable-iscsi -h / -u eucalyptus --pidfile //var/run/eucalyptus/eucalyptus-cloud.pid -f -L console-log
:

หากปรากฎ eucalyptus-cloud --remote-dns... และ apache2 -f //etc/eucalyptus/httpd-cc.conf แสดงว่า CLC และ CC ทำงานแล้ว แต่จากการติดตั้งในครั้งแรกจะไม่สามารถเริ่มการทำงานของ eucalyptus-cloud ได้ และไม่แสดงข้อผิดพลาดใน error log เนื่องจาก groovy.jar ที่อยูในไดเร็กทอรี /usr/share/eucalyptus ทำ symbolic link ผิดคือ groovy.jar -> ../groovy/embeddable/groovy-all*.jar ให้แก้ตามนี้ #589815

# mv /usr/share/eucalyptus/groovy.jar /usr/share/eucalyptus/groovy.jar.bkup
# ln -s /usr/share/java/groovy-all.jar /usr/share/eucalyptus/groovy.jar
# /etc/init.d/eucalyptus-cloud restart

ตรวจดูด้วยวิธีเดิมอีกครั้งว่าสามารถใช้งานได้หรือไม่ แล้วตรวจดูพอร์ตหรือ log ที่ /var/log/eucalyptus อีกครั้งเพื่อให้มั่นใจ

$ netstat -an | grep "8774"
tcp       0      0 :::8774                 :::*                    LISTEN     
$ netstat -an | grep "8443"
tcp        0      0 0.0.0.0:8443            0.0.0.0:*               LISTEN

ทดลอง register คอมโพเนนท์ต่างๆเพื่อให้สามารถใช้งานได้

# euca_conf --register-walrus {front end IP address}
# euca_conf --register-cluster {clustername} {front end IP address}
# euca_conf --register-sc {clustername} {front end IP address}

{front end IP address} เป็น IP Address ของงเครื่อง front-end

{clustername} ตั้งชื่อให้กับ cluster ซึ่งการที่เอา NC หลายๆ NC มาต่อกับ CC เราเรียกว่า cluster

ทุกขั้นตอนจะมีการถาม password ของ root เพื่อเป็นการยืนยันสิทธิ์และอนุญาตให้สร้าง key ที่ใช้สำหรับติดต่อกัน

ขั้นสุดท้ายคือการ register NC หากมีการแยก CC ออกจาก front-end ให้ใช้คำสั่งนี้ที่เครื่องที่ทำหน้าที่เป็น CC เท่านั้น

# euca_conf --register-nodes "{Node 0 IP address} {Node 1 IP address} ... {Node N IP address}"

รีสตาร์ทเซอร์วิสต่างๆ อีกครั้งหลังจากลงทะเบียนคอมโพเนนท์ต่างๆ

# /etc/init.d/eucalyptus-cloud restart
# /etc/init.d/eucalyptus-cc restart

จากนั้นให้ทดสอบเปิดเว็บ https://front-end-ip:8443 เช่น https://172.30.143.162:8443 ขึ้นมาดูหากปรากฎหน้าเว็บแสดงว่า eucalyptus ทำงานแล้ว จากนั้นให้ log in ในชื่อ admin รหัสผ่าน admin เพื่อเข้าสู่การตั้งค่าครั้งแรก สามารถอ่านรายระเอียดเพิ่มเติมได้ที่ First-time Setup หากต้องการใช้งาน euca2ools เพื่อใช้งานระบบ cloud ให้ติดตั้งเพกเกจที่เครื่องคอมพิวเตอร์ที่เราใช้งาน ไม่จำเป็นต้องเป็นเครื่อง front-end

# aptitude install euca2ools

กลับไปที่เว็บเลือกแท็บ Credentials จากนั้นดาวน์โหลด Credentials ZIP-file ลงมาที่เรื่องคอมพิวเตอร์ ติดตั้ง certificates กับระบบ cloud

$ mkdir $HOME/.euca
$ unzip euca2-admin-x509.zip -d $HOME/.euca

ก่อนเริ่มใช้งานทุกครั้งให้พิมพ์ . $HOME/.euca/eucarc ก่อน แต่พิมพ์แค่ครั้งเดียวจากนั้นจะใช้คำสั่งอะไรที่ติต่อกับ cloud ก็ไม่ต้องพิมพ์อีก ยกเว้นว่าเปิดเทอร์มินัลใหม่

$ . $HOME/.euca/eucarc
$ euca-describe-availability-zones verbose
AVAILABILITYZONE	cc01	172.30.143.162
AVAILABILITYZONE	|- vm types	free / max   cpu   ram  disk
AVAILABILITYZONE	|- m1.small	0002 / 0002   1    128     2
AVAILABILITYZONE	|- c1.medium	0002 / 0002   1    256     5
AVAILABILITYZONE	|- m1.large	0001 / 0001   2    512    10
AVAILABILITYZONE	|- m1.xlarge	0001 / 0001   2   1024    20
AVAILABILITYZONE	|- c1.xlarge	0000 / 0000   4   2048    20

หากปรากฎข้อความดังข้างต้นแสดงว่าสามารถใช้งานได้แล้ว เนื่องจากระบบสามารตรวจสอบทรัพยากรของ cloud ได้แล้ว เราสามารถสร้าง VM แล้วทดลองสั่งให้ทำงานบนระบบ cloud ที่สร้างขึ้นได้ทันที

หมายเหตุ

  • คำแนะนำการติดตั้งนี้ทดสอบอยู่บน Virtualbox 3.2.6 โดยใช้ brigde interface
  • ติดตั้งโดยใช้ debian sid และเพกเกจจาก testing
  • การติดตั้ง network ของ eucalyptus ใช้ SYSTEM Mode หากต้องการติดตั้งในลักษณะอื่นสามารถอ่านได้ที่ Eucalyptus Network Configuration
  • xen ติดตั้งเวอร์ชัน 4 และต้องบูตตามที่แนะนำไว้เท่านั้น มิฉะนั้นจะไม่สามารถเริ่มการทำงานของ NC ได้

อ้างอิง

Creative Commons License ลิขสิทธิ์ของบทความเป็นของเจ้าของบทความแต่ละชิ้น
ผลงานนี้ ใช้สัญญาอนุญาตของครีเอทีฟคอมมอนส์แบบ แสดงที่มา-อนุญาตแบบเดียวกัน 3.0 ที่ยังไม่ได้ปรับแก้