วันจันทร์ที่ 26 พฤษภาคม พ.ศ. 2557

มาเล่น Zabbix กัน

Zabbix เป็น Monitoring System อีกตัวหนึ่งที่น่าสนใจ ซึ่งมีคุณสมบัติหลากหลาย ไม่ว่าจะเป็น Performance Monitoring, Availability Report, Trigger, Event และ Graphs เป็นต้น Zabbix มี Template เสริมหลายตัว สามารถติดตั้งเพิ่มเติมได้ง่าย แถมยังสามารถตั้ง Trigger เพื่อส่งการแจ้งเตือนผ่านทาง E-Mail, IM และ SMS ได้อีกด้วย ความสามารถเยอะขนาดนี้ มาลองเล่นกันดูครับ



ติดตั้งบน Ubuntu 12.04 ทำได้ง่ายมากเพราะ Zabbix มี Repository ให้บริการไว้แล้ว แค่ติดตั้ง repo package ดังนี้



wget http://repo.zabbix.com/zabbix/2.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_2.2-1+precise_all.deb



dpkg -i zabbix-release_2.2-1+precise_all.deb



apt-get update



ติดตั้ง Zabbix Server



apt-get install zabbix-server-mysql zabbix-frontend-php



แก้ date.timezone ใน /etc/apache2/conf.d/zabbix จากนั้น restart apache ดังนี้



service apache2 restart



ติด Zabbix Agent ในเครื่องที่ต้องการ Monitor



apt-get install zabbix-agent



ตั้งค่า Zabbix Server ให้ Agent โดยใช้คำสั่ง



dpkg-reconfigure zabbix-agent



ใส่ hostname หรือ ip address ของเครื่อง Zabbix Server ให้ถูกต้อง



เปิด browser ไปที่ http://YOUR-ZABBIX-SERVER/zabbix ตั้งค่าอีกนิดหน่อย















จากนั้นจะเข้าสู่หน้าจอ Login กรอก username = Admin และ password = zabbix





ก็จะเข้าหน้าหลักของ Zabbix แล้ว วิธีการใช้งานให้ติดตั้ง Zabbix Agent ไว้ที่เครื่องที่ต้องการ Monitor จากนั้น เพิ่ม Host ที่ Configuration > Hosts เลือก Create Host ใส่ข้อมูล Host ที่ต้องการ Monitor ลงไป





คลิกที่ Template เลือก Template ที่ต้องการ ตัวอย่างเช่น OS Linux ถ้าต้องการ Monitor Service เช่น HTTP, HTTPS, SMTP, SSH ก็สามารถเพิ่มเข้าไปได้





กด Save แล้ว เข้าไปดูที่ Monitoring > Lastest Data ว่ามีข้อมูลมาจาก Agent แล้วหรือยัง





เมื่อมีข้อมูลมาแล้วคุณสามารถดูข้อมูล System Status ผ่านหน้า Dashboard ได้ หรือจะดู Trigger หรือ Event ได้เช่นกัน












วันอาทิตย์ที่ 25 พฤษภาคม พ.ศ. 2557

มาเล่น Cacti กัน

เนื่องจากจำไม่ได้ว่าเคยเขียน How to เรื่อง Cacti ไปหรือยังและพยายามค้นดูแล้วหาไม่เจอ ก็เลยเอามาเขียนใหม่อีกรอบครับ Cacti เป็น Performance Monitoring System ตัวหนึ่งที่ใช้งานง่าย เน้นการจับข้อมูลจาก SNMP เป็นหลัก ทำให้การตั้งค่าการใช้งาน Cacti ง่ายตามไปด้วย อีกอย่างมี Plugin เสริมน่าที่สนใจหลายตัว มาลงมือกันเลย



apt-get update



apt-get install snmpd cacti cacti-spine



ตัวติดตั้งเริ่มให้คุณตั้งค่ารหัสผ่านให้กับ MySQL และ Config Cacti :) ง่ายป่าว จากนั้นเรามา config เจ้า SNMP เพิ่มอีกนิดหน่อย แก้ไขที่ไฟล์ /etc/snmp/snmpd.conf แก้ให้ snmpd listen connection on all interfaces



#agentAddress udp:127.0.0.1:161



agentAddress udp:161,udp6:[::1]:161



แก้ไข ACCESS CONTROL uncomment ตรง rocommunity แก้ ip address ให้เป็น ip address ของ Cacti



rocommunity secret Cacti-IP-Address



