แสดงกระทู้

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - golfreeze

Pages: 1 ... 136 137 [138] 139 140 ... 146
2056
ถ้าเครื่อง slave reboot ไปแล้ว state มันไม่ขึ้น sync ก็สั่งโดย
#drbdadm disconnect all
แล้ว
#drbdadm connect all

น่ะครับ

#mysql ha drbd on centos
http://linuxsutra.chakravaka.com/index.php?op=ViewArticle&articleId=5

##drbd module for debian 5 (lenny)
http://packages.debian.org/lenny/drbd8-source

2058
ถ้า จะปรับ filesystem ให้เป็น ext3 ก็
#mke2fs -j /dev/xxx
แต่ถ้า ไม่ใส่ -j ก็จะเป็น ext2 ครับ

ลองดู น่ะครับ

มี tip ถ้าสมมติใครเป็น server ที่เก็บไฟล์มีไฟล์ จำนวนมากๆ และ disk ขนาดใหญ่มาก ใช้การเขียนไฟล์
อ่านไฟล์ เยอะ ควรเปลี่ยน file system มาเป็น แบบ reiserfs โดย ที่ debian จะมี program ที่ชื่อว่า
#apt-get install reiserfsprog ครับ
แล้วเวลา make reiser ก็
#mkreiserfs /dev/drbd0
ได้ครับ ซึ่งมีการทดสอบแล้ว ว่าความเร็วในการเข้าถึงไฟล์ แบบนี้จะไวกว่าพวก ext3 ext2 อย่างมาก

2059
Lab by golfreeze

#Install DRBD+NFS+HA in debian4.0 R1(AMD64bit)

#ลง drbd ทั้งสองเครื่อง
# apt-get install drbd0.7-module-source
# apt-get install drbd0.7-utils
# apt-get install dpatch
# cd /usr/src
# tar -zxf drbd0.7.tar.gz
# cd /usr/src/modules/drbd
# module-assistant prepare
==press to intall module
# module-assistant automatic-install drbd0.7-module-source
ลง drbd0.7 module
# cd /usr/src
# dpkg -i drbd0.7-module-2.6.18-5-amd64_0.7.21-4+2.6.18.dfsg.1-13etch6_amd64.deb

##Config /etc/drbd.conf ทั้ง 2 เครื่อง
resource r0 {
protocol C;
incon-degr-cmd \"halt -f\";
startup {
degr-wfc-timeout 120;
}
disk {
on-io-error detach;
}
net {
}
syncer {
rate 20M;
group 1;
al-extents 257;
}
on host-a {
device /dev/drbd0;
disk /dev/hda8;
address 10.0.0.10:7789;
meta-disk internal;
}
on host-b {
device /dev/drbd0; แทนdevice ที่จะทำการ mount เข้าเป็น device drbd
disk /dev/sda8; แทน disk ที่จะทำการ Mount เพื่อเก็บเป็น data file server
address 10.0.0.20:7789;
meta-disk /dev/sda7[0]; แทนdisk ที่เก็บ meta-disk ควรสร้างให้ 512M เพราะปกติมันเก็บ
256M
}
}

จัดการลบ fstab ของ /dev/sda8 และ /dev/sda7 ออกจาก /etc/fstab ด้วย ลบทั้ง 2 host เลย
#cp /etc/fstab /etc/fstab.ori
แล้ว umount ออกด้วยเพราะว่าเมื่อ start drbd แล้วมันจะ mount ให้เองอัตโนมัติ
#umount /dev/sda8
#umount /dev/sda7


สั่งให้ drbd ทำงานทั้ง 2 ตัว
# /etc/init.d/drbd start




สั่งให้ เครื่อง DRBD0 ทำงานเป็น \\\"Primary\\\" node ได้
# drbdadm primary all
# drbdsetup /dev/drbd0 primary --do-what-I-say
#modprobe drbd (ทั้งสองเครื่อง)

ทำการสร้าง partition ที่ primary node ที่เดียว
# mke2fs /dev/drbd0
# mkdir -p /mbox/export
# mount /dev/drbd0 /mbox/export
#df -h
แล้วลอง copy ข้อมูลใส่ดู
/dev/drbd0 44G 52M 41G 1% /mbox
#ทำการลง Heartbeat ทั้ง สองเครื่องดังนี้
#apt-get install heartbeat
เพิ่ม config เข้าไปให้ทั้ง สองเครื่อง

