ทดสอบการทำงานของเครื่องบริการ กับเครื่องลูก

การเชื่อมต่อเข้ามาพร้อมกัน 10 connection
การเชื่อมต่อเข้ามาพร้อมกัน 10 connection

ที่มา ที่ไป
เตรียมสอนนักศึกษาเรื่องศักยภาพของเครื่องบริการ
ไม่ได้อยู่ที่ RAM อย่างเดียว ยังมีรายละเอียดอีกมาก
แม้เครื่องจะอยู่ใน Cloud ก็ยังสุ่มเสี่ยงต่อการเดี้ยงกลางอากาศได้เช่นกัน
เพราะเวลาเช่าเครื่องบริการใน Cloud ก็ต้องกำหนดว่าจะจ่ายให้กับอะไรอยู่ดี

การเชื่อมต่อเข้ามา 1 connection ก็ยังรับไหว
การเชื่อมต่อเข้ามา 1 connection ก็ยังรับไหว

การทดสอบเครื่องที่ทำงาน
ทดลองใช้เครื่องหนึ่งร้องขอบริการจากอีกเครื่องหนึ่ง
ในที่นี้ desktop2 คือ เครื่องบริการเว็บและอีเมล
ส่วนเครื่อง notebook คือ เครื่องลูกที่ส่ง request ไปยังเครื่องบริการ
ด้วยการเปิดเว็บเพจเดียวกันพร้อม ๆ กัน 10 iframe ใน 1 หน้าต่าง
แต่ละ iframe เรียกไปยัง url แบบส่งค่า get ที่แตกต่าง
และ url คือ php ที่เรียกใช้ smtp ก็จะ load เครื่องบริการเกือบ 50 Kbps
โปรแกรมที่ monitor ใช้ tcpview for windows ซึ่ง download ได้ฟรี
จาก https://technet.microsoft.com/en-us/library/bb897437.aspx
และใช้ task manager ดู performance ของ ethernet ว่าขึ้นลงอย่างไร
เมื่อเครื่อง notebook ส่งคำขอใช้บริการไปยัง desktop2
เครื่องบริการทดสอบเปิดบริการด้วย xampp เฉพาะส่วนของ apache
ถ้าเปิด mercury ก็คงจะทำให้เกิดภาระกับเครื่อง desktop2 ขึ้นอีกเยอะ

ในขณะที่เครื่องลูกยังไม่ได้เชื่อมต่อเข้ามาผ่าน port 80
ในขณะที่เครื่องลูกยังไม่ได้เชื่อมต่อเข้ามาผ่าน port 80

สรุปผลการทดสอบเครื่องที่ทำงาน
เครื่อง desktop2 เป็นเพียงเครื่อง PC ที่มีทรัพยากรต่ำ
และ Bandwidth ต่ำ รองรับการ download ได้ไม่มาก
และไม่ได้ออกแบบให้ทำงานกับ Cache server : Static file แต่อย่างใด
ถ้ามี request เข้ามาสัก 20 – 30 คน พร้อม ๆ กัน
เครื่องนี้ก็คงจะรองรับการเชื่อมต่อไม่ไหวเป็นแน่ เพราะคอขวดเยอะครับ

ปั่นเพื่อแม่ (Bike for mom) ได้รับความสนใจเกินกว่าความคาดหมายจนล่มในช่วงแรก

ปั่นเพื่อแม่ (Bike for mom) ได้รับความสนใจเกินกว่าความคาดหมายจนล่มในช่วงแรก
ปั่นเพื่อแม่ (Bike for mom) ได้รับความสนใจเกินกว่าความคาดหมายจนล่มในช่วงแรก

ข้อความจาก thaibike.net ว่า
ผู้สนใจร่วมเป็นหนึ่งในเหตุการณ์ประวัติศาสตร์ “BIKE FOR MOM ปั่นเพื่อแม่
เพียง 15 นาทีมีผู้สนใจเข้าร่วมลงทะเบียนเป็นจำนวนมาก
ส่งผลให้เว็บไซต์มีปัญหาขัดข้อง และมีการเพิ่มเครื่องบริการอีกหลายตัวเพื่อแก้ปัญหา
ประชาชนที่สนใจเข้าร่วมกิจกรรม ในกรุงเทพ เต็มจำนวนแล้ว 40,000 คน
เช็คที่เหลือแต่ละจังหวัด ได้ที่ศาลากลางจังหวัด

