Author: grianggrai.n

  • เขียน PHP ใน wordpress

    1. สิ่งที่ต้องมี ไซต์ wordpress และ user ที่สามารถติดตั้งและใช้งาน Plugins ได้ ส่วนใหญ่คือ user ที่มีสิทธิ administrator
    2. ติดตั้ง Plugins ชื่อ PHP Code snippets (จริง ๆ Plugins ที่ทำหน้าที่นี้มีหลายตัว แต่ใช้ตัวนี้มานานแล้ว) แล้วเปิดการใช้งานให้เรียบร้อย

      PHP Code snippets
      PHP Code snippets
    3. เมื่อติดตั้งและเปิดใช้แล้วจะมีเมนู PHP snippets ปรากฏขึ้นที่แถบด้านซ้ายมือ

      PHP snippets
      PHP snippets
    4. เมื่อคลิกที่ PHP snippets จะได้ดังรูป (แต่อันนี้จะมี code ของผู้เขียนอยู่แล้วสาม code)

      PHP snippets
      PHP snippets
    5. คลิก Add snippet เพื่อสร้าง code

      PHP Snippet
      New Code
    6. ใส่ชื่อ code ในช่องแรก และใส่ code PHP ในช่องที่สอง

      PHP snippet
      Coding
    7. คลิก Where there is a shortcode เพื่อให้ code ทำงานเฉพาะหน้าที่มีการระบุ  shortcode แต่หากต้องการให้ code นี้ทำงานทุกหน้าสามารถคลิกที่ Run everywhere และสามารถเขียนคำอธิบายได้ในช่อง  Description

      PHP snippet
      Run at
    8. คลิก Publish เพื่อเปิดการใช้งาน code คลิก snippet เพื่อดูสถานะ ถ้าได้ดังรูปแปลว่า code ถูกเปิดใช้งานแล้ว

      PHP snippet
      Code status activated
    9. ถ้าต้องการปิดไม่ให้ code ทำงานสามารถคลิกปุ่ม Deactivate ได้

      PHP snippet
      Code status deactivated
    10. วิธีเรียกใช้งานให้สร้าง Pages หรือ Posts แล้วนำ shortcode ไปใส่ไว้ shortcode สามารถดูได้ในช่อง  Where use? ตัวอย่าง
    11. จาก code นี้ถ้าเรียกหน้า https://licensing.psu.ac.th/login โดย user ที่ยังไม่ login จะ redirect ไปหน้า login ก่อน
    12. จบขอให้สนุก

     

  • How to install PSU SSL VPN Client ubuntu 18.04

    • เปิด terminal
    • เริ่มด้วยการติดตั้งโปรแกรมที่จำเป็น
      sudo apt install -y openfortivpn
    • สร้างแฟ้ม /home/username/fortivpn.config มีข้อความว่า
      host = vpn2.psu.ac.th
      port = 443
      username = PSU Passport Username
      password = PSU Passport Password
      trusted-cert = 34df1a6bd3705782fd17152de0c4fe0b3e7f31302cbdcf737b113c17a5b9ff09
    • สั่งรันคำสั่ง
      sudo openfortivpn -c fortivpn.config
    • ได้ข้อความประมาณว่า
    • แปลว่าเชื่อมต่อได้แล้ว หากต้องการยกเลิกการเชื่อมต่อให้กด ctrl-c จะได้ข้อความประมาณว่า
    • แปลว่ายกเลิกการเชื่อมต่อแล้ว
    • ต้องเปิด terminal ที่รันคำสั่ง openfortivpn ไว้ตลอดเวลาที่เชื่อมต่อห้ามปิด
    • จบสไตล์คอมมานไลน์ ….

    หากอยากได้ง่ายกว่านี้

    • ติดตั้งโปรแกรม OpenFortiGUI โหลดที่ https://hadler.me/linux/openfortigui/ โดยเลือกโปรแกรมสำหรับ Ubuntu 18.04
    • โหลดมาแล้วติดตั้งด้วยคำสั่ง
      sudo dpkg -i openfortigui_0.6.2-1_bionic_amd64.deb
    • จะมี error message มากมาย ให้ต่อด้วยคำสั่ง
      sudo apt -f -y install
    • เริ่มใช้งานเปิดโปรแกรม openFortiGUI โดยกดที่ปุ่ม Show Applications เลือก openFortiGUI
    • จะได้หน้าต่าง
    • คลิกปุ่ม Add เลือก VPN จะได้
    • กรอกข้อความตามรูป ช่อง username และ password ก็ใส่ PSU Passport ลงไปเสร็จแล้วกด Save
    • ได้ดังรูป
    • เลือก PSU แล้วคลิก Connect ได้ผลดังรูป
    • คลิก x เพื่อปิดหน้าต่างสังเกตว่าจะมีรูป  ที่มุมบนขวา หากจะยกเลิกการเชื่อมต่อ คลิกขวาที่  เลือก PSU เพื่อ dissconnect
    • จบขอให้สนุก…

    ***  จากที่ลองทดสอบพบว่า เมื่อเชื่อมต่อ AIS 4G จะไม่สามารถใช้วิธี OpenFortiGUI ได้ แต่ใช้วิธีคอมมานไลน์ได้ครับ

  • Configuration of TCP/IP with SSL and TLS for Database Connections

    สิ่งที่ต้องเตรียม

    1. Oracle Database Server ในตัวอย่างนี้ใช้ Oracle database บน Oracle Enterprise Linux 7
    2. Oracle Database Client  ในตัวอย่างใช้ Windows Server 2008 R2

    เริ่ม

    • ฝั่ง Server
    • เข้าระบบด้วยบัญชีผู้ใช้ oracle หรือบัญชีที่เป็นเจ้าของ Oracle Database
    • เปิด terminal สร้าง Oracle Wallet ด้วยคำสั่ง
      • mkdir -p /u01/app/oracle/wallet

    • ต่อด้วย
      • orapki wallet create -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123 -auto_login_local

      • โดย -pwd WalletPasswd123 ตัว WalletPasswd123 คือรหัสผ่านที่ใช้ป้องกันการเข้าถึงข้อมูลต่างๆ ใน wallet กฎการตั้งมีอยู่คือ ยาวอย่างน้อย 8 ตัวอักษร ไม่จำกัดความยาว จำเป็นต้องตั้งให้ตัวเลขผสมตัวอักษร
    • สร้าง Certificate และใส่เข้าไปใน wallet ด้วยคำสั่ง
      • orapki wallet add -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123 \
        -dn "CN=`hostname`" -keysize 1024 -self_signed -validity 3650

    • ตรวจสอบด้วยคำสั่ง
      • orapki wallet display -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123

    • ได้ผลลัพธ์ประมาณ
      • Oracle PKI Tool : Version 12.1.0.2
        Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.

        Requested Certificates:
        User Certificates:
        Subject: CN=reis.psu.ac.th
        Trusted Certificates:
        Subject: CN=reis.psu.ac.th

    • Export Certificate เพื่อนำไปใช้กับเครื่อง Oracle Client ด้วยคำสั่ง
      • orapki wallet export -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123 \
        -dn "CN=`hostname`" -cert /tmp/server-certificate.crt

    • ตรวจสอบแฟ้มที่ export ไปด้วยคำสั่ง
      • cat /tmp/server-certificate.crt

    • ได้ผลลัพธ์ประมาณว่า
      • -----BEGIN CERTIFICATE-----
        MIIBoTCCAQoCAQAwDQYJKoZIhvcNAQEEBQAwGTEXMBUGA1UEAxMOcmVpcy5wc3UuYWMudGgwHhcN
        MTgwMTA5MDcyNTA2WhcNMjgwMTA3MDcyNTA2WjAZMRcwFQYDVQQDEw5yZWlzLnBzdS5hYy50aDCB
        nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAj4x2/NviDaTlXuEJt0kZARY5fHiT2SiVX+a18hai
        I0stoUhKKefjOCgB85iuqjIk0rvcGXI0KXkbenTy2t40A+qGxB04mBhCLKaKeIe67BZKR6Zyw1dd
        oaesoaWChC01b+IW1X5WWtC53UxpIZQ4Zktj41sLGUnarIr9+9HFwncCAwEAATANBgkqhkiG9w0B
        AQQFAAOBgQAqSCF2Y8uyM4rSQHUC8MKEl3Ia3NJKnigMOUzDc2fP7grSaoeuQ4NvIntTD+s+IT5Y
        EpLVND4kSHFTwGRq0Py/ig8ybXZCXfHtvNZh7ZGziL/sYt5/8xYi/tOBKwVanBTUaseKIMovtmd7
        UyoOKrX8YBoFsB3UPRLudmFsksXRXw==
        -----END CERTIFICATE-----

    • ฝั่ง Client
    • เข้าระบบด้วยบัญชีผู้ใช้ administrator
    • เปิด cmd แล้วสร้าง wallet ด้วยคำสั่ง
      • mkdir c:\app\oracle\wallet

    สร้าง Certificate ด้วยคำสั่ง

      • orapki wallet add -wallet "c:\app\oracle\wallet" -pwd WalletPasswd123 -dn "CN=%computername%" -keysize 1024 -self_signed -validity 3650

      • โดย WalletPasswd123 คือพาสเวิร์ดที่ใช้ล็อค wallet ไม่จำเป็นต้องเหมือนกับของ Server
    • ตรวจสอบด้วยคำสั่ง
      • orapki wallet display -wallet "c:\app\oracle\wallet" -pwd WalletPasswd123

    • ได้ผลลัพธ์ประมาณว่า
      • Oracle PKI Tool : Version 12.2.0.1.0
        Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved.

        Requested Certificates:
        User Certificates:
        Subject: CN=ENERAZAN
        Trusted Certificates:
        Subject: CN=ENERAZAN

    • Export Certificate เพื่อนำไปใช้กับเครื่อง Oracle Database Server ด้วยคำสั่ง
      • orapki wallet export -wallet "c:\app\oracle\wallet" -pwd WalletPasswd123 -dn "CN=%computername%" -cert c:\client-certificate.crt

    • ตรวจสอบแฟ้มที่ export ไปด้วยคำสั่ง
      • more c:\client-certificate.crt
    • ได้ผลลัพธ์ประมาณว่า
      • -----BEGIN CERTIFICATE-----MIIBmTCCAQICAQAwDQYJKoZIhvcNAQEEBQAwEzERMA8GA1UEAxMIRU5FUkFaQU4wIhgPMDE1NTAxMDkwNzMzNDlaGA8wMTQ1MDEwNzA3MzM0OVowEzERMA8GA1UEAxMIRU5FUkFaQU4wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJHEEnB4kiI82QVyt0/GlrILF9dwd/jVRlgCQkLmLrpF6RKrIUntzvygyVhtTybeaShH751gYvtl1NFxDUWkBnfS5u2DN6ATP2WpNQgGM/skPWZOxoewy6OeeFsDPNUJTsI8+F5DIwtNhZcdQtBexZ/D3ALkSboR87t2Vy8OJpD7AgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAV7xLLslRn2srS4A4Ks1KiuUWI/ackyNK7UiWgWD/by5Vx4Zw+0x3hdLzQllDR2O5Nef9it5WyYWrDQ47RadqMEVVfTGuAqQn47n/t+v24ljwm2yZ36Tj2lDVaFbE/ZtRyzPKgIwUy6RIt9XVX39vXFJVaENCHzZ0R3hs2bx1K3o=-----END CERTIFICATE-----

    • ทำการส่งไฟล์ certificate แลกกันระหว่าง Server กับ Client โดยใช้วิธีการที่ชื่นชอบของแต่คน เมื่อแลกไฟล์กันเสร็จแล้ว
    • ฝั่ง Server import certificate ด้วยคำสั่ง
      • orapki wallet add -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123 \ -trusted_cert -cert /tmp/client-certificate.crt

    • สามารถตรวจสอบด้วยคำสั่ง
      • orapki wallet display -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123

    • ได้ผลลัพธ์ประมาณ
      • Oracle PKI Tool : Version 12.1.0.2
        Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.

        Requested Certificates:
        User Certificates:
        Subject: CN=reis.psu.ac.th
        Trusted Certificates:
        Subject: CN=ENERAZAN
        Subject: CN=reis.psu.ac.th

    • ฝั่ง Client import certificatae ด้วยคำสั่ง
      • orapki wallet add -wallet "c:\app\oracle\wallet" -pwd WalletPasswd123 -trusted_cert -cert c:\server-certificate.crt

    • สามารถตรวจสอบด้วยคำสั่ง
      • orapki wallet display -wallet “c:\app\oracle\wallet” -pwd WalletPasswd123
    • ได้ผลลัพธ์ประมาณว่า
      • Oracle PKI Tool : Version 12.2.0.1.0
        Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved.

        Requested Certificates:
        User Certificates:
        Subject: CN=ENERAZAN
        Trusted Certificates:
        Subject: CN=reis.psu.ac.th
        Subject: CN=ENERAZAN

    • ฝั่ง Server แก้ไขแฟ้ม $ORACLE_HOME/network/admin/sqlnet.ora ด้วย editor ที่ชื่นชอบ
      • เพิ่มคำสั่งต่อไปนี้
      • WALLET_LOCATION =
        (SOURCE =
        (METHOD = FILE)
        (METHOD_DATA =
        (DIRECTORY = /u01/app/oracle/wallet)
        )
        )

        SQLNET.AUTHENTICATION_SERVICES = (TCPS,NTS,BEQ)
        SSL_CLIENT_AUTHENTICATION = FALSE
        SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA)

    แก้ไขแฟ้ม $ORACLE_HOME/network/admin/listener.ora

      • เพิ่มข้อความส่วนที่เป็นตัวหนาตามตำแหน่งต่อไปนี้
      • LISTENER =
        (DESCRIPTION_LIST =
        (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = reis.psu.ac.th)(PORT = 1521))
        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
        (ADDRESS = (PROTOCOL = TCPS)(HOST = reis.psu.ac.th)(PORT = 2484))
        )
        )

        SSL_CLIENT_AUTHENTICATION = FALSE

        WALLET_LOCATION =
        (SOURCE =
        (METHOD = FILE)
        (METHOD_DATA =
        (DIRECTORY = /u01/app/oracle/wallet)
        )
        )

    • restart listener ด้วยคำสั่ง
      • lsnrctl stop
      • lsnrctl start
    • ฝั่ง Client แก้ไขแฟ้ม C:\app\client\Administrator\product\12.2.0\client_1\network\admin\sqlnet.ora โดยเพิ่มข้อความต่อไปนี้
      • WALLET_LOCATION =
        (SOURCE =
        (METHOD = FILE)
        (METHOD_DATA =
        (DIRECTORY = c:\app\oracle\wallet)
        )
        )

        SQLNET.AUTHENTICATION_SERVICES = (TCPS,NTS)
        SSL_CLIENT_AUTHENTICATION = FALSE
        SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA)

    • แก้ไขแฟ้ม C:\app\client\Administrator\product\12.2.0\client_1\network\admin\tnsnames.ora เพิ่มข้อความต่อไปนี้
      • REIS_SSL =
        (DESCRIPTION =
        (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCPS)(HOST = reis.psu.ac.th)(PORT = 2484))
        )
        (CONNECT_DATA =
        (SERVICE_NAME = reis.psu.ac.th)
        )
        )

    • ทดสอบใช้งาน
    • ที่ Client พิมพ์คำสั่ง
      • sqlplus scott/tiger@reis_ssl
    • ได้ผลลัพธ์ประมาณว่า
      • SQL*Plus: Release 12.2.0.1.0 Production on Wed Feb 7 16:54:05 2018
        Copyright (c) 1982, 2016, Oracle. All rights reserved.

        Last Successful login time: Wed Feb 07 2018 16:52:50 +07:00

        Connected to:
        Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 – 64bit Production
        With the Partitioning, OLAP, Advanced Analytics and Real Application Testing opt
        ions

        SQL>

    • หรือต่อด้วย SQL Developer ต้องตั้งค่าการเชื่อมต่อเป็นดังภาพ
    • จากภาพเลือก Connection Type เป็น Advanced และใช้ช่อง Custom JDBC URL ใส่เป็น jdbc:oracle:oci:/@reis_ssl
    • เนื่องจากไม่สามารถเชื่อมต่อผ่าน tns ได้ ดังภาพ
    • วิธีเซ็ตค่าแบบนี้ใช้ได้กับ Oracle Database 10G R2 เป็นต้นมา
    • จบขอให้สนุก

    ที่มา:
    https://oracle-base.com/articles/misc/configure-tcpip-with-ssl-and-tls-for-database-connections

  • date นั้นสำคัญไฉน

    ที่ Shell prompt พิมพ์คำสั่ง man date

    ได้อะไรมาไม่รู้เยอะแยะ…

    man date
    man date

    จากคู่มือจะเอารูปแบบวันที่ 12-09-2017 ตัวเลือกที่เกี่ยวข้องได้แก่ %d %D %e %F %g %G %m %y %Y เป็นต้น ลองส่งคำสั่ง

    date +"%d-%m-%Y"

    ได้ผลลัพธ์

    12-09-2017

    ตรงตามที่ต้องการ มาเขียนสคริปต์กันหน่อย อยากได้เมื่อวานทำไง วันนี้เล่น tcsh shell สร้างแฟ้ม date.tcsh ด้วย editor ที่ชื่นชอบมีข้อความว่า

    #!/bin/tcsh -f
    set tday=`date +"%d"`
    set tmonth=`date +"%m"`
    set tyear=`date +"%Y"`
    echo "Today is ${tday}-${tmonth}-${tyear}."
    set yday=`expr ${tday} - 1`
    echo "Yesterday was ${yday}-${tmonth}-${tyear}."

    ทดสอบสคริปต์ด้วยคำสั่ง

    tcsh date.tcsh

    ไม่อยากพิมพ์ tcsh ทุกครั้งเพิ่ม execution bit ด้วยคำสั่ง

    chmod +x date.tcsh

    เรียกใช้ได้โดยพิมพ์

    ./date.tcsh (อ่านว่า จุด-ทับ-เดต-จุด-ที-ซี-เอส-เอช)

    ผลลัพธ์ที่ได้

    Today is 12-09-2017.
    Yesterday was 11-09-2017.

    อยากได้เมื่อวานทำไมมันยากอย่างนี้ ฮา… ซึ่งเมื่อกลับไปอ่านคู่มือ (man date) ให้ดี..อีกครั้งจะพบว่ามีตัวเลือก

    -d, –date=STRING
    display time described by STRING, not ‘now’

    และเมื่่อเลื่อนลงมาล่างสุดจะพบว่า

    DATE STRING
    The –date=STRING is a mostly free format human readable date string such as “Sun, 29 Feb 2004 16:21:42 -0800” or
    “2004-02-29 16:21:42” or even “next Thursday”. A date string may contain items indicating calendar date, time of day,
    time zone, day of week, relative time, relative date, and numbers. An empty string indicates the beginning of the day.
    The date string format is more complex than is easily documented here but is fully described in the info documentation.

    โอ้ววว มันเขียนไว้หมดแล้ว…

    เขียนใหม่ได้ว่า
    date -d yesterday

    ได้ผลลัพธ์

    Mon Sep 11 21:43:51 +07 2017

    เปลี่ยนให้ผลลัพธ์ออกมาในรูปแบบที่ต้องการได้ด้วยคำสั่ง

    date -d yesterday +"%d-%m-%Y"

    ก็จะได้ผลลัพธ์ว่า

    11-09-2017

    แก้สคริปต์ date.tcsh

    #!/bin/tcsh -f
    set tday=`date -d today +"%d-%m-%Y"`
    set yday=`date -d yesterday +"%d-%m-%Y"`
    echo "Today is ${tday}."
    echo "Yesterday was ${yday}."

    เจ็บมาเท่าไหร่แล้วกับคำว่าไม่อ่านเอกสาร….

    ยังใส่ข้อความอื่นๆ แทน string ได้เช่น
    date -d 'tomorrow'
    date -d '-1 days ago'
    date -d '200 days'
    date -d '1000 weeks'
    date -d '30 months'
    date -d '300 years'

    เรื่องนี้สอนให้รู้ว่า บางทีเอกสารก็มีให้หมดแล้ว ไม่ต้องทำเองก็ด้ายยยยย….

    จบขอให้สนุก

    man date
    ค้นเพิ่มเติม https://www.cyberciti.biz/tips/linux-unix-get-yesterdays-tomorrows-date.html

  • Fixed : KU$_RADM_FPTM_VIEW in invalid status

    • ฐานข้อมูลที่จะพบปัญหานี้ Oracle Database 12c Enterprise Edition Release 12.1.0.2.0
    • OS เป็น CentOS 7.3 หรือ Oracle Enterprise Linux 7.3
    • ปัญหานี้ข้อสำคัญทำให้ export ข้อมูลไม่ได้ คือไม่สามารถสำรองข้อมูลได้
    • เข้าระบบด้วยผู้ใช้ oracle สร้างแฟ้ม fix.sql ด้วยคำสั่ง

    cat >>fix.sql<<EOF
    CREATE OR REPLACE NONEDITIONABLE TYPE "SYS"."KU$_RADM_FPTM_T" as object
    (
    vers_major char(1), /* UDT major version # */
    vers_minor char(1), /* UDT minor version # */
    numbercol number, /* number */
    binfloatcol binary_float, /* binary float */
    bindoublecol binary_double, /* binary double */
    charcol char(1), /* fixed-size character */
    varcharcol varchar2(1), /* variable-size character */
    ncharcol nchar(1), /* fixed-size national character */
    nvarcharcol nvarchar2(1), /* variable-size national character */
    datecol date, /* date */
    ts_col timestamp, /* timestamp */
    tswtz_col timestamp with time zone, /* timestamp with time zone */
    fpver number /* version of default fixed point values */
    )
    /

    CREATE OR REPLACE FORCE NONEDITIONABLE VIEW "SYS"."KU$_RADM_FPTM_VIEW" OF "SYS"."KU$_RADM_FPTM_T"
    WITH OBJECT IDENTIFIER (fpver) AS
    select '1','0',
    numbercol, binfloatcol, bindoublecol,
    charcol, varcharcol, ncharcol, nvarcharcol,
    datecol,ts_col,tswtz_col, fpver
    from sys.radm_fptm$
    where fpver=1
    /
    EOF

    • เชื่อมต่อกับฐานข้อมูลด้วย sqlplus ด้วยบัญชีผู้ใช้ / as sysdba

    • ที่ prompt SQL> พิมพ์คำสั่ง @/home/oracle/fix.sql
    • ก็จะแก้ปัญหาได้
    • จบ
    • ขอให้สนุก

    ที่มา
    เว็บโดนปิดไปแล้ว

  • Oracle MySQL Cluster :- The shared-nothing architecture (Manual Installation)

    1. สิ่งที่ต้องเตรียม ได้แก่ Ubuntu Server 16.04 (รุ่น x86_64 architecture) จำนวนอย่างน้อย 4 เครื่อง (แต่ควรอย่างน้อย 6 เครื่อง), IP Address 4 IP, Software MySQL Cluster โหลดที่ https://edelivery.oracle.com/ (ต้องสมัครสมาชิกให้เรียบร้อยก่อน) ใช้คำค้นว่า MySQL Cluster (จะมีรุ่น 7.5.5 ให้โหลด) โดยไฟล์ที่ใช้งานชื่อว่า V840854-01.zip MySQL Cluster 7.5.5 TAR for Generic Linux (glibc2.5) x86 (64bit)

    2. 4 เครื่องประกอบด้วยอะไรบ้าง
      2 x data nodes เปลี่ยน IP ให้ตรงกับที่ใช้งาน
      192.168.106.32  Data-node1
      192.168.106.33  Data-node2
      1 x SQL/NoSQL Application Node
      192.168.106.42  SQL-Node
      1 x Management Node
      192.168.106.40  Management-node
    3. เริ่มที่ Management Node
      1. ssh 192.168.106.40 -l sudo_user (user ที่เรียกใช้คำสั่ง sudo ได้)
      2. คลายแฟ้ม V840854-01.zip ด้วยคำสั่ง
        unzip V840854-01.zip (อาจต้องติดตั้งเพิ่มเติมด้วยคำสั่ง sudo apt install unzip)
      3. จะได้แฟ้ม  mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64.tar.gz คลายแฟ้ม mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64.tar.gz ด้วยคำสั่ง
        tar zxvf mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64.tar.gz
      4. เปลี่่ยนชื่อ mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64 เป็น mysql
        mv mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64 mysql
      5. คัดลอกแฟ้ม mysql/bin/ndb_mgmd และ mysql/bin/ndb_mgm ไปไว้ที่ /usr/local/bin
        cp mysql/bin/ndb_mgm* /usr/local/bin/
      6. สร้างโฟลเดอร์ /var/lib/mysql-cluster และสร้างแฟ้ม /var/lib/mysql-cluster/config.ini
        sudo mkdir -p /var/lib/mysql-cluster/
      7. เพื่อเป็นการบอก Management node ว่า Data Node และ SQL Node มีใครบ้าง ให้สร้าง config.ini ไว้ที่ /var/lib/mysql-cluster ด้วยคำสั่ง
        cat<< EOF | sudo tee /var/lib/mysql-cluster/config.ini
        เพิ่มข้อความต่อไปนี้ลงไป
        [ndbd default]
        NoOfReplicas=2
        DataMemory=80M
        IndexMemory=18M
        [mysqld default]
        [ndb_mgmd default]
        [tcp default]
        # Cluster Control / Management node
        [ndb_mgmd]
        hostname=192.168.106.40# Data Node 1
        [ndbd]
        hostname=192.168.106.32
        DataDir= /var/lib/mysql-cluster# Data Node 2
        [ndbd]
        HostName=192.168.106.33
        DataDir=/var/lib/mysql-cluster# SQL Node
        [mysqld]
        hostname=192.168.106.42

        # If you to add new SQL Node
        [mysqld]

        EOF

      8. เพิ่มข้อความต่อไปนี้ในแฟ้ม /etc/rc.local
        /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster/
        โดยเพิ่มให้อยู่บรรทัดก่อนคำว่า exit 0 ตัวอย่าง /etc/rc.local
        #!/bin/sh -e
        #
        # rc.local
        #
        # This script is executed at the end of each multiuser runlevel.
        # Make sure that the script will "exit 0" on success or any other
        # value on error.
        #
        # In order to enable or disable this script just change the execution
        # bits.
        #
        # By default this script does nothing.
        ndb_mgmd -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster/
        exit 0
      9. สั่งคำสั่ง
        sudo ndb_mgmd -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster/
        ต้องเห็นข้อความว่า MySQL Cluster Management Server mysql-5.7.17 ndb-7.5.5 แปลว่า management node ทำงานแล้ว
      10. สามารถตรวจสอบด้วยคำสั่งอื่นๆ
        netstat -plntu
        ได้ผลดังภาพ สังเกตุบรรทัดที่เขียนว่า tcp 0 0 0.0.0.0:1186 แปลว่า management node ทำงานแล้ว
      11. สามารถทำซ้ำได้อีกเครื่อง (ไม่จำกัด) แต่ในตัวอย่างนี้มีเพียงเครื่องเดียว
      12. ส่งแฟ้ม mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64.tar.gz ให้ SQL node
        cd
        scp mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64.tar.gz sudo_user@192.168.106.42
    4. ติดตั้ง SQL Node
      1. ssh 192.168.106.42 -l sudo_user (User ที่สามารถเรียกใช้คำสั่ง sudo ได้)
      2. ติดตั้ง Package ที่จำเป็น
        sudo apt install libaio1
      3. สร้าง user  และ group
        sudo groupadd mysql
        sudo useradd -g mysql mysql
      4. คลายแฟ้ม mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64.tar.gz ด้วยคำสั่ง
        tar zxvf mysql-cluster-advanced-7.5.5-เพิ่มข้อความต่อไปนี้ในแฟ้ม /etc/rc.local
        /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster/
        โดยเพิ่มให้อยู่บรรทัดก่อนคำว่า exit 0 ตัวอย่าง /etc/rc.locallinux-glibc2.5-x86_64.tar.gz
      5. เปลี่่ยนชื่อ mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64 เป็น mysql
        mv mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64 mysql
      6. ย้าย mysql ไปที่ /usr/local/ ด้วยคำสั่ง
        sudo mv mysql /usr/local
      7. สร้างโฟลเดอร์และสั่งคำสั่งต่อไปนี้
        sudo mkdir /usr/local/mysql/data
        sudo mkdir /var/lib/mysql-files
        sudo chown mysql:mysql /var/lib/mysql-files
        sudo chown mysql:mysql /usr/local/mysql/data
      8. สร้างแฟ้ม /etc/my.cnf ด้วยคำสั่ง
        cat << EOF | sudo tee /etc/my.cnf
        เพิ่มข้อความต่อไปนี้ลงไป
        # MySQL Config
        [mysqld]
        datadir=/usr/local/mysql/data
        socket=/tmp/mysql.sock
        user=mysql# Run ndb storage engine
        ndbcluster
        # IP address management node
        ndb-connectstring=192.168.106.40[mysql_cluster]
        # IP address management node
        ndb-connectstring=192.168.106.40# MySQL Pid and Log
        [mysqld_safe]
        log-error=/var/log/mysqld.log
        pid-file=/var/run/mysqld/mysqld.pid
        EOF
      9. สั่งคำสั่งต่อไปนี้เพื่อเตรียมฐานข้อมูล ในขั้นตอนนี้จะมีการสร้าง passwd ของ root ให้ด้วยโดยอัตโนมัติ  *จดไว้ด้วย*
        sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data
      10. เพื่อให้ตัวควบคุมฐานข้อมูลทำงานอัตโนมัติสั่งคำสั่งต่อไปนี้
        sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
        sudo systemctl enable mysqld.service
        sudo systemctl start mysqld
      11. สามารถทำซ้ำได้อีกเครื่อง (ไม่จำกัด) แต่ในตัวอย่างนี้มี SQL Node เพียงเครื่องเดียว
      12. ส่งแฟ้ม mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64.tar.gz ให้ SQL node
        cd
        scp mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64.tar.gz sudo_user@192.168.106.32
    5. ติดตั้ง Data Node
      1. ssh sudo_user@192.168.106.32  (sudo_user คือ user ที่เรียกใช้คำสั่ง sudo ได้)
      2. สร้างแฟ้ม /etc/my.cnf ด้วยคำสั่ง
        cat << EOF | sudo tee /etc/my.cnf
        เพิ่มข้อความต่อไปนี้เข้าไป
        # MySQL Config
        [mysqld]
        datadir=/usr/local/mysql/data
        socket=/tmp/mysql.sock
        user=mysql# Run ndb storage engine
        ndbcluster
        # IP address management node
        ndb-connectstring=192.168.106.40[mysql_cluster]
        # IP address management node
        ndb-connectstring=192.168.106.40# MySQL Pid and Log
        [mysqld_safe]
        log-error=/var/log/mysqld.log
        pid-file=/var/run/mysqld/mysqld.pid
        EOF
      3. ติดตั้ง Package ที่จำเป็น
        sudo apt install libaio1
      4. สร้าง user  และ group
        sudo groupadd mysql
        sudo useradd -g mysql mysql
      5. คลายแฟ้ม mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64.tar.gz ด้วยคำสั่ง
        tar zxvf mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64.tar.gz
      6. เปลี่่ยนชื่อ mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64 เป็น mysql
        mv mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64 mysql
      7. ย้าย mysql ไปที่ /usr/local/ ด้วยคำสั่ง
        sudo mv mysql /usr/local
      8. สร้างโฟลเดอร์และสั่งคำสั่งต่อไปนี้
        sudo mkdir /usr/local/mysql/data
        sudo mkdir /var/lib/mysql-files
        sudo mkdir /var/lib/mysql-cluster
        sudo chown mysql:mysql /var/lib/mysql-files
        sudo chown mysql:mysql /usr/local/mysql/data
      9. สั่ง start service ด้วยคำสั่ง
        sudo  /usr/local/mysql/bin/ndbd
      10. เพิ่มข้อความต่อไปนี้ในแฟ้ม /etc/rc.local
        /usr/local/mysql/bin/ndbd โดยเพิ่มให้อยู่บรรทัดก่อนคำว่า exit 0
        ตัวอย่าง /etc/rc.local
        #!/bin/sh -e
        #
        # rc.local
        #
        # This script is executed at the end of each multiuser runlevel.
        # Make sure that the script will "exit 0" on success or any other
        # value on error.
        #
        # In order to enable or disable this script just change the execution
        # bits.
        #
        # By default this script does nothing.
        /usr/local/mysql/bin/ndbd
        exit 0
      11. ทำซ้ำสำหรับ Data Node2 (ไม่จำกัด)
    6. ทดสอบ Cluster
      1. พิมพ์คำสั่ง
        sudo /usr/local/mysql/bin/ndb_mgm
        เมื่อได้ prompt พิมพ์คำว่า show ได้ผลดังภาพ
      2. แปลว่าทำงานถูกต้องแล้ว..
    7. เชื่อมต่อกับ SQL Node เพื่อเปลี่ยนรหัสผ่าน root
      1. ssh sudo_user@192.168.106.42  (sudo_user คือ user ที่เรียกใช้คำสั่ง sudo ได้)
      2. พิมพ์คำสั่งต่อไปนี้เพื่อสร้าง link ไปยัง mysql client
        sudo ln -s /usr/local/mysql/bin/mysql /usr/bin
      3. เรียกใช้งาน mysql
        mysql -u root -p
        ใส่ passwd ที่จดไว้ในข้อ 4 ข้อย่อย 9 แล้วเปลี่ยนใหม่ด้วยคำสั่ง
        ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘newPassw0rd’
    8. ทุกครั้งที่จะทำอะไรผ่าน mysql client ต้องติดต่อกับ SQL Node เท่านั้นซึ่งตามตัวอย่างนี้มีเพียงเครื่องเดียวจึงไม่มีการทำ replicate data ใดๆ ทั้งสิ้นจำเป็นต้องเพิ่ม SQL Node เข้าไปอีก
    9. จบ.. ขอให้สนุกครับ

    อ้างอิง

    https://www.howtoforge.com/tutorial/how-to-install-a-mysql-cluster-on-ubuntu-16-04/

    https://medium.com/@ophasnoname_44358/mysql-cluster-7-5-5-on-ubuntu-16-04-step-by-step-9132cf76d5b8

     

  • 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/