แก้ไขข้อมูล SYSTEM INFORMATION ให้สื่อความให้สักหน่อย



sysLocation Some Sererver



sysContact some@example.org



จากนั้น restart service ของ snmpd ดังนี้



service snmpd restart



จากนั้นมาตั้งค่า Cacti กัน เปิด browser ไปที่ http://your-cacti-server/cacti ล็อกอินด้วยผู้ใช้ admin รหัสผ่าน admin





จากนั้นโปรแกรมจะให้ตั้งรหัสผ่านใหม่





เมื่อตั้งรหัสผ่านเสร็จก็จะเข้าหน้า Cacti โล่งๆ แบบนี้





เปิดหน้า setting ที่ Configuration > Settings ตั้งค่า SNMP Version เป็น 2 และ SNMP Community เป็น secret





คลิกไปที่ Tab Poller เลือก Poller Type เป็น spine กำหนด Poller Inteval เป็น Every Minute กด Save





เพิ่ม Host ของเราเข้าไป ไปที่ Management > Devices กด Add ใส่ข้อมูล ระบุชื่อ hostname หรือ ip address เลือก Template เป็น Local Linux Machine กด Save





เพิ่ม Template เพิ่มเติม Unix - Ping Latency, SNMP - Get Mounted Partitions, SNMP - Get Processor Information, SNMP - Interface Statistics กด Save





กด Create Graphs for this Host เลือกกราฟทั้งหมด กด Create





นั่งรอไปสักพัก เลือก Tab Graphs ก็จะพบกราฟที่ดึงมาจาก SNMP สวยงาม :)





ถ้าต้องการทำ report โดยเลือกเฉพาะบางกราฟ ให้ไปที่ Console > Management > Graph Trees เลือกสร้างรายงานที่คุณต้องการได้ ;)


มาเล่น MongoDB Sharding กัน

เล่น MongoDB ถ้าไม่ได้ลอง Sharding เดี๋ยวจะสนุกไม่ครบครับ แนวคิดเรื่อง Sharding คือการกระจายข้อมูลไปเก็บยัง MongoDB หลายๆ เครื่อง เพื่อเพิ่มขนาด storage ในการเก็บข้อมูล เพิ่มประสิทธิภาพในการทำงานและรองรับ Horizontal Scaling การแบ่งข้อมูลสามารถแบ่งได้หลายแบบไม่ว่าจะเป็น Rank Based และ Hash Based ตามที่คุณต้องการ การทำ Sharding ใน MongoDB ต้องมีส่วนประกอบ 3 ส่วนได้แก่




  • Query Router - เป็นตัวเชื่อมต่อกับ Client หรือ Application

  • Config Server - เก็บข้อมูล Meta Data ของ Shard Cluster

  • Shard - เก็บข้อมูล



เราจะมาลองเล่น Sharding แบบง่ายๆ เพื่อทดลองกันครับ สิ่งที่เราต้องมี คือเครื่องเซิร์ฟเวอร์ 4 เครื่อง สำหรับ Router 1 เครื่อง, Config 1 เครื่อง และ Shard 2 เครื่อง สำหรับ Production ต้องใช้เครื่องอย่างน้อย 7 เครื่อง คือ Router 2 เครื่อง, Config 3 เครื่อง และ Shard 2 เครื่อง แต่เราไม่มีเครื่องเยอะมากขนาดนั้นครับ ลองแค่พอหอมปากหอมคอ ลองแค่ 4 เครื่องก็พอ :)





มาลงมือกันเลย ติดตั้ง MongoDB ลงในเครื่องทั้ง 4 เครื่อง



wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.1.tgz



tar zxvf mongodb-linux-x86_64-2.6.1.tgz -C /opt/



export PATH=$PATH:/opt/mongodb-linux-x86_64-2.6.1/bin



สร้างที่เก็บข้อมูลดังนี้



mkdir -p /data/db



เริ่ม start service ของ MongoDB ในแต่ละเครื่องด้วยคำสั่งดังนี้



เครื่อง Shard (192.168.2.169, 192.168.2.171)



mongod --dbpath /data/db



เครื่อง Config (192.168.2.150)



mongod --configsvr --dbpath /data/db



เครื่อง Router (192.168.2.170)



mongos --configdb 192.168.2.150:27019



เมื่อ start service ทั้งหมดครบ Shard Cluster ยังไม่ทำงาน ต้องเพิ่ม Shard เข้าไปในระบบก่อน เชื่อมต่อไปยังเครื่อง Router