https://www.youtube.com/watch?v=UDnLVEanwnM

ซึ่งผมก็จะร่วมกิจกรรมที่ลำปางด้วย ได้เข้าเว็บไซต์ http://bikemom2015.moi.go.th
หรือ http://www.bikeformom2015.com
เมื่อวันที่ 1 กรกฎาคม 2558 พบว่าหลังเปิดระบบให้ลงทะเบียนไม่กี่นาที ระบบก็ล่ม ลงทะเบียนไม่ได้
แต่ปัจจุบันลงทะเบียนได้แล้ว และเปิดไปถึง 9 สิงหาคม 2558 ปั่นร่วมกันอาทิตย์ที่ 16 สิงหาคม 2558
http://www.matichon.co.th/news_detail.php?newsid=1435733620
แล้ววันแรกพบภาพที่คุณ krisda ถ่ายจากทีวีว่าออกข่าวช่อง 3 ด้วย
โพสต์ในกลุ่ม “ลำปาง นครแห่งจักรยาน” ซึ่งการลงทะเบียนออนไลน์เป็นเพียงช่องทางหนึ่ง
อีกช่องทาง คือ การไปลงทะเบียนที่ศาลากลาง ของแต่ละจังหวัด
https://www.facebook.com/groups/723715197696029/permalink/877043582363189/
ส่วน ข่าวช่อง 7 ก็มีที่ http://news.ch7.com/detail/130336/

ที่น่าสนใจว่าเว็บไซต์ล้มนั้น หรือทำไมเว็บไซต์ช้า หรือล้ม
มีคำอธิบายวิธีป้องกันที่ blog.levelup.in.th โดยคุณ heha ซึ่งสรุปไว้ดังนี้
http://blog.levelup.in.th/2011/01/31/why-do-your-website-slow-or-crash%E0%B8%97%E0%B8%B3%E0%B9%84%E0%B8%A1%E0%B9%80%E0%B8%A7%E0%B9%87%E0%B8%9A%E0%B9%84%E0%B8%8B%E0%B8%95%E0%B9%8C%E0%B8%82%E0%B8%AD%E0%B8%87%E0%B8%84%E0%B8%B8%E0%B8%93/
Database ตอบสนองช้า
1. Database ไม่ได้ใส่ index key ต้องทำกันตั้งแต่ตอนออกแบบระบบฐานข้อมูลกันเลย
2. จำนวนคิวรี่ (Query) ต่อหน้ามีมากเกินไป ก็เป็นการออกแบบเว็บเพจ
3. เว็บไซต์ไม่มีการใช้ระบบ Cache อันนี้เป็นเรื่องการ config server
อยากรู้ว่าใช้ระบบ cache รึเปล่าใช้บริการได้ที่
https://developers.google.com/speed/pagespeed/insights/
ลองตรวจของ จังหวัดในประเทศไทยดูครับ มักพบปัญหา Leverage browser caching
เว็บไซต์ของผมก็มีปัญหา ยังไม่ได้ตามไปแก้ไขเลย
4. Table ถูก Lock บ่อย เนื่องจาก update หรือ insert บ่อย
และเปลี่ยนเป็น innodb แทน myisam เพราะ innodb จะ lock เฉพาะ row
ไม่ lock ทั้ง table จึงช่วยเรื่องความเร็วได้มาก

CPU Server ขึ้นสูง
1. Script php มีปัญหา ไม่ optimize code ให้ดี ไม่ clear ตัวแปรเมื่อเลิกใช้
วนลูปที่ไม่จำเป็น หรือสร้าง object แล้วไม่ใช้ หรือเขียน algorithm ไม่ดี
2. process กิน memory มากไป
เช็คตัวแปรต่าง ๆ และตั้งค่าให้เหมาะสม สำหรับ web server มีให้ตั้งเยอะ

