Category: Open Source Software & Freeware
-
มารู้จักกับ CoreOS Linux และวิธีติดตั้ง CoreOS Linux บน Vmware
CoreOS Linux คืออะไร เอาไปใช้ทำอะไร
ในโลกของ Containner ในปัจจุบันมีหลายตัวเลือกให้ใช้งาน แต่การใช้งานที่สมบูรณ์จำเป็นต้องมี 3 อย่างรวมกันคือ Containner (ยกตัวอย่าง Docker,Rocket,Lxd), OS ขนาดเล็ก (ยกตัวอย่าง CoreOS, RancherOS, PhotonOS, Snappy Ubuntu Core, Redhat Project Atomic), และสุดท้ายคือโปรแกรมบริหารจัดการ Containner (ยกตัวอย่าง Kubernete, Admiral, Rancher, Kitematic)
สำหรับ CoreOS[1] เองรองรับการงานทั้งใน Cloud(AWS,Digital Ocean,Azure,Google Cloud Platform) หรือใน Virtualization Platform (ยกตัวอย่าง OpenStack, VMWare, Vagrant) และยังสามารถติดตั้งลงบนเครื่อง Physical (Bare Metal) ได้อีกด้วย
CoreOS มีจุดเด่นอีกอย่างคือระบบ CoreOS Cluster[2] ที่สามารถออกแบบเป็น Cluster ช่วยให้สามารถบริการ Docker Containner กระจายไปยัง Node ต่าง ๆ โดยใช้ etcd ในการจัดการระบบและใช้ fleet ในการสร้าง Docker ที่อยู่บน CoreOS Cluster ซึ่งจะกล่าวต่อไปในบทความต่อไปครับ
การติดตั้ง ติดตั้งได้หลากหลายช่องทาง เขียนแผ่นติดตั้งก็ได้ ผ่าน iso ก็ได้ แต่ถ้าเป็น Image จะไม่มี User (จริง ๆ มีแต่ไม่มี Password) ต้องสร้างด้วยสิ่งที่เรียกว่า cloud-config ซึ่งจำเป็นต้องตั้งค่าก่อนติดตั้ง หรืออีกแบบที่จะขอแนะนำ เป็นวิธีที่ใช้สำหรับ Image ที่เป็น ova ของ Vmware ซึ่งใช้วิธี Bypass เข้า Auto Login Mode[1] แล้วเข้าไป Add User เอาเองภายหลัง (สามารถนำไปประยุกต์กับวิธีติดตั้ง Image แบบอื่นได้เช่นเดียวกัน)การติดตั้ง CoreOS ด้วย OVA Image ผ่าน vSphere Client 6.0[3]
- โหลดไฟล์ติดตั้งจาก https://stable.release.core-os.net/amd64-usr/current/coreos_production_vmware_ova.ova
(ุถ้า Link เปลี่ยนไปหาดูเอาเองนะครับ) - เปิด vSphere Client เลือก deploy OVF Template จากนั้นทำการ Browse File เลือกเครื่อง เลือก DataStore ตามปกติ

- เมื่อถึงหน้าตั้งค่าใส่ Hostname และการตั้งค่า Network เบื้องต้น (ในที่นี้ผมใส่แค่ Hostname และ ชื่อ Network Interface โดยรับ IP จาก DHCP)
- จากนั้นเมื่อสร้างเสร็จและเปิดเครื่องขึ้นมารีบกดปุ่มลูกศรลงในหน้า Grub ป้องกัน Auto Boot (เร็วมาก ถ้าไม่ทันก็ให้รีเครื่องใหม่)
- จากนั้นให้เลือก CoreOS default แล้วกด e และพิมพ์ coreos.autologin (ไม่ต้องพิมพ์ \ ก่อนขึ้นบรรทัดใหม่ ระบบจะใส่ให้เอง)
- จากนั้นกด F10 ก็จะทำการ Boot และ ได้ Prompt สำหรับ adduser ตั้งรหัสผ่านได้เลย ซึ่งจริง ๆ แล้วจะมี User ตั้งต้นอยู่แล้วชื่อ core จะตั้งเฉพาะรหัสผ่าน core ก็ได้เช่นเดียวกัน)