#vi /etc/ha.d/ha.cf
debugfile /var/log/ha-debug #เอาไว้ debug ดู error
logfile /var/log/ha-log
logfacility local0
keepalive 2
#deadtime 30 # USE THIS!!!
deadtime 10
#auto_failback on
bcast eth1 #card interface ไหนที่จะให้ใช้งาน
node DRBD0 DRBD1 #มี host อะไรบ้าง


#vi /etc/ha.d/haresources ทั้งสองเครื่องเหมือนกันเพราะ จะให้เครื่อง DRBD0 เป็น primary
DRBD0 IPaddr::10.0.1.169/23/eth1 drbddisk::r0 Filesystem::/dev/drbd0::/mbox::ext2
nfs-kernel-server


#vi /etc/ha.d/authkeys
auth 3
3 md5 kammatanmeditation
#chmod 600 authkeys



#/etc/init.d/heartbeat start
แล้วสั่ง #cat /proc/drbd ก็จะขึ้นแบบนี้ แปลว่าทำงานแล้วครับ
DRBD0:/home/golf# cat /proc/drbd
version: 0.7.21 (api:79/proto:74)
SVN Revision: 2326 build by root@DRBD0, 2008-01-16 01:50:05
0: cs:StandAlone strimary/Secondary ld:Consistent
ns:17 nr:0 dw:33 dr:807319 al:0 bm:492 lo:0 pe:0 ua:0 ap:0
ดู virtual-ip ที่ heartbeat สร้างขึ้นมาก็
#ip addr sh
3: eth1: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:14:5e:fb:fa:26 brd ff:ff:ff:ff:ff:ff
inet 10.0.1.154/23 brd 10.0.1.255 scope global eth1
inet 10.0.1.169/23 brd 10.0.1.255 scope global secondary eth1:0

----------------------------------------------------------------------------------------------------



----------------------------
ส่วนในการทำ test สำหรับ check ว่าข้อมูล sync กับเครื่อง slave หรือไม่โดยการถอดสายแลน เครื่อง master
ออกก่อน
แล้วก็ไปดูที่เครื่อง slave มันก็จะ take virtual ip ไปครับ

Check state ได้คือ
#drbdadm state all
ถ้าออกมาเป็น
Primary /secondary
ก็แสดงว่าเครื่องนั้นรันเป็น primary node อยู่

หรือจะดูเป็น real time คือ
#watch \"cat /proc/drbd\"
ก็ได้ครับ

เสร็จทำการลงเป็น nfs-kernel-server ทั้งสองเครื่อง
#apt-get install nfs-kernel-server

ทำการ ลบ init ของ nfs-kernel-server(ทั้งสองเครื่อง) ป้องกันการมีปัญหาในการ
รีสตาร์ตเครื่องแล้ว เกิด error
โดย
#update-rc.d -f nfs-kernel-server remove

เข้าไปแก้ config ของ nfs-kernel-server ที่
#vi /etc/exports
ครับ

2060
แต่ใน debian จะมี app ตัวหนึ่งครับที่ใช้ได้เหมือนกัน คือ
#dphys-swapfile

ลงโดย
#apt-get install dphys-swapfile

เสร็จแล้วมันก็จะ สร้าง swap ให้อัตโนมัต แต่เราก็สามารถสร้างไฟล์ config ให้มันสร้างขนาด swap ได้โดย
#vi /etc/dphys-swapfile
# where we want the swapfile to be, this is the default
CONF_SWAPFILE=/swap.file

# size we want to force it to be, default (empty) gives 2*RAM
CONF_SWAPSIZE=2048
--------------------------------------------------------
ตัวนี้ไม่ต้องเขียน ใส่ใน rc.local ครับเพราะมันจะอ่านที่ไฟล์ config ให้เอง

2061
พอดี วันนี้ลง os (debian) แล้วกดเร็วไปหน่อยครับ

ไม่ได้เลือกให้ create swap ให้ สำหรับวิธีแก้ปัญหานั้นไม่ยากครับ