Server Crash บ่อย
1. ลด MaxClients ใน apache config ลง จำกัดจำนวนผู้ใช้ ป้องกัน server ล้ม
2. ตั้งเวลา reboot เครื่อง หากมีเหตุผลที่ตอบได้ว่าจำเป็น
3. เพิ่ม max_connections ของ mysql ก็น่าจะรองรับได้เพิ่มขึ้น
4. อัพเกรดทุกอย่างที่คิดว่าน้อย เช่น cpu, memory, harddisk หรือ bandwidth

เตรียมบทเรียนสอนนักศึกษาเรียนรู้การใช้งาน linux

linux server
linux server

การสอนนักศึกษาเข้าใช้ linux ผ่าน secure shell
เตรียมการ โดยผมเข้าในฐานะ root
1.1 สร้าง user name ของแต่ละคนผ่าน #useradd
1.2 เปลี่ยนรหัสผ่านให้กับแต่ละคน หลังสร้าง user name แล้ว
1.3 สร้าง folder ในห้อง html ตาม user name
1.4 กำหนด owner ให้แต่ละ folder ตาม user name
1.5 chmod เป็น 777 จะได้เข้าถึงผ่าน url ได้

การใช้งาน โดยนักศึกษาเข้าใช้ในฐานะ user
2.1 ให้นักศึกษา download putty และ filezilla
2.2 ให้เข้า linux ผ่าน putty และเรียนรู้การเข้าไปใช้งานระบบ
มีบทเรียนคำสั่งที่ http://www.thaiall.com/isinthai
2.3 สร้างแฟ้ม index.html ของตนเอง
มีแนวทางการเขียนเว็บเพจที่ http://www.thaiall.com/html
2.4 ส่งแฟ้ม index.html เข้า linux ผ่าน ftps
2.5 เรียก index.html ผ่าน url ของแต่ละคน

http://www.putty.org/ [putty.exe]
https://filezilla-project.org/download.php
http://downloads.sourceforge.net/project/filezilla/FileZilla_Client/3.7.3/FileZilla_3.7.3_win32-setup.exe

เปลี่ยนรุ่นของ PHP จาก 4 เป็น 5 แล้ว script ใช้งานไม่ได้

เล่าสู่กันฟัง เรื่องปัญหาการปรับเปลี่ยนรุ่นของ server

URL กับ REQUEST_URIURL กับ REQUEST_URI
URL กับ REQUEST_URI

เนื่องจาก script ที่ใช้เคย สามารถใช้งานได้ปกติ
แต่เกิดปัญหาหลัง upgrade server
ที่ต้องใช้ PHP version ใหม่ ก็พบว่า script เดิมใช้งานไม่ได้
ตรวจดูก็พบว่าค่าของระบบ _SERVER ที่เคยส่งให้กับ script ภาษา PHP
ไม่ยอมส่งค่าให้ตามปกติ คือ ไม่ส่งอะไรคืนมาเลย
ต้องแก้ไขโดยกำหนดการรับค่าจากระบบ เป็นค่าใหม่

เดิมรับค่า “URL” ก็ต้องเปลี่ยนเป็นรับค่า “REQUEST_URI”

ซึ่งเหตุการแบบนี้เกิดขึ้นได้ในปัจจุบัน และเกิดขึ้นอีกอย่างแน่นอนในอนาคต
เมื่อต้องมีการ upgrade server ในปีต่อ ๆ ไป

การตรวจรหัสผ่านใน ldap server

apache directory studio : ldap server & client
apache directory studio : ldap server & client

http://directory.apache.org/studio/

ได้รับโอกาสจากคุณหนึ่งให้หาวิธีการตรวจสอบรหัสผ่านกับ ldap server ด้วย php
ซึ่งรหัสผ่านในเครื่องบริการถูกเข้ารหัสแบบ {SHA} ซึ่งเป็นการเข้ารหัสทางเดียว แบบคงที่
การตรวจสอบทำโดยเข้ารหัสผ่านของเรา แล้วส่งไปเปรียบเทียบรหัสที่ถูกเข้ารหัสไว้ว่าตรงกันหรือไม่
หากใน shell ของ linux สามารถใช้ # slappasswd -h {SHA} -s mypassword
สร้างรหัสผ่านที่ได้รับการเข้ารหัส
แต่ถ้าเป็น PHP ต้องใช้ $e =  base64_encode( pack( “H*”, sha1(“mypassword”)));
ตัวอย่าง code นี้เข้าไป scan ใน directory ต่าง ๆ เพราะไม่ทราบว่า user นี้อยู่ในกลุ่มใด