- ทดสอบ Login จาก ssh เครื่องอื่น ก็จะสามารถใช้งานได้แล้ว
ตอนต่อไปจะมาดูกันว่าเราจะสร้าง CoreOS Cluster ได้อย่างไร….
==================================
Reference :
[1] มาเล่น CoreOS กัน : http://thaiopensource.org/%E0%B8%A1%E0%B8%B2%E0%B9%80%E0%B8%A5%E0%B9%88%E0%B8%99-coreos-%E0%B8%81%E0%B8%B1%E0%B8%99/
[2] CoreOS Cluster บน DigitalOcean : http://thaiopensource.org/tag/coreos/
[3] How-To Install and Configure CoreOS OVA Image on ESXi : https://www.vladan.fr/how-to-install-and-configure-coreos-ova-image-on-esxi/
- โหลดไฟล์ติดตั้งจาก https://stable.release.core-os.net/amd64-usr/current/coreos_production_vmware_ova.ova
-
การยืนยันตัวตนและการกำหนดสิทธิ์ Apache UserGrid 2.x
ติดตั้ง UserGrid เสร็จแล้ว ถ้าจะใช้งานต้องทำอย่างไร
จากที่เคยกล่าวไปแล้วเบื้องต้นในวิธีติดตั้ง Apache UserGrid [1][2] จะมี Port สำหรับเรียกด้วย Rest Service คือ port 8080 ส่วนหน้าสำหรับบริหารจัดการจะเป็น 80 ซึ่งเบื้องต้นจะไม่ใช่ ssl ถ้าต้องการความปลอดภัยต้องไปปรับแต่งเพิ่มเติม (ถ้าใช้ ha-proxy ก็ทำ ssl เฉพาะด้านหน้าก็ได้ครับ) โดยอาจจะต้องปรับแต่งที่ตัว Tomcat อ่านเพิ่มเติมได้ที่ https://usergrid.apache.org/docs/installation/ug1-deploy-to-tomcat.html
ในส่วนของบทความต่อไปนี้จะกล่าวถึง Authentication และ Permission ซึ่งรายละเอียดทั้งหมดอยู่ใน Web Usergrid : https://usergrid.apache.org/docs/security-and-auth/app-security.html

โดยระบบยืนยันตัวตนของ UserGrid จะใช้ OAuth 2.0 ซึ่งสรุปสั้น ๆ คือ Client ขอตั๋วเข้าใช้งาน (Token) โดยได้หลังจากยืนยันตัวตน จากนั้น Server ก็จะให้ตั๋วมาเมื่อยืนยันว่าเป็นตัวจริง จากนั้น Client ก็เอาตั๋วไปยื่นขอใช้งานระบบต่าง ๆ ต่อ โดยมีอีก 3 สิ่งที่ต้องรู้ดังนี้
– Groups : คือการกำหนดกลุ่มของ User เพื่อกำหนดสิทธิ์ให้กลุ่ม แทนที่ต้องมากำหนดสิทธิ์ให้ทีละคน
– Roles : คือการกำหนดสิทธิ์ว่าให้เข้าถึง Resource ใดได้บ้าง (User Profile, Application Data) ซึ่งสิ่งนี้จะเป็นตัวที่ต้องกำหนดให้แต่ละคน หรือแต่ละ Group
– Permission : เมื่อมีสิทธิ์ใน Resource นั้นแล้วจะมีสิทธิ์ทำอะไรกับ Resource นั้นบ้าง (Select, Insert, Delete, Update)
สำหรับการจัดการ Group, Role, Permission สามารถจัดการผ่าน Rest API ได้หมด แต่ในตัวอย่างที่จะเสนอจะทำการจัดการผ่าน UserGrid Admin Portal ดังนี้ตัวอย่างการเพิ่ม User ใหม่เข้าไปยัง Application ที่ต้องการ
1) เลือก Application ที่ต้องการ จากนั้นเลือก User และกดปุ่มเพิ่ม

2) กรอกรายละเอียดจากนั้นกด Create (รหัสผ่านเงื่อนไขเยอะจะตั้งยากหน่อย)

ตัวอย่างการเพิ่มบัญชี test01 เข้าไปอยู่ใน Group CCStaffs1) สร้าง Group CCStaffs ขึ้นมาก่อน ดังรูป

2) ทำการเพิ่ม User เข้าไปยัง Groups ซึ่งจริง ๆ แล้วทำได้ 2 แบบ คือ เข้าไปที่ User แล้วเพิ่ม Group หรือ เข้าไปที่ Group แล้วเพิ่ม User ดังรูป

ตัวอย่างการเพิ่มบัญชี test01 เข้าไปอยู่ใน Role Guest
1) เบื้องต้นจะมี Role ให้เลือก 3 Role แต่จะเลือก Role Guest ซึ่งจริง ๆ แล้วเป็นเหมือน Permission Template เพราะเราสามารถกำหนดสิทธิ์เพิ่มเติมนอกเหนือที่ระบุใน Role ได้อีกในภายหลัง (GET=Select,POST=Insert,PUT=Update,DELETE=Delete)

2) ทำการเพิ่ม User เข้าไปยัง Roles ที่ต้องการ