หลักการก็คือสร้าง swap file ขึ้นมาแล้วเขียนเข้าไปที่ ไฟล์ rc.local ซึ่งให้มันอ่านตอน boot ทุกครั้ง
ก็จะมี virtual mem ขึ้นมาใช้งานได้แบบ ปกติครับ

สำหรับ ขั้นตอนนั้นลองมาดูเลยครับ

#swapon #ตรวจดูพื้นที่ swap ครับ
สร้าง swap ขนาด 2G ครับ
#dd if=/dev/zero of=/var/swapfile bs=2048 count=2048000
#mkswap /var/swapfile
#swapon /var/swapfile

เสร็จแล้วก็ ลอง top ดูครับก็จะมี swap ขึ้นมาแล้วครับ

ถ้าจะให้มัน create swap ขึ้นมาทุกครั้งที่ boot เครื่องก็
#vi /etc/rc.local
/bin/dd if=/dev/zero of=/var/swapfile bs=2048 count=2048000
/sbin/mkswap /var/swapfile
/sbin/swapon /var/swapfile

เท่านี้เวลา restart server ก็จะทำการเพิ่ม swap ให้ทำงานขึ้น หลังจาก boot เข้า os ครับผม : )
--------------------------------------------------------
step by golfreeze[at]packetlove.com

2062
วันนี้ มี trick การ config ให้ bind(DNS service) มีความ secure ขึ้นครับ

ตัวที่ผม base on freebsd 6.2 กับ Bind 9 ครับ

ก็เรา config ให้ เครื่อง dns อื่นๆ มา query ข้อมูลของ dns server ของเรา

เพื่อป้องกัน การทำ spoof dns กับ ลด bw ที่เข้ามา ครับ

โดย config ที่ /etc/named/named.conf

options {
directory "/etc/namedb";
pid-file "/var/run/named/pid";
dump-file "/var/dump/named_dump.db";
statistics-file "/var/stats/named.stats";

listen-on {
127.0.0.1;
x.x.x.x;
};
query-source address * port 53;

recursion yes;
allow-recursion { 127.0.0.1; x.x.x.x; };
};

#ip ของ dns server ที่เราจะให้มา update กับ zone dns ของเครื่องเราครับ
acl nameserver {
x.x.x.x;
203.146.127.x;
61.90.x.x;
61.90.y.y;
66.252.x.x;
};

key "rndc-key" {
algorithm hmac-md5;
secret "ชชำชกดหกดหกด";
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};

zone "0.0.127.IN-ADDR.ARPA" {
type master;
file "master/localhost.rev";
allow-transfer { none; };
};

zone "ผผผ.com" { type master; file "master/ผผผ.com"; allow-transfer {
nameserver; }; };


####
# ip เครื่อง dns server เราครับ = x.x.x.x
####

2063
ตัวอย่างไฟล์ ของ named.conf
zone "kittipong.com" {
type master;
file "kittipong.com";
};

