วันอาทิตย์ที่ 13 กุมภาพันธ์ พ.ศ. 2554

มา config mysql server ให้แรงสุดๆ กันไปเลย

ภาคแรกนี้ให้ config my.cnf กันก่อนนะครับ

หากใครใช้ภาษาไทนก็ให้เพิ่มบรรทัดต่อไปนี้ลงไปด้วยนะครับ
default-character-set = tis620
skip-character-set-client-handshake  

แต่มันจะทำให้ mysql server ของเราช้าลงไปนะครับ

skip-locking - อันนี้ถ้าจำไม่ผิดเขาเปลี่ยนชื่อเป็น skip-external-locking เกี่ยวกับการทำ Repicate MySQL Server ผมไม่แน่ใจว่าถ้ามี Server เดียวจะช่วยเพิ่มประสิทธิภาพอะไรได้หรือเปล่า แต่ใส่ไว้ก็ไม่เสียหายครับ

skip-thread-priority - เป็นการกำหนดครับว่าไม่ต้องให้ thread แซงคิวกันได้ MySQL จะให้ QUERY แต่ละแบบมีความสำคัญไม่เท่ากัน ผมจำไม่ได้ว่าอะไรมากกว่าอะไร แต่การเอาหัวข้อนี้ออกทำให้ระบบ queue ของ MySQL ไม่ต้องมายุ่งยากกับการจัดคิวและทำงานเป็น FIFO แทนครับ

skip-bdb - ไม่ได้ใช้ก็ข้ามไปครับ ถ้าใช้ bdb ก็ Comment บรรทัดนี้ซะ สำหรับผมแล้วผมใช้แค่ MYISAM กับ INNODB ครับ

skip-networking - อันนี้เป็นการบอก MySQL Server ว่าไม่ต้อง Listen ที่ INET SOCKET ครับ ให้ Listen ที่ UNIX SOCKET อย่างเดียวพอ อันนี้ไม่ได้เพิ่มความเร็วมากนัก แต่ลดโอกาสการโดนโจมตีได้ครับ

log-slow-queries - อันนี้ใช้เฉพาะเวลาที่ต้องการดูว่า Query อันไหนทำงานช้า จะได้มาปรับแต่งได้ครับ


ต่อมาเป็นการจัดการ Thread  ซึ่งตัวที่สำคัญๆ มีดังนี้นะครับ
Threads cached - คือจำนวน threads ที่อยู่ในโปรแกรม MySQL ตอนนี้ จะเห็นได้ว่ามี 143 threads
Threads connected - คือจำนวน threads ที่ใช้งานจริงๆ ครับ
Threads running - คือ threads ที่กำลังหาผลการ Query อยู่ครับ
Threads created - คือจำนวน threads ที่สร้างใหม่ตั้งแต่เริ่ม Server มาครับ ถ้าค่านี้เพิ่มเร็วเกินไป ให้เพิ่มจำนวน Thread_cache ครับ ผลที่ได้คือ MySQL จะทำงานเร็วขึ้นนิดหน่อยเพราะว่าจะไม่ต้องเสียเวลา สร้างและทำลาย Threads บ่อยๆ ครับ


MYISAM กับหน่วยความจำ ตัวแปรที่เราสนใจคือ
 - Key Buffer คือพื้นที่สำหรับ Cache ค่า Key ของแต่ละ Table ครับ โดยที่ Key ของ MySQL มี 3 ตัวคือ PRIMARY, INDEX และ UNIQUE ครับ ปกติถ้ามีการใช้ Table MyISAM มากๆ ค่านี้ควรจะมากๆ ครับ ของผมมีใช้ไม่มากเลยไม่ต้องใช้ค่า Key_Buffer มาก แนะนำ 16MB สำหรับแรม 256 และเพิ่มมากขึ้นเมื่อแรมมากขึ้น

- Sort Buffer คือหน่วยความจำที่ MySQSL แต่ละ Connection จะจองเพิ่ม เพื่อทำ Table Scan ครับ ปกติถ้าคุณจะ Sort Field ที่ไม่ใช่ Key จะต้องใช้หน่วยความจำส่วนนี้เสมอ ให้ Setup เริ่มต้นตั้งแต่ 512K ขึ้นไป เนื่องจากเป็นหน่วยความจำที่จะมีการจองเพิ่มต่อ Connection ดังนั้นจะไม่ควรจะ Setup ให้สูงเกินเพราะว่าจะทำให้ MySQL ทำงานจนหน่วยความจำหมด

- Read Buffer คือหน่วยความจำที่ MySQL จะใช้ในการเก็บค่าที่อ่านจากตารางแบบต่อเนื่อง (คือไม่ได้ Sort) ไม่จำเป็นต้องมากนักก็ได้ เพราะว่าปกติเราจะมีการทำ LIMIT ในการอ่านค่ามาแสดงบนเว็บอยู่แล้ว

- Read-Random Buffer Size คือหร่วมความจำที่ MySQL จะใช้เก็บค่าจากตารางแบบไม่ต่อเนื่อง (เช่นผลการ Sort) ควรจะใหญ่กว่า Read Buffer