ในส่วนของ DATA เมนูจะใช้ในการจัดการข้อมูล กล่าวง่าย ๆ คือ Database ของ App ซึ่งทั้งระบบ UserGrid จะเก็บเป็น Cassandar NoSQL Database ดังที่กล่าวไว้ในตอนก่อนหน้า โดยการเรียกใช้งาน หรือ Update ข้อมูลจะใช้ในรูปแบบ JSON ซึ่งเราสามารถ สร้าง แก้ไข ลบข้อมูลผ่าน Usergrid Admin Portal หรือจะทำผ่าน Rest API ก็ได้ แต่ถ้าผ่าน Rest API จะได้สิทธิ์ตาม Permission ที่ตั้งไว้
ในส่วนต่อไปจะกล่าวถึงวิธีการเรียก Authentication ผ่าน OAuth2 โดยจะทดสอบเรียกผ่าน curl (จะเรียกผ่าน Postman plugin chrome ก็ได้ครับ ตามสะดวกครับ) ก่อนอื่นมาทราบกันก่อนครับว่าเราจะยืนยันสิทธิ์แบบใดได้บ้าง (Organization->Application->User จากใหญ่ไปย่อย ๆ)
- Application user : ใช้สิทธิ์ตามที่กำหนดในแต่ละ User
- Application client : ให้สิทธิ์ทุกอย่างภายใต้ Application นั้น ๆ
- Organization client : ให้สิทธิ์ทุกอย่างภายใต้ Organization นั้น ๆ
- Admin user : ให้สิทธิ์ทุกอย่างในทุก ๆ Organization และ และ ทุก ๆ Application
ตัวอย่างการเรียกใช้แบบ User Authentication (User Login)
- ทำการเรียกผ่าน curl โดยต้องใส่ username และ password เข้าไปด้วย
curl -X POST "https://api.usergrid.com/my-org/my-app/token" -d '{"grant_type":"password", "username":"john.doe", "password":"testpw"}'- ซึ่งเราสามารถนำ access_token เพื่อใช้ในการเข้าถึง path ต่าง ๆ ได้แล้ว แต่จะมีเวลา แค่ 604800 (24ชม.) สำหรับ token ดังกล่าว (วิธีเปลี่ยนลองถาม Google ดูครับ) ยกตัวอย่างต้องการดู User ทั้งหมดรวมทั้ง Profile ของทั้ง Application สามารถสั่งได้ดังนี้ (สามารถใส่ token ไปใน Header เลยก็ได้ ศึกษาเพิ่มเติมได้ที่ https://usergrid.apache.org/docs/security-and-auth/authenticating-api-requests.html)
curl -X GET "https://api.usergrid.com/my-org/my-app/users?access_token=[access-token]"- จะเห็นว่าระบบฟ้องว่าเราไม่มีสิทธิ์ ซึ่งถ้าเราย้อนกลับไปดู Role Guest จะพบว่าเราไม่มีสิทธิ์ในการ GET ค่า path /users ให้ทำการเพิ่มสิทธิ์ใน Permission ก่อน
- ลองเรียกอีกครั้งจะได้ดังนี้
ตัวอย่างการเรียกใช้แบบ Organization client authentication (ไม่แนะนำให้ใช้กับ Client->Server เหมาะกับ Server->Server มากกว่า)
- จะต่างกับ User Authentication ตรงที่แทนที่จะส่ง User Password แต่จะส่ง Client ID และ Secret เพื่อขอ token แทน โดยจะได้สิทธิ์ทั้งหมดใน Application นั้น ๆ
curl -X POST "https://api.usergrid.com/my-org/my-app/token" -d '{"grant_type":"client_credentials", "client_id":"[client-id]", "client_secret":"[client-secret]"}' - โดยเราสามารถดู Client ID และ Secret ได้ดังนี้
- จากนั้นทดสอบขอ token ดังนี้
สำหรับการ Authentication แบบ Application นั้นค่อนข้างจะยุ่งยากกว่า ยังหาไม่ได้จาก Usergrid Admin Portal ต้องเรียกผ่าน curl ตั้งแต่สร้าง ถ้าใครจะศึกษาเพิ่มเติมหาได้ที่นี่ https://usergrid.apache.org/docs/orgs-and-apps/application.html (ผมขอยอมแพ้ในขั้นนี้)
ในการ Logout จะใช้วิธีการ Revoke token นั่นคือการทำให้ token หมดอายุนั่นเอง สามารถทำได้ง่าย ๆ ดังนี้
curl -X PUT https://api.usergrid.com/your-org/your-app/users/someUser/revoketokensตัวอย่างการเรียกใช้ Rest Service เพื่อ Logout

ขอจบเพียงเท่านี้ก่อนครับ นี่ขนาดยังไม่เอาไปใช้จริงนะครับ (เห็นแล้วจะมีใครอยากใช้ไหมเนี้ย 555)
=================================================
References :
[1] https://sysadmin.psu.ac.th/2017/04/07/usergrid-docker-containner/[2] https://usergrid.apache.org/docs
-
Oracle MySQL Cluster :- The shared-nothing architecture (Manual Installation)
- สิ่งที่ต้องเตรียม ได้แก่ 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)