mongo --host 192.168.2.170



จากนั้นเพิ่ม Shard เครื่องแรกเข้าไปดังนี้



sh.addShard( "192.168.2.169:27017")



หลังจากเพิ่ม Shard แล้วให้ใช้คำสั่ง sh.status() เพื่อดูสถานะของ Shard Cluster



กำหนดให้ database test เป็น Shard Database



sh.enableSharding("test")



ให้ลองสร้างข้อมูลตัวอย่างโดยใช้คำสั่งดังนี้



use test



for (var i = 1; i <= 10; i++) db.testSample.insert({ x : i })



กำหนด Shard Key ดังนี้



db.testSample.ensureIndex({ _id: "hashed" })



กำหนด Shard Collection ให้ testSample โดยใช้ _id ซึ่งเป็นช่วงของค่า Hash เป็นตัวแบ่ง



sh.shardCollection("test.testSample",{ "_id": "hashed" });



ใช้คำสั่ง sh.status() จะพบว่า testSample บันทึกอยู่ใน shard0000 เพราะเรามีอยู่ Shard เดียว ให้คุณเพิ่ม Shard เข้าไปโดยใช้คำสั่งดังนี้



sh.addShard( "192.168.2.171:27017")



จากนั้นเพิ่มข้อมูลเข้าไปอีก แล้วใช้คำสั่ง sh.status() ดูอีกครั้ง เราจะพบว่า Sharding เริ่มทำงานแล้วให้ดูตรง จำนวน chunks ซึ่งจะแบ่งข้อมูลออกเป็น 2 ส่วน ตามจำนวน Shard Server ที่มี และเริ่มย้ายข้อมูลไปยัง Shard Server ที่เราเพิ่มเข้ามา


วันอังคารที่ 20 พฤษภาคม พ.ศ. 2557

มาเล่น MongoDB replication กัน

เนื่องจากกลับมาเล่น MongoDB แบบติดตั้งเองอีกรอบ ก็เลยมาลองเล่น relication ดูบ้าง เพราะ MongoDB รองรับ replication ด้วย ซึ่งการตั้งค่านั้นง่ายมากๆ หลักการของ replication คือการทำสำเนาข้อมูลให้เท่ากันทุกเครื่อง กรณีที่มีเครื่องใดเครื่องหนึ่งไม่สามารถให้บริการได้ MongoDB จะยังสามารถให้บริการได้จาก relicaset ที่เหลือได้ด้วยความสามารถในเรื่อง Automatic Failover อีกด้วย



replicaset



automatic failover



จากภาพเราจะมีเซิร์ฟเวอร์อยู่ 3 เครื่องทำหน้าที่เป็น Primary และ Secondary ซึ่งเครื่อง Primary ทำหน้าที่รับ request ที่มาจาก client ในส่วน Secondary ทำหน้าที่ replicate การทำงานต่างๆ จาก Primary มาและอาจทำหน้าที่เป็น Primary แทนในกรณีที่ Primary ไม่สามารถทำงานได้



เพื่อความเข้าใจ มาลองติดตั้ง MongoDB repication ดู มีเครื่อง 3 เครื่อง




  1. rep0 (Primary)

  2. rep1 (Secondary)

  3. rep2 (Secondary)



    ทุกเครื่องมองเห็นกันได้ในเครือข่าย ลองทดสอบ ping ชื่อเครื่องดู และติดตั้ง MongoDB ไปยังทุกเครื่องดังนี้




wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.1.tgz
tar zxvf mongodb-linux-x86_64-2.6.1.tgz -C /opt/
export PATH=$PATH:/opt/mongodb-linux-x86_64-2.6.1/bin



จากนั้น สร้างที่เก็บฐานข้อมูลดังนี้



mkdir -p /data/rs0-0 /data/rs0-1 /data/rs0-2



เริ่ม start service ของ MongoDB ในแต่ละเครื่องด้วยคำสั่งดังนี้



เครื่อง rep0



mongod --dbpath /data/rs0-0 --replSet rs0 --smallfiles --oplogSize 128



เครื่อง rep1



mongod --dbpath /data/rs0-1 --replSet rs0 --smallfiles --oplogSize 128



เครื่อง rep2



mongod --dbpath /data/rs0-2 --replSet rs0 --smallfiles --oplogSize 128



จากนั้นในคำสั่ง mongo เรียกใช้งานเครื่อง rep0 ดังนี้



mongo --host rep0



