*** MySQL Optimizing for Large Scale Server ***
คร่าวๆ นะครับ
เอาเรื่องนี้ก่อนดีกว่า พอดีช่วงนี้ได้ไปคุมเว็บ torrent tracker แห่งหนึ่งอยู่
peer สูงสุดเฉียด 30,000 (avg: 26,000)
users online หน้าเว็บ 500 (avg: 300 <-- น้อยไปหน่อย)
server แยกเป็น 2 เครื่อง
เครื่องที่ 1
httpd 2.0.54 (port: xxxx / listen: localhost) + mod_php
lighttpd 2.1.14 (port: 80 / listen: all) + php_fastcgi + mod_proxy
- mod_proxy: redirect
… announce.php ไปเครื่องที่ 2,
… “.css”, “.js” ไปเครื่องที่ 2,
… “.php” เข้า httpd
เครื่องที่ 2
litespeed web server 2.1.18 (port: 80 / listen: all / allow: ip เครื่องที่ 1 / deny: all)
- รับ connection เฉพาะแฟ้มที่ redirect มาจากเครื่องที่ 1 เท่านั้น
mysql 5.0.24 - compile แบบ pthread (เห็นแค่ process เดียว)
mysql
- peers ใช้ MEMORY engine [เคยอ่านเจอจากเรื่อง optimize ของ ThaiLE ขอบคุณพี่วัฒด้วยครับ]
- crontab copy ตาราง peers เข้าไปเป็นตาราง peerscache [MyISAM] เพื่อ backup ข้อมูล ทุกๆ 10 นาที
- แก้ init script ของ mysql ให้ backup / restore ตาราง peer ทุกครั้งที่มีการ stop / start mysql ตามลำดับ
- ทำตาราง userscache เก็บ stat ชั่วคราวของแต่ละ user เป็น memory engine เหมือนกัน
- crontab copy ตาราง userscache ลงตาราง users ทุกๆ 15 นาที
สถานะเซิฟเวอร์
เครื่องที่ 1
- Load Average: ~ 0.5-1.5
- cpu: 10%
- httpd process: ~ 20
เครื่องที่ 2
- Load Average: ~0.8-2.0
- cpu: 20%