ของผมไม่ค่อยได้ใช้ MyISAM ค่าต่างๆ นี้เลยไม่ได้ Set เอาไว้มากนัก ครับ เดี๋ยวไปต่อภาค 4 เรื่องของ tmp_table ครับ

--- เอาไว้เท่านี้ก่อนนะครับ
ปล. บทความนี้เป็นบทความที่ผู้รู้ได้เขียนไว้นะครับ ซึ่งผมว่ามีประโยชน์มากเลยนะครับ

วันเสาร์ที่ 12 กุมภาพันธ์ พ.ศ. 2554

การใช้ SSH โดยไม่ต้องใส่รหัสผ่าน

น่าสนใจมากกับการใช้ ssh แบบไม่ต้องใส่รหัส บางทีวันนงเข้า server เป็นสิบเครื่อง รหัสผ่านยาวเป็นหางว่าวเลย จำผิดจำถูกไปหมด ไปเจอบทความนี้มา น่าสนใจมากเลยเอามาฝากกัน
ระบบที่ทำการทดสอบ

- OpenSSH Client บน Mac OS X 10.5.6
- OpenSSH Server บน Ubuntu 8.04

ขั้นตอนแรก ทำการสร้าง keys สำหรับยืนยันตัวตนระหว่าง Client และ Server (ทำบนเครื่อง Client ในที่นี้คือ Mac OS X)
MacClient:~ UserA$ ssh-keygen -t rsa
MacClient:~ UserA$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/UserA/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/UserA/.ssh/id_rsa.
Your public key has been saved in /Users/UserA/.ssh/id_rsa.pub.
The key fingerprint is:
a4:74:0b:bc:2f:d1:f5:c7:4e:90:51:7f:f4:45:84:a0 UserA@MacClient


ขั้นตอนต่อไป ใช้ ssh สร้าง directory ~/.ssh บน Server ปลายทาง (ทำบน Client ได้เลย โดยผ่าน ssh)
MacClient:~ UserA$ ssh UserA@UbuntuServer mkdir -p .ssh
MacClient:~ UserA$ ssh UserA@UbuntuServer mkdir -p .ssh
UserA@vmtuserver's password:

ขั้นตอนสุดท้าย ทำการเพิ่ม Public keys ที่สร้างขึ้นในขั้นตอนแรกไปยังไฟล์ ~/.ssh/authorized_keys บน Server ปลายทาง (ทำบน Client โดยผ่าน ssh เช่นเคย)
MacClient:~ UserA$ cat .ssh/id_rsa | ssh UserA@UbuntuServer 'cat >> .ssh/authorized_keys'
MacClient:~ UserA$ cat .ssh/id_rsa | ssh UserA@UbuntuServer 'cat >> .ssh/authorized_keys'
UserA@vmtuserver's password:

ทำการทดสอบ
MacClient:~ UserA$ ssh UserA@UbuntuServer
MacClient:~ UserA$ ssh UserA@UbuntuServer
Linux UbuntuServer 2.6.24-19-server #1 SMP Wed Jun 18 15:18:00 UTC 2008 i686

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To access official Ubuntu documentation, please visit:
http://help.ubuntu.com/
You have mail.
Last login: Tue Jan 13 00:14:19 2009 from MacClient
UserA@UbuntuServer:~$

*สามารถเพิ่ม Public keys ที่สร้างขึ้นไปยัง User ใดๆ ก็ได้ ไม่จำเป็นต้องมีชื่อเหมือนกับ User ที่มีอยู่บน Client



ขอบพระคุณเจ้าของบทความมากๆ เลยครับลดปัญหาของผมได้เยอะเลย

วันพฤหัสบดีที่ 10 กุมภาพันธ์ พ.ศ. 2554

Xcache เพิ่มพลังให้ php

มีคนเขียนเกี่ยวกับการติดตั้ง และปรับแต่ง xcache ไว้น่าสนใจทีเดียว ดังนั้นขอมา note ไว้ตรงนี้เผื่อป้องกันการลืมนะครับ ลืมไปผู้เดินเดิมเค้าใช้ nginx แต่เราเอามาใช้การ loghttpd ได้นะครับ


ช่วงนี้มีเว็บหนักๆ เข้ามาให้ tune บ่อยๆ แน่นอนว่าตัวเลือกที่ดีที่สุดผมก็ยังเลือก Nginx + PHP fast-cgi แต่ล่าสุดเว็บ traffic ไม่มากแต่ pageview สูง แถมยังใช้ wordpress ที่ลง plug-ins ไว้หลายตัวงานนี้ก็ปรับทั้ง Nginx และ MySQL แล้วก็ได้แค่ระดับหนึ่ง จึงต้องหาตัวช่วย ตอนนี้ตัวเลือกที่ดีที่สุดก็คือ XCache


เริ่มเลยด้วยการ download
BASH
wget http://xcache.lighttpd.net/pub/Releases/1.3.1/xcache-1.3.1.tar.gz


จากนั้นก็แตกไฟล์
BASH
tar xf xcache-1.3.1.tar.gz


เข้าไปยัง directory xcache
BASH
cd xcache-1.3.1