จากนั้นสั่งให้ตั้งค่า relicaset ดังนี้



rs.initiate()



ใช้คำสั่ง rs.conf() เพื่อดูว่ามีข้อมูลการตั้งค่าเริ่มต้น repicaset แล้วหรือยัง



rs.conf()



ให้สังเกตว่า shell ของ MongoDB จะเปลี่ยนเป็น rs0:PRIMARY> และจะมีข้อมูลเริ่มต้นของ replicaset แล้ว ให้เพิ่ม host เข้าไปดังนี้



rs.add("rep1:27017")



rs.add("rep2:27017")



ลองใช้คำสั่ง rs.conf() ดูจะพบว่า rs0 ของเรามี host เพิ่มเข้ามารวมเป็น 3 host แล้ว





ใช้คำสั่ง rs.status() เพิ่อดูสถานะของ Repication Cluster



rs.status()



จะพบว่าเรามี 3 เครื่องที่ผูกกันใน repicaset ชื่อ rs0 และ 2 เครื่องที่เพิ่มเข้ามาถูกกำหนดให้เป็น Secondary อัตโนมัติ





ให้ลอง load data เข้าไป ให้สังเกต log จะพบว่าเครื่อง Primary จะส่งข้อมูลไปเขียนที่ Secondary ตลอด แต่เวลา query จะสลับกันระหว่างเครื่องเป็นลักษณะ round robbin ให้ลอง shutdown เครื่อง Primary ดู จะพบว่าเครื่อง Secondary ทั้ง 2 ตัวจะโหวดกัน แล้วได้ Primary ใหม่มา 1 ตัว จากนั้นให้ลอง query ข้อมูลจาก Primary ตัวใหม่ ก็จะพบว่าข้อมูลยังอยู่ครบ ;)



สำหรับท่านที่สนใจทำ MongoDB Replication ให้ลองศึกษาเพิ่มเติมที่ MongoDB Document ในส่วน Replication เพิ่มเติมครับ


วันจันทร์ที่ 5 พฤษภาคม พ.ศ. 2557

13 ฟอนต์แห่งชาติ รุ่น GPL2 มาแล้ว

หลังจากที่ SIPA ได้ร่วมมือกับกรมทรัพย์สินทางปัญญา ในการจัดประกวดและเผยแพร่ชุด "13 ฟอนต์แห่งชาติ" ไปแล้ว และได้มีการนำไปใช้อย่างแพร่หลายโดยเฉพาะในส่วนของฟอนต์ TH Sarabun New



จากความแพร่หลายในการใช้งานชุดฟอนต์แห่งชาติ ทาง SIPA และกรมทรัพย์สินทางปัญญาจึงเล็งเห็นความสำคัญในการแก้ไขข้อกำหนดของสัญญาอนุญาตการใช้งานฟอนต์ให้แพร่หลายยิ่งขึ้นจึงได้ร่วมกันแก้ไขสัญญาอนุญาตให้เป็น GPL2 เพื่อให้สามารถนำไปพัฒนาต่อยอดและเผยแพร่เพิ่มเติมในช่องทางอื่นได้ โดยในช่วงแรกจะมีเพียง 10 ฟอนต์ที่ได้ปรับปรุงสัญญาอนุญาตเป็นที่เรียบร้อยแล้ว ซึ่งทาง SIPA จะดำเนินการประสานงานเพื่อแก้ไขสัญญาอนุญาตของอีก 3 ฟอนต์ที่เหลือ ต่อไป



โดยท่านสามารถดาวน์โหลดได้ที่ลิงก์ด้านล่าง


แนะนำหนังสือ OpenShift

หนังสือ Getting Satrted with OpenShift จากสำนักพิมพ์ O'Reilly ออกมาแล้ว หลังจากที่บ่มมานานอยู่เหมือนกัน นานจนลืมไปเลย หนังสือเล่มนี้เน้นการใช้งาน OpenShift เป็นหลัก การทำ Hot Deploy ใช้งาน Task Scheduler ทำ Continuous Integration การ Backup เป็นต้น เรียกได้ว่าแตกต่างจากหนังสือ OpenShift เล่มอื่นๆ ที่มีอยู่ในท้องตลาดพอสมควร สำหรับท่านที่เป็นมือใหม่ ผมแนะนำให้อ่านเล่มนี้ครับ :)





เกือบลืมหนังสือเล่มนี้สามารถดาวน์โหลดได้ ที่เว็บ OpenShift ครับ