- 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 - เริ่มที่ Management Node
- ssh 192.168.106.40 -l sudo_user (user ที่เรียกใช้คำสั่ง sudo ได้)
- คลายแฟ้ม V840854-01.zip ด้วยคำสั่ง
unzip V840854-01.zip(อาจต้องติดตั้งเพิ่มเติมด้วยคำสั่งsudo apt install unzip) - จะได้แฟ้ม 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
- เปลี่่ยนชื่อ 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 - คัดลอกแฟ้ม mysql/bin/ndb_mgmd และ mysql/bin/ndb_mgm ไปไว้ที่ /usr/local/bin
cp mysql/bin/ndb_mgm* /usr/local/bin/ - สร้างโฟลเดอร์ /var/lib/mysql-cluster และสร้างแฟ้ม /var/lib/mysql-cluster/config.ini
sudo mkdir -p /var/lib/mysql-cluster/ - เพื่อเป็นการบอก Management node ว่า Data Node และ SQL Node มีใครบ้าง ให้สร้าง config.ini ไว้ที่ /var/lib/mysql-cluster ด้วยคำสั่ง
cat<< EOF | sudo tee /var/lib/mysql-cluster/config.ini
เพิ่มข้อความต่อไปนี้ลงไป
# Cluster Control / Management node[ndbd default]
NoOfReplicas=2
DataMemory=80M
IndexMemory=18M
[mysqld default]
[ndb_mgmd default]
[tcp default]
[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
- เพิ่มข้อความต่อไปนี้ในแฟ้ม /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 - สั่งคำสั่ง
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 ทำงานแล้ว
- สามารถตรวจสอบด้วยคำสั่งอื่นๆ
netstat -plntuได้ผลดังภาพ สังเกตุบรรทัดที่เขียนว่า tcp 0 0 0.0.0.0:1186 แปลว่า management node ทำงานแล้ว

- สามารถทำซ้ำได้อีกเครื่อง (ไม่จำกัด) แต่ในตัวอย่างนี้มีเพียงเครื่องเดียว
- ส่งแฟ้ม
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
- ติดตั้ง SQL Node
- ssh
192.168.106.42-l sudo_user (User ที่สามารถเรียกใช้คำสั่ง sudo ได้) - ติดตั้ง Package ที่จำเป็น
sudo apt install libaio1 - สร้าง user และ group
sudo groupadd mysql
sudo useradd -g mysql mysql คลายแฟ้ม 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- เปลี่่ยนชื่อ 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 - ย้าย mysql ไปที่ /usr/local/ ด้วยคำสั่ง
sudo mv mysql /usr/local - สร้างโฟลเดอร์และสั่งคำสั่งต่อไปนี้
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 - สร้างแฟ้ม /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 - สั่งคำสั่งต่อไปนี้เพื่อเตรียมฐานข้อมูล ในขั้นตอนนี้จะมีการสร้าง passwd ของ root ให้ด้วยโดยอัตโนมัติ *จดไว้ด้วย*
sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data - เพื่อให้ตัวควบคุมฐานข้อมูลทำงานอัตโนมัติสั่งคำสั่งต่อไปนี้
sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
sudo systemctl enable mysqld.service
sudo systemctl start mysqld - สามารถทำซ้ำได้อีกเครื่อง (ไม่จำกัด) แต่ในตัวอย่างนี้มี SQL Node เพียงเครื่องเดียว
- ส่งแฟ้ม
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
- ssh
- ติดตั้ง Data Node
- ssh sudo_user@192.168.106.32 (sudo_user คือ user ที่เรียกใช้คำสั่ง sudo ได้)
- สร้างแฟ้ม /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 - ติดตั้ง Package ที่จำเป็น
sudo apt install libaio1 - สร้าง user และ group
sudo groupadd mysql
sudo useradd -g mysql mysql - คลายแฟ้ม 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 - เปลี่่ยนชื่อ 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 - ย้าย mysql ไปที่ /usr/local/ ด้วยคำสั่ง
sudo mv mysql /usr/local - สร้างโฟลเดอร์และสั่งคำสั่งต่อไปนี้
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 - สั่ง start service ด้วยคำสั่ง
sudo /usr/local/mysql/bin/ndbd - เพิ่มข้อความต่อไปนี้ในแฟ้ม /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 - ทำซ้ำสำหรับ Data Node2 (ไม่จำกัด)
- ทดสอบ Cluster
- พิมพ์คำสั่ง
sudo /usr/local/mysql/bin/ndb_mgm
เมื่อได้ prompt พิมพ์คำว่า show ได้ผลดังภาพ

- แปลว่าทำงานถูกต้องแล้ว..
- พิมพ์คำสั่ง
- เชื่อมต่อกับ SQL Node เพื่อเปลี่ยนรหัสผ่าน root
- ssh sudo_user@192.168.106.42 (sudo_user คือ user ที่เรียกใช้คำสั่ง sudo ได้)
- พิมพ์คำสั่งต่อไปนี้เพื่อสร้าง link ไปยัง mysql client
sudo ln -s /usr/local/mysql/bin/mysql /usr/bin - เรียกใช้งาน mysql
mysql -u root -p
ใส่ passwd ที่จดไว้ในข้อ 4 ข้อย่อย 9 แล้วเปลี่ยนใหม่ด้วยคำสั่ง
ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘newPassw0rd’
- ทุกครั้งที่จะทำอะไรผ่าน mysql client ต้องติดต่อกับ SQL Node เท่านั้นซึ่งตามตัวอย่างนี้มีเพียงเครื่องเดียวจึงไม่มีการทำ replicate data ใดๆ ทั้งสิ้นจำเป็นต้องเพิ่ม SQL Node เข้าไปอีก
- จบ.. ขอให้สนุกครับ
อ้างอิง
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
- สิ่งที่ต้องเตรียม ได้แก่ 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)
-
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
ในรูปตัวอย่างเครื่อง 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 ใหม่

