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 เอาไว้ครั้งหน้าผมจะมาเขียนให้อีกทีแล้วกันนะครับ

Related Posts

Tags: , , ,


6 Responses to “MySQL Cluster on Debian AMD64”

  1. Local Mysql Server Through Mysqld Says:

    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 ..

  2. eak Says:

    สุดยอดครับ ขอบคุณมาก กำลังออกแบบdbอยู่ครับ ระบบประมาณ 2000 request หรือ8000query per sec. คิดว่าคงต้องใช้ mysql แบบ cluster ไม่ทราบว่าควรใช้กี่node ดีครับแล้วแต่ละnode specขั้นต่ำแค่ไหนดีครับ ช่วยแนะนำด้วยครับ

  3. อัทศักดิ์ วงศ์กิตตะ Says:

    ส่วนของ MySQL Cluster ผมทดสอบแล้ว เรื่อง Speed ค่อขข้างช้ากว่า ปกติครับ อาจจะเพราะต้องเขียน data ลง network ตอนนี้ย้ายกลับมาทำ Master/Slave ครับผม

  4. rukawa Says:

    แจ่มมากพี่อัท บังเอิญ search เจอบลอกนี้
    แล้วล่าสุดตอนนี้เป็นไงบ้าง กลับมาใช้ระบบ master/slave แล้วหรอพี่

  5. sdayu Says:

    ผมกำลังแยก database ออกจาก webserver เหมือนกัน แต่ปรากฏว่ามันยังทำงานช้าอยู่มาก ทั้งๆที่หลายคนบอกว่าใช้ skip-name-resolve ครับ ไม่ทราบว่าต้อง config อะไรเพิ่มเป็นพิเศษหรือเปล่าครับ เพื่อจะให้ mysql ทำงานได้เต็มที่ครับ

  6. อัทศักดิ์ วงศ์กิตตะ Says:

    ส่วนของ Database ต้องวิเคราะหลายอย่างครับ แนะนำให้เปิด Slow query log แล้วดูว่า query ไหนที่เกิด slow เราก็เข้าไปแก้ query ที่เกิดปัญหาครับ

Leave a Reply

IMPORTANT! To be able to proceed, you need to solve the following simple math (so we know that you are a human) :-)

What is 11 + 9 ?
Please leave these two fields as-is: