Author: jatuporn.ch

  • การสร้างระบบ Load Balance Web Server ด้วยวิธีการ URL Redirect

    เราสามารถสร้างระบบ Load Balance Web Server ด้วยวิธีการ URL Redirect
    โดยสามารถสร้างด้วยภาษาใดก็ได้ แต่จะขอยกตัวอย่างด้วยภาษา PHP ได้ง่าย ๆ ดังนี้

    ตัวอย่างไฟล์ server-status ที่ได้ทำการ monitor web server มาเรียบร้อยแล้ว

    webserver1.testlab UP
    webserver2.testlab DOWN
    

    – เราสามารถใช้คำสั่งดึงไฟล์เพื่อคัดเฉพาะ Web Server ที่สามารถใช้งานได้จริง ๆ ดังนี้

    exec("cat /tmp/server-status | grep UP",$redirect);

    – จากนั้นจะทำการ นำรายการ server ทั้งหมดซึ่งอยู่ในตัวแปร $redirect มาทำการสุ่ม ดังนี้

    $random = rand(0,(count($redirect)-1);

    – ก็จะทำเอาเลข server ที่ random ได้ไปเข้ากระบวนการ Redirect ดังนี้

    $server = explode(" ",$redirect[$random]);
    header('HTTP/1.1 301 Moved Permanently');
    header('Cache-Control: no-store, no-cache, must-revalidate');
    header('Expires: Thu, 01 Jan 1970 00:00:00 GMT');
    header('Location: https://'.$server[0].'/');
    unset($server);
    

    ในกรณีที่ต้องการสร้างหน้ารอให้ทำการตรวจสอบว่าในกรณีที่ไม่มีเครื่องให้บริการให้แสดงข้อความ ตัวอย่างดังนี้

    if(count($redirect)==0){
       echo "Server Unavailable or Maintenance Period";
    }

    ดังที่กล่าวมาทั้งหมดข้างต้นสามารถรวมเป็น script ไฟล์ PHP ได้ดังนี้

    <?php
    exec("cat /tmp/server-status | grep UP",$redirect);
    if(count($redirect)==0){
       echo "Server Unavailable or Maintenance Period";
    }else{
       $random = rand(0,(count($redirect)-1));
       $server = explode(" ",$redirect[$random]);
       header('HTTP/1.1 301 Moved Permanently');
       header('Cache-Control: no-store, no-cache, must-revalidate');
       header('Expires: Thu, 01 Jan 1970 00:00:00 GMT');
       header('Location: http://'.$server[0].'/');
       unset($server);
    }
    unset($redirect);
    ?>

    *สามารถอ่านวิธีสร้างไฟล์สำหรับ monitor web serverได้จาก บทความนี้ http://sysadmin.psu.ac.th/2014/06/19/monitor-web-server-wget-shell-script-daemon/

  • การตรวจสอบสถานะการให้บริการ Web Server ด้วย WGET และสร้าง Shell Script เพื่อตรวจสอบอัตโนมัติ

    ขอนำเสนอวิธีการตรวจสอบสถานะการให้บริการด้วยคำสั่ง wget และการสร้าง Shell Script เพื่อให้ทำงานได้อย่างอัตโนมัติ

    การตรวจสอบสถานะการให้บริการด้วย WGET

    วิธีติดตั้ง wget สำหรับ ubuntu 14.04

    สามารถติดตั้งโดยใช้คำสั่ง (โดยปกติจะลงมาให้อยู่แล้ว)

    # sudo apt-get install -y wget

    วิธีติดตั้ง wget สำหรับ windows

    สามารถ Download ได้ที่

    http://downloads.sourceforge.net/project/gnuwin32/wget/1.11.4-1/wget-1.11.4-1-setup.exe

    สามารถเปิด command prompt รันได้ที่ path นี้ (ยกตัวอย่างจาก windows 64 bit)

    C:\Users\xxx>cd C:\Program Files (x86)\GnuWin32\bin
    
    C:\Program Files (x86)\GnuWin32\bin>wget
    SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
    syswgetrc = C:\Program Files (x86)\GnuWin32/etc/wgetrc
    wget: missing URL
    Usage: wget [OPTION]... [URL]...
    
    Try `wget --help' for more options.

    ตัวอย่างคำสั่งที่ใช้สำหรับโหลด html URL ที่ต้องการตรวจสอบ

    wget -nv --timeout 2 --connect-timeout=10 -t 1 http://webserver1.testlab -O /tmp/webserver1-tmp
    
    -nv : ใช้สำหรับปิดการแสดงผล แต่ยังแสดงผล error และข้อมูลเบื้องต้น
    --timeout [sec] : ใช้สำหรับกำหนดค่า timeout ในการเชื่อมต่อไปยัง web server
    --connect-timeout [sec] : ใช้กำหนดเวลาในกรณีที่การเชื่อมต่อไม่สิ้นสุดในเวลาที่กำหนด
    -t [sec] : จำนวนครั้งในการ retry connection
    -O : บันทึกผลลัพธ์ไปยังไฟล์

    ในกรณีที่ต้องการโหลด html URL ประเภท https ให้ทำการข้ามการตรวจสอบ certificate ด้วยตัวอย่างคำสั่งดังนี้

    wget -nv --timeout 2 --connect-timeout=10 -t 1 --no-check-certificate https://webserver1.testlab -O /tmp/webserver1-https-tmp

    หลังจากได้ไฟล์ผลลัพธ์ของหน้า html website เป้าหมายแล้ว สามารถใช้โปรแกรม grep เพื่อตรวจสอบว่าปรากฎข้อความที่แสดงว่าหน้า web ทำงานปกติหรือไม่ เช่น

    grep WEBSERVER /tmp/webserver1-tmp

    หลังจากนั้นเราสามารถประยุกต์เพื่อเขียน Shell Script ง่าย ๆ ที่สามารถตรวจสอบ Web Server เพื่อดูว่า Web ปกติหรือไม่ในขั้นตอนถัดไป

    วิธีการเขียน Shell Script เพื่อตรวจสอบการใช้งานแบบอัตโนมัติ

    Shell Script สำหรับตรวจสอบ Web Server

    – ทำการสร้างไฟล์ /home/[user]/checkweb.sh

    nano /home/testlab/checkweb.sh
    

    – สร้าง script ข้อความดังนี้

    *ตัวอย่างรูปแบบ sh shell

    #!/bin/sh
    url1='webserver1.testlab'
    url2='webserver2.testlab'
    searchtxt='WEBSERVER'
    #URL PATH
    path='/'
    while(true);
    do
      cp /dev/null /tmp/server-status
      for i in $(seq 1 2)
      do
         eval wget -q --timeout 2 --connect-timeout=10 -t 1 http://\${url${i}}$path -O /tmp/\${url${i}}-tmp
         eval echo "Get URL : http://\${url${i}}$path"
         status=$(eval grep $searchtxt /tmp/\${url${i}}-tmp | wc -l)
         if [ $status -ge "1" ]; then
            eval echo \${url${i}}" : STATUS = UP"
            eval echo \${url${i}}" UP" >> /tmp/server-status
         else
            eval echo \${url${i}}" : STATUS = DOWN"
            eval echo \${url${i}}" DOWN" >> /tmp/server-status
         fi
      done
      echo "Sleep 15 secs....."
      sleep 15
      /usr/bin/clear
    done
    

    *ตัวอย่างรูปแบบ bash shell

    #!/bin/bash
    url[1]='webserver1.testlab'
    url[2]='webserver2.testlab'
    searchtxt='WEBSERVER'
    #URL PATH
    path='/'
    while(true);
    do
      cp /dev/null /tmp/server-status
      for i in {1..2}
      do
         wget -q --timeout 2 --connect-timeout=10 -t 1 http://${url[$i]}$path -O /tmp/${url[$i]}-tmp
         echo "Get URL : http://${url[$i]}$path"
         status=$(grep $searchtxt /tmp/${url[$i]}-tmp | wc -l)
         if [ $status -ge "1" ]; then
            echo ${url[$i]}" : STATUS = UP"
            echo ${url[$i]}" UP" >> /tmp/server-status
         else
            echo ${url[$i]}" : STATUS = DOWN"
            echo ${url[$i]}" DOWN" >> /tmp/server-status
         fi
      done
      echo "Sleep 15 secs....."
      sleep 15
      /usr/bin/clear
    done
    

    – ทำการเปลี่ยน permission ให้สามารถ execute ได้

    chmod 755 checkweb.sh

    – ทดสอบ execute script จะได้ข้อความดังนี้

    testlab@lbs:~$ ./checkweb.sh 
    Get URL : http://webserver1.testlab/
    webserver1.testlab : STATUS = UP
    Get URL : http://webserver2.testlab/
    webserver2.testlab : STATUS = UP
    Sleep 15 secs.....
    

    สามารถนำ script ดังกล่าวไปปรับเปลี่ยนเพื่อใช้ในการรันเป็น daemon ได้ตามสะดวกครับ

  • การทดสอบประสิทธิภาพ Web Server ประเภท Static Page : Apache2 vs Lighttpd บนเครื่อง Ubuntu 14.04 LTS

    เครื่องมือในการทดสอบ
    Web Server OS : Ubuntu 14.04 LTS
    Client OS : Windows 8.1
    Software : Apache Jmeter 2.11

    Environment :
    Web Server
    Ubuntu Server (Oracle VM VirtualBox)
    Intel Haswell 1.6GHz (2.30GHz) 4 core RAM 512G
    Client
    Windows 8.1 (Physical Notebook)
    Intel Haswell 1.6GHz (2.30GHz) Intel Haswell 4 core RAM 8G
    – รันอยู่บนเครื่องเดียวกัน
    – ใช้ค่า Default ไม่มีการ Tuning เพิ่มเติม

    วิธีการทดสอบ

    1. ทำการตั้งค่า Apache ให้อยู่คนละ Port กับ Lighttpd2014-05-23_063514

    2. ทำการสร้าง Static Page โดยมีตำแหน่ง และ HTML Code (index.html) ดังนี้

    Apache : /var/www/html/index.html
    สำหรับ Apache ให้ rename ไฟล์เดิมก่อนเนื่องจากมีไฟล์อยู่แล้วด้วยคำสั่งดังนี้

    sudo mv /var/www/html/index.html /var/www/html/index.html_bak
    

    Lighttpd : /var/www/index.html

    <!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
    <title>Webserver test</title>
    </head>
    <body>
    This is a webserver test page.
    </body>
    </html>

    3. เปิดโปรแกรม Jmeter ทำการ Add Thread Group, HTTP Request, View Results Tree และ Graph Results
    2014-05-23_063658

    4. ทำการทดสอบโดยชี้ไปที่ Web Site ของ Web Server ที่ต้องการ โดยมีตัวอย่างดังรูป
    (จะสังเกตุว่ามีการตั้งค่า Timeout = 1500 ms เพื่อป้องกันโปรแกรมค้าง เนื่องจาก Web Server ไม่ยอมตอบ)
    2014-05-23_105637

    *หมายเหตุ ระหว่างรัน Test สามารถตรวจสอบการทำงานของเครื่อง Web Server โดยติดตั้งโปรแกรมชื่อ htop ดังนี้

    sudo apt-get install -y htop
    

    พิมพ์คำสั่ง htop จะปรากฎหน้าจอดังรูป2014-05-23_065732

    การตั้งค่าทดสอบ

    Number of Threads (users) : 500,1000,2000,2500,3000
    Ramp-Up Period (in seconds) : 1
    Loop Count : 1

    ตัวอย่างการทดสอบ

    จำนวน Users ที่เปิด Page ไม่สำเร็จ

    Number of Threads (users) 500 1000 2000 2500 3000
    Apache2 0 28 424 2232 Jmeter Hang
    Lighttpd 0 0 3 1418 Jmeter Hang

    ซึ่งการทดสอบแบบไม่มีการ Tuning อาจจะไม่ Fair สำหรับแต่ละ Web Server (แม้ผลจะออกมาชัดว่า Lighttpd เหนือกว่า) เพราะยังไม่ได้มีการดึงประสิทธิภาพหรือตั้งค่า Limit Connection ให้รองรับได้สูงสุด และยังมีในส่วนของ Cache หลาย ๆ แบบที่จะช่วยให้ไม่ต้องประมวลผล Page เดิม ๆ ซ้ำบ่อย ๆ แต่ถึงกระนั้นวิธีนี้เป็นวิธีการหนึ่งที่ใช้ในการทดสอบก่อนจะมีการใช้งานจริง เพื่อทำให้เราเตรียมการได้ทันท่วงที เช่นทดสอบแล้วมีบ้าง SQL ที่ใช้เวลานานกว่าปกติ หรือ database connection limit

    สำหรับ Jmeter นั้นสามารถทำอะไรได้อีกมากมาย สามารถเขียน Script ในลักษณะของ Batch Job เพื่อดู Flow การทำงานของทั้ง Web Database และอื่น ๆ ถ้าใครอยากศึกษาเพิ่มเติมสามารถหาอ่านได้จาก Google ทั่ว ๆ ไปครับ

    Reference :
    [1] http://www.cyberciti.biz/tips/howto-performance-benchmarks-a-web-server.html

  • การติดตั้งโปรแกรมตรวจสอบประสิทธิภาพ Server : Apache Jmeter บนเครื่อง Windows

    โปรแกรม Jmeter เป็นโปรแกรมสารพัดประโยชน์ใช้สำหรับทดสอบประสิทธิภาพการรองรับโหลดจำนวนมาก โดยในเบื้องต้นผมยังจะไม่อธิบายรายละเอียดโปรแกรมมากนะครับ จะนำเสนอแค่วิธีติดตั้ง และการ Test ในส่วนที่เป็น Web Server แบบไม่มี Script อะไรพิเศษเป็นหลัก แล้ววันหลังค่อยมาเปล่าในส่วนอื่น ๆ เช่นการ Test Load Database, LDAP, FTP, WebService ฯลฯ ถ้ามีโอกาสครับ

    ความต้องการพื้นฐานสำหรับโปรแกรม Jmeter
    1. Java 6 ขึ้นไป
    2. OS ซึ่งรองรับทั้ง Unix, Windows

    วิธีการติดตั้งบน Windows 
    Test OS : Windows 8.1
    1. ติดตั้ง JAVA สามารถทำการ Download และติดตั้งได้จาก

    http://www.java.com/en/download/index.jsp
    

    2. ดาวน์โหลดโปรแกรม Jmeter ได้จาก

    http://jmeter.apache.org/download_jmeter.cgi
    

    3. Save file .zip ดังรูป
    2014-05-22_202646

    4. ทำการแตกไฟล์ออกมา และทำการรันไฟล์ ApacheMeter.jar ดังรูป (จะปรากฎเป็น icon java สามารถ double click รันได้เลย)
    2014-05-22_203814

    ตัวอย่างการสร้าง Test Plan เพื่อทดสอบ Web Server

    1. ทำการสร้าง Thread Group ภายใต้ Test Plan ดังรูป
    2014-05-22_204434

    2. หลังจากนั้นจะปรากฎหน้าต่างให้ตั้งค่าได้ดังนี้
    2014-05-22_205548

    Number of Threads (users) : จำนวนผู้ใช้งานที่ต้องการ ณ เวลานั้น ๆ (concurrent users)
    Ramp-up Period (in seconds) : เวลาหน่วงในการเพิ่มผู้ใช้งานจนถึงจำนวน Number of Threads ที่ตั้งไว้ เช่น Number of Threads = 300, Ramp-up Period = 60 แสดงว่า ภายใน 60 วินาทีจะมี จำนวนผู้ใช้เข้าสู่ระบบรวม 300 คน (ค่อย ๆ เพิ่มเข้าไปจนครบ 300 ใน 60 วินาที)
    Loop Count : คือจำนวนรอบที่ทำ ถ้าติด Forever ก็แสดงว่าทำตลอดไป

    *หมายเหตุ ระวังอย่างตั้งค่าเว่อร์จนเกินไป เครื่องผู้ที่สั่ง Test อาจจะทำงานไม่ไหว Hang ได้

    3. จากนั้นทำการสร้าง Sampler ที่เป็น HTTP Request เพื่อกำหนดค่า config เบื้องต้นที่จำเป็นในการทดสอบ ดังรูป
    2014-05-22_212211

    4. จะปรากฎให้ตั้งค่า หลัก ๆ ถ้าต้องการยิงทดสอบธรรมดา ๆ ให้ใส่เฉพาะ Server Name หรือ IP และ Path เช่น /regist.php ถ้าต้องการยิงหน้าแรกก็ใส่ / เฉย ๆ ดังรูป

    2014-05-22_212413

    5. หลังจากนั้นทำการเพิ่มในส่วนของรายงานผล โดยแนะนำ 2 ตัวคือ View Results Tree และ Graph Results
    2014-05-22_210512

    6. ตัวอย่างผลลัพธ์จาก Results Tree (วิธีการรัน Test ให้กดที่ปุ่ม Play สีเขียว และปุ่ม Stop สีแดงเพื่อหยุด)2014-05-22_212755

    7. ตัวอย่างผลลัพธ์ในรูปแบบ Graph Results2014-05-22_213206

    Reference :
    [1] http://www.narisa.com/forums/index.php?app=blog&blogid=9&showentry=3019
    [2] http://www.narisa.com/forums/index.php?app=blog&blogid=9&showentry=2873

  • การติดตั้ง Lighttpd + PHP5 บนเครื่อง Ubuntu 14.04 LTS

    มาเริ่มขั้นตอนการติดตั้งกันเลยครับ

    วิธีการติดตั้ง Lighttpd Web Server

    1. ทำการติดตั้ง Lighttpd ผ่าน apt-get ดังนี้ครับ

    # sudo apt-get install -y lighttpd

    2. ให้ทำการ Restart Lighttpd ด้วยคำสั่ง

    # sudo service lighttpd restart
    

    3. ทำการทดสอบเข้าใช้งาน HTTP โดยพิมพ์คำสั่ง http://หมายเลขไอพีของเซิร์ฟเวอร์ เช่น

    http://192.168.99.1

    4. ในกรณีที่ต้องการติดตั้ง SSL ให้พิมพ์คำสั่งเพื่อเปิด site ดังนี้

    sudo lighttpd-enable-mod ssl
    

    5. หลังจากนั้นทำการ สร้าง key จาก default cer (ถ้ามี key จริงสามารถนำมาแทนได้ในภายหลัง)

    ในกรณีที่ไม่เคยติดตั้ง apache ให้ติดตั้งโปรแกรม ssl-cert ก่อนดังนี้

    sudo apt-get install -y ssl-cert
    

    ทำการรวม Key โดยสร้างเป็นไฟล์ใหม่ เก็บไว้ที่ /etc/lighttpd/snakeoil.pem

    sudo sh -c 'cat /etc/ssl/certs/ssl-cert-snakeoil.pem /etc/ssl/private/ssl-cert-snakeoil.key > /etc/lighttpd/snakeoil.pem'
    

    6. จากนั้นทำการเข้าไปแก้ไฟล์ระบุ เพื่อระบุตำแหน่ง cer ให้ถูกต้อง

    sudo nano /etc/lighttpd/conf-enabled/10-ssl.conf
    

    7. ทำการแก้ไขข้อความในไฟล์ดังนี้

    ssl.pemfile = "/etc/lighttpd/snakeoil.pem"
    

    8. จากนั้นให้สั่ง Restart Lighttpd  ตามปกติ

    # sudo service lighttpd restart
    

    9. ทำการทดสอบเข้าใช้งาน HTTPS โดยพิมพ์คำสั่ง https://หมายเลขไอพีของเซิร์ฟเวอร์ เช่น

    https://192.168.99.1
    

    *หมายเหตุ วิธีการดู IP ให้พิมพ์ดังนี้

    ifconfig

    ให้วิธีการดูให้สังเกตุตามรูปตัวอย่าง

    2014-05-22_102420

    – eth0 เป็น ip จาก nat interface
    – eth1 เป็น ip จาก bridge interface
    – lo เป็น ip จาก loopback interface

    วิธีการเปลี่ยน Lighttpd Server Default Port

    *ยกตัวอย่างการเปลี่ยนจาก port 80->8081

    – เปิดไฟล์ /etc/lighttpd/lighttpd.conf

    sudo nano /etc/lighttpd/lighttpd.conf
    

    – แก้ไขข้อความในไฟล์ดังนี้ (วิธีการ save ให้กด Ctrl-X แล้วกด y แล้ว enter)

    server.port = 8081

    วิธีการติดตั้ง PHP5 เพื่อใช้งานกับ Lighttpd Web Server
    1. ทำการติดตั้ง PHP5 ดังนี้

    sudo apt-get install php5-cgi
    

    2. ทำการเปิดใช้งาน module เพื่อให้สามารถใช้งาน php บน lighttpd ได้

    sudo lighty-enable-mod fastcgi
    sudo lighty-enable-mod fastcgi-php
    

    3. จากนั้นให้สั่ง Restart Lighttpd  ตามปกติ

    # sudo service lighttpd restart

    4. วิธีการสร้างไฟล์ตรวจสอบสามารถทำได้ดังนี้

    – เปิดไฟล์ /var/www/info.php

    sudo sh -c 'echo "<?php echo phpinfo(); ?>" > /var/www/info.php'
    

    – จากนั้นทำการเปิด web http://หมายเลขไอพีของเซิร์ฟเวอร์/info.php ตัวอย่าง

    http://192.168.99.1/info.php
  • การติดตั้ง Apache2 + PHP5 บนเครื่อง Ubuntu 14.04 LTS

    มาเริ่มขั้นตอนการติดตั้งกันเลยครับ

    วิธีการติดตั้ง Apache2 Web Server

    1. ทำการติดตั้ง Apache ผ่าน apt-get ดังนี้ครับ

    # sudo apt-get install -y apache2 
    

    2. ให้ทำการ Restart Apache ด้วยคำสั่ง

    # sudo service apache2 restart
    

    จะเห็นได้ว่าจะมี Warning เกี่ยวกับ Domain Name ไม่ต้องตกใจครับ สามารถใช้งานได้ แต่เพราะยังไม่ได้จด Domain ให้กับ IP เครื่องที่ติดตั้ง ทุกครั้งที่ Restart ก็จะมีการฟ้องจนกว่าจะจดครับ

    ถ้าไม่ต้องการให้ขึ้น Warning ดังกล่าว ให้ทำการแก้ไขไฟล์ /etc/apache2/apache2.conf ดังนี้

    – เปิดไฟล์ /etc/apache2/apache2.conf

    sudo nano /etc/apache2/apache2.conf
    

    – เพิ่มข้อความท้ายไฟล์ดังนี้ (วิธีการ save ให้กด Ctrl-X แล้วกด y แล้ว enter)

    ServerName localhost

    3. จากนั้นทำการ Restart Apache อีกครั้งจะไม่พบข้อความ Warning อีกแล้ว

    # sudo service apache2 restart

    4. ทำการทดสอบเข้าใช้งาน HTTP โดยพิมพ์คำสั่ง http://หมายเลขไอพีของเซิร์ฟเวอร์ เช่น

    http://192.168.99.1
    

    5. ในกรณีที่ต้องการติดตั้ง SSL ให้พิมพ์คำสั่งเพื่อเปิด site ดังนี้

    sudo a2enmod ssl
    sudo a2ensite default-ssl

    6. จากนั้นให้สั่ง Restart Apache ตามปกติ

    # sudo service apache2 restart
    

    7. ทำการทดสอบเข้าใช้งาน HTTPS โดยพิมพ์คำสั่ง https://หมายเลขไอพีของเซิร์ฟเวอร์ เช่น

    https://192.168.99.1
    

    8. ในกรณีที่ต้องการยกเลิกการติดตั้ง SSL ให้พิมพ์คำสั่งเพื่อปิด site ดังนี้

    sudo a2dismod ssl
    sudo a2dissite default-ssl

    9. จากนั้นให้สั่ง Restart Apache ตามปกติ

    # sudo service apache2 restart
    

    *หมายเหตุ วิธีการดู IP ให้พิมพ์ดังนี้

    ifconfig

    ให้วิธีการดูให้สังเกตุตามรูปตัวอย่าง

    2014-05-22_102420

    – eth0 เป็น ip จาก nat interface
    – eth1 เป็น ip จาก bridge interface
    – lo เป็น ip จาก loopback interface

    วิธีการเปลี่ยน Apache Server Default Port

    *ยกตัวอย่างการเปลี่ยนจาก port 80->8080

    1. เปิดไฟล์ /etc/apache2/sites-enabled/000-default.conf

    sudo nano /etc/apache2/sites-enabled/000-default.conf
    

    2. แก้ไขข้อความในไฟล์ดังนี้ (วิธีการ save ให้กด Ctrl-X แล้วกด y แล้ว enter)

    <VirtualHost *:8080>

    3. เปิดไฟล์ /etc/apache2/ports.conf

    sudo nano /etc/apache2/ports.conf
    

    2. แก้ไขข้อความในไฟล์ดังนี้ (วิธีการ save ให้กด Ctrl-X แล้วกด y แล้ว enter)

    Listen 8080

    3. จากนั้นให้สั่ง Restart Apache ตามปกติ

    # sudo service apache2 restart
    

    4. ทำการทดสอบเข้าใช้งาน โดยพิมพ์คำสั่ง http://หมายเลขไอพีของเซิร์ฟเวอร์:8080 เช่น

    http://192.168.99.1:8080

    ตั้ง PHP5 เพื่อใช้งานกับ Apache2 Web Server
    1. ทำการติดตั้ง PHP5 ดังนี้

    sudo apt-get install -y php5 libapache2-mod-php5
    

    2. วิธีการสร้างไฟล์ตรวจสอบสามารถทำได้ดังนี้

    – เปิดไฟล์ /var/www/html/info.php

    sudo sh -c 'echo "<?php echo phpinfo(); ?>" > /var/www/html/info.php'
    

    – จากนั้นทำการเปิด web http://หมายเลขไอพีของเซิร์ฟเวอร์/info.php ตัวอย่าง

    http://192.168.99.1/info.php
  • Server High Availability คืออะไร

    “เคยได้ยินคำว่า Server เรามี Uptimeถึง 99% ไหม” 

    High Availability มีชื่อย่อในวงการสั้น ๆ ว่า HA องค์กรหรือหน่วยงานมากมายในปัจจุบันมีการวัดประสิทธิภาพการให้บริการด้วย HA โดยจะมีหน่วยการวัดที่เรียกว่า Uptime ซึ่งคิดจากเวลาเป็น % ของการให้บริการ โดยมีชื่อเรียกระดับการให้บริการตามตารางดังนี้

    Availability % Downtime per year Downtime per month* Downtime per week
    90% (“one nine”) 36.5 days 72 hours 16.8 hours
    95% 18.25 days 36 hours 8.4 hours
    97% 10.96 days 21.6 hours 5.04 hours
    98% 7.30 days 14.4 hours 3.36 hours
    99% (“two nines”) 3.65 days 7.20 hours 1.68 hours
    99.5% 1.83 days 3.60 hours 50.4 minutes
    99.8% 17.52 hours 86.23 minutes 20.16 minutes
    99.9% (“three nines”) 8.76 hours 43.8 minutes 10.1 minutes
    99.95% 4.38 hours 21.56 minutes 5.04 minutes
    99.99% (“four nines”) 52.56 minutes 4.32 minutes 1.01 minutes
    99.999% (“five nines”) 5.26 minutes 25.9 seconds 6.05 seconds
    99.9999% (“six nines”) 31.5 seconds 2.59 seconds 0.605 seconds
    99.99999% (“seven nines”) 3.15 seconds 0.259 seconds 0.0605 seconds

    ระดับที่หลายหน่วยงานหรือหลายอุปกรณ์พยายามจะโฆษณา จะอยู่ที่ระดับ Five nines หรือ Uptime 99.999% นั่นเอง ซึ่งจะเห็นได้ว่าจะมี Downtime แค่ 5.26 นาที ต่อปีเท่านั้น ซึ่งมองในด้านอุปกรณ์เครือข่าย จะมีปัจจัยน้อยที่จะทำให้เกิด Downtime แต่ในส่วนของ Server นั่นจะมีปัจจัยมากกว่าเพราะประกอบด้วยอุปกรณ์มากชิ้น แต่ปัญหาดังกล่าวในปัจจุบันน้อยลง หลังจากเข้าสู่ยุคของ Cluster หรือ Cloud เพราะจะมีเครื่องคอยทำงานแทนกันอยู่ตลอดเวลานั่นเอง

    network_ha_design
    ตัวอย่างการทำ HA ระดับองค์กร

    โดยคำว่า HA มักจะใช้คู่กับสิ่งที่เราจะต้องการจะสื่อว่าจะทำอย่างไรให้ระบบมี Uptime สูง ๆ เช่น Server High Availability ก็คือทำให้เครื่อง Server มีการให้สามารถทำงานได้โดยไม่ Hang ไม่ดับ ถ้าใช้กับคำว่า Web Server High Availability ก็หมายความว่า จะทำอย่างไรให้สามารถให้บริการ Web Site โดยไม่มีอาการล่ม ซึ่งบางครั้งเราจะมีการ ตัด Downtime ที่เป็นการวางแผนเอาไว้ก่อนแล้ว หรือเรียกสั้น ๆ ว่าการ Maintenance ระบบนั่นเอง

    การที่จะทำให้เกิดสิ่งที่เรียกว่า HA ก็มีอยู่ 3-4 แบบใหญ่ ๆ ที่สามารถนำมาใช้เพื่อเพิ่ม Uptime ได้ดังนี้

    การใช้เทคโนโลยีคลัชเตอร์ (Cluster) : คือการนำเครื่องหลาย ๆ เครื่องมาตั้งค่าให้เหมือนกัน และทำงานได้เสมือนว่ามี Server แค่ตัวเดียว ในกรณที่เมื่อเครื่องใดเครื่องหนึ่งเสียหายจะไม่ส่งผลต่อการให้บริการ

    การทำรีดันแดนซ์ (Redundancy) : คือการใช้อุปกรณ์จำนวนสองชุดขึ้นไปทำงานพร้อมกัน ทำให้ได้ประสิทธิภาพเต็มที่ นิยมใช้ในระบบเครือข่าย

    การทำโหลดบาลานซ์ (Load Balance) : เราสามารถที่จะเอาเครื่อง Server หลาย ๆ เครื่องมาเชื่อมต่อกัน เพื่อให้ทำงานหลาย ๆ อย่างร่วมกัน

    การเรพพลีเคนและแบคอัพ (Replication & Backup) : คือการคัดลอกข้อมูลจากระบบหลักไประบบรอง เมื่ออุปกรณ์หลักเกิดล่ม ก็จะมีการเปิดระบบสำรองใช้ได้ทันที

    โดยการทำ Load Balance ยังสามารถอธิบายเพิ่มเติมได้ 3 ลักษณะด้วยกันดังนี้

    Round-Robin : คือการใช้วิธีหมุนวนไปเรื่อย ๆ ซึ่งอาจทำได้ทั้งแบบ Round-Robin ที่อุปกรณ์ Load Balance หรือการจด DNS แบบ Round Robin

    Sticky  : คือการยึดติดกับ Session ในกรณีที่เมื่อระบบมีการเลือก Server ไปแล้วก็จะให้ ผู้ใช้คนเดิมใช้ Server เดิมไปจนกว่าจะหมด Session (นึกถึงกรณีต้อง Login ก่อนใช้งาน ถ้าเปลี่ยน Server ไปเรื่อย ๆ คงไม่ดีแน่)

    Work Load : คือการตรวจสอบประสิทธิภาพของ Server ก่อนที่จะเลือก โดยเลือกจากเครื่องที่ยังมีประสิทธิภาพดีกว่าก่อน ทำให้ระบบโดยรวมจะมีประสิทธิภาพดีกว่าแบบ Round-Robin เหมาะกับระบบที่มีประสิทธิภาพ Server แตกต่างกัน (เครื่องแรงปนเครื่องอ่อน)

    จากที่กล่าวไปเราสามารถใช้หลาย ๆ วิธีผสมกันก็ได้เพื่อจุดมุ่งหมายเดียวกันคือการเพิ่ม Uptime โดยเครื่องมือที่เป็น Opensource ที่ใช้วัด และที่มีมานานรวมทั้งเป็นยอมรับคือเครื่องมือตระกูล nagios และ cacti นั่นเอง แต่อย่าลืมไปละครับว่าเครื่องมือเหล่านั้นต้องรันอยู่บนเครื่องที่มี Uptime สูงด้วย ไม่ใช่ คนตรวจสอบก็ Down, อุปกรณ์ ก็ Down ไม่เช่นนั้นอาจจะได้ค่าหลอก ๆ ไม่ตรงกับความเป็นจริงก็เป็นได้

    “ถึงเวลาต้องทำ HA กันหรือยังเอ่ย ?”

     

    Reference : 
    [1] http://en.wikipedia.org/wiki/High_availability
    [2] http://smart.tnis.com/th/articles/details/30/%E0%B8%9E%E0%B8%B1%E0%B8%92%E0%B8%99%E0%B8%B2%E0%B8%82%E0%B8%B5%E0%B8%94%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1%E0%B8%AA%E0%B8%B2%E0%B8%A1%E0%B8%B2%E0%B8%A3%E0%B8%96%E0%B9%83%E0%B8%AB%E0%B9%89%E0%B8%AD%E0%B8%87%E0%B8%84%E0%B9%8C%E0%B8%81%E0%B8%A3%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2-HIGH-AVAILABILITY
    [3] http://www.dctwo.com.au/virtual/virtual_server_hardware_platform.html
    [4] http://bomber.exteen.com/20040813/cluster-load-balance

  • WorkShop : Load Balance Web Server (Server High Availability)

    “ทำไม Web ล่มบ่อยจัง, ทำอย่างไรได้บ้างถ้าไม่ต้องซื้อ Server แพง ๆ เพื่อใช้งานหนักเพียงไม่กี่วัน, Web ล่มแล้วจะติดต่อใครได้บ้าง” คำถามเหล่านี้เคยกวนใจคุณบ้างหรือเปล่า ?

    ขอนำเสนอวิธีการง่าย ๆ ที่ใครก็ทำได้ โดยในเนื้อหาหลักจะอธิบายแบบกว้าง ๆ และผมจะแยกเขียน blog อธิบายแบบละเอียดเป็นหัวข้อ ๆ ไปนะครับ ถ้าใครไม่เข้าใจสามารถคลิกเข้าไปดูเป็นเรื่อง ๆ ได้ครับ

    Workshop Outline
    ftp://ftp.psu.ac.th/pub/psu-lbs/workshop-outline.pdf

    เครื่องที่ใช้ในการทดสอบ (Oracle VM VirtualBox)
    *แนะนำให้เปิดกับโปรแกรม version ล่าสุด
    ** User : testlab , Password : 123456

    มีทั้งหมด 3 เครื่อง เป็น Web Server 2 เครื่อง และเครื่องสำหรับทำ Load Balance 1 เครื่อง
    สามารถ Download ได้ตาม Link นี้

    รายละเอียด URL
    Ubuntu Load Balance Server
    Ubuntu Web Server 1
    Ubuntu Web Server 2
    http://ftp.psu.ac.th/pub/psu-lbs/workshop.ova

    โดยจะแบ่งเป็น 7 ตอนโดยแยกเป็น 7 Blog ดังนี้

    ตอนที่ ชื่อตอน
    ตอนที่ 1 Server High Availability คืออะไร
    ตอนที่ 2 การติดตั้ง Apache2 + PHP5 บนเครื่อง Ubuntu 14.04 LTS
    ตอนที่ 3 การติดตั้ง Lighttpd + PHP5 บนเครื่อง Ubuntu 14.04 LTS
    ตอนที่ 4 การติดตั้งโปรแกรมตรวจสอบประสิทธิภาพ Server : Apache Jmeter บนเครื่อง Windows
    ตอนที่ 5 การทดสอบประสิทธิภาพ Web Server ประเภท Static Page : Apache2 vs Lighttpd บนเครื่อง Ubuntu 14.04 LTS
    ตอนที่ 6 การตรวจสอบสถานะการให้บริการ Web Server ด้วย WGET และสร้าง Shell Script เพื่อตรวจสอบอัตโนมัติ
    ตอนที่ 7 การสร้างระบบ Load Balance Web Server ด้วยวิธีการ URL Redirect
    บทความเพิ่มเติม
    วิธีการเขียน Script ตรวจสอบ Server Performance สำหรับเครื่อง Linux Server
    วิธีการเขียน Script ตรวจสอบ Server Performance สำหรับเครื่อง Windows 2008 R2
    วิธีการ Sync Source Code ระหว่างเครื่อง Linux (กำลังดำเนินการ)
    วิธีการ Sync Source Code ระหว่างเครื่อง Windows (กำลังดำเนินการ)

     

  • Upgrade / Patch VMWare Esxi 5.5 สำหรับปิดช่องโหว่ HeartBleed

    VMWare Esxi 5.5 ทั้งใน Version ปกติ และ Version Update 1 อยู่ในข่ายมีช่องโหว่ HeartBleed ในกรณีที่ซื้อ License ก็จะมีวิธีการทำแบบนึง แต่ที่จะนำเสนอเป็นวิธีสำหรับเครื่อง Free License (วิธีนี้ใช้สำหรับ Upgrade Version Esxi ได้เช่นกัน)

    วิธีการเปิดใช้งาน SSH บน VMWare ESXi 5.5 ผ่าน Vsphere Client

    1. ขั้นตอนแรกเข้า vsphere client ไปยัง Menu Configuration->Security Profile->Properties2014-05-14_145045

    2.ทำการ Start SSH Service (หลังจาก Restart Server ต้องทำใหม่นะครับ ไม่แนะนำให้เปิดทิ้งไว้)2014-05-14_145156

    3. หลังจากนั้นให้ทดสอบ ssh เข้าไปให้ได้ prompt ครับ2014-05-14_145227

    สำหรับ 5.5 ที่ออกมาชุดแรกจะมีเลข Build 1331820 ซึ่งเราต้อง Upgrade เป็น 5.5 U1 ก่อน (ประมาณ Windows Service Pack 1) ซึ่ง U1 ก็ยังมีช่องโหว่นะครับ ต้อง Upgrade Patch อีกครั้งให้ได้ Build 1746018 ซึ่งปิดช่องโหว่แล้ว อ่านข้อมูลเพิ่มเติมได้ที่นี่ครับ http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2076665

    VMWare Esxi 5.5 -> 1331820
    2014-05-14_145554

    VMWare Esxi 5.5 U1 -> 1623387
    2014-05-14_153345

    VMWare Esxi 5.5 U1 + Patch HeartBleed -> 1746018
    2014-05-14_154451

    วิธีการ Upgrade จาก 5.5 -> 5.5 U1

    1. เข้าไปยัง Web vmware : https://www.vmware.com/patchmgr/findPatch.portal เพื่อไปโหลดไฟล์ Patch ครับ ให้เลือก Version ดังรูปจากนั้นกด search2014-05-14_145502

    2. ทำการ Download ไฟล์ update-from-esxi5.5-5.5_update01 ซึ่งหลังจาก Patch Upgrade แล้วจะได้ BUILD : 16233872014-05-14_145911

    3. หลังจากนั้นกลับมายัง Vsphere Client ไปยังเมนู Configuration -> Storage -> เลือก Datastore ที่ต้องการเก็บไฟล์ Patch -> Browse Datastore2014-05-14_150207

    4. กดปุ่ม Upload File ดังภาพ
    2014-05-14_150308

    5. ให้สังเกตุตำแหน่งที่วางไฟล์ จากรูปจะว่างไปยัง root folder ของ Datastore : DISK1 จากนั้นทำการเลือกไฟล์ในเครื่องที่เราโหลดไว้ชื่อ update-from-esxi5.5-5.5_update01.zip2014-05-14_151107

    6. จะปรากฎกล่องข้อความเตือนว่าถ้ามีไฟล์ชื่อเหมือนกันจะทำการทับไฟล์ทันทีจะดำเนินการต่อไหม ให้ตอบ Yes2014-05-14_151141

    7. จะปรากฎกล่องข้อความแสดงสถานะการ Upload File ดังภาพ
    2014-05-14_151156

    8. จากนั้นกลับมายัง SSH ทำการพิมพ์คำสั่ง เพื่อ Upgrade Patch

    ~ # esxcli software vib update --depot /vmfs/volumes/[Datastore]/update-from-esxi5.5-5.5_update01.zip
    

    9. หลังจาก Upgrade Patch เสร็จให้ทำการสั่ง Reboot ดังรูป2014-05-14_151523

    วิธีการ Upgrade จาก 5.5 U1 -> 5.5 U1+Patch HeartBleed

    1. ทำการโหลดไฟล์จากที่เดิม (สามารถย้อนไปดูได้จากข้างต้น) Download ไฟล์ ESX550-20140401 ซึ่งหลังจาก Patch Upgrade แล้วจะได้ BUILD : 117460182014-05-14_152926

    2. ทำการ Browse ไฟล์บน Vsphere Client ตามวิธีการข้างต้น โดย Upload File ชื่อ ESXi550-201404001.zip ขึ้นไปบน Datastore เพื่อเตรียม Upgrade Patch ผ่าน SSH ในขั้นตอนต่อไป2014-05-14_153034

    3. จากนั้นกลับมายัง SSH ทำการพิมพ์คำสั่ง เพื่อ Upgrade Patch

    ~ # esxcli software vib update --depot /vmfs/volumes/[Datastore]/ESXi550-201404001.zip

    4. หลังจาก Upgrade Patch เสร็จให้ทำการสั่ง Reboot ดังรูป2014-05-14_153312

    เป็นอันเสร็จกระบวนการปิด HeartBleed บน VMware Esxi Host ครับ