sudo service freeradius stop
sudo service freeradius startจากนั้นรอให้ทางฝั่งผู้ดูแล Firewall ตั้งค่าโปรแกรมที่ดึงข้อมูลที่ FreeRADIUS ของเราส่งไปนำไปใส่ใน Firewall Rule อนุญาตเครื่องไคลเอ็นต์ไม่ต้อง login ซ้ำ
-
pGina fork Open Source Windows Authentication
เราใช้งาน pGina for Windows เวอร์ชั่น 3.1.8.0 มาสักระยะหนึ่งแล้ว คิดว่าแอดมินดูแลห้องคอมคงจะรู้จักกันดีว่าเป็นโปรแกรมสำหรับให้ผู้ใช้งานใส่ username และ password ของ user database ภายนอกได้ เวอร์ชั่นนี้ก็ยังคงใช้งานได้ดีอยู่ครับ แต่ตอนนี้หากเราจะให้ pGina ส่ง RADIUS Accounting ไปยัง RADIUS Server จะทำได้ไม่สมบูรณ์
ผมค้นหาอยู่ว่าจะมีเวอร์ชั่นที่ใหม่กว่ามั้ย ก็พบว่าปัจจุบันนี้ เว็บไซต์เดิม pGina นั้นจะมีถึงเพียงแค่เวอร์ชั่นเก่า
แต่มีคนนำไปทำเพิ่มเติมจาก project เดิม เรียกว่าการ fork project จึงเกิดเป็นเว็บไซต์อีกอันคือ pGina fork
ซึ่งเวอร์ชั่นปัจจุบันที่ผมทดสอบแล้วว่าใช้งานกับ Windows 10 ได้ คือเวอร์ชั่น 3.2.4.1 แม้ว่าจะมีเวอร์ชั่นล่าสุดกว่านี้ (3.9.9.7) แต่ Windows 10 มันแจ้งเตือนว่าเป็นเวอร์ชั่นที่ไม่ได้ระบุ Publisher ที่แน่ชัด Windows 10 จึงเตือนให้อย่าติดตั้ง ผมก็ไม่แน่ใจว่าเพราะเหตุใด สรุปว่า pGina fork ก็คือ pGina ที่มีคนนำไปพัฒนาต่อโดยการ fork จาก project เดิม และมาเป็น project อีกอันที่นี่ http://mutonufoai.github.io/pgina/ หรือ ที่นี่ก็ได้ https://github.com/MutonUfoAI/pgina/
ดาวน์โหลดเวอร์ชั่น 3.2.4.1 ได้ที่นี่ https://github.com/MutonUfoAI/pgina/releases/download/3.2.4.1/pGinaSetup-3.2.4.1.exe
ในตอนถัดไปจะมาพูดถึง pGina fork 3.2.4.1 configuration ครับ
-
ติดตั้ง Piwik บน Ubuntu 16.04
ถ้าอยากมี Web Analytic ใช้เอง ทำไงได้บ้าง
PIWIK [1] เป็นโปรแกรมที่เป็น Opensource ใช้สำหรับทำ Web Analytic โดยมีจุดเด่นใหญ่ ๆ คือมีข้อมูลอยู่ในองค์กรเอง และรองรับมุมมองต่าง ๆ ครบถ้วนตามที่ควรจะมี (จริง ๆ ใช้ Google Analytic ก็ได้ครับ ขอเสนอเป็นทางเลือกในกรณีที่ต้องการอะไรที่ private หน่อย) การติดตั้งลักษณะก็จะเป็นการติดตั้ง mysql (หรือ mariadb), php, apache (หรือ nginx) ดังนี้ครับ
- ทำการติดตั้ง Ubuntu 16.04[2]
- ทำการติดตั้ง nginx+mariadb+php (สามารถติดตั้งเป็น apache+mysql+php[3]ก็ได้ครับ)
MariaDBsudo apt install mariadb-server mariadb-clientNginx
sudo apt install nginxPHP
sudo apt install php-fpm php-mysql php-curl php-gd php-cli php-geoip php-zip php-mbstring php-dom php-xml - ทำการตั้งค่า nginx เพื่อใช้งานกับ php-fpm
sudo vim /etc/php/7.0/fpm/php.iniแก้ไข php config (uncomment cgi.fix_pathinfo และแก้ค่าเป็น 0)
[...] ; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's ; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok ; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting ; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting ; of zero causes PHP to behave as before. Default is 1. You should fix your scripts ; to use SCRIPT_FILENAME rather than PATH_TRANSLATED. ; http://php.net/cgi.fix-pathinfo cgi.fix_pathinfo=0 [...]แก้ไขไฟล์ nginx.conf
sudo vim /etc/nginx/sites-available/defaultตั้งค่า fastcgi_pass ให้เรียกใช้งาน php7.0-fpm
[...] index index.html index.htm index.nginx-debian.html index.php; server_name _; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { include snippets/fastcgi-php.conf; # # # With php7.0-cgi alone: # fastcgi_pass 127.0.0.1:9000; # # With php7.0-fpm: fastcgi_pass unix:/run/php/php7.0-fpm.sock; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } } [...] - ทำการ Restart Service
sudo systemctl restart php7.0-fpm sudo systemctl restart nginx - ทำการตั้งค่า Mariadb ดังนี้
sudo mysql_secure_installationทำการตั้งค่าต่าง ๆ รวมถึง Password ของ root
Set root password? [Y/n] Yใส่ password และ password ใหม่ที่ต้องการ
Remove anonymous users? [Y/n] Y Disallow root login remotely? [Y/n] Y Remove test database and access to it? [Y/n] Y Reload privilege tables now? [Y/n] Y
- ทำการสร้าง User, Password ใหม่ใน Mariadb เพื่อใช้งานกับ Piwik
sudo mysql -u root -pจากนั้นทำการสร้าง DB และกำหนด User, Password ที่ใช้ในการเข้าถึง (piwikuser@ ให้แทนที่ด้วยรหัสผ่าน)
create database piwikdb; create user piwikuser@localhost identified by 'piwikuser@'; grant all privileges on piwikdb.* to piwikuser@localhost identified by 'piwikuser@'; flush privileges; quit;
- ติดตั้งโปรแกรม Piwik
sudo apt install git cd /var/www/html sudo mkdir piwik sudo git clone https://github.com/piwik/piwik . cd /var/www/html/piwik sudo git checkout 3.0.3 sudo git submodule update --init --recursive sudo curl -sS https://getcomposer.org/installer | sudo php sudo php composer.phar install --no-dev sudo chown -R www-data:www-data /var/www/html/piwiksudo find /var/www/html/piwik -name "*.php" -exec chmod 755 {} \; - ทำการแก้ default web path ให้ชี้เข้าไปใน folder /var/www/html/piwik ดังนี้
sudo vim /etc/nginx/sites-available/defaultแก้ไขไฟล์ดังนี้
[...] # include snippets/snakeoil.conf; root /var/www/html/piwik; [...]
- สั่ง Restart Service
sudo systemctl restart nginx - จากนั้นทำการติดตั้งผ่านหน้า Web ดังรูป

- หน้าต่าง system check ตรวจสอบว่าลงครบหรือไม่ กด Next
- หน้าต่าง Database Setup กรอกรายละเอียด Adapter เลือก mysqli จากนั้นกด Next

- หน้าต่าง Creating the Tables ถ้าไม่มีอะไรผิดปกติจะขึ้น Tables created with success กด Next
- หน้าต่าง Super User ให้ตั้งค่าบัญชี รหัสผ่าน ที่ต้องการ Login เข้าใช้งาน

- ตั้งค่า Website

- หน้าต่าง JavaScript Tracking Code จะให้ Code ที่เอาไปวางในหน้าต่าง ๆ ของ WebSite ที่ต้องการ Monitor ซึ่งสามารถกลับมาดูทีหลังได้จาก Menu ให้กด Next
- หน้าต่างสุดท้ายจะเป็นหน้าแสดงความยินดีในการติดตั้งสำเร็จให้กด Continue to PIWIK
- Login เข้าสู่ระบบตาม User, Password ที่ตั้งไว้ในข้อ 14

- วิธีการใช้งานไม่ยากอะไรมากครับ ลองทดสอบใช้งานดูครับ มี Feature มากมายครับ พร้อม plugin มากมายทั้งฟรี และเสียตังค์ แต่สำหรับตัวฟรีติดตั้งหมดแล้วด้วยคำสั่ง git submodule update –init –recursive
เมื่อทำการตั้งค่าอีเมล์เรียบร้อยแล้ว เราสามารถให้ส่งรายงานสรุป Per Site ให้ Admin แต่ละ site ตรวจสอบได้รายวัน และเมื่อมี Version ใหม่ ก็จะมีเมล์แจ้งเช่นกัน โดยวิธีการ Update จะสามารถทำผ่านหน้า Web แต่สุดท้ายจะมีให้รันคำสั่งบน Command Line เพื่อ Upgrade Database แต่จะมีวิธีทำอธิบายไว้ละเอียดอยู่แล้วครับ ขอให้สนุกกับการใช้งานครับปล. ผมข้ามขั้นตอนการตั้งค่า SSL[4] ซึ่งแนะนำให้ตั้งค่าด้วยครับ
=================================================
References :
[1] https://piwik.org/[2] http://opensource.cc.psu.ac.th/%E0%B8%95%E0%B8%B4%E0%B8%94%E0%B8%95%E0%B8%B1%E0%B9%89%E0%B8%87_ubuntu_16.04_server
[3] http://joelradon.com/installing-lamp-on-ubuntu-16-04/
[4] https://www.digicert.com/ssl-certificate-installation-nginx.htm
-
ติดตั้ง UserGrid ด้วย Docker Container
อยากสร้าง App บนมือถือ แต่ไม่อยากยุ่งยากจัดการ User, ทำระบบ Login, ฐานข้อมูล, เขียนเชื่อมต่อฐานข้อมูล แถมต้องใช้ได้กับทุก Platform มีอะไรที่จัดการให้หมดเลยไหม
Apache usergrid [1] เป็นทางออกหนึ่งสำหรับผู้ที่ไม่อยากยุ่งยากในการจัดการในส่วนของ Server-Side Code และเน้นในการเขียน Application ในการใช้งานเพียงอย่างเดียว โดย usergrid ชื่อก็บอกเป็นนัย ๆ อยู่แล้วครับ ว่าเป็นระบบจัดการ User ทั้งการเข้าถึงรวมถึงการกำหนดสิทธิในการใช้งาน แต่จะมีในส่วนของระบบฐานข้อมูล Application ไว้ให้ใช้งานด้วย โดยฐานข้อมูลจะเป็น nosql ซึ่งจะมีเครื่องมือในการ query เบื้องต้น, Rest Service และ SDK สำหรับพัฒนาในอุปกรณ์มือถือ และสามารถใช้ในการพัฒนา Application ด้วยภาษาต่าง ๆ มากมาย สามารถเข้าไปอ่านเพิ่มเติมได้ที่ http://usergrid.apache.org/
สำหรับวิธีลงมีหลายแบบ แต่ที่จะแนะนำจะเป็นการติดตั้งเป็น Container ด้วย Docker[2] ซึ่งสิ่งที่ต้องการใช้งานมีดังนี้
- Java – Ubuntu base image with Oracle JVM : สำหรับใช้ Run ระบบ เท่าที่ติดตั้งไม่ลงตัวนี้ก็สามารถใช้งานได้
- Cassandra : ระบบฐานข้อมูล nosql
- Elasticsearch : ระบบค้นหาแบบ distributed search ลองนึกถึงการ search ที่ทุก field ทำ index ไว้หมดซึ่งเร็วแน่นอน
- Usergrid : ระบบ Core Engine ซึ่งจะให้บริการผ่าน RESTful API (เทียบได้กับ Web Service แต่ยืนหยุ่นกว่าและคุยด้วย json)
- Usergrid Admin Portal : เป็น Web Site ที่ใช้ในการบริหารจัดการข้อมูล กำหนดสิทธิ์ และสามารถ Query ข้อมูลเบื้องต้นได้
1. ทำการติดตั้ง OS และ Docker (อ่านเพิ่มเติมได้จาก sysadmin.psu.ac.th[3]) แต่จากตัวอย่างจะรันด้วย PhotonOS[4] เนื่องจากมีขนาดเล็กและเหมาะกับการใช้งานกับ Vmware มากกว่า (ติดตั้งด้วย .ova) แต่สามารถติดตั้งผ่าน Linux Distribution อื่นได้ด้วยคำสั่งเดียวกัน
2. ติดตั้งฐานข้อมูล cassandra ด้วยคำสั่งดังนี้ (ในกรณีที่ต้องการติดตั้งแบบ cluster สามารถศึกษา option ได้จาก website ข้างต้น[2])
docker run --detach --name cassandra --volume $(pwd)/cassandra-data:/var/lib/cassandra yep1/usergrid-cassandraโดยสำหรับ option –volume หน้า : คือ path ของเครื่อง Host, หลัง : จะเป็น path ใน containner ในกรณีที่ลบ containner หรือ update software ใน containner ข้อมูลในฐานข้อมูลจะได้ไม่หาย
2. ติดตั้งระบบค้นหา Elasticsearch ด้วยคำสั่งดังนี้
docker run --detach --name elasticsearch --volume $(pwd)/elasticsearch-data:/data yep1/usergrid-elasticsearch3. ติดตั้ง Usergrid ด้วยคำสั่งดังนี้
docker run --detach --name usergrid --env ADMIN_PASS=password --env ORG_NAME=org --env APP_NAME=app --link elasticsearch:elasticsearch --link cassandra:cassandra -p 8080:8080 yep1/usergridให้ตั้งค่า ADMIN_PASS ซึ่งเมื่อตั้งแล้วจะเป็นเป็นรหัสผ่านเดียวกับ Usergrid-Portal ในส่วนของ ORG_NAME จะเป็นการแบ่ง Zone ของโปรแกรมที่เกิดขึ้นเมื่อมีการใช้งานจริง เราสามารถกำหนดผู้ใช้งานให้เห็นแค่ Zone ตัวเองได้ ในส่วนของ APP_NAME ไว้สำหรับสร้าง Application ย่อย ๆ ใน Zone นั้น ๆ -p ใช้สำหรับกำหนด Port ข้างในข้างนอก ไม่แนะนำให้ตั้ง 80 หรือ 443 เพราะยังต้องติดตั้ง Usergrid-Portal เป็นหน้าบริหารจัดการที่ควรใช้ได้ใช้ port 80,443 มากกว่า
ซึ่งการติดตั้ง Usergrid Core Engine จะ require cassandra และ elasticsearch ที่ได้ติดตั้งไว้แล้ว โดยใช้ผ่านคำสั่ง –link จะเห็นว่าแต่ละโปรแกรมแยกออกจากกัน โดยอาจจะรันบนคนละ containner os หรือคนละสภาพแวดล้อมก็ได้ โดยไม่เกี่ยวข้องกัน แต่จะมีการเรียกใช้ผ่าน port ตามปกติ แค่เปรียบเสมือนอยู่กันคนละเครื่อง (เหมือนลงบน VM หลาย ๆ VM แต่ถ้าเป็น VM จะใช้ Resource เยอะ เพราะหมดไปกับ OS ที่สำคัญแต่ละโปรแกรมต้องลงเองทั้งหมด ไม่ได้มีคนทำ software มาเป็น image ที่เปิดใช้งานได้เพียงไม่กี่วินาทีเหมือนใน containner)
4. สุดท้ายคือทำการติดตั้ง Usergrid-Portal ซึ่งเป็น Web ที่ใช้สำหรับการตั้งค่าในส่วนต่าง ๆ และมีเครื่องมือ Query เบื้องต้นให้ใช้งาน
docker run -d --env USERGRID_HOST=192.168.x.y:8080 -p 8088:80 yep1/usergrid-portalHost ให้ตั้งเป็น IP Public ในกรณีที่มีการ Nat ไปยัง IP จริง หรือทำ HA-PROXY เพื่อเข้าถึงจากเน็ตภายนอกได้ (ในกรณีที่ไม่แยกวงภายใน ภายนอกก็สามารถใช้งาน IP ของ Host ได้เลย) จากคำสั่งอธิบายได้ดังนี้
-d ==> เนื่องจากคนทำ image สั่งให้รัน debug หลังจาก start image ถ้าไม่ใส่จะค้างไม่ออกมาจาก debug จึงต้องรันแบบ background
-p 8088:80 ==> ให้ map หน้า web จาก port 80 ใน containner ไปเป็น port 8088 บนเครื่อง HostUSERGRID_HOST=192.168.x.y:8080 ==> เมื่อเปิดหน้า web มาแล้วด้วย port 8088 หลังจาก Login เสร็จให้ไปเรียก Core Engine ผ่าน port 8080
หมายเหตุ : การเปิด port ในตัว containner เปิดกี่ port ก็ได้ตามสบาย แต่ port บน host ต้องไม่ชนกัน ดูได้จากคำสั่ง docker psในตอนหน้าจะมาพูดถึงวิธีการใช้งานกันครับ……
=================================================
References :
[1] http://usergrid.apache.org[2] https://github.com/yep/usergrid-docker
[3] https://sysadmin.psu.ac.th/2017/01/03/docker-ubuntu-16-04/
[4] https://vmware.github.io/photon/
-
Spark #03: Query Apache Access Log with Spark SQL
ต่อจาก
- Spark #02: Cluster Installation ซึ่งทำให้เรามี Spark Cluster ที่พร้อมจะทำงานแบบ Distributed Computing แล้ว
- ขั้นตอนการติดตั้ง Hadoop Cluster อย่างง่าย ทำให้มี Hadoop HDFS เป็นพื้นที่จัดกับ
- Zeppelin #01 Installation ทำให้สามารถใช้งาน Spark ได้ง่ายขึ้น
บทความนี้ จะกล่าวถึงการนำเข้าไฟล์ Apache Access Log เข้าไปเก็บไว้ใน Hadoop HDFS แล้ว ให้ Apache Spark Cluster เข้าไปค้นหาข้อมูล โดยใช้ภาษา SQL ผ่าน Spark SQL API
นำ Apache Access Log เข้า HDFS
- ให้ Copy Apache Access Log ที่มีอยู่มาเก็บไว้ในเครื่องที่สามารถติดต่อ Hadoop HDFS ได้ (ในที่นี้ ชื่อไฟล์เป็น apache.access.log)
- ใช้คำสั่งต่อไป
(แทน /test/ ด้วย Path ที่สร้างไว้ใน HDFS)hdfs dfs -copyFromLocal apache.access.log /test/
- เมื่อไปดูผ่าน Web UI ของ Hadoop HDFS ก็จะเห็นไฟล์อยู่ดังนี้

วิธี Query ข้อมูลจาก Zeppelin ไปยัง Spark Cluster
- เปิด Zeppelin Web UI แล้วสร้าง Note ใหม่ โดยคลิกที่ Create new node
แล้วใส่ชื่อ Note เช่น Query Apache Access Log
ตั้ง Default Interpreter เป็น Spark
แล้วคลิก Create Note

- ใส่ Code ต่อไปนี้ลงไป

- ด้านขวามือบน จะมีรูปเฟือง ให้คลิก แล้วเลือก Insert New

- แล้วใส่ข้อความนี้ลงไป

- จากนั้นคลิก Run all paragraphs

- ผลที่ได้

ตอนต่อไปจะมาอธิบายวิธีการเขียนคำสั่งครับ

