zone "80.29.202.in-addr.arpa" {
type master;
file "202.29.80.0";
ตัวอย่าง ของ primary ใน zone
@ IN SOA kittipong.com. root.kittipong.com. (
2005120901 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS ns.kittipong.com.
MX 10 mail.kittipong.com.
ns IN A 202.29.80.200
mail IN CNAME ns
www IN CNAME ns

ตัวอย่างของ slave ( reverse zone)
@ IN SOA kittipong.com. root.kittipong.com. (
2005120901 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS ns.kittipong.com.
200 IN PTR www.kittipong.com.
200 IN PTR mail.kittipong.com.

2064
"เกิดความไม่เข้าใจใน file DNS ของ freeBSD" -> มันไม่ใช่ของ FreeBSD นะ
ทำความเข้าใจก่อน FreeBSD ใช้ OSS เหมือน Linux ใช้ bind เหมือนกัน ดังนั้นไม่ว่า Linux เหรอ BSD
ก็เหมือนกันครับ หลักการ config เหมือนกัน อ่านฉลากให้เข้าใจการทำงานแล้ว จะใช้ os ไหนก็ config
ง่ายครับ

มาต่อเรื่อง ไฟล์ DNS กัน

1. ไฟล์ config ของ name deamon คือ named.conf ซึ่งจะอยู่ไหนก็แล้วแต่ os นั้นจะลงมาไว้ไหนส่วน
freebsd
/etc/namedb/

2. ต้องเข้าใจเรื่อง ของ zone file ก่อนมี type คือ
- Master
- Slave

ใน Master ของโดเมนเนม หนึ่งมี 2ไฟล์
ไฟล์แรก domain หรือ zone ที่เราไปจดมานั้นแหละครับ ประกอบด้วย records

- SOA
- NS
- A
- MX
- CNAME

ไฟล์ที่สอง Reverse lookup ชื่อมันบอกว่ามองย้อนกลับไป จาก ip->ชื่อ ประกอบด้วยrecords

- SOA
- NS
- PTR

รูแบบของzone นี้จะเป็น ip ที่เราใช้ที่ผูกติดกับชื่อ domain เรา เช่น เราใช้ 202.183.202.1 -->
22.183.202.in-addr.arpa ต้องเขียนแบบนี้(ดูรูปอธิบาย root หลักคือ dot)

2065
ภาคที่1
MySQL นับว่าเป็นหัวใจของ Web Server อีกตัวหนึ่งเลยก็ว่าได้เพราะว่า MySQL
นั้นเป็นแหล่งข้อมูลที่สามารถเรียกใช้งานได้อย่างรวดเร็ว วันนี้ผมจะเอาประสบการณ์เกี่ยวกับการ Config
MySQL มาให้อ่านกัน

ผมอิงตามรุ่น 4.1 โดยใช้กับ Server ที่ใช้ tis620 เป็น Default นะครับ

เริ่มต้นที่การ Compile PHP ให้สนับสนุน MySQL
ปกติแล้วสามารถ Compile PHP ให้สนับสนุน MySQL ด้วยการใช้ --with-mysql วิธีการนี้จะเป็นการใช้ MySQL
Lib Client ที่ Bundle มากับ PHP ครับ ซึ่งเป็น Version เก่า นอกจากนี้ยังมี Extension ใหม่ชื่อ MySQLi
ซึ่งถ้าจะใช้ MySQLi จะไม่สามารถใช้ MySQL Lib Client ที่ Bungle มาด้วยได้ มันจะตีกัน
ดังนั้นเริ่มต้นผมแนะนำให้คุณ Compile PHP ด้วย --with-mysql=/usr/local/mysql (หรือถ้า mysql
อยู่ที่อื่นก็ใช้ path อื่นแล้วกันครับ)

เพื่อความสะดวกในการใช้งานภาษาไทย มักจะ setup ใน my.cnf ว่า default-character-set = tis620
วิธีการนี้จะทำให้ MySQL ทำงานช้าลงไปประมาณ 20 - 30% แต่ไม่เป็นไรครับ
เพราะว่ายังไงผมก็ต้องใช้ภาษาไทยอยู่แล้ว

หลังจากใส่คำสั่งว่า default-character-set = tis620 ลงไปใน my.cnf แล้ว ผมที่ได้คือ MySQL Client
มันต๊องครับ เพราะว่า Charset ของ Server เป็น tis620 แต่ของ Client เป็น Latin ครับ ดังนั้นต้อง setup
เพิ่มอีกตัวหนึ่งคือ skip-character-set-client-handshake ใส่ส่วน my.cnf ครับ วิธีการนี้จะทำให้ Client
ทำงานที่ Charset เดียวกับ 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 อันไหนทำงานช้า จะได้มาปรับแต่งได้ครับ

ภาคที่ 2
การบริหาร Thread - ตัวแปรเกี่ยวกับ Thread ที่สำคัญของ MySQL คือ thread_cache
ตัวแปรนี้จะเป็นการไม่ทำลาย thread ของ MySQL ให้ต่ำกว่าเลขนี้ครับ ปกติก็เดาไปเรื่อยๆ ครับ โดยดูจาก
Status ของ MySQL ผมแนะนำให้ดูจาก phpMyAdmin ครับ สะดวกดี จะมีค่าเกี่ยวกับ thread คือ

Threads cached 143
Threads connected 7
Threads created 532
Threads running 1

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


ภาคที่ 3

MYISAM กับหน่วยความจำ ตัวแปรที่เราสนใจคือ

key_buffer=32M
sort_buffer_size=1M
read_buffer_size=1M
read_rnd_buffer_size=4M

- 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 ครับ


ภาคที่ 4
ในภาดนี้เราจะพูดถึง tmp_table ปกติแล้วในการ Complex Query นั้น MySQL
จะทำการสร้างตารางผลลัทธ์ขึ้นมาในหน่วยความจำเป็น เป็น TABLE แบบ HEAP
แต่ถ้าตารางมีขนาดใหญ่กว่าค่าค่าหนึ่ง MySQL จะคัดลอกตารางนั้นลง Disk เป็น MyISAM TABLE ครับ
เราจะมาดูค่าค่านั้นกันครับ

ก่อนที่จะไปไกลกว่านั้น เรามาพูดถึง Complex Query ก่อนครับ โดยมากเราจะพูดถึง Query ที่มีการใช้ GROUP
BY, UNIQUE, LIKE และที่ไม่แน่ใจคือ SUB SELECT ครับ

วิธีการดูว่ามีการ Swap ลงหน่วยความจำมากน้อยแค่ไหน สามารถดูได้จาก
Created tmp disk tables 14652
Created tmp tables 222220

โดยเมื่อมีการสร้าง tmp_table MySQL จะเพิ่มค่า Created tmp tables ครับ และถ้ามีการ Swap ลง Disk
จะเพิ่มค่า Created tmp disk tables ปกติ ถ้านำสองค่านี้มาหารกัน คูณ ร้อย ไม่ควรจะเกิน 5-10% ครับ
ขึ้นอยู่กับว่าตารางที่คุณใช้ใหญ่เล็กอย่างไร มีความซับซ้อนมากแค่ไหน

ตัวแปรที่จะควบคุมการ Swap จะมี 2 ตัวคือ

tmp_table_size=32M
max_tmp_tables=32

โดยถ้า tmp_table ใหญ่กว่า tmp_table_size จะ Swap ลง Disk ครับ หรือถ้ามีจำนวน tmp_table มากกว่า
max_tmp_tables ก็จะ Swap ลง Disk เช่นกันครับ
ค่า tmp_table_size ปกติเป็น 32M และ max_tmp_tables จะเป็น 32 ครับ คุณไม่ควร Setup ให้สูงกว่า 2
เท่าของค่าปกติ แต่แนะนำให้ลองไปตรวจสอบครับว่าโปรแกรมของคุณมีทางที่จะ Optimize Query ได้มากแค่ไหน
หรือ จะใช้วิธีการ Cache ผมลัพธ์ของหน้าเว็บเข้ามาช่วยก็ได้ครับ



ภาคที่ 5 - Key Buffer แบบเชิงลึก

Key Buffer คือหน่วยความจำที่ MySQL จองไว้หนเดียว แล้วใช้งานแชร์กันทุกๆ Process
(ดังที่ได้พูดไว้ก่อนหน้านี้ครับ)

แต่เราจะมาพูดถึงประสิทธิภาพของ Key กันครับ ค่าที่น่าสนใจคือ

Key blocks unused 27683
Key blocks used 1312
Key read requests 1318393
Key reads 1344

คู่แรกจะบอกว่า Key Buffer ของคุณใช้งานไปมากน้อยแค่ใด ปกติแล้ว Key Blocks Unused จะไม่มากครับหรือเป็น
0 เลยก็ได้ อย่างตัวอย่างแสดงว่าเรากำหนดค่า Key_Buffer มากเกินไปครับ

คู่ที่สองถ้าเอา (Key read requests - Key reads) * 100 / Key read requests เราจะเรียกว่า Key Hits
Rate ครับ อย่างตัวอย่างคือ 99.9 ครับ แสดงว่า Key Hits Rate ดีมากครับ ปกติแล้วจะอยู่ที่ประมาณ 95 -
99% ครับ ถ้าน้อยกว่านี้แนะนำให้เพิ่ม Key_Buffer ครับ สำหรับ Key Hits Rate นั้นจะต้องคิดเมื่อทำงาน
MySQL ไปแล้วสักพักนะครับ อาจจะ 2-3 วัน ครับ


ภาคที่ 6 - Table Cache

สำหรับ Table Cache นั้นเป็นการเปิด Handle ของ Table ทิ้งเอาไว้ครับ เพื่อการเข้าถึงข้อมูลใน Table
ได้อย่างรวดเร็วครับ แต่ถ้าคุณเพิ่มค่านี้มากๆ คุณอาจจะเกิดปัญหาว่า File Descriptor ไม่พอครับ
ถ้าผมจำไม่ผิดแนะนำให้เพิ่ม File Descriptor ได้จากการแก้ไขตัวแปร Kernel ที่ /proc/sys/fs/file-max
ครับโดยการใช้คำสั่ง

echo 392604 > /proc/sys/fs/file-max

ผมไม่แน่ใจว่าการใช้คำสั่ง ulimit จะได้ผลเหมือนกันหรือไม่

กลับมาต่อที่ table_cache ปกติแล้วถ้าในระบบที่มีตารางมากๆ table_cache
ควรจะครอบคลุมตารางพื้นฐานทั้งหมด และอีกประมาณ 50% ของตารางที่เหลือ
แต่ถ้าเป็นไปได้จะครอบคลุมทั้งหมดเลยก็ไม่ผิดแต่อย่างใด อย่างของผมเอง set ไว้ที่ 1024 เลยครับ

วิธีการจะดูว่า set ไว้น้อยเกินไปหรือเปล่า ให้ดูที่

Open tables 1024
Opened tables 1120

โดย Open tables คือจำนวน Table ที่เปิดอยู่ขณะนี้ และ Opened tables คือจำนวน Table ที่เปิดมาทั้งหมด
นับตั้งแต่เริ่ม MySQL Server มา โดยถ้าค่าของ Opened tables เพิ่มเร็วเกินไป แนะนำให้เพิ่มค่า
table_cache ครับ

วิธีการปรับค่า table cache ทำได้โดย เพิ่มบรรทัดนี้ใน my.cnf

table_cache=1024


ภาคที่ 7 Query Cache

Query Cache นั้นเป็นคุณสมบัติใหม่ที่มีใน MySQL รุ่นที่ 4.x ขึ้นมาครับ

Query Cache ทำงานง่ายๆ คือ ถ้ามี Query เหมือนเดิม MySQL จะเรียกจาก Cache แทนที่จะไป Query ใหม่ครับ

แต่ Query Cache ไม่ได้มีประโยชน์กับทุก Database Structure นะครับ Query Cache เหมาะกับ Table
ที่ไม่ค่อยได้ Update แต่มีจำนวน Records เป็นจำนวนมาก เช่น 50,000 records ขึ้นไป Query Cache จะใช้กับ
Select เท่านั้นครับ ถ้าระบบของคุณแตกต่างจากนี้การใช้ Query Cache อาจจะทำให้ได้ผลตรงกันข้ามก็ได้ครับ

วิธีการเปิดใช้งาน Query Cache ให้ใส่บรรทัดนี้ลงใน my.cnf ครับ

query_cache_type=1
query_cache_size=32M

query_cache_type จะมีได้ 3 ค่าคือ
0 - ปิด Query Cache
1 - เปิด Query Cache คุณสามารถสั่งให้ไม่ต้อง Cache ได้โดยการใช้ "SELECT SQL_NO_CACHE"
2 - แบบ On Demand คุณสามารถสั่งให้ MySQL Cache โดยการใช้ "SELECT SQL_CACHE"

ปกติแล้วถ้า Table มีการ Update แล้ว MySQL จะลบ Cache ของ Table นั้นๆ ทั้งหมดทันที และ Query Cache
นั้นเป็น Case Sensitive ครับ ดังนั้น

SELECT * FROM a WHERE b=1

กับ

select * from a where b=1

จะไม่เหมือนกันนะครับ ถ้าเราเรียกตัวแรกแล้วเรียกตัวที่ 2 ตัวที่ 2 จะไม่ได้เรียกจาก Cache

ดังนั้นถ้า
1. ในระบบของคุณมีการเขียน SQL แบบไม่ได้วางแผนเรืองตัวใหญ่ตัวเล็ก คุณจะได้รับประโยชน์จาก Query Cache
น้อยลง
2. ถ้า Table หลักๆ ของคุณมีการ Update ตลอดเวลา คุณจะได้รับประโยชน์จาก Query Cache น้อยลง
3. ถ้า Table หลักๆ ของคุณไม่ได้มีจำนวน Records มากคุณก็แทบจะไม่ได้รับประโยชน์จาก Query Cache
เลยครับ

แหล่งที่มา
http://www.thaiadmin.org/board/index.php?topic=18693.new

2066
##Check size more than 10M
less /var/log/mail.log | grep "size=" | awk -F 'size=' '{print $1 " " $2}' | sed 's/,//g' | awk '{ if ($8>10000000) print } '| more

2067
เวลาเราจะ แก้ไขไฟล์ หรือแทนที่ตัวแปรที่มีอยู่จำนวนมาก ด้วย string จำนวนหนึ่ง เราสามารถใช้ editplus
ช่วยได้ อิอิ

อย่างเช่นต้อง การแก้ไข field ที่อยู่ แบบนี้

address:: testtest

ให้เป็น address : 1234 ubon road ubon ที่ชื่อทำได้โดย ใช้

search ใน editplus แล้วใส่ regular expression ดังนี้ คือ

^address:: (.*)$
^address:: 1234 ubon road ubon .

ครับ เรียบร้อย

sed -i 's/IGNORE_LOCALHOST=false/IGNORE_LOCALHOST=true/' /etc/default/mailgraph

แก้ไขไฟล์ ด้วย sed

##การค้นหาไฟล์ โดยแทนที่ คำที่ขึ้นต้นด้วยอะไรก็ได้ซึ่งมี xxx อยู่แล้วลงท้ายด้วยอะไรก็ได้
แล้วเอาบันทัดว่างๆออกไป แล้วแสดง output ไปที่ไฟล์ปลายทางเขียนได้
less file.txt | sed "s/.*.xxx.*.//g" | sed '/^$/d' > file_output.txt


##ต้องการ ค้นหา บันทัดที่ไม่ขึ้นด้วย # แล้วก็ตัดบันทัดว่างออกไป ใช้คำสั่งแบบนี้ครับผม
โดยการค้นหาในไฟล์ authldaprc

#less authldaprc | grep -v "^#" | sed '/^$/d' | more

2068
อย่างเช่น ถ้าเรา ต้องการ เปลี่ยน ข้อความในไฟล์ ใดไฟล์หนึ่งน่ะครับ เราสามารถใช้คำสั่ง sed
ช่วยได้ดังนี้ คือ

ต้องการเปลี่ยน config ในไฟล์ httpd.conf ในบันทัดที่เป็น DirectoryIndex
จาก index.html ไปเป็น index.php

เริ่มดังนี้ เลย สั่งที่ command line ได้เลยครับ

#sed -e '/DirectoryIndex s/index.html/index.php/g' -i /etc/http/conf/httpd.conf

อิอิ

shell script ส่งเมลครับ

#!/bin/sh

tmp=/tmp/status-report-`date +%F`
touch $tmp && chmod 600 $tmp

echo -e "subject: status-report-`date +%F`\n" > $tmp
echo -e "\n -- Free Disk Space -- " >> $tmp
df -h >> $tmp
echo -e "\n -- Ram -- " >> $tmp
free -m >> $tmp
echo -e "\n -- Processes -- " >> $tmp
ps auxf >> $tmp
echo -e "\n -- Uptime -- " >> $tmp
uptime >> $tmp

#sendmail -f sender_email_address your_email_address < $tmp
sendmail -f golfreeze@packetlove.com watthanachai@ntt.co.th < $tmp
rm $tmp

บางครั้ง เราต้องการลบ บันทัดว่างๆ ใน shell script ก็ใช้คำสั่ง

#less ชื่อไฟล์ | sed '/^$/d' > ชื่อไฟล์ใหม่

หรือถ้า บางครั้งต้องการให้ แสดงค่า ตั้งแต่บันทัดที่ขึ้นต้นด้วย คำว่า DVD ถึง บันทัดที่ขึ้นต้นด้วย
XXX ก็
#cat input.txt sed -e '/^DVD/,/^XXX/p'

2069
เคยเจอปัญหาเกี่ยวกับ card lan setting ไปแล้วเกิด error message แบบนี้ครับ os linux ,distro debian
น่ะครับ อิอิ

Error ขึ้นแบบนี้ครับ

Configuring network interfaces...SIOCSIFADDR: No such device eth0: ERROR while getting interface
flags: No such device SIOCSIFNETMASK: No such device SIOCSIFBRDADDR: No such device eth0: ERROR
while getting interface flags: No such device

คือเราจะสั่งให้ interface มัน up แล้วไม่ได้ ลองไล่ๆ ดูเป็นเพราะ มันไปจำค่า mac อันเก่าไว้ เลยทำให้
interface ที่จะใช้งานดังกล่าวไม่สามารถเรียกขึ้นมาได้ ซึ่งสามารถแก้ไขโดยการลบ ค่า mac เก่าทิ้ง
แต่ที่สำคัญควร backup
ไฟล์เดิมไว้ด้วยกรณี มีปัญหา
น่ะครับ

#cd /etc/udev/ rules.d/
#cp z25_persistent-net.rules z25_persistent-net.rules.ori
#vi z25_persistent-net.rules
ลบ Interface ที่มีปัญหาทิ้ง
แล้ว สั่ง init6 ไป 1 ดอก
เมื่อ boot ขึ้นมาแล้ว ก็สามารถสั่งให้ ifconfig ขึ้นได้ครับ





----------------------------------------------------------------
question=Host ผมวางที่ Pro-En ครับ ทาง noc เขาแจ้งมาว่าเครื่องผมส่ง packet ออก inter จน traffic
เต็ม
จากนั้น noc ก็ไปถอดสาย Lan ออกจากเครื่องผม โดยที่ไม่ได้โทรมาบอกผมก่อนล่วงหน้า เมื่อทาง noc
ทดลองถอดออกแล้วเสียบสาย lan เข้าไปในเครื่องผมใหม่ ปรากฏว่า Ping ไม่เจอ noc เลย Restart เครื่องผม
จากนั้นเครื่องผมบูตไม่ได้เลยค้างอยู่ที่ Grub boot Loader ตลอด ผมจะทำยังไงดีครับ
ในนั้นมีข้อมูลลูกค้าหลายสิบราย ผมทำเป็น Software RAID1 ไว้ด้วย HDD 320GB เครื่องผมเป็น Rack Intel
1U
+ CentOS 4.4 + Direct Admin External License วานผู้รู้ช่วยชี้แนะด้วยครับ ขอบคุณล่วงหน้าครับ

ans=บุทด้วยแผ่น windows แล้วหาทางเข้า command promt แล้วรันคำสั่งนี้เพื่อเครียร์ mbr
fixmbr

แล้วก็บุท Linux เข้า rescue mode เพื่อเขียน grub ใหม่

grub
root (hd0,0)
setup (hd0)
quit

แล้วก็รีบุท

ถ้าไม่ได้ก็เก็บ hdd อีกลูกแล้ว ลง centos ทับเลย ลงเหมือนลงตอนแรก ทุกอย่างทำงานเหมือนเดิมจะมี dns
ที่ต้องถอนแล้วลงใหม่อีกที แล้วก็ permisson ไฟล์บางจุด

2070
error clamav 0.95.3 และวิธีแก้ไข

ก่อนอื่น download clam-av version ล่าสุดก่อนครับ

#fetch http://nchc.dl.sourceforge.net/project/clamav/clamav/0.95.3/clamav-0.95.3.tar.gz

ตามด้วย download patch แก้ bug ของ version นี้
#fetch http://wiki.clamav.net/pub/Main/UpgradeNotes0953/patch-0.95.3-bug1737.diff

#tar zxf clamav-0.95.3.tar.gzatch-0.95.3
#cd clamav-0.95.3

ตามด้วย download patch แก้ bug ของ version นี้
#fetch http://wiki.clamav.net/pub/Main/UpgradeNotes0953/patch-0.95.3-bug1737.diff

สั่ง patch ลงไปครับ
#patch -p1 < patch-0.95.3-bug1737.diff

เรียบร้อยก็ เริ่ม update clam กันเลย

#./configure --sysconfdir=/usr/local/etc
#make
#make install

เช๊ค version ใหม่โดย
#clamscan -V

ClamAV 0.95.3

Pages: 1 ... 136 137 [138] 139 140 ... 146