บทความนี้มีวัตถุประสงค์เพื่อแนะนำวิธีการติดตั้งและกำหนดค่าคลัสเตอร์ MySQL บนเซิร์ฟเวอร์ 2 เครื่อง และตระหนักว่า MySQL ยังคงสามารถทำงานได้ต่อไปเมื่อเซิร์ฟเวอร์มีปัญหาหรือล่ม
สังเกต! แม้ว่านี่จะเป็นคลัสเตอร์ MySQL ที่ใช้ 2 เซิร์ฟเวอร์ แต่จะต้องมีเซิร์ฟเวอร์ตัวที่สามเพิ่มเติมเป็นโหนดการจัดการ แต่เซิร์ฟเวอร์นี้สามารถปิดระบบได้หลังจากการเริ่มต้นคลัสเตอร์เสร็จสิ้น ในเวลาเดียวกัน ควรสังเกตว่าไม่แนะนำให้ปิดเซิร์ฟเวอร์ที่ทำหน้าที่เป็นโหนดการจัดการหลังจากการเริ่มต้นคลัสเตอร์เสร็จสิ้น แม้ว่าในทางทฤษฎีจะเป็นไปได้ที่จะสร้างคลัสเตอร์ MySQL โดยใช้เซิร์ฟเวอร์เพียงสองเครื่อง แต่ด้วยสถาปัตยกรรมดังกล่าว เมื่อเซิร์ฟเวอร์ตัวหนึ่งล่ม คลัสเตอร์จะไม่สามารถทำงานต่อไปได้ตามปกติ ส่งผลให้ความหมายของคลัสเตอร์หายไป ด้วยเหตุนี้ เซิร์ฟเวอร์ตัวที่สามจึงจำเป็นต้องทำงานเป็นโหนดการจัดการ นอกจากนี้ เพื่อนหลายคนอาจไม่มีสภาพแวดล้อมจริงเหมือนเซิร์ฟเวอร์สามเครื่อง ดังนั้นพวกเขาจึงอาจพิจารณาทำการทดลองใน VMWare หรือเครื่องเสมือนอื่นๆ
ข้อมูลต่อไปนี้จะถือว่าสถานการณ์ของบริการทั้งสามนี้:
เซิร์ฟเวอร์ 1: mysql1.vmtest.net 192.168.0.1
เซิร์ฟเวอร์ 2: mysql2.vmtest.net 192.168.0.2
เซิร์ฟเวอร์ 3: mysql3.vmtest.net 192.168.0.3
เซิร์ฟเวอร์1 และเซิร์ฟเวอร์2 ทำหน้าที่เป็นเซิร์ฟเวอร์ที่กำหนดค่าคลัสเตอร์ MySQL จริง ๆ ข้อกำหนดสำหรับ Server3 ในฐานะโหนดการจัดการนั้นต่ำกว่า จำเป็นต้องมีการปรับเปลี่ยนเล็กน้อยสำหรับระบบ Server3 เท่านั้น และไม่จำเป็นต้องติดตั้ง MySQL Server3 สามารถใช้คอมพิวเตอร์ที่มีการกำหนดค่าต่ำกว่าและสามารถเรียกใช้บริการอื่น ๆ บน Server3 ได้ในเวลาเดียวกัน 2. ติดตั้ง MySQL บนเซิร์ฟเวอร์1 และเซิร์ฟเวอร์2
=================================จาก [url]/u/info_img/2009-05/30/url] ดาวน์โหลด mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz หมายเหตุ: ต้องเป็นเวอร์ชันสูงสุดของ MySQL เวอร์ชันมาตรฐานไม่รองรับการปรับใช้คลัสเตอร์! ขั้นตอนต่อไปนี้จำเป็นต้องทำเพียงครั้งเดียวบน Server1 และ Server2
# mv mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz /usr/local/
#ซีดี /usr/local/
#กลุ่มเพิ่ม mysql
# useradd -g mysql mysql
# tar -zxvf mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz
# rm -f mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz
# mv mysql-สูงสุด-4.1.9-pc-linux-gnu-i686 mysql
#ซีดีmysql
# สคริปต์/mysql_install_db --user=mysql
# chown -R รูต
# chown -R ข้อมูล mysql
# chgrp -R mysql
# cp รองรับไฟล์/mysql.server /etc/rc.d/init.d/mysqld
# chmod +x /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld อย่าเริ่ม MySQL ในขณะนี้!
ติดตั้งและกำหนดค่าเซิร์ฟเวอร์โหนดการจัดการ (Server3)
===================================== ในฐานะเซิร์ฟเวอร์โหนดการจัดการ Server3 ต้องการสองไฟล์: ndb_mgm และ ndb_mgmd : ดาวน์โหลด mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz จาก [url]/u/info_img/2009-05/30/url]
# mkdir /usr/src/mysql-mgm
# cd /usr/src/mysql-mgm
# tar -zxvf mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz
# rm mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz
# ซีดี mysql-max-4.1.9-pc-linux-gnu-i686
# mv bin/ndb_mgm .
# mv bin/ndb_mgmd .
# chmod +x ndb_mg*
# mv ndb_mg* /usr/bin/
#ซีดี
# rm -rf /usr/src/mysql-mgm ตอนนี้เริ่มสร้างไฟล์การกำหนดค่าสำหรับเซิร์ฟเวอร์โหนดการจัดการนี้:
# mkdir /var/lib/mysql-คลัสเตอร์
# cd /var/lib/mysql-คลัสเตอร์
# vi config.ini เพิ่มเนื้อหาต่อไปนี้ใน config.ini:
[ค่าเริ่มต้น NBDD]
NoOfReplicas=2
[ค่าเริ่มต้นของ MySQL]
[NDB_MGMD ค่าเริ่มต้น]
[ค่าเริ่มต้น TCP]
#เซิร์ฟเวอร์การจัดการ
[NDB_MGMD]
HostName=192.168.0.3 #ที่อยู่ IP ของเซิร์ฟเวอร์โหนดการจัดการ Server3
# เครื่องยนต์จัดเก็บข้อมูล
[NDBD]
ชื่อโฮสต์=192.168.0.1 #ที่อยู่ IP ของเซิร์ฟเวอร์คลัสเตอร์ MySQL1
DataDir= /var/lib/mysql-คลัสเตอร์
[NDBD]
ชื่อโฮสต์=192.168.0.2 #ที่อยู่ IP ของเซิร์ฟเวอร์คลัสเตอร์ MySQL2
DataDir=/var/lib/mysql-คลัสเตอร์
# [MYSQLD] สองรายการต่อไปนี้สามารถกรอกชื่อโฮสต์ของ Server1 และ Server2 ได้
# อย่างไรก็ตาม เพื่อที่จะเปลี่ยนเซิร์ฟเวอร์ในคลัสเตอร์ได้เร็วขึ้น ขอแนะนำให้เว้นว่างไว้ มิฉะนั้น จะต้องเปลี่ยนการกำหนดค่านี้หลังจากเปลี่ยนเซิร์ฟเวอร์
[MYSQLD]
[MYSQLD] หลังจากบันทึกและออกแล้ว ให้เริ่มเซิร์ฟเวอร์โหนดการจัดการ Server3:
# หลังจากเริ่มต้นโหนดการจัดการด้วย ndb_mgmd คุณควรทราบว่านี่เป็นเพียงบริการโหนดการจัดการ ไม่ใช่เทอร์มินัลการจัดการ ดังนั้นคุณจะไม่เห็นข้อมูลผลลัพธ์ใด ๆ เกี่ยวกับการเริ่มต้นระบบ 4. กำหนดค่าเซิร์ฟเวอร์คลัสเตอร์และเริ่ม MySQL
============================= การเปลี่ยนแปลงต่อไปนี้จำเป็นต้องทำในทั้ง Server1 และ Server2:
# vi /etc/my.cnf
[mysqld]
ndbคลัสเตอร์
ndb-connectstring=192.168.0.3 #ที่อยู่ IP ของ Server3
[mysql_cluster]
ndb-connectstring=192.168.0.3 #หลังจากบันทึกที่อยู่ IP ของ Server3 และออกแล้ว ให้สร้างไดเร็กทอรีข้อมูลและเริ่ม MySQL:
# mkdir /var/lib/mysql-คลัสเตอร์
# cd /var/lib/mysql-คลัสเตอร์
# /usr/local/mysql/bin/ndbd --initial
# /etc/rc.d/init.d/mysqld start คุณสามารถเพิ่ม /usr/local/mysql/bin/ndbd ใน /etc/rc.local เพื่อเริ่มต้นได้ หมายเหตุ: คุณจะต้องใช้พารามิเตอร์ --initial เมื่อเริ่มต้น ndbd เป็นครั้งแรกหรือหลังจากทำการเปลี่ยนแปลงกับ config.ini ของ Server3! 5. ตรวจสอบสถานะการทำงาน
================ กลับไปที่เซิร์ฟเวอร์โหนดการจัดการ Server3 และเริ่มเทอร์มินัลการจัดการ:
# /usr/bin/ndb_mgm พิมพ์คำสั่ง show เพื่อดูสถานะการทำงานปัจจุบัน: (ต่อไปนี้เป็นตัวอย่างของเอาต์พุตสถานะ)
[root@mysql3 root]# /usr/bin/ndb_mgm
-- คลัสเตอร์ NDB -- ไคลเอนต์การจัดการ --
ndb_mgm> แสดง
เชื่อมต่อกับเซิร์ฟเวอร์การจัดการที่: localhost:1186
การกำหนดค่าคลัสเตอร์
-
[ndbd(NDB)] 2 โหนด
id=2 @192.168.0.1 (เวอร์ชัน: 4.1.9, Nodegroup: 0, Master)
id=3 @192.168.0.2 (เวอร์ชัน: 4.1.9, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 โหนด
id=1 @192.168.0.3 (เวอร์ชัน: 4.1.9)
[mysqld(API)] 2 โหนด
id=4 (เวอร์ชัน: 4.1.9)
id=5 (เวอร์ชัน: 4.1.9)
ndb_mgm>
หากไม่มีปัญหาข้างต้น ให้เริ่มทดสอบ MySQL ทันที โปรดทราบว่าเอกสารนี้ไม่ได้ตั้งค่ารหัสผ่านรูทสำหรับ MySQL ขอแนะนำให้คุณตั้งรหัสผ่านรูท MySQL สำหรับ Server1 และ Server2 ด้วยตัวเอง ในเซิร์ฟเวอร์ 1:
# /usr/local/mysql/bin/mysql -u root -p
> ใช้การทดสอบ;
> สร้างตาราง ctest (i INT) ENGINE=NDBCLUSTER;
> ใส่เข้าไปใน ctest () ค่า (1);
> SELECT * FROM ctest; คุณควรจะเห็นข้อมูลที่ส่งคืน 1 แถว (ค่าส่งคืน 1) หากสิ่งที่กล่าวข้างต้นเป็นเรื่องปกติ ให้เปลี่ยนไปใช้ Server2 และทำการทดสอบข้างต้นซ้ำเพื่อสังเกตผล หากสำเร็จ ให้รัน INSERT ใน Server2 แล้วเปลี่ยนกลับไปเป็น Server1 เพื่อดูว่าทำงานได้ตามปกติหรือไม่ หากไม่มีปัญหาใดๆ ยินดีด้วยที่ประสบความสำเร็จ! 6. การทดสอบแบบทำลายล้าง
============== ถอดปลั๊กสายเคเบิลเครือข่ายของ Server1 หรือ Server2 และสังเกตว่าเซิร์ฟเวอร์คลัสเตอร์อื่นทำงานตามปกติหรือไม่ (คุณสามารถใช้แบบสอบถาม SELECT เพื่อทดสอบ) หลังจากการทดสอบเสร็จสิ้น ให้เสียบสายเคเบิลเครือข่ายกลับเข้าไปใหม่ หากคุณไม่สามารถเข้าถึงเซิร์ฟเวอร์จริงได้ กล่าวคือ คุณไม่สามารถถอดปลั๊กสายเคเบิลเครือข่ายได้ คุณยังสามารถทดสอบได้ดังนี้: บนเซิร์ฟเวอร์1 หรือเซิร์ฟเวอร์2:
# ps aux | . grep ndbd จะเห็นข้อมูลกระบวนการ ndbd ทั้งหมด:
รูต 5578 0.0 0.3 6220 1964 ? ส 03:14 0:00 น
รูท 5579 0.0 20.4 492072 102828 ? R 03:14 0:04 ndbd
root 23532 0.0 0.1 3680 684 pts/1 S 07:59 0:00 grep ndbd จากนั้นฆ่ากระบวนการ ndbd เพื่อทำลายเซิร์ฟเวอร์คลัสเตอร์ MySQL:
# kill -9 5578 หลังจาก 5579 ให้ใช้แบบสอบถาม SELECT บนเซิร์ฟเวอร์คลัสเตอร์อื่นเพื่อทดสอบ และหากคุณดำเนินการคำสั่ง show ในเทอร์มินัลการจัดการของเซิร์ฟเวอร์โหนดการจัดการ คุณจะเห็นสถานะของเซิร์ฟเวอร์ที่เสียหาย หลังจากการทดสอบเสร็จสิ้น คุณจะต้องรีสตาร์ทกระบวนการ ndbd ของเซิร์ฟเวอร์ที่เสียหายเท่านั้น:
#ndbdโปรดทราบ! ตามที่กล่าวไว้ก่อนหน้านี้ ไม่จำเป็นต้องเพิ่มพารามิเตอร์ --initial ในขณะนี้! ณ จุดนี้ การกำหนดค่าคลัสเตอร์ MySQL เสร็จสมบูรณ์!