// verify user & password in ldap server
$ldap = ldap_connect(“127.0.0.1”,389);
$b = ldap_bind($ldap,”uid=sombat”,”loveyou”) or die(“bind died”);
//
$arr = array(
“ou=LAMPANG,ou=STAFF,ou=TEAM_A”,
“ou=LAMPANG,ou=MANAGER,ou=TEAM_A”,
“ou=BANGKOK,ou=STAFF,ou=TEAM_A”,
“ou=BANGKOK,ou=MANAGER,ou=TEAM_A”,
“ou=LAMPANG,ou=STAFF,ou=TEAM_B”,
“ou=LAMPANG,ou=MANAGER,ou=TEAM_B”,
“ou=BANGKOK,ou=STAFF,ou=TEAM_B”,
“ou=BANGKOK,ou=MANAGER,ou=TEAM_B”);
foreach ($arr as $key => $value) {
$dn = ‘uid=’. $_REQUEST[“uid”] .’,’.$value.’,dc=abc,dc=com’;
$result = ldap_search($ldap, $dn,”(uid=*)”,array(“uid”,”userpassword”));
$rec = ldap_get_entries($ldap,$result);
$encoded = “{SHA}” . base64_encode( pack( “H*”, sha1($_REQUEST[“pass”]) ) );
if (isset($rec[0][“userpassword”][0]) && $rec[0][“userpassword”][0] == $encoded) {
echo “<meta http-equiv=’refresh’ content=’0;url=http://www.abc.com/pass.php’ />“;
exit;
}
}
ldap_unbind($ldap);
header(“location: http://www.abc.com/login.php“);

ldap server สำหรับ windows

ldap for windows
ldap for windows
22 พ.ย.55 จากการทดสอบติดตั้งโปรแกรม ldap for windows เพื่อจัดตั้ง ldap server
สำหรับให้บริการข้อมูล ก็พบว่า OpenLDAP for Windows 2.4.30 ติดตั้งง่าย
ในการติดตั้งก็กด next เป็นส่วนใหญ่ ยกเว้นรหัสผ่านของ user name ที่ผมได้กำหนดไป
โดยกำหนดให้เหมือนค่า default password ของ server ที่มีมาให้
เมื่อใช้คำสั่ง netstat -na ก็พบว่า port 389 ถูกเปิดรอให้บริการอยู่แล้ว
แล้วใช้ Apache Directory Studio
เชื่อมต่อไปที่ host:localhost port:389
แล้วเลือก No Authentication ก็เข้าได้แล้วครับ
ldap : apache directory studio
ldap : apache directory studio

การติดตั้ง Apache Directory Studio นั้น ต้องมี JRE อยู่ในเครื่อง
แล้วผมก็ copy ห้อง /jre ไปไว้ใน  C:\Program Files\Apache Directory Studio
แล้วสามารถเรียกใช้โปรแกรมได้ตามปกติ เพราะพัฒนาด้วยภาษา Java
ถ้าเข้าระบบแบบ No Authentication จะมองเห็นข้อมูลทั่วไป
แต่ไม่เห็นรหัสผ่าน ของสมาชิก จะต้องกำหนด User และ Password สำหรับแบบ Simple Authentication
จึงจะเข้าแก้ไขข้อมูลที่ถูกปิดไว้ ได้แก่ password ของ member นั่นเอง

ldap ou=xxx,dc=xxx,dc=xxx
อาทิ ldap ou=xxx,dc=xxx,dc=xxx

ldap ในเครื่องบริการ .. ไม่ตื่นอีกแล้ว

ldap fail
ldap fail

ขั้นตอนการตรวจสอบ และแก้ไข
ในกรณี ldap server ล้มหลังไฟฟ้าดับ แล้ว ldap server ก็ตอบว่า ldap unbind

1. พบว่าสั่ง start บริการ ไม่สำเร็จ
#/etc/init.d/ldap start
Checking configuration files for slapd: [FAILED]
2. แก้ไขปัญหาด้วยการ recover
#/usr/sbin/slapd_db_recover -v -h /var/lib/ldap/myname
ได้แฟ้ม log.0000000001 มาใหม่ และดูเหมือน recover สำเร็จ
แต่ก็ยังใช้งานไม่ได้ จึง restart เครื่อง เพื่อล้างค่าต่าง ๆ
3. restart เครื่องคอมพิวเตอร์
4. เมื่อสั่ง start บริการ ก็พบคำว่า OK
สั่ง start กี่ครั้ง ก็ตอบว่า OK .. หมายความว่าไม่ OK
เมื่อตรวจดู status ก็พบว่าบริการไม่ได้ถูกเปิดให้ใช้
#service ldap start เป็นวิธีเปิดบริการ ldap อีกแบบ
#/etc/init.d/ldap status เป็นวิธีตรวจสอบสถานะว่า running รึเปล่า
5. ทดสอบสั่ง start อีกแบบด้วย #/usr/sbin/slapd หรือ slapd -d 10
เมื่อตรวจ status ก็พบว่า ระบบเปิดบริการแล้ว (เรียกว่าเปิดบริการแบบ manual)
แต่ก็ต้องหาว่าสาเหตุคืออะไรต่อไป เพราะ ไม่สามารถ start ตามปกติได้
6. พบสาเหตุว่าเจ้าของแฟ้มในห้อง myname ไม่ใช่ ldap:ldap แต่เป็น root:root
จึงต้องเปลี่ยนเจ้าของ #chown ldap:ldap * ในห้อง /var/lib/ldap/myname
สรุปว่า ใช้งานได้ปกติหลังเปลี่ยนเจ้าของ
7. ใช้โปรแกรมจาก http://www.ldapadministrator.com/
ซึ่งเป็น ldap client admin เข้าไปจัดการข้อมูลได้ครับ

28 ก.ค.58 คุณตั้งแจ้งว่า verify stdid ไม่ผ่านอีกแล้ว หลังไฟดับเมื่อเช้า
หารือกับคุณตุ้ย ก็พบว่ามีปัญหาจริง ซึ่งก็ไม่รู้ว่าเกี่ยวกับไฟฟ้าดับรึเปล่า
ใช้วิธีข้างบนไม่ขลังเหมือนก่อน  ทั้งคุณเปรม และผมปลุกตามวิธีเดิม ๆ ก็ไม่ขึ้น
แล้วเวลาสั่ง start พบคำว่า
Finding last valid log LSN: file: 7 offset 8689191
Recovery starting from [7][8689099]
Recovery complete at Tue Jul 28 15:31:48 2015
Maximum transaction ID 80000007 Recovery checkpoint [7][8689191]

สรุปว่าลองลบ log
แล้วแฟ้ม ___db.001 ก็มากันปกติ จึงได้ใช้ chown จากนั้นก็ ok
แต่ก็ไม่แน่ใจ เพราะปัญหาหายไปแล้ว ถ้าเกิดอีกค่อยตามร่องรอยกันใหม่

http://www.thaiall.com/blog/admin/4282/
http://www.thaiall.com/blog/burin/3713/
http://www.thaiall.com/blog/burin/3698/
http://www.thaiall.com/blog/burin/3680/

fail to restart ldap
fail to restart ldap

config smtp server on win2003

smtp server
smtp server

การตั้งค่าของ smtp server บน windows server 2003

ปรับระบบ smtp server ซึ่งเป็น SMTP Virtual Server ใน IIS บน Windows 2003
1. เปิดบริการ
2. ปรับ Properties, Delivery
– First,Second,Third retry interval เป็น 1, 2 และ 3
3. เปิด firewall ของเครื่อง ยอมรับ port 25
4. เปิด firewall ขององค์กร ยอมรับ port 25
5. telnet localhost 25 ตรวจสอบว่าส่งออกหรือไม่
HELO localhost.localdomain
MAIL FROM: from_who@domain.com
RCPT TO: to_who@domain.com
DATA
— Enter message, end with “.” on a line by itself
Subject: subject goes here
— Message goes here and ends with a dot
QUIT
6. ถ้าผลการส่งบอกว่าปกติ
ให้ไปตรวจใน C:\Inetpub\mailroot\Queue ว่ามีเมลค้างหรือไม่
7. ไปตรวจใน mail box ว่าได้รับใน inbox หรือ spam box หรือไม่

php code สำหรับติดต่อ ldap server

22 ก.ย.54 มีโอกาสเรียนรู้การเขียนโปรแกรมด้วยภาษา PHP ติดต่อกับ LDAP Server โดยมี engineer ติดตั้ง server ตัวนี้ไว้ แล้วผมมีหน้าที่เข้าไปใช้งาน ก็คิดว่าจะใช้ php (ใช้ phpinfo ตรวจแล้วพบว่า php สามารถใช้ ldap ได้) เข้าไปอ่านข้อมูลผู้ใช้ เพื่อทำ authentication ตรวจผู้ใช้งานระบบ และ code ชุดนี้เป็นตัวอย่างที่ผมใช้ติดต่อกับ ldap server การติดต่อนั้นอาจใช้ browser

พิมพ์ ldap://www.domain.com:389
/uid=BURIN_R,ou=CLERK,ou=OFFICE1,dc=domain,dc=com

ก็จะเปิดด้วยโปรแกรม Windows Contact ขึ้นมาอัตโนมัติ

<?
$host = “ldap://www.domain.com“;
$baseDn1 = ‘cn=Manager,dc=domain,dc=com‘;
$baseDn2 = ‘uid=BURIN_R,ou=CLERK,ou=OFFICE1,dc=domain,dc=com‘;
$password = “your password“;
$ldap = ldap_connect($host);
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
$b = ldap_bind($ldap,$baseDn1,$password) or die(“bind died”);
echo “<pre>bind :”;
if($b) echo “pass”; else echo “fail”;
$result = ldap_search($ldap, $baseDn2,”(cn=*)”);
$rec = ldap_get_entries($ldap,$result);
echo ldap_count_entries($ldap,$result);
echo $rec[0][“cn”][0];
echo $rec[0][“userpassword”][0];
echo $rec[0][0][0];
print_r($rec);
ldap_unbind($ldap);
?>

โปรแกรมแก้วสารพัดนึกรุ่น 7.0

thaiabc 7.0
thaiabc 7.0

โปรแกรม thaiabc หรือที่ผมเรียกว่า โปรแกรมแก้วสารพัดนึก ปรับรุ่นเป็น 7.0 แล้ว โดยมีการปรับปรุงที่สำคัญต่อจากรุ่น 6.5 ดังนี้
1. เพิ่ม LDAP และ PDO Extension ใน php.ini
2. upgrade MySQL เป็นรุ่น 5.5.16
3. upgrade phpMyadmin เป็นรุ่น 3.4.5
4. upgrade WordPress เป็นรุ่น 3.2.1
5. upgrade Drupal เป็นรุ่น 7.8
6. เพิ่ม บทความ itinlife เป็น 308 บทความ
7. download บันทึกทั้งหมดจาก thaiall.com/blog

สิ่งที่คาดหวัง
1. ช่วยให้ คนไทย เรียนรู้ Web Server, Database, Programming, e-Commerce, e-Learning, CMS, Blog และระบบต่าง ๆ จากในเครื่องคอมพิวเตอร์ของตนเอง ทั้งแบบ Online และ Offline
2. ช่วยให้ ครู นักเรียน และนักพัฒนา สามารถติดตั้ง หรือสร้างตัวติดตั้งโปรแกรมของตนเอง และใช้งานได้ในเวลาที่รวดเร็ว ใช้งานจริงได้ทั้งใน Stand Alone, Intranet และ Internet

โปรแกรมเผยแพร่ไว้ 2 site
http://www.4shared.com/file/-GUaqgqy/thaiabc70.html
http://www.4shared.com/file/izAeFHam/thaiabc70.html