Day: April 12, 2017

  • 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

     

  • pGina fork 3.2.4.1 configuration

    ในตอนที่แล้วได้พูดถึงว่า pGina fork คืออะไรไปแล้ว ในครั้งนี้จะพูดถึงการตั้งค่าสำหรับทำเป็น Windows Authentication ในเครื่องคอมที่เป็น Windows 10 ผมได้ทำ screen capture มาเฉพาะที่ผมได้ใช้งาน ซึ่งก็คือ Local Machine, RADIUS plugin, Single User plugin และ LDAP plugin ครับ ตามดูกันมานะครับ

    หน้าแรกคือแท็บ General จะแสดงให้เห็นว่าโปรแกรมพร้อมทำงาน ให้ดูที่ข้อความที่แสดงเป็นสีเขียวใต้ข้อความ pGina Service status

    และตัวเลือกที่ผมเลือกใช้คือ Use original username to unlock computer (เพราะว่าผมจะใช้ Single User plugin ร่วมด้วย)

    แท็บถัดไปคือ แท็บ Plugin Selection อันแรกที่จะใช้คือ Local Machine คือ user ที่สร้างขึ้นภายใน Windows นั่นเอง สังเกตจะมีตัวเลือกที่ Authentication และ Gateway

    แก้ไขรูปภาพ Local Machine Plugin ต้อง ติ๊ก Notification ด้วย จึงจะมีผลกับ option Remove account and profile after logout

    จากนั้นให้คลิกปุ่ม Configure จะได้ค่าดีฟอลต์ ดังรูปข้างล่างนี้

    ผมจะใช้ค่าตัวเลือก Remove account and profile after logout when account does not exist prior to logon เพื่อที่ไม่ต้องเก็บ user profile ที่เป็น user จาก user database ภายนอก เช่น จาก RADIUS server เป็นต้น และ หากต้องการให้ user นั้นมีสิทธิมากกว่า User ทั่วไป ก็ตั้ง Mandatory Group เช่น ตั้งเป็น Administrators เป็นต้น

    ต่อไปก็มาถึง RADIUS plugin เลือก Authentication และ Notification จากนั้นคลิกปุ่ม Configure

    จะได้ค่าดีฟอลต์ ดังรูป

    ผมจะเลือกใช้และใส่ค่าต่าง ๆ เหล่านี้ครับ

    เลือก Enable Authentication เพื่อสอบถาม username/password

    เลือก Enable Accounting เพื่อส่งข้อมูลบันทึกค่า Acct-Status-Type ไปยัง RADIUS Server

    แล้วระบุ Server IP และ Shared Secret ที่จะต้องตรงกันกับที่ระบุอยู่ใน config ที่ RADIUS server เช่น FreeRADIUS จะอยู่ในไฟล์ /etc/freeradius/clients.conf เป็นต้น

    (13 ก.ค. 2561) เลือก Called-Station-ID ด้วย หากต้องการเลข MAC Address เก็บด้วยนอกจากเก็บ IP

    (10 ก.ค. 2561) พบว่าจำเป็นต้องเลือก Accounting Options หัวข้อ Send Interim Updates เพื่อให้มีการส่งค่า accounting ได้ (โดยใช้ค่า Send update every 900 seconds ตามที่เป็นค่า default)

    แล้วระบุ IP Address Suggestion เช่น 192.168.1. หมายถึงระบุว่าจะใช้ข้อมูลของ network นี้ เพราะว่าในเครื่องอาจมีการติดตั้งซอฟต์แวร์ที่จำลอง network interface เพิ่มขึ้นมาอีกอัน เป็นต้น

    ส่วนค่าอื่น ๆ ปล่อยไว้ตามเดิม

    ต่อไปก็เป็น Single User plugin ที่เราจะใช้เพื่อให้เป็น Windows User Profile หลักของ user ทุกคนที่มาจาก RADIUS plugin หรือ LDAP plugin จะทำให้เมื่อเป็น User ที่ไม่เคยเข้าใช้เครื่องนี้มาก่อน จะเข้าได้อย่างรวดเร็วกว่าการที่จะให้ Windows สร้าง new user profile

    ให้คลิกที่ Gateway แล้วคลิกปุ่ม Configure จะได้ค่าดีฟอลต์ ดังรูป

    ให้ใส่ Username ที่ได้สร้างไว้ใน Windows ตัวอย่างเช่น ผมสร้าง user ชื่อ labuser ไว้ มี password คือ 123456 เป็นต้น ตรงค่า Domain ไม่ได้แก้ไข แล้วไปลอกตัวเลข RADIUS plugin (หากใช้) หรือ LDAP plugin (หากใช้) มาใส่ โดยให้คลิกเลือก Only substute if any แล้วคลิกช่องว่าง เพื่อวางตัวเลข ดังรูป

    ถัดไปคือแท็บ Plugin Order ผมไม่ได้แก้ไขใด ๆ คงค่าเดิมไว้

    ตอนนี้ก็ได้เวลาทดสอบด้วยแท็บ Simulation

    ทดสอบใส่ username และ password มันจะตรวจสอบ ทุก ๆ plugin ที่มี แล้วแสดงค่าสุดท้าย(ในช่องด้านขวา) Final User Data ที่ใช้ในการเข้าใช้ Windows หากได้ผลลัพธ์แบบนี้ ก็ถือได้ว่า ถูกต้อง

    หรือแบบนี้ก็ถูกต้อง แม้ว่าจะมีข้อความบนแถบสีแดงในบรรทัด Local Machine plugin และเป็นค่า False ก็แสดงว่า user คนนี้ไม่เคยเข้าใช้เครื่องนี้มาก่อน 

    แต่หากเราจะเลือกใช้ LDAP plugin แทน RADIUS plugin ก็กลับไปที่แท็บ Plugin Selection แล้วเลือก LDAP plugin และคลิกเลือก Authentication อย่างเดียว จากนั้นคลิกปุ่ม Configure จะได้ค่าดีฟอลต์ ดังรูป

    ที่ผมทดสอบใช้งานกับ LDAPS ที่ติดตั้งไว้ที่เครื่อง Microsoft AD ผมใส่ค่าในช่องต่าง ๆ ดังรูป

    LDAP Host(s) ใส่ได้มากกว่า 1 ชื่อ เว้นช่องว่างระหว่างชื่อ

    LDAP Post ใช้ 636 และเลือก Use SSL

    สำหรับ Search DN และ Search Password จะได้จากผู้ดูแล Microsoft AD ของหน่วยงานให้กับเรามาครับ

    ไม่เลือก Allow Empty Passwords

    เลือก Search for DN และใส่ค่าในช่อง Search Filter และ Search Context(s) ตามข้อมูลที่ได้รับจากผู้ดูแล Microsoft AD ของท่าน

    แล้วหากต้องการใช้ Single User plugin ด้วยก็ให้นำ UID ของ LDAP plugin (ดูที่แท็บ Plugin Selection ที่คอลัมน์ขวาสุดของรายการ LDAP plugin) ไปคีย์ใส่ในช่องว่างใน Single User plugin ด้วย

    นอกจากนี้ เราจะต้องใช้โปรแกรมประเภท System Restore เพื่อคืนค่ากลับเหมือนเดิม เมื่อ User ได้ Logout/Shutdown ไปแล้ว เพื่อป้องกันมิให้ระบบ Windows เปลี่ยนแปลงจากการใช้งานของ User คนก่อนหน้า

    คิดว่าคงจะได้นำไปใช้งานกันนะครับ

    เพิ่มเติมเนื้อหา

    คัดลอกเนื้อหามาจากเพจเดิม เรื่อง การตั้งค่า pGina และ FreeRADIUS เพื่อส่งค่า RADIUS Accounting ไปยัง Firewall ของมหาวิทยาลัย

    FreeRADIUS Version 2.2.8 แก้ไขไฟล์ /etc/freeradius/proxy.conf อาจด้วยคำสั่ง vi หรือ nano ตามชอบ

    FreeRADIUS Version 3.0.16 แก้ไขไฟล์ /etc/freeradius/3.0/proxy.conf

    เพื่อให้มีค่า realm NULL (ประมาณบรรทัดที่ 672) ที่กำหนดค่า Accounting Port เพียงอย่างเดียวส่งไปยังเครื่อง Firewall

    pgina06
    รูปก่อนแก้ไข

    pgina07
    รูปหลังแก้ไข

    ในรูปตัวอย่างเครื่อง Firewall คือ radius.hatyai.psu.ac.th และต้องรู้ค่า secret ที่ตั้งเพื่อใช้สำหรับเครื่อง FreeRADIUS และ Firewall ในที่นี้คือ yoursecret (อันนี้ต้องมีการติดต่อกับ network administrator ของมหาวิทยาลัยเพื่อร่วมกันตั้งค่านี้)

    และแก้ไขอีกแฟ้มคือ

    FreeRADIUS Version 2.2.8 แก้ไขที่แฟ้ม /etc/freeradius/sites-available/default
    FreeRADIUS Version 3.0.16 แก้ไขที่แฟ้ม /etc/freeradius/3.0/sites-available/default

    ประมาณบรรทัดที่ 325 Pre-accounting ใน module ชื่อ preacct

    preacct {
                   preprocess
                   เพิ่ม
    }

    หากยังไม่มีบรรทัดเหล่านี้ ให้เพิ่มด้วยต่อท้ายบรรทัด preprocess

    # append update for pGina no attribute Framed-IP-Address
    if (NAS-IP-Address != 127.0.0.1) {
           update request {
                 Framed-IP-Address = "%{NAS-IP-Address}"
           }
    }

    แล้ว restart FreeRADIUS ใหม่

    pgina08
    sudo service freeradius stop
    sudo service freeradius start

    จากนั้นรอให้ทางฝั่งผู้ดูแล Firewall ตั้งค่าโปรแกรมที่ดึงข้อมูลที่ FreeRADIUS ของเราส่งไปนำไปใส่ใน Firewall Rule อนุญาตเครื่องไคลเอ็นต์ไม่ต้อง login ซ้ำ