0014 | MySQL Replicate
Wednesday, May 14th, 2008 Posted in Database | 2 Comments »* บทความนี้อ้างอิงและประยุกต์มาจากเว็บไซต์ต่อไปนี้
DNSThailand.com – เทคนิคการใช้ Replication ระดับสูงใน MySQL
CATTelecom.com – กิตติชน แม้นสมุทร [ejeepss] » Replicate MySQL 5.x
สืบเนื่องจาก entry ที่แล้ว
ก็เลยลองไปค้นๆ ข้อมูลเพิ่มเติมดูอีกหน่อยว่าเราลืมอะไรไปบ้าง
เพราะนึกได้ว่ายังไม่ได้ลองทำ MySQL Replicate เลย (ฮาๆ)
ประเด็นคือไม่รู้ว่ามันช้าที่ฐานข้อมูลรึเปล่า เพราะ debug ไม่เจอสาเหตุ
ก็เลยต้องลองทำเท่าที่ทำได้ไปก่อน
ขั้นต้นก็ต้องมี server 2 เครื่องขึ้นไปครับ
โดยสมมติเครื่องแรก ชื่อ web-slave
เครื่องที่สอง ชื่อ db-master
ก่อนอื่นมาที่เครื่อง web-slave สั่งติดตั้ง mysql server ตามนี้ครับ
* อ้างอิง Fedora 8 ครอบคลุม Fedora 4 – 9, CentOS 5.x รวมถึงสาย Redhat ทั้งหมดครับ
# yum install mysql-server
เสร็จแล้วเปิดแฟ้ม /etc/my.cnf เพิ่มเติมข้อมูลต่อไปนี้ครับ
server-id=2
master-host=10.0.0.2
master-port=3306
master-user=replicate
master-password=slavepassword
master-connect-retry=30
replicate-wild-do-table= %.%
report-host=10.0.0.1
(มันมาอีกละ สีฟ้าแดงเขียวนี่)
แก้ ip อะไรพวกนี้ให้ถูกนะครับ แล้วแก้ตัวแดงๆ ด้วย ตามที่ตั้งค่า
เครื่องนี้เสร็จและ กลับไปที่เครื่อง db-master ต่อ ก่อนอื่นต้องตั้งค่า username / password ก่อนครับ
โดยเข้าไปใน mysql query console (หรือที่ไหนก็ได้ที่สามารถตั้ง user ได้) แล้วรัน query ต่อไปนี้
mysql> GRANT REPLICATION SLAVE ON *.*
TO ‘replicate‘@’10.0.0.1‘ IDENTIFIED BY ‘slavepassword‘;
เสร็จแล้วออกมาสั่ง stop service mysql ได้เลยครับ แล้วก็แก้แฟ้ม /etc/my.cnf อีกนิดหน่อย ตามนี้ครับ
log-bin=mysql-bin
server-id=1
innodb_flush_log_at_trx_commit=1
sync_binlog=1
expire_logs_days=3
max_binlog_size=50M
ตรงนี้ปรับค่าตามความเหมาะสมนะครับ แล้วแต่ว่าจะเก็บ log กี่วันยังไง
โดยบรรทัดแรกสุดจะเป็น path + ชื่อแฟ้มที่ใช้เก็บ log (สามารถใส่ full path ได้ครับ เช่น /var/log/mysqld/binlog)
แล้วก็ย้ำว่าควรจะใส่ option สองบรรทัดด้านล่าง เพื่อป้องกัน hdd เต็ม (ฮา)
เคยเจอมาแล้วครับ เก็บ log เพลินไปหน่อย เศร้าเลย
ต่อจากนี้ก็ copy ข้อมูลจาก db-master ไปยังเครื่อง web-slave ครับ
ถ้าใน fedora/centos default install ก็อยู่ใน /var/lib/mysql
สั่ง tar ไปทั้ง folder เลยก็ยังไหวครับ (แต่ข้อแม้คือต้องเป็น mysql version เดียวกันนะ)
จากนั้นก็สั่ง service mysqld start ทั้งสองเครื่อง
แล้ว connect เข้า mysql ของเครื่อง db-master สั่ง query ต่อไปนี้ครับ
mysql> FLUSH TABLES WITH READ LOCK;
แล้วก็ connect เข้า mysql ของเครื่อง web-slave สั่ง query ต่อไปนี้ครับ
mysql> START SLAVE;
เท่านี้ก็เรียบร้อย ทีนี้ก็รอดูผลงาน… ถ้าเวิร์กจะเอาไปใส่เว็บ bitthai ด้วย (ฮาๆ)
Tags: load balance, mysql, optimize, postmunlife, replicate
0013 | เว็บโหด โคตรสยอง
Wednesday, May 14th, 2008 Posted in Web Server | 2 Comments »เมื่อวานงานเข้าครับ
ติดตั้งระบบใหม่ทั้งเครื่อง เว็บบอร์ดใต้ดินแห่งหนึ่ง
เนื่องด้วยคนเข้าเยอะชิบหาย แถมเป็นเว็บบอร์ด SMF ซะด้วย
โจทย์มีมาให้ค่อนข้าง… เอ่อ… ระดับนึงละครับ
server 2 เครื่อง เครื่องแรก Core 2 Duo E6600 / RAM 3 GB
เครื่องที่สอง Core 2 Quad Q6xxx อะไรซักอย่าง จำรุ่นไม่ได้ / RAM 3GB
จะบอกว่ามันใช้งานหนักเอามากๆ
งานนี้ก็เลยต้องทดลองมันสารพัดวิธีเลยครับ
เริ่มจาก level แรกสุด apache + squid reverse proxy ไม่ผ่านเลยครับ (load avg 50.xx)
level ที่สอง เพิ่ม DNS Round Robin เข้าช่วย เอาเครื่อง DB มาช่วยรันเว็บด้วย ก็ยังไม่ผ่าน แต่ดีขึ้นหน่อยนึง (load เหลือ 30.xx)
level ที่สาม ลง memcache ช่วยระบบ session + SMF memcache ก็ไม่ผ่านอยู่ดี แต่ดีขึ้นใช้ได้ (load เหลือ ~25.xx)
level สุดท้าย เลิกใช้ apache ลบ squid ทิ้ง แล้วลง lighttpd 1.4 + mod fastcgi แทน
load average ลดลงมาเหลือประมาณ 5-6 แต่ page generation time ก็ยังไม่ค่อยจะน่าพอใจ
แบบว่าหน้า index พี่ซัดไป 300 KB เยอะโคดเลย
งานนี้ขอเวลาไปสัปดาห์นึง ต้องนั่งเฝ้าอีก เห้อ… ไหนจะงานรับน้องด้วย งิดๆๆๆ
เพิ่มเติมทางเทคนิค:
NFS service บน Fedora 7 เป็นต้นมา มีการเปลี่ยนแปลงชื่อ service นิดๆ หน่อยๆ
ทำเอางงกันใช้ได้ (ฮาๆ) ตามรายการต่อไปนี้ครับ
- nfs ยังคงสภาพเดิม คำสั่งเดิมได้เลย
- portmap เปลี่ยนชื่อไปเป็น rpcbind
- เพิ่มเติม service nfslock ไว้ทำ nfs remote lock เวลาต้องการ lock access file ต่างๆ
ขั้นตอนการติดตั้ง nfs บน Fedora 8 ง่ายมากจนน่าตกใจ ดังนี้ครับ
# yum install nfs-utils
จบเลย คำสั่งเดียวสั้นๆ ง่ายๆ เลย
เสร็จแล้วก็ตั้งค่าให้รันตั้งแต่เริ่มเปิดเครื่อง (สำหรับเครื่อง nfs server เท่านั้น)
# chkconfig nfs on
# chkconfig nfslock on
# chkconfig rpcbind on
แล้วแก้แฟ้ม /etc/exports ตามคู่มือ (รายละเอียดค่อนข้างเยอะ ไว้ค่อยสาธยาย ง่วงมาก)
พร้อมด้วยการแก้ /etc/hosts.allow เพื่อเพิ่มความปลอดภัยให้แก่ nfs server
แก้เสร็จแล้วก็สั่ง start service ทั้งสามตัวได้เลย ตามลำดับต่อไปนี้
# service rpcbind start
# service nfs start
# service nfslock start
จากนั้นไปที่เครื่อง client ที่จะ mount nfs partition แล้วทดลองสั่งค้นหา partition ที่อนุญาตให้ mount ดู ตามนี้
# showmount -e 10.0.0.1
* กรุณาแก้ IP เป็น IP ของเครื่อง nfs server ของท่านครับ พอ list ได้ที่แล้วก็สั่ง mount ได้เลย
# mount 10.0.0.1:/path/to/exports /path/to/exports
กรณีการทำ load balancing แนะนำให้ mount ลงไปที่ path เดียวกันกับเครื่อง server ครับ
จะช่วยลดปัญหายุ่งยากลงได้เยอะ
Tags: load balance, nfs, optimize, postmunlife