เรียกใช้ phpize และ configure
BASH
phpize
./configure --enable-xcache


เริ่ม compile และติดตั้ง
BASH
make
make install


จำ path ที่ถูกติดตั้งลงไปด้วยเพื่อใช้เขียนใน php.ini ว่าแล้วก็เปิด php.ini ขึ้นมา
BASH
nano /usr/local/lib/php.ini


เพิ่ม directive เหล่านี้ลงไปก่อน [Zend] นะครับ
INI
[xcache-common]
zend_extension = /usr/lib64/extensions/no-debug-non-zts-20060613/xcache.so


[xcache.admin]
xcache.admin.auth = On
xcache.admin.user = "mOo"
; xcache.admin.pass = md5($your_password)
xcache.admin.pass = ""


[xcache]
xcache.shm_scheme = "mmap"
xcache.size = 32M
xcache.count = 1
xcache.slots = 8k
xcache.ttl = 3600
xcache.gc_interval = 300


; Same as aboves but for variable cache
; If you don't know for sure that you need this, you probably don't
xcache.var_size = 0M
xcache.var_count = 1
xcache.var_slots = 1K
xcache.var_ttl = 0
xcache.var_maxttl = 0
xcache.var_gc_interval = 300


; N/A for /dev/zero
xcache.readonly_protection = Off
xcache.mmap_path = "/dev/zero"
xcache.cacher = On
xcache.stat = Off


จากนั้นทำการตรวจสอบด้วย
BASH
php -v


จะเห็นว่ามี XCache ใช้งานแล้ว
ค่าที่เราควรตั้งในเบื้อนต้นคือ
xcache.size ขนาดของ cache
xcache.count จำนวน concurrency ในการเข้าถึงซึ่งควรเป็นจำนวนของ CPU core
xcache.slots จำนวน slot ในการเก็บ cache


ทำการ restart webserver แล้วทดลองใช้งานเว็บไซท์ของท่านดู จะพบความเร็วที่แตกต่าง

x-sendfile กับ lighttpd คุณสมบัติการส่งไฟล์ขนาดใหญ่ที่รวดเร็ว

จากที่เราใช้ Kloxo เป็น webpanel ซึ่งสามารถเปลี่ยนจาก apache มาใช้ lighttpd ซึ่งมันมีคุณสมบัติอย่างนึงที่ผมต้องการคือ สามารถเปิดใช้ x-sendfile ในการส่งไฟล์ได้ เรามาเริ่ม config มาเริ่มเลยนะครับ

ขั้นแรก เราต้องเปิดการใช้งานงาน โดยเข้าไปแก้ไขไฟล์ /etc/lighttpd/conf/kloxo/lighttpd.ชื่อเว็บที่เราต้องการเปิดใช้ และให้เพิ่มบรรทัดตัวสีแดงเข้าไปนะครับ
           
fastcgi.server = (
              ".php" => ( (
                                    # ....
                                   "allow-x-send-file" => "enable" 
                 ))
)



ขั้นที่ 2 เขียน php เพื่อทำการส่งไฟล์ 

$full_path = “/home/admin/my.domain.com/storage/”.$filename; //ตัวหนาคือ path จริงของไฟล์ แบบ full  path นะครับ
header(“X-LIGHTTPD-send-file: “.$full_path); 

header(“Content-type: “.$mimetype); // บอกชนิดไฟล์ เช่น application/zip แบบนี้ซึ่งหาคู่มืออ่านต่อไปเองนะครับ
header(“Content-Disposition: attachment; filename=\”".$originalfilename.”\”"); //ชื่อไฟล์ที่แสดงในการดาวน์โหลด 
  

ติดตั้ง Kloxo บน Centos

Kloxo หรือเมื่อก่อนเรียกว่า Lxadmin เป็น webpanel เช่นเดียวกับพวก directadmin หรือ Cpanel นั่นแหละครับ แต่ต่างกันตรงที่มันฟรี และปัจจุบันเป็น Opensource ขั้นตอนการติดตั้งก็ง่ายๆ

ขั้นแรกให้ ssh เข้าสู่ server ก่อน นะครับ แล้วก็เริ่มต้นด้วยการปิด selinux ด้วยคำสั่ง
#setenforce 0

ขั้นที่ 2 เริ่มดาวน์โหลดตัวติดตั้ง ด้วยคำสั่ง
#wget http://download.lxlabs.com/download/kloxo/production/kloxo-install-master.sh

ขั้นที่ 3 เริ่มทำการติดตั้ง
#sh ./kloxo-install-master.sh

คราวนี้หากโปรแกรมถามอะไรออกมาก็ตอบเพียง y แล้ว Enter เท่านั้น แล้วก็รอและรอ เมื่อทำการติดตั้งเสร็จ ให้เปิด browser แล้วเปิดเว้บด้วย address http://ipaddress:7778 หรือ  https://ipaddress:7777 แล้ว login ด้วย

username : admin
password : admin

 เมื่อเข้าระบบได้ก็จะให้เปลี่ยนรหัสผ่านทันที จากนั้นก็สามารถจัดการ host ได้ง่ายๆ แล้ว