MySQL Cluster on Debian AMD64
สวัสดีเพื่อนๆรวมโลกทุกท่าน วันนี้ก็ได้โอกาศมาเขียนบทความเรื่อง MySQL Cluster สะที หลังจากที่ได้ทำการติดตั้ง และงมกะ Config มาหลายวันจริงๆผมต้องย้าย Database ให้เสร็จตั้งแต่วันที่ 2/6/2008 แต่จนถึงวันนนี้ก็ยังไม่ได้ย้าย
Database เลย เหตุผลหลักคือ
1. Database ค่อนข้างใหญ่ ประมาณ 7G และมี Redcord อยู่ประมาณ 38 ล้าน Redcord
2. ตอน Import Data ผม Dump database มาผิดแบบ
3. MySQL ตอนที่ผม Lab test + ใช้งานจริงเป็นคนละ Version
ด้วยเหตุผลเหล่านี้ทำให้ผมขึ้น MySQL Cluster ไม่ได้ หลังจากลองหาทางแก้อยู่หลายวัน ก็แก้ได้จนหมด งั้นวันนี้ผมก็ของบอกวิธีติดตั้ง และ Config ให้สามารถใช้งานได้ก่อนละกันนะครับ ส่วนเรื่องการ Tuning เอาไว้เดี๋ยวมาบอกอีกที
อุปกรณ์
- Dell 1950, CPU 4Core 2.66GHz x2, Ram 16G (ndbd+mysqld)
- PC P4, Ram 1G (ndb_memd)
การตั้งค่า
- DBC1 IP: 192.168.1.21
- BDC2 IP: 192.168.1.22
- MGM IP: 192.168.1.11
1. ทำการ Download ไฟล์มาเพื่อทำการติดตั้ง ทีแรกผมดันไปเอา Version ใหม่มาลงทำให้เกิดปัญหา แนะนำให้ใช้ MySQL 5.1x + ndb 6.2.x นะครับ
cd /usr/src wget http://mirror.siambox.com/mysql/mysql-5.1.23-ndb-6.2.15.tar.gz tar zxf mysql-5.1.23-ndb-6.2.15.tar.gz cd mysql-5.1.23-ndb-6.2.15 ./configure --prefix=/usr/local/mysql --with-plugins=max --with-ndbcluster --with-charset=tis620 --with-extra-charsets=all --with-collation=tis620_thai_ci make -j9 make install
2. หลังจากติดตั้งทุกเครื่องแล้ว ให้ทำการตั้งค่า config ที่เครื่อง Manager Node (MGM) ดั่งนี้
mkdir /home/mysql-cluster vi /home/mysql-cluster/config.ini
ค่าที่ต้องแก้ไขคือ
NoOfReplicas คือจำนวนของ DataNode ที่มี
Datadir คือ Directory ที่จะทำการเก็บ Data ของ DataNode
DataMemory คือจำนวน Memory ที่จะ Allow ให้ MySQL นำมาใช้งานเก็บ Data ควรเหลือให้ System ใช้งานอย่างน้อง 1G สูตรคือ (SizeofDatabase × NumberOfReplicas × 1.1 ) / NumberOfDataNodes
IndexMemory คือการกำหนดค่าให้ NDB ทำการ Allow Memory ที่จะให้เก็บ Index ส่วนใหญ่ใช้ค่า DataMemory/8 ครับ
3. ทำการตั้งค่าที่เครื่อง NDB ทั้ง 2 เครื่อง
vi /etc/my.cnf
"192.168.1.11"4. ทำการ start ndb_mgmd ก่อนและทำการตรวจสอบว่าทำงาน ดั่งนี้
/usr/local/mysql/libexec/ndb_memd -f /home/mysql-cluster/config.ini /usr/local/mysql/bin/ndb_mgm
5. ทำการ start ndbd โดยการ start ครั้งแรกนั้นต้องใส่ options –initial ด้วย หากทำการ shutdown ndbd ไปแล้ว ครั้งต่อไปไม่ต้องทำการใส่ option อีก หากใส่เข้าไป ndb จะทำการ clean data เก่าทั้งหมดทิ้ง
/usr/local/mysql/libexec/ndbd --initial
6. ทำการตรวจสองว่า NDB ทำงานแล้ว โดยไปที่เครื่อง Manager Node แล้วใช้คำสั่ง show เพื่อดู status ของ ndb
; show ;
หรือใช้คำสั่ง ALL STATUS จะเป็นการ show status ของแต่ละ node ดั่งนี้
; ALL STATUS ;
7. ทำการ start mysqld เพื่อให้ Client conenct มายัง API Node ได้
useradd -u 90 mysql mkdir /home/mysql/ /usr/local/mysql/bin/mysql_install_db chown -R mysql:mysql /home/mysql/ /usr/local/mysql/bin/mysqld_safe &
ทำการตรวจสองว่า API Node ได้ทำการ Connect ไปยังเครื่อง Manager Node แล้ว โดยตรวจสอบที่เครื่อง MGM
; show ;
หากขึ้นแบบ ขั้นต้น ก็แปลว่า MySQL Cluster ของเราสามารถทำงานได้แล้วครับผม
วิธีการใช้งาน ก็สามารถให้ Client Connect มายังเครื่อง DBC1, DBC2 ได้เลยครับ เวลา Create tables เราก็เปลี่ยจาก Engine=MyISAM เป็น Engine=NDBCLUSTER แค่นี้ ก็สามารถใช้งานได้แล้วครับ เรื่องการทำ HA และการ Convert Data เอาไว้ครั้งหน้าผมจะมาเขียนให้อีกทีแล้วกันนะครับ
July 3rd, 2008 at 6:47 pm
found your site on del.icio.us today and really liked it.. i bookmarked it and will be back to check it out some more later ..
July 17th, 2008 at 4:01 pm
สุดยอดครับ ขอบคุณมาก กำลังออกแบบdbอยู่ครับ ระบบประมาณ 2000 request หรือ8000query per sec. คิดว่าคงต้องใช้ mysql แบบ cluster ไม่ทราบว่าควรใช้กี่node ดีครับแล้วแต่ละnode specขั้นต่ำแค่ไหนดีครับ ช่วยแนะนำด้วยครับ
July 17th, 2008 at 6:05 pm
ส่วนของ MySQL Cluster ผมทดสอบแล้ว เรื่อง Speed ค่อขข้างช้ากว่า ปกติครับ อาจจะเพราะต้องเขียน data ลง network ตอนนี้ย้ายกลับมาทำ Master/Slave ครับผม
October 29th, 2008 at 5:57 pm
แจ่มมากพี่อัท บังเอิญ search เจอบลอกนี้
แล้วล่าสุดตอนนี้เป็นไงบ้าง กลับมาใช้ระบบ master/slave แล้วหรอพี่
March 3rd, 2009 at 8:33 am
ผมกำลังแยก database ออกจาก webserver เหมือนกัน แต่ปรากฏว่ามันยังทำงานช้าอยู่มาก ทั้งๆที่หลายคนบอกว่าใช้ skip-name-resolve ครับ ไม่ทราบว่าต้อง config อะไรเพิ่มเป็นพิเศษหรือเปล่าครับ เพื่อจะให้ mysql ทำงานได้เต็มที่ครับ
March 3rd, 2009 at 11:12 am
ส่วนของ Database ต้องวิเคราะหลายอย่างครับ แนะนำให้เปิด Slow query log แล้วดูว่า query ไหนที่เกิด slow เราก็เข้าไปแก้ query ที่เกิดปัญหาครับ