Category: Operating System

  • วิธีการอัพเกรด php 5.5.9 เป็น php 5.6 (หรือ 7.0) บน Ubuntu 14.04 และวิธีการสลับการทำงานระหว่างเวอร์ชั่น

    บันทึกนี้สืบเนื่องจากต้องการอัพเกรดเวอร์ชั่น php เพื่อให้เครื่องเซิร์ฟเวอร์สามารถรองรับสคริปท์ WebApp php เวอร์ชั่นใหม่ที่สูงขึ้น

    คำเตือน! ควรทดลองทำในเครื่อง dev ดูก่อนอย่าทำบนเครื่องเซิร์ฟเวอร์จริงทันทีเดี๋ยวจะน้ำตาตก
    ควรทดสอบสคริปท์บนเครื่องทดสอบดูว่าสามารถทำงานได้ไม่มีปัญหาจะได้ไม่ต้องเสียเวลาแก้ไข
    เพราะตัวผมมั่วจนได้เรื่องบนเครื่องเซิร์ฟเวอร์จริงจนเกือบแก้ไม่ได้ T_T … มาเริ่มกันเลย (more…)

  • ตั้งค่า iproute2 ให้ ubuntu server ที่มี 2 interfaces

    ผมมี server สำหรับห้องบริการคอมพิวเตอร์ ที่ทำหน้าที่จ่าย dhcp IP และ cloning Windows และใช้ pGina for Windows ในการ Login ก่อนเข้าใช้เครื่อง

    เริ่มแรก server ก็มีการ์ดแลนเพียง 1 ใบ สำหรับห้องบริการคอมพิวเตอร์ห้องที่ 1 (eth0) ต่อมามีความต้องการให้ห้องบริการคอมพิวเตอร์ห้องที่ 2 ซึ่งจะเป็นอีก network ใช้ server ตัวเดียวกันนี้ด้วย จึงเพิ่มการ์ดแลนอีก 1 ใบ (eth1) ทำให้ตอนนี้มี eth0 และ eth1

    ipmultihomed

    ปัญหาคือ เมื่อ Windows ในห้องคอมฯ ห้องที่ 2 ตั้งค่า pGina RADIUS plugin ชี้ไปยัง IP ของ eth0 (192.168.99.20) ก็ทำงานไม่ได้ แต่ถ้าตั้งค่าชี้ไปยัง IP ของ eth1 (192.168.99.251) อย่างนี้ใช้งานได้ หรือใช้คำสั่ง ping 192.168.99.20 อย่างนี้ก็ไม่ได้ เช่นกัน

    จึงค้นหาคำตอบ google search อยู่หลายวัน มีบทความที่ให้คำตอบใกล้เคียงที่สุด แต่ผมก็ต้องมาแต่ง config ใหม่ จนสำเร็จ โดยหลักใหญ่ ๆ คือ เครื่อง server ที่มีการ์ดแลน 2 การ์ดนี้จะเรียกว่า multi-homed server จำเป็นจะต้องตั้งค่าเพิ่มโดยใช้ iproute2 ซึ่งมีให้แล้วบน ubuntu server ที่ผมทดสอบนี้คือ ubuntu server 16.04 ครับ คือ ปรกติแล้วเครื่อง 1 เครื่อง จะมี default gateway เพียง 1 เท่านั้น เราจะใช้ iproute2 เพื่อแยกให้มี gateway สำหรับ IP ของ eth0 และ eth1 เพิ่มขึ้น

    เรามาดูตัวอย่างกันครับ

    เครื่องที่ทดสอบ มี 2 subnets (อันนี้ที่ต้องใช้ /25 เพราะผมไม่มี net class C ถึง 2 net จึงไปขอความช่วยเหลือทีมเครือข่ายให้ช่วยแบ่งครึ่ง net class C ให้ครับ)
    1. net 192.168.99.0/25
    IP 192.168.99.1 – 192.168.99.126 broadcast 192.168.99.127 gateway 192.168.99.1
    2. net 192.168.99.128/25
    IP 192.168.99.129 – 192.168.99.254 broadcast 192.168.99.255 gateway 192.168.99.129

     

    1. ตรวจสอบ network interfaces ได้ผลลัพธ์ดังนี้

    root@ubuntu:~# ifconfig
    eth0 Link encap:Ethernet HWaddr 00:4d:60:1e:fb:ab
     inet addr:192.168.99.20 Bcast:192.168.99.127 Mask:255.255.255.128
    
    eth1 Link encap:Ethernet HWaddr 00:04:a5:fd:a4:9c
     inet addr:192.168.99.251 Bcast:192.168.99.255 Mask:255.255.255.128
    
    lo Link encap:Local Loopback
     inet addr:127.0.0.1 Mask:255.0.0.0

     

    2. เพิ่ม 2 บรรทัดนี้ต่อท้ายในไฟล์ /etc/iproute2/rt_tables (ผมตั้งชื่อ routing table 1 ว่า rt1 และ routing table 2 ว่า rt2)

    1 rt1
    2 rt2

    ผลลัพธ์ได้ดังนี้

    root@ubuntu:~# cat /etc/iproute2/rt_tables
    #
    # reserved values
    #
    255 local
    254 main
    253 default
    0 unspec
    #
    # local
    #
    #1 inr.ruhep
    1 rt1
    2 rt2

     

    3. เพิ่ม 4 บรรทัดนี้สำหรับ eth0

    post-up ip route add 192.168.99.0/25 dev eth0 src 192.168.99.20 table rt1
    post-up ip route add default via 192.168.99.1 dev eth0 table rt1
    post-up ip rule add from 192.168.99.20/32 table rt1
    post-up ip rule add to 192.168.99.20/32 table rt1

     

    4. และเพิ่ม 4 บรรทัดนี้สำหรับ eth1
    post-up ip route add 192.168.99.128/25 dev eth1 src 192.168.99.251 table rt2
    post-up ip route add default via 192.168.99.129 dev eth1 table rt2
    post-up ip rule add from 192.168.99.251/32 table rt2
    post-up ip rule add to 192.168.99.251/32 table rt2

     

    จากข้อ 3 และ ข้อ 4 ผลลัพธ์ได้ดังนี้

    root@ubuntu:~# cat /etc/network/interfaces
    auto lo
    iface lo inet loopback
    
    auto eth0
    iface eth0 inet static
    address 192.168.99.20
    netmask 255.255.255.128
    gateway 192.168.99.1
    dns-nameservers 192.100.77.10 192.100.77.11
    post-up ip route add 192.168.99.0/25 dev eth0 src 192.168.99.20 table rt1
    post-up ip route add default via 192.168.99.1 dev eth0 table rt1
    post-up ip rule add from 192.168.99.20/32 table rt1
    post-up ip rule add to 192.168.99.20/32 table rt1
    
    auto eth1
    iface eth1 inet static
    address 192.168.99.251
    netmask 255.255.255.128
    post-up ip route add 192.168.99.128/25 dev eth1 src 192.168.99.251 table rt2
    post-up ip route add default via 192.168.99.129 dev eth1 table rt2
    post-up ip rule add from 192.168.99.251/32 table rt2
    post-up ip rule add to 192.168.99.251/32 table rt2

     

    5. ทำการ restart server
    แค่นี้ครับ

     

    References:

    1. Two Default Gateways on One System

    (URL https://www.thomas-krenn.com/en/wiki/Two_Default_Gateways_on_One_System)
    2. Linux iproute2 multiple default gateways

    (URL https://www.iodigitalsec.com/2014/10/05/linux-iproute2-multiple-default-gateways/)

    3. Number of IP Addresses and Multihoming

    (URL http://www.tcpipguide.com/free/t_NumberofIPAddressesandMultihoming.htm)

  • การติดตั้ง Remote Desktop Service สำหรับให้บริการ Windows Application Online

    “อยากให้บริการ Application กลางสักอันเวลาอัพเดตแล้วจะได้ของใหม่พร้อมกันไม่ต้องคอยไล่ลงทีละเครื่อง”

    Remote Desktop Service (Remote Apps) คือ Application ที่รันภายใต้ Remote Desktop แต่ไม่ต้อง Remote เข้าไป แต่เพียงแค่รัน Icon ที่โหลดมากจากหน้า Web ใส่ User Password เท่านั้น ซึ่งสะดวกกว่าการไล่ติดตั้งโปรแกรมทุกเครื่อง แถมอัพเดตทีเดียวได้ Version ใหม่เหมือนกันทุกคน

        * บทความนี้เป็นบทความปิด เพราะเราไม่ได้มีลิขสิทธิ์โดยตรงที่จะใช้งานได้ แต่เป็นการนำไปใช้งานเพื่อการศึกษาเท่านั้น ถ้าจะใช้งานจริงต้องซื้อ Remote Desktop Service License เองครับ (มหาลัยไม่เคยซื้อ Windows License นะครับ ที่ใช้กันอยู่ Microsoft แถมมากับ Windows Desktop และ Office ซึ่งให้มาจำนวนน้อยมาก โดยตั้งแต่ Windows Server 2016 จะไม่มีแล้วครับ) ถ้าจะใช้งาน(เพื่อการศึกษา)สามารถติดต่อสอบถามได้ที่ 2082 หรือ email : support@cc.psu.ac.th

     สิ่งที่ควรทราบก่อนติดตั้ง

    • ต้องทำการติดตั้ง Windows Server 2012 R2 ซึ่งจะไม่รวมอยู่ในบทความนี้ (อนาคตจะเพิ่มบทความติดตั้งให้ครับ)
    • ต้องทำการติดตั้ง Remote Desktop License เพื่อให้สามารถ Remote ได้ไม่จำกัดจำนวนก่อน
    • บริการนี้เครื่อง Server ต้อง Join Domain ก่อน
    • ใช้ PSU Passport ในการเข้าระบบ
    • การเข้าใช้งานเยอะ ๆ จะมีผลต่อ RAM ในเครื่อง Server ที่ใช้งาน (ยิ่งเยอะยิ่งกินแรม)
    • ในกรณีที่รันพร้อมกันหลาย ๆ คน ไม่สามารถแบ่ง CPU ให้เท่ากันได้ จะเป็นในลักษณะการแย่งกันรันตามจำนวน License ของ Application นั้น ๆ เหลือให้รัน (ยกตัวอย่างโปรแกรมซื้อมา License รันได้ 16 Core คนที่รันต่อจะถูกแจ้งเตือนว่า License หมดก็ต้องรอไป)

     ขั้นตอนการติดตั้ง

    • ทำการ Add Role ดังรูป

    2016-11-08_155032

    • เลือกติดตั้ง Remote Desktop Services

    2016-11-09_155828

    • เลือกติดตั้งแบบ Standard

    2016-11-09_155928

    • เลือกสภาพแวดล้อมการใช้งานแบบ Session-based desktop

    2016-11-09_160131

    • จะปรากฎหน้าจอแจ้งว่าจะลงอะไรให้บ้าง และอธิบายว่าแต่ละบริการที่ลงทำงานอะไรบ้าง สรุปสั้น ๆ คือมีตัวรับ Remote Connection, Web สำหรับโหลด Apps คล้าย ๆ Shortcut ไปรัน, และตัวควบคุมเรื่อง Session ในการเชื่อมต่อ

    2016-11-09_160415

    • หน้าจอต่อไปใช้ในการระบุ Remote Desktop Connection Broker ในกรณีที่อยากแยกบริการแต่ละบริการข้างต้นคนละ Server แต่ในที่นี่จะติดตั้งลงที่เครื่องเดียวกันทั้งหมด (Standalone Server)

    2016-11-09_160816

    • หน้าต่างต่อไปให้ติกเลือก Install the RD Web เครื่องเดียวกับ RD Connection Broker Server

    2016-11-09_161019

    • ในส่วนของ Session Host Server ก็ติดตั้งลงบนเครื่องเดียวกัน

    2016-11-09_161233

    • หน้าต่างสุดท้ายจะถูกบังคับให้ติก Restart เครื่องหลังอัตโนมัติถ้าต้องการ

    2016-11-09_161447

    • จากนั้นรอจนกว่าจะติดตั้งเสร็จ

    2016-11-10_032936

     

    • จากนั้นกลับมาดูที่หน้า Server Manger -> Remote Desktop Services -> Overview พบว่ายังต้องติดตั้ง RD Gateway และ RD Licensing เพิ่มเติม

    2016-11-10_033414

    • ทำการติดตั้ง RD Licensing เพิ่มเติมดังรูป จากนั้นกด Next->Add

    2016-11-10_034020

    • รอจนติดตั้งเสร็จ

    2016-11-10_034334

    • จากนั้นติดตั้ง RD Gateway

    2016-11-10_034606

    • จะปรากฎหน้าต่างให้ใส่ชื่อ Server โดยต้องตรงกับชื่อ URL (เปลี่ยนทีหลังได้)

    2016-11-10_0347462016-11-10_034858

    • หลังจากติดตั้งเสร็จยังไม่ได้ตั้งค่า Certificate แต่ทำการตั้งค่าทีเดียวกับบริการอิ่นในข้อถัดไป

    2016-11-10_035709

    • ทำการตั้งค่าได้ที่หัวข้อ Edit Deployment Properties

    2016-11-10_040233

    • ข้ามในส่วนตั้งค่า RD Gateway ไปในส่วนของการตั้งค่า RD Licensing โดยตั้งค่าเชื่อมต่อกับ Server Remote Desktop License ที่มีอยู่แล้ว (ถ้าตั้งเองต้องใช้ License ที่ออกให้โดย Microsoft)

    2016-11-10_040747

    • ในส่วนของ RD Web Access ค่าเริ่มต้นจะอยู่ที่ Path /RdWeb ต้องไปตั้งค่า Redirect เอาเองถ้าไม่ต้องการพิมพ์มือจาก URL หลัก ยกตัวอย่าง Web Site เมื่อเข้าใช้งานดังรูป

    2016-11-10_041233

    • กลับมาตั้งค่าในส่วน Certificate ใหม่โดยให้ใส่ Certificate ทั้งหมด ถ้าไม่มีให้สร้าง Self-Signed ขึ้นมาใช้เองดังรูป

    2016-11-10_041732

    • แต่ละหัวข้อเลือกแล้วให้กด Apply ทุกครั้งทำไปเรื่อย ๆ จนหมด

    2016-11-10_042015

    • จากนั้นทำการสร้าง Session Collection เพื่อกำหนดว่าจะให้ใครเข้าใช้งานได้บ้าง

    2016-11-10_060848

    • ตั้งชื่อ Collection Name

    2016-11-10_061013

    • เลือก Session Host

    2016-11-10_061051

    • เลือก User Groups ที่ต้องการให้เข้าใช้ (xxx\Domain Users ความหมายคือผู้ใช้ทั้งหมดที่อยู่ภายใต้ Domain xxx)

    2016-11-10_061152

    • ในส่วนของ User Profile ให้ติกออก

    2016-11-10_061216

    • จากนั้นจะปรากฎหน้ายืนยันข้อมูลที่เลือกไปทั้งหมด จากนั้นทำการสร้าง

    2016-11-10_061303

    • หลังจากนั้นทำการตั้งค่า Remote App ที่ต้องการให้บริการดังรูป

    2016-11-10_061819

    • ทำการเลือก App ที่ต้องการ

    2016-11-10_061947

    • จากนั้นทำการ Publish

    2016-11-10_062003

    • กลับมายังหน้า Web (เปิดที่ Client ไม่ใช่ที่ Server) ในกรณีที่ใช้ Self Signed Cer ต้องทำการติดตั้ง Cer ก่อนซึ่ง Cer ดังกล่าวสามารถ Export จาก Server ให้ Client ไปลงเองดังรูป

    2016-11-10_0631292016-11-10_063148

    • จากนั้นทำการ Login จะได้ Remote App ดังที่เห็นในรูป ให้คลิกไปที่ Icon เพื่อ Download ไฟล์สำหรับใช้งาน

    2016-11-10_062216

    • จะปรากฎหน้าแจ้งเตือนดังรูป ให้เลือกไม่ต้องถามอีกจะได้ไม่ต้องกดหน้านี้ทุกครั้งที่ใช้งาน

    2016-11-10_062435

    • ใส่ Username, Password จะได้โปรแกรมดังภาพ โดยไม่ต้องติดตั้งในเครื่อง Client และใช้ License ที่ Server รวมถึงเวลารันโปรแกรมก็จะรันที่ Server ไม่ได้รันที่ Client (ถ้า Server แรง ก็จะรันได้เร็วกว่า)2016-11-10_065049

    การตั้งค่า Quota Disk สำหรับใช้งานพื้นที่ร่วมกัน

    • เลือก Drive ที่ต้องการทำการตั้งค่า Quota ดังรูป

    2016-11-10_051047

    • ทำการตั้งค่า Quota ของ Disk ถ้าไม่เลือก Deny disk space to user exceeding quota limit ผู้ใช้จะไม่ถูกแจ้งเตือนในกรณีที่ใช้งานเกิน Limit

    2016-11-10_053724

    • ทำการตั้งค่า Quota ของแต่ละ User โดยเลือกที่ Quota Entries

    2016-11-10_051405

    • สามารถตั้งให้แต่ละคนได้ไม่เท่ากันได้ ดังรูป

    2016-11-10_051611

    • หลังจากเปิดระบบ Quota เราจะสามารถดูได้ทั้งหมดว่าแต่ละ User ใช้พื้นที่ไปเท่าไหร่บ้าง

    2016-11-10_052120

    • ในกรณีที่ใช้งานเต็มจะแจ้ง User ประมาณในรูป

    2016-11-10_053610

    จบแล้วครับ หวังว่าเป็นแนวทางใหม่ ๆ อีกแนวทางหนึ่งครับ (ตอนนี้อาจจะยังนึกไม่ออกว่าจะเอามาใช้อย่างไร แต่สำหรับคนที่ซื้อ License อะไรสักอย่างแล้วใช้งานได้แค่เครื่องเดียวจะเข้าใจดีครับว่ามีประโยชน์อย่างไร)

  • How to: SQL Server Failover Cluster

    สิ่งที่ต้องมี

    • Software
    • Hardware
      • เครื่องคอมพิวเตอร์อย่างน้อย 2 เครื่องสเป็คเดียวกัน (ในเอกสารนี้ใช้ 2 เครื่อง)
      • ในเอกสารนี้ใช้ VMware ESXi
      • รายละเอียดเพิ่มเติม Hardware Requirements
      • เครื่องคอมพิวเตอร์ 1 เครื่องสำหรับเป็น iSCSI เซิร์ฟเวอร์
    • IP address
      • สำหรับเครื่อง Server 2 เลข
      • สำหรับ Microsoft failover cluster 1 เลข
      • สำหรับ Microsoft SQL Server failover cluster 1 เลข
      • ทุกไอพีต้องมีชื่อใน domain .psu.ac.th
    • Shared Storage
      • iSCSI (ในเอกสารนี้เลือกใช้ iSCSI)
        • IP address สำหรับ  iSCSI Server
      • หากมี shared storage อื่นๆ สามารถใช้ได้เลย
    • Domain Account
      • ติดต่อศูนย์คอมพิวเตอร์เพื่อขอสิทธิ์จอยโดเมน

    มีครบแล้วก็เริ่มกันเลย

    • Shared Storage (iSCSI) (Windows Server 2012R2 Data center)
      • เข้าระบบด้วยบัญชี administrator
      • คลิกปุ่ม start พิมพ์ windows update เพื่อเปิดโปรแกรม windows update ให้ update ทุกอย่างให้เรียบร้อย (restart หากต้อง restart หากรีสตาร์ทกลับมาแล้วเข้าระบบด้วยผู้ใช้ administrator)
      • เปิด Server Manager (ไอคอนแรกข้างปุ่ม start , โดยปกติจะถูกเรียกใช้งานโดยอัตโนมัติ)
      • ที่ Dashboard มองไปที่ QUICK START ข้อ 2 Add roles and features คลิก
      • คลิก Next เลือก Role-based of feature-based installation คลิก Next เลือก Select a server from the server pool เลือกเครื่องของเราในช่องด้านล่างคลิก Next มองหา File and Storage Services คลิกสามเหลี่ยมก็จะมี File and iSCSI Services ทำเครื่องหมายถูกหน้าข้อความ iSCSI Target Server จะมีหน้าต่าง สรุปการติดตั้งขึ้นมา คลิก Add Features คลิก Next ไปเรื่อยๆ จนเจอคำว่า Install คลิก Install รอจนกว่าจะติดตั้งเสร็จ (Installation succeeded on …) คลิก Close
      • กลับมาที่ Server Manager คลิกที่ File and Storage Services คลิก iSCSI มองไปด้านขวาจะปุ่ม TASKS
      • ให้คลิก TASKS เลือก New iSCSI Virtual Disk… จะมีหน้าต่าง New iSCSI Virtual Disk Wizard เลือก Type a custom path ให้ Browse… ไปยังที่เก็บไฟล์ที่ต้องการ คลิก Next จะเป็นหน้าที่ให้ตั้งชื่อไฟล์ ตั้งชื่อแล้วคลิก Next ระบุขนาดที่ต้องการที่นี้ให้ใส่ไป 5GB Fixed size คลิก Next เลือก New iSCSI target คลิก Next ตั้งชื่อสำหรับ shared disk ลูกนี้ คลิก Next ในหน้า Access Servers คลิกปุ่ม Add… เลือก Enter a value for the selectd type ให้เลือกเป็น DNS Name หรือ IP address ก็ได้แล้วใส่เครื่องทั้งสองเครื่องที่จะทำ Cluster ลงไป (ทำทีละเครื่อง) เมื่อใส่ครบแล้วคลิก Next 2 ครั้ง คลิก Create คลิก Close
      • ทำซ้ำข้อที่แล้วอีกครั้งโดยขนาดดิสก์เป็น 10GB เปลี่ยนตรงขั้นตอน iSCSI Target ให้เลือก Existing iSCSI target: คลิก Next แล้วคลิก Create คลิก Close
    • Join Domain (Windows Server 2012R2 Data center)
      • ล็อคอินเข้าระบบด้วยผู้ใช้ administrator
        • คลิกปุ่ม start พิมพ์ windows update เพื่อเปิดโปรแกรม windows update ให้ update ทุกอย่างให้เรียบร้อยทั้ง 2 เครื่อง
        • คลิกขวาที่ปุ่ม start เมนูเลือก system
        • ที่หัวข้อ Computer name, domain, and workgroup settings คลิก Change settings
        • ที่หน้าต่าง System Properties แท็บ Computer Name คลิก Change…
        • Member of  เลือก Domain พิมพ์ psu.ac.th คลิก OK จะมีการให้ยืนยันตัวตนว่ามีสิทธิ์ join domain หรือไม่ รอสักครู่ แล้วจะมีข้อความว่าต้อง restart เครื่อง ให้ restart ได้เลย
        • เมื่อรีสตาร์ทเสร็จแล้ว เข้าระบบด้วยผู้ใช้ administrator
        • เปิด Computer Management โดยคลิกขวาที่ปุ่ม start เลือก Computer Management คลิกที่สามเหลี่ยมหน้าข้อความ Local Users and Groups มองไปช่องทางขวาจะมี Administrators ให้ดับเบิ้ลคลิกเปิดขึ้นมา เลือก PSU\Domain Admins คลิก Remove คลิก Add… ใส่ Username ของเราลงไปคลิก OK ออกมาจนสุด
        • Sign Out ออกจากระบบ
        • Log In ใหม่ด้วย Username ของเราเอง psu\firstname.s
        • ทำเหมือนกันสองเครื่อง
        • จบการ Join Domain
    • ติดตั้ง Microsoft Failover Cluster
      • เข้าระบบด้วยผู้ใช้ Domain ที่เพิ่งเพิ่มเข้าไปในกลุ่ม Administrators
      • ที่ Server Manager ที่เมนู Tools คลิกเลือก iSCSI Initiator คลิก Yes จะได้หน้าต่าง iSCSI Initiator Properties ที่แท็บ Targets ในช่อง Target: ใส่ IP Address ของเครื่อง iSCSI Server คลิก Quick Connect… คลิกเลือก disk คลิก Done ทำเหมือนกันทั้งสองเครื่อง และเพิ่มดิสก์ทั้งสองก้อนเข้าไป
      • ที่ Server Manager คลิก Manage เลือก Add Roles and Features
      • จะได้หน้าต่าง Add Roles and Features Wizard คลิก Next เลือก Role-based or feature-based installation คลิก Next เลือก Server ใน Server Pool (ซึ่งมีอยู่เครื่องเดียว) คลิก Next ในหน้า Server Roles คลิก Next หน้า Features เลือก Failover Clustering คลิก Next จะมีหน้าต่างสรุปการติดตั้งขึ้นมาให้กด Add features แล้วคลิก Next ไปจนเจอคำว่า Install คลิก Install รอไปจนเสร็จ คลิก Close
      • ที่ Sever Manager คลิก All Servers คลิกขวาที่เครื่องในช่อง Server เลือก Failover Cluster Manager
      • ที่ Failover Cluster Manager
      • คลิก Validate Configuration
        • Before You Begin คลิก Next
        • เพิ่มชื่อเครื่องที่เตรียมไว้ทั้งสองเครื่องลงไป โดยพิมพ์ชื่อแล้วคลิก Add ทีละเครื่อง
        • เลือก Run all tests (recommended) ปล่อยให้ทำไปจนเสร็จ
        • ตรวจสอบ Log การ valid อาจมีเตือนเรื่อง network เป็น single points of failure เนื่องจากใช้ internet card เพียงใบเดียว
        • ทำเครื่องหมายถูกหน้าข้อความ Create Cluster Wizard เลือกเครื่องที่จะทำ Cluster กำหนดเลขไอพีสำหรับ Microsoft failover cluster (IP ข้อ 2) กำหนดชื่อ Cluster next ไปจนเสร็จ*
    • ติดตั้ง Microsoft SQL Server Cluster 2016
      • mount แผ่นติดตั้ง Microsoft SQL Server 2016 Server Cal เลือก New SQL Server failover cluster installation ในหน้า Installation
      • แทบจะ Next technology ได้เลยสิ่งที่ต้องกำหนดเพิ่มคือ ชื่อของ Microsoft SQL Server failover cluster และ IP address สำหรับ Microsoft SQL Server failover cluster เลือกดิสก์ที่ใช้งานสำหรับ SQL Server ให้เลือก shared disk ลูกที่ 2
      • รอจนเสร็จแล้วให้มาติดตั้งที่เครื่องที่ 2 โดยเลือก add new node และทำเหมือนเดิม
      • เสร็จ
    • จบขอให้สนุก…

    อ้างอิง

    https://msdn.microsoft.com/en-us/library/hh231721(v=sql.130).aspx

    https://blogs.msdn.microsoft.com/clustering/2012/04/06/installing-the-failover-cluster-feature-and-tools-in-windows-server-2012/

  • การตั้งค่า MaxRequestWorkers บน Apache ให้เหมาะสมกับจำนวนผู้ใช้

    ปัญหาของ PSU Webmail ในช่วง 9-15 สิงหาคม 2559 ที่ผ่านมา คือ เมื่อเริ่มเข้าสู่เวลาราชการ ในวันทำการ พบว่า มีการตอบสนองที่ช้า บางครั้งต้องรอถึง 15-20 วินาที หรือ ผู้ใช้บางท่านแจ้งว่า Timeout ไปเลย หรือไม่ก็ใช้งานไปสักพัก ถูกดีดกลับมาหน้า Login ใหม่

    แต่เมื่อพ้นเวลาราชการ พบว่าการตอบสนองก็เร็วขึ้นดังเดิม รวมถึงในช่วงวันหยุดก็เร็วอย่างที่ควรเป็น

    ขอบคุณทาง NetAdmin ที่ทำระบบตรวจสอบไว้ที่หน้า Data Center เพื่อตรวจจับความเร็วในการตอบสนองบริการ PSU Webmail ด้วย SmokePing ผลที่ได้เป็นดังภาพ

    2559-08-15 16_03_36-SmokePing Latency Page for HTTPS to webmail.psu.ac.th in Data Center at Hat Yai

    จะเห็นว่า มีความหน่วงในการตอบสนอง เฉพาะในวันเวลาราชการเท่านั้น … ทำไม ???

    ทำการตรวจสอบด้วยคำสั่ง

    ps aux |grep apache| wc -l

    เพื่อดูว่า มีจำนวน Apache อยู่กี่ Process พบว่า ในช่วงเวลาที่ระบบหน่วง มี Process เกือบคงที่ที่ 150 แต่ในช่วงที่ระบบทำงานได้เร็ว มีจำนวนประมาณ 50 process

    จากการศึกษา พบว่า Apache2 ที่ใช้ MPM Prefork นั้น จะจำกัดค่า MaxRequestWorkers ไว้ โดยหากไม่กำหนดค่าใดๆจะตั้งไว้ที่ 256 แต่เมื่อตรวจสอบในไฟล์

    /etc/apache2/mods-enabled/mpm_prefork.conf

    พบว่า

    <IfModule mpm_prefork_module>
    StartServers 5
    MinSpareServers 5
    MaxSpareServers 10
    MaxRequestWorkers 150
    MaxConnectionsPerChild 0
    </IfModule>

    ทำให้เพดานของจำนวน Process ไปจำกัดที่ 150 ดังที่ตรวจสอบเบื้องต้น เมื่อมีผู้ใช้มากขึ้นกว่าเดิม จึงทำให้ Process ไม่เพียงพอต่อความต้องการ เป็นผลให้เกิดการหน่วงขึ้น

    จึงทำการแก้ไข MaxRequestWorkers เป็น 256 แล้ว Restart Apache

    ผลทำให้ จำนวน Apache Process ขึ้นไปถึง 200 Process และการตอบสนองเร็วขึ้นตามที่ควรเป็นดังภาพ (หลังเวลา 14:45)

    2559-08-15 16_03_21-SmokePing Latency Page for HTTPS to webmail.psu.ac.th in Data Center at Hat Yai

    ทั้งนี้ การกำหนดจำนวน MaxRequestWorkers นั้น ต้องสัมพันธ์กับ RAM ของ Server ด้วย โดยมีสูตรคร่าวๆ คือ จำนวน RAM ในหน่วย MB หารด้วยขนาดของ Apache Process โดยเฉลี่ย

    เช่น

    มี RAM 4GB = 4 x 1024 = 4096

    ขนาดเฉลี่ย Apache Process = 20

    ดังนั้น MaxRequestWorkers = 4096/20 = 204

    แต่จริงๆแล้ว ควรเผื่อ Memory ไว้ให้ OS และอื่นๆด้วย (อาจจะไม่เต็ม 4096) หากขยับค่า MaxRequestWorkers แล้วยังพบว่า จำนวน Process ยังขึ้นไปเต็มเพดานอยู่ ควรพิจารณาเพิ่ม Memory ด้วย

    ประมาณนี้ครับ

    UPDATE:

    ผลการปรับแก้ไข ทำให้ เวลาในการตอบสนอง จากที่หน่วง 10 วินาที เหลือ เพียง 50 มิลลิวินาที ดังภาพ

    2559-08-17 16_03_42-SmokePing Latency Page for HTTPS to webmail.psu.ac.th in Data Center at Hat Yai

     

  • Bash Bash Bash เต็มไปหมด…

    ไมโครซอฟท์ปล่อยอัพเดต Windows 10 Anniversary Update แล้ว ถึงเวลาลอง bash shell บนวินโดวส์แล้วสิ…

    • ติดตั้ง Windows 10 Anniversary ทำได้สองทาง
      • หากใช้ Windows 10 อยู่แล้วก็ Windows update ได้เลย (รุ่น Professional อาจยังไม่มีให้ update)
      • ต้องการติดตั้ง Windows 10 ใหม่ โหลดที่ https://licensing.psu.ac.th/tag/anniversary/ เลือกเอาเลยจะเอารุ่น Professional หรือ Education (สำหรับนักศึกษาต้องเป็นรุ่น Education)
      • ติดตั้งไปจนเสร็จเรียบร้อย
    • ต้องเชื่อมต่อ Internet ตลอดเวลาที่ติดตั้ง!!
    • คลิกขวาที่ปุ่ม start เลือก Programs and Features
      Programs and Features
    • คลิก Turn Windows Features on or off
      Turn Windows Features on or off
    • เลือก Windows Subsystem for Linux (Beta)
    • เมื่อติดตั้งเสร็จแล้ว ให้เปิด developer mode คลิกที่ start menu แล้วพิมพ์ deve จะได้ดังรูป แล้วเลือก for developers settings
      Start menu
    • ได้ดังภาพเลือก Developer mode
      developer mode
      คลิก Yes
      Developer Mode
    • อาจมีข้อความเตือนให้ restart ก็ restart ให้เรียบร้อย
    • คลิกขวาที่ปุ่ม Start เลือก Command Prompt (Admin)
      CMD
    • พิมพ์ bash
      bash
    • กด y แล้วกด enter
      Download
    • จะเป็นการเริ่ม download รอจนครบ 100%
      Download
    • ตั้ง username และ password
      create user
    • เมื่อตั้งเสร็จเรียบร้อยก็พร้อมใช้งาน
      ready
    • ทุกครั้งที่ต้องการใช้งานให้เรียก bash ได้ที่ปุ่ม start แล้วเลือก Bash on Ubuntu on Windows
      bash on start
    • ทดสอบ ssh
      ssh
    • จบ… ขอให้สนุกครับ
  • การ upgrade PHP to new version on IIS ด้วยวิธีง่ายๆ

    เคยเขียนบทความเกี่ยวกับการ upgrade PHP 5.2 to 5.3 ไปเมื่อปีที่แล้ว (Apache 2.2 + PHP 5.2 + phpMyAdmin on Windows 8.1)

    วันนี้ขอนำเสนอการ upgrade เวอร์ชั่นของ PHP บน IIS (Windows Server 2012 R2) ด้วยวิธีที่แสนจะง่ายดาย

    ***ใครทราบวิธีการแล้วก็ผ่านไปเลยนะคับ ^^ เขียนไว้เผื่อบางท่านที่ยังไม่รู้เนอะ

    ขั้นตอนการ upgrade

    1. check PHP เวอร์ชั่นที่เราใช้ปัจจุบันก่อนว่าเป็นเวอร์ชั่นอะไร ด้วยการสร้างไฟล์ phpinfo.php เก็บไว้ที่ web root แล้วเขียนโค้ดตามนี้

    <?php
    phpinfo();
    ?>

    2. เปิดเว็บ http://localhost/phpinfo.php ในภาพจะเป็น php 5.6.2.2

    001

    3. เปิด IIS manager ขึ้นมา แล้วคลิกที่ Web Platform Installer

    002

    4. พิมพ์คำค้น PHP ในช่องค้นหา ในรูปเราจะติดตั้ง PHP 7.0.7 ให้คลิกที่ปุ่ม Add จากนั้นระบบจะทำการติดตั้ง PHP 7.0.7

    003

    5. เมื่อติดตั้งเสร็จแล้ว ให้คลิก Restart IIS

    004

    6. ตรวจสอบเวอร์ชั่นของ PHP ด้วยการเปิดหน้าเว็บ http://localhost/phpinfo.php ในภาพจะเป็น php 7.0.7 เรียบร้อยแล้ว

    005

    7. เสร็จสิ้นกระบวนการ upgrade PHP to new version

  • Information graphics การใช้ภาพหรือแผ่นภูมิแทนข้อมูลที่จะนำเสนอ

    Information graphics หรือ Infographics เป็นการนำเสนอข้อมูล หรือความรู้ต่างๆโดยการสื่อสารด้วยภาพกราฟิก ซึ่งจะทำให้ผู้รับสื่อเข้าใจและมีความชัดเจนมากขึ้น    ความสามารถในการรับรู้ข้อมูลของมนุษย์ ภาพกราฟิกต่างๆจะดึงดูดความสนใจและความจำได้ดีกว่าข้อความยาวๆหรือต้องอ่านข้อมูล ที่เห็นได้จัดเจนคือ การอ่านข้อความบอกเส้นทางกันการอ่านแผนที่จะให้ผลที่แตกต่างกันอย่างชัดเจน และแน่นอนยุคสมัยของโลก Social อย่าง Facebook Twitter และInstagram ถ้าใครโพสข้อความยาวๆเราก็จะไม่ค่อยสนใจเท่าไรแต่เมื่อโพสภาพสวยๆเมื่อไรจะดึงความสนใจเราได้เยอะมาก

    มาดูการใช้งาน Infographics เพื่อแสดงข้อมูลในรูปแบบต่างๆ

    • ข้อมูลสำคัญทีต้องการให้เป็นจุดสนใจเพียงข้อมูลเดียว
      ควรจะใช้ฟอนต์ที่ใหญ่หรือแปลกตากว่าฟอนต์ทั่วไปหรือมีการเน้นด้วยพื้นหลังที่แตกต่าง ร่วมถึงสามารถใช้ Pictographs หรือ Icon Charts แสดงร้อยละของสิ่งที่สนใจ
      ตัวอย่าง
    1 2
    • ข้อมูลในเชิงเปรียบเทียบ
                        เพื่อให้เห็นความแตกต่างที่เกิดขึ้นกับข้อมูลที่สนใจ โดยมากจะใช้ Bar Chart หรือ Column Chart
      ตัวอย่าง

      top10Social
      ที่มาของภาพ
    • ข้อมูลแบบต่อเนื่องและมีความสัมพันธ์กัน   โดยมากจะแสดงข้อมูลนี้ด้วย Line Chart
      lineCart
    • ข้อมูลแบบไม่ต่อเนื่อง ดูความเป็นไปของข้อมูลที่สนใจ เช่น ความถี่ของผลการประเมิน TOR โดยแยกตามช่วงอายุการทำงานของบุคลากร หรือความสูงของนักเรียนแยกตามช่วงอายุและแยกระหว่างผู้ชายกับผู้หญิงเป็นต้น
      hChart
    • ข้อมูลการเปลี่ยนแปลงตามตัวแปรหรือช่วงเวลา (Trends over Time) สามารถใช้ได้หลายรูปแบบ เช่น Column Chart และเน้นส่วนสนใจ เช่นแสดงร้อยละ หรือใช้รูปแทนข้อมูลช่วงเวลาต่างๆ
      macTimeLine
      ที่มาของภาพ
    • ข้อมูลการกระจายของสิ่งที่สนใจ จะแสดงด้วย bubble chart เช่นความสัมพันธ์ระหว่างความจุปอดกับความสามารถในการกลั่นหายใจของคนแล้วเอาข้อมูลความสัมพันธ์ของแต่ละคนไป วาดกราฟเพื่อดูความสัมพันธ์
      bubbleChart
      ที่มาของภาพ
  • แนวทางการพัฒนา App บนสมาร์ทโฟน

    ถ้าใครเคยพัฒนา app เพื่อให้รองรับหลาย ๆ Platform ทั้ง iOS, Android หรือ Window Phone  ก็คงจะทราบถึงความยากลำบากในการพัฒนา เนื่องจากแต่ละ platform ก็มีวิธีการพัฒนาที่แตกต่างกัน เช่น app ที่รันบน iOS พัฒนาโดยใช้ภาษา Object C, ภาษา Swift ในขณะที่ app ที่รันบน Android พัฒนาขึ้นโดยใช้ภาษา Java และ app ที่รันบน Windows phone ก็พัฒนาขึ้นด้วย .Net Framework จะเห็นว่าแต่ละ Platform ใช้เทคโนโลยีที่ต่างกันอย่างสิ้นเชิง ทำให้การพัฒนา app 1 ตัว ให้รองรับทั้ง 3 platform ดังกล่าวข้างต้น ต้องใช้ต้นทุนค่อนข้างสูง ใช้เวลาในการพัฒนาเยอะ และยุ่งยากในการบำรุงรักษา

    App บนสมาร์ทโฟน สามารถแบ่งออกเป็น 3 ประเภท ดังนี้

    • Native App คือ app ที่เกิดจากการพัฒนาโดยการใช้ SDK (Software Development Kit) ของ OS แต่ละค่าย ทำให้ app ที่พัฒนาขึ้นมีประสิทธิภาพสูง สามารถเรียกใช้งานฟังก์ชันต่าง ๆ เพื่อเข้าถึงหรือควบคุมอุปกรณ์ได้ เช่น ตัวรับสัญญาณ GPS กล้องถ่ายรูป อุปกรณ์สแกนลายนิ้วมือ ที่ติดตั้งมากับสมาร์ทโฟนได้โดยตรง แต่ข้อเสียคือจะสามารถทำงานได้กับ OS เฉพาะค่ายนั้นเท่านั้น
    • Web App เป็น app ที่เข้าถึงได้ด้วยโปรแกรมประเภท Browser ต่าง ๆ ผ่านเครือข่ายคอมพิวเตอร์ เป็นที่นิยม เนื่องจากผู้พัฒนาสามารถอัพเดท หรือบำรุงรักษาได้โดยที่ไม่ต้องติดตั้งบนเครื่องผู้ใช้ ข้อเสียของ app ประเภทนี้คือ ไม่สามารถเขียนโปรแกรมเพื่อเรียกใช้งานฟังก์ชันต่าง ๆ เพื่อเข้าถึงหรือควบคุมอุปกรณ์ต่าง ๆ ของสมาร์ทโฟนได้
    • Hybrid App เป็น app ที่พัฒนาขึ้นโดยนำข้อดีของ app ทั้ง 2 ประเภทข้างต้นมารวมกัน โดยอาจจะมองว่า มันเป็น Web App ที่สามารถเขียนโปรแกรมให้เรียกใช้งานฟังก์ชันเพื่อเข้าถึงหรือควบคุมอุปกรณ์ต่าง ๆ ของสมารทโฟนได้ มีหน้าตาการใช้งานหมือนกับการ Native App แต่พัฒนาโดยใช้ภาษาต่าง ๆ เช่น HTML, CSS, Java Script เป็นต้น เปิดใช้งานด้วย Web viewer ของ OS แต่ละตัวเลย ข้อดีที่เด่นชัดคือ นักพัฒนาสามารถพัฒนา app ขึ้นมาเพียงชุดเดียว แล้ว build ให้มันสามารถรันบน platform ต่าง ๆ ได้ตามต้องการ

    compare app

    รูปที่ 1เปรียบเทียบประสิทธิภาพ ความสามารถในการเขียน App แต่ละแบบ [ที่มา :http://androiddevelopersthai.blogspot.com/]

    การเลือกว่าจะพัฒนา app เป็นแบบไหน ก็ขึ้นอยู่กับความต้องการของผู้ใช้งานเป็นหลัก และเพื่อแก้ปัญหาที่ได้กล่าวไว้ตอนต้น พบว่า Hybrid App สามารถตอบโจทย์ได้เป็นอย่างดี โดยเครื่องมือที่นำมาใช้ในการพัฒนาที่มีประสิทธิภาพมากที่จะแนะนำในบทความนี้คือ Ionic Framework

    Ionic Framework

    Ionic Framework เป็นตัวช่วยในการใช้พัฒนา Hybrid App ที่ทำให้พัฒนา App แค่ครั้งเดียวก็สามารถ Build ให้รันได้ในหลาย Platform ซึ่งเทคโนโลยีที่ใช้ในการพัฒนาเป็นเทคโนโลยีเดียวกันกับที่ใช้ในการพัฒนาเว็บได้แก่ HTML, CSS และ Java Script ทำให้นักพัฒนาเว็บสามารถเรียนรู้วิธีการพัฒนาได้อย่างรวดเร็ว

    ionic_frameworkรูปที่ 2  Ionic Framework [ที่มา : http://blog.prscreative.com]

     

    Ionic Framework เป็น Open Source ที่นักพัฒนาสามารถใช้ในการสร้าง App ของตัวเอง หรือ App เชิงพาณิชย์ก็ได้ มีเว็บไซต์อย่างเป็นทางการคือ http://ionicframework.com

    ตัวอย่าง App ดังๆ ที่ใช้ Ionic ได้แก่ UNIQLO ดังรูป

    uniqlo
    รูปที่ 3 ตัวอย่างหน้าจอ App ของ UNIQLO ที่พัฒนาขึ้นด้วย Ionic [ที่มา :https://itunes.apple.com/th/app/uniqlo-th/id867497451?l=th&mt=8 ]

    สามารถดูตัวอย่าง App ที่พัฒนาด้วย Ionic เพิ่มเติมได้จาก http://showcase.ionicframework.com