บทความนี้จะบอกวิธีกำหนดค่าฐานข้อมูล MySQL 5 แบบสามโหนด คลัสเตอร์เซิร์ฟเวอร์ : สองโหนดการจัดเก็บข้อมูลและหนึ่ง
โหนดการจัดการ
คลัสเตอร์คือโหลดบาลานเซอร์ที่มีความพร้อมใช้งานสูง
ซึ่งประกอบด้วยสองโหนดที่ใช้แพ็คเกจการติดตั้ง Ultra Monkey
ที่จัดเตรียม "ฮาร์ตบีท" (ใช้เพื่อตรวจสอบว่าโหนดอื่นยังมีชีวิตอยู่หรือไม่) และ
"ldirectord" (กระจายคำขอไปยังโหนดของคลัสเตอร์ MySQL) .ในบทความนี้ แต่ละโหนดของเราใช้ระบบ Debian Sarge Linux การติดตั้งลีนุกซ์รุ่นอื่นๆ อาจ
แตกต่างกัน
เล็กน้อยเราใช้ MySQL เวอร์ชัน 5.0.19 หากคุณไม่ต้องการใช้ MySQL 5 คุณสามารถใช้ MySQL 4.1 ได้เช่นกัน
แม้ว่า
ฉันจะยังไม่ได้ทดสอบก็ตามบทความนี้เป็นแนวทางการประยุกต์ใช้งานที่ไม่เกี่ยวข้องกับทฤษฎีมากเกินไป คุณจะพบทฤษฎีมากมายเกี่ยวกับการจัดกลุ่มทางออนไลน์
สำหรับเซิร์ฟเวอร์เดียว
ฉันใช้เซิร์ฟเวอร์ Debian ต่อไปนี้ ทั้งหมดอยู่ในเซ็กเมนต์เครือข่ายเดียวกัน (ตัวอย่างนี้: 192.168.0.x):
sql1.test.com: 192.168.0.101 MySQL Cluster Node 1
sql2.test.com: 192.168 0.102 โหนดคลัสเตอร์ MySQL 2
loadb1.test.com: 192.168.0.103 การปรับสมดุลโหลด 1 / เซิร์ฟเวอร์การจัดการคลัสเตอร์ MySQL
loadb2.test.com: 192.168.0.104 การปรับสมดุลการโหลด 2
นอกจากนี้เรายังต้องมีที่อยู่ IP เสมือน: 192.168.0.105 โดยจะจัดให้มีการปรับสมดุลโหลดสำหรับคลัสเตอร์ MySQL นี้เพื่อให้
แอปพลิเคชันสามารถเข้าถึงคลัสเตอร์ผ่านที่อยู่ IP เดียวที่รวมเป็นหนึ่ง
แม้ว่าเราต้องการใช้สองโหนดใน MySQL Cluster แต่เรายังคงต้องการโหนดที่สาม นั่นคือ MySQL Cluster Management Server
ด้วยเหตุผลหลักประการหนึ่ง นั่นคือ หากโหนด MySQL Cluster ตัวใดตัวหนึ่งหยุดทำงานและ MySQL Cluster Management Server ไม่ทำงาน
จากนั้นข้อมูลบนโหนดคลัสเตอร์ทั้งสองจะไม่สอดคล้องกัน ("สมองแยก") เราจำเป็นต้องใช้มันเพื่อกำหนดค่าคลัสเตอร์ MySQL
ดังนั้นโดยทั่วไปการติดตั้งของเราต้องใช้ห้าเครื่อง:
2 โหนดคลัสเตอร์ MySQL + 1 เซิร์ฟเวอร์การจัดการคลัสเตอร์ + 2 โหลดบาลานเซอร์ = 5
เนื่องจากเซิร์ฟเวอร์การจัดการคลัสเตอร์ไม่ได้ใช้ทรัพยากรจำนวนมาก ระบบจะว่างเปล่า ไม่ทำอะไรเลย เพื่อให้เราสามารถวางโหลดบาลานเซอร์
เครื่องแรก
ของเรา ไว้ในเครื่องเดียวกับมัน ซึ่งช่วยเราประหยัดเซิร์ฟเวอร์ได้หนึ่งเครื่อง ดังนั้นเราจึงต้องการเพียงสี่เครื่อง
เท่านั้น2. กำหนดค่าเซิร์ฟเวอร์การจัดการคลัสเตอร์ MySQL
ขั้นแรกเราต้องดาวน์โหลด MySQL 5.0.19 และติดตั้งเซิร์ฟเวอร์การจัดการคลัสเตอร์ (ndb_mgmd) และไคลเอ็นต์การจัดการคลัสเตอร์ (ndb_mgm - ซึ่ง
สามารถใช้เพื่อตรวจสอบการทำงานของคลัสเตอร์) ดังต่อไปนี้ ขั้นตอนอยู่ใน loadb1.test .com (192.168.0.103):
loadb1.test.com:
mkdir /usr/src/mysql-mgm
cd /usr/src/mysql-mgm
wget http://dev.mysql.com/get /ดาวน์โหลด/ MySQL-5.0/mysql-max-5.0.19-linux-i686-
glibc23.tar.gz/from/http://www.mirrorservice.org/sites/ftp.mysql.com/
tar xvfz mysql- max-5.0 .19-linux-i686-glibc23.tar.gz
ซีดี mysql-max-5.0.19-linux-i686-glibc23
mv bin/ndb_mgm /usr/bin
mv bin/ndb_mgmd /usr/bin
chmod 755 /usr/ bin/ndb_mg *
cd /usr/src
rm -rf /usr/src/mysql-mgm
ถัดไปเราต้องสร้างไฟล์การกำหนดค่าคลัสเตอร์ /var/lib/mysql-cluster/config.ini:
loadb1.test.com:
mkdir /var /lib/mysql-cluster
cd /var/lib/mysql-cluster
vi config.ini
————-
[NDBD DEFAULT]
NoOfReplicas=2
[MYSQLD DEFAULT]
[NDB_MGMD DEFAULT]
[TCP DEFAULT]
# ส่วนสำหรับคลัสเตอร์ โหนดการจัดการ
[NDB_MGMD
]
# ที่อยู่ IP ของโหนด
การ
จัดเก็บข้อมูลแรก
HostName
=192.168.0.101
DataDir= /var/lib/ mysql-cluster
[NDBD]
# ที่อยู่ IP ของโหนดหน่วยเก็บข้อมูลที่สอง
HostName=192.168.0.102
DataDir=/var/lib/mysql-cluster
# หนึ่ง [MYSQLD] ต่อโหนดหน่วยเก็บข้อมูล
[MYSQLD]
[MYSQLD]
———-
ในแอปพลิเคชันจริง โปรดเปลี่ยนไฟล์ แทนที่ที่อยู่ IP ด้วย IP ที่เกี่ยวข้องของคุณ
จากนั้นเราเริ่มต้นเซิร์ฟเวอร์การจัดการคลัสเตอร์:
loadb1.test.com:
ndb_mgmd -f /var/lib/mysql-cluster/config.ini
เราควรจะต้องสามารถเริ่มเซิร์ฟเวอร์การจัดการโดยอัตโนมัติเมื่อเซิร์ฟเวอร์เริ่มทำงาน ดังนั้นเราจึงสร้าง
สคริปต์การเริ่มต้นที่ง่ายมาก
และการเชื่อมต่อเริ่มต้นที่เกี่ยวข้อง:
loadb1.test.com:
echo 'ndb_mgmd -f /var/lib/mysql-cluster/config.ini' > /etc/init.d/ndb_mgmd
chmod 755 /etc/init. d/ ndb_mgmd
update-rc.d ค่าเริ่มต้น ndb_mgmd
การกำหนดค่าสามโหนดคลัสเตอร์ MySQL (โหนดที่เก็บข้อมูล)
ตอนนี้เราจะติดตั้ง mysql-max-5.0.19 บน sql1.test.com และ sql2.test.com ตามลำดับ:
sql1.example.com/ sql2 .example.com:
groupadd mysql
useradd -g mysql mysql
cd /usr/local/
wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-max-5.0.19-linux-i686-
glibc23.tar.gz/from/http://www.mirrorservice.org/sites/ftp.mysql.com/
tar xvfz mysql-max-5.0.19-linux-i686-glibc23.tar.gz
ln -s mysql - max-5.0.19-linux-i686-glibc23 mysql
cd
สคริปต์ mysql/mysql_install_db –user=mysql
chown -R root:mysql
chown -R mysql data
cp support-files/mysql.server /etc/init.d/
chmod 755 /etc/init.d/mysql.server
update-rc.d mysql.server ค่าเริ่มต้น
cd /usr/local/mysql/bin
mv * /usr/bin
cd ../
rm -fr /usr/local/mysql/bin
ln -s /usr/bin /usr/local/mysql/bin
จากนั้นเราสร้างไฟล์การกำหนดค่า MySQL /etc/my.cnf ในแต่ละโหนด:
vi /etc/my.cnf
–
[mysqld]
ndbcluster
# ที่อยู่ IP ของคลัสเตอร์ โหนดการจัดการ
ndb-connectstring=192.168.0.103
[mysql_cluster]
# ที่อยู่ IP ของโหนดการจัดการคลัสเตอร์
ndb-connectstring=192.168.0.103
–
ตรวจสอบให้แน่ใจว่าคุณป้อนที่อยู่ IP ที่ถูกต้องในเซิร์ฟเวอร์การจัดการคลัสเตอร์
ต่อไปเราจะสร้างไดเรกทอรีข้อมูลและเริ่มเซิร์ฟเวอร์ MySQL บนแต่ละโหนดคลัสเตอร์:
sql1.test.com / sql2.test.com:
mkdir /var/lib/mysql-cluster
cd /var/lib/mysql-cluster
ndbd – เริ่มต้น
/ etc/init.d/mysql.server start
(โปรดจำไว้ว่า: เราจะเริ่ม MySQL เป็นครั้งแรกเท่านั้นหรือเมื่อ /var/lib/mysql-cluster/config.ini บน loadb1.test.com
เปลี่ยนแปลง ใช้เฉพาะ ndbd –initial)
ตอนนี้ถึงเวลาตั้งรหัสผ่านสำหรับบัญชีรูท MySQL:
sql1.test.com / sql2.test.com:
mysqladmin -u รหัสผ่านรูท yourrootsqlpassword
เราจำเป็นต้องเริ่มโหนดคลัสเตอร์เมื่อเซิร์ฟเวอร์เริ่มทำงาน ดังนั้นเราจึงสร้างการเริ่มต้น ndbd สคริปต์และ
การเชื่อมต่อเริ่มต้นระบบที่เกี่ยวข้อง:
sql1.test.com / sql2.test.com:
echo 'ndbd' > /etc/init.d/ndbd
chmod 755 /etc/init.d/ndbd
update-rc
4 การทดสอบคลัสเตอร์ MySQL
การกำหนดค่าคลัสเตอร์ MySQL ของเราเสร็จสมบูรณ์แล้ว ถึงเวลาทดสอบแล้ว บนเซิร์ฟเวอร์การจัดการคลัสเตอร์
(loadb1.test.com) ให้รันไคลเอ็นต์การจัดการคลัสเตอร์ ndb_mgm เพื่อตรวจสอบว่าโหนดคลัสเตอร์เชื่อมต่ออยู่หรือไม่:
loadb1.test.com:
ndb_mgm
คุณจะเห็นสิ่งนี้:
– คลัสเตอร์ NDB – ไคลเอ็นต์การจัดการ –
ndb_mgm >
ใน Enter show;
แสดงบนบรรทัดคำสั่ง;
ข้อมูลเอาต์พุตควรเป็นดังนี้:
ndb_mgm> show;
Connected to Management Server at: localhost:1186
Cluster Configuration
———————
[ndbd(NDB)] 2 node( s)
id= 2 @192.168.0.101 (เวอร์ชัน: 5.0.19, Nodegroup: 0, Master)
id=3 @192.168.0.102 (เวอร์ชัน: 5.0.19, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 โหนด )
id=1 @192.168.0.103 (เวอร์ชัน: 5.0.19)
[mysqld(API)] 2 โหนด
id=4 @192.168.0.101 (เวอร์ชัน: 5.0.19)
id=5 @192.168.0.102 (เวอร์ชัน: 5.0.19)
ndb_mgm>
หากคุณเห็นว่าโหนดทั้งหมดของคุณเชื่อมต่ออยู่ แล้วทุกอย่างก็เป็นไปด้วยดี!
เข้าสู่
exit
เพื่อออกจากคอนโซลไคลเอ็นต์ ndb_mgm
ตอนนี้เราสร้างฐานข้อมูลทดสอบบนโหนด sql1.test.com สร้างตารางทดสอบและ
กรอก
ข้อมูลการทดสอบบางส่วน:
mysql -u root -p
CREATE DATABASE mysqlclustertest;
USE mysqlclustertest;
;
INSERTINTO
testtable () VALUES (1);
SELECT
* FROM testtable
;
ไม่ทำงาน!)
ผลลัพธ์ของ SELECT ควรเป็น:
mysql> SELECT * FROM testtable;
+——+
|
.i
|.
+——
+
|
ฐานข้อมูลเดียวกันบนโหนด sql2.test.com (ใช่ เรายังต้องสร้างมันขึ้นมา แต่ข้อมูลจะถูกคัดลอกไปยัง sql2.test.com
หลังจากที่สร้างตารางทดสอบแล้ว
เนื่องจากตารางทดสอบใช้ ENGINE=NDBCLUSTER):sql2.test.com test.com:
mysql -u root -p
CREATE DATABASE mysqlclustertest;
SELECT
* FROM testtable;
ผลลัพธ์ของ SELECT ควรเหมือนกับผลลัพธ์ของ sql1.test.com ด้านบน:
mysql> SELECT * FROM testtable
; —+
|. i |.
+——+
|. 1 |.
+——+
1 แถวในชุด (0.04 วินาที)
เราเห็นว่าข้อมูลถูกคัดลอกจากโหนด sql1.test.com ไปยังโหนด sql2.example.com ตอนนี้เรา
แทรกอีกแถวลงในตารางทดสอบ:
sql2.test.com:
INSERT INTO testtable () VALUES (2);
ออก
ตอนนี้ให้เรากลับไปที่โหนด sql1.example.com และตรวจสอบว่าเราสามารถเห็นแถวที่แทรกใหม่ได้หรือไม่:
sql1.example.com:
mysql -u root -p
USE
mysqlclustertest;
SELECT
*
FROM
testtable
;
ออก
;
|. 2 |.
+——+
2 แถวในชุด (0.05 วินาที)
ดังนั้นทุกโหนดคลัสเตอร์จึงมีข้อมูลเหมือนกัน!
ตอนนี้เรามาดูกันว่าเราหยุดโหนด 1 (sql1.example.com): รัน
sql1.example.com:
killall ndbd
และตรวจสอบ
ps grep ndbd |
เพื่อดูว่ากระบวนการ ndbd ทั้งหมดสิ้นสุดลงแล้ว หากคุณยังคงเห็นกระบวนการ ndbd ให้รัน
killall ndbd
อีกครั้งจนกว่ากระบวนการ ndbd ทั้งหมดจะสิ้นสุดลง
ตอนนี้บนเซิร์ฟเวอร์การจัดการของเรา ให้ตรวจสอบสถานะของคลัสเตอร์ (loadb1.example.com):
loadb1.example.com:
ndb_mgm
Typeshow;
บนคอนโซล ndb_mgm
คุณควรเห็นสิ่งนี้:
ndb_mgm> show
เชื่อมต่อกับเซิร์ฟเวอร์การจัดการที่: localhost :1186
การกำหนดค่าคลัสเตอร์
————————
[ndbd(NDB)] 2 โหนด
id=2 (ไม่ได้เชื่อมต่อ ยอมรับการเชื่อมต่อจาก 192.168.0.101)
id=3 @192.168.0.102 (เวอร์ชัน: 5.0 .19 , Nodegroup: 0, Master)
[ndb_mgmd(MGM)] 1 โหนด
id=1 @192.168.0.103 (เวอร์ชัน: 5.0.19)
[mysqld(API)] 2 โหนด
id=4 @192.168 .0.101 (เวอร์ชัน: 5.0.19)
id=5 @192.168.0.102 (เวอร์ชัน: 5.0.19)
ndb_mgm>
คุณเห็นแล้วว่าโหนด sql1.example.com ไม่ได้เชื่อมต่ออยู่
Enter:
ออก;
ออกจากคอนโซล ndb_mgm
ให้เราตรวจสอบโหนด
sql2.example.com:
mysql -u root -p
USE
mysqlclustertest;
SELECT * FROM testtable;
exit
;
+— —+
|. i |.
+——+
|.
2 |
.
2 แถวในชุด (0.17 วินาที)
ตกลง การทดสอบทั้งหมดเป็นเรื่องปกติ ตอนนี้ให้เราเริ่มโหนด sql1.test.com อีก
ครั้ง .example .com:
ndbd
5 วิธีรีสตาร์ทคลัสเตอร์
ตอนนี้ให้เราจินตนาการว่าคุณต้องรีสตาร์ทคลัสเตอร์ MySQL
เนื่องจากการแก้ไข /var/lib/mysql-cluster/config.ini บนโหนด loadb1.test.com
หรืออื่นๆ เหตุผลเมื่อต้องการทำเช่นนี้ คุณใช้
ไคลเอ็นต์การจัดการคลัสเตอร์ ndb_mgm บนโหนด loadb1.example.com:
loadb1.test.com:
ndb_mgm
ที่คอนโซล ndb_mgm คุณพิมพ์
ปิดระบบ
คุณจะเห็นข้อความเช่นนี้:
ndb_mgm> ปิดระบบ
; : การปิดระบบคลัสเตอร์
โหนด 2: การปิดระบบโหนดเสร็จสมบูรณ์
2 โหนดคลัสเตอร์ NDB ได้ปิดระบบแล้ว
ndb_mgm
>
ซึ่งหมายความว่าโหนดคลัสเตอร์ sql1.test.com และ sql2.test.com ได้รับการ เซิร์ฟเวอร์การจัดการคลัสเตอร์ทั้งหมดถูกปิดตัวลง
เรียก
ใช้
ออกจากคอนโซล ndb_mgm
ในการเริ่มต้นเซิร์ฟเวอร์การจัดการคลัสเตอร์ ให้ทำสิ่งนี้บน loadb1.test.com:
loadb1.test.com:
ndb_mgmd -f /var/lib/mysql-cluster/config.ini
และบน sql1.test.com และ sql2.test.com ทำงานบน:
sql1.example.com / sql2.example.com:
ndbd
หรือคุณเพิ่งแก้ไขไฟล์ /var/lib/mysql-cluster/config.ini บน loadb1.test.com:
ndbd –initial
หลังจากนี้ คุณจะ สามารถตรวจสอบได้ที่ loadb1.test.com เพื่อดูว่าคลัสเตอร์ถูกรีสตาร์ทหรือไม่:
loadb1.test.com:
ndb_mgm
ในคอนโซล ndb_mgm ให้ป้อน
show;
เพื่อดูสถานะปัจจุบันของคลัสเตอร์ อาจต้องใช้เวลาสักครู่เพื่อให้โหนดทั้งหมดรายงานว่ามีการเชื่อมต่อหลังจากรีสตาร์ท
Enter:
ออก;
ออกจากคอนโซล ndb_mgm
6. การกำหนดค่า Load Balancing
คลัสเตอร์ MySQL ของเราเสร็จสมบูรณ์แล้ว และตอนนี้คุณสามารถเริ่มใช้งานได้แล้ว
อย่างไรก็ตาม เราไม่มีที่อยู่
IP แยกต่างหากในการเข้าถึงคลัสเตอร์
ซึ่งหมายความว่าคุณต้องกำหนดค่าส่วนหนึ่งของแอปพลิเคชันเพื่อใช้ MySQL Cluster Node 1 (sql1.test.com) และอีกส่วนหนึ่งเพื่อใช้ Node 2 (sql2. test.com)แน่นอนว่าแอปพลิเคชันทั้งหมดจำเป็นต้องใช้โหนดเดียวเท่านั้น แต่ถ้าคุณ
ไม่ต้องการแบ่งโหลดระหว่างโหนดคลัสเตอร์ แล้วจุดประสงค์ของการมีคลัสเตอร์คือ
อะไร โหนดลงไปเหรอ? จากนั้นแอปพลิเคชันที่ใช้โหนดคลัสเตอร์นี้จะไม่สามารถทำงานได้เลย
วิธีแก้ไขคือการกำหนดค่าโหลดบาลานเซอร์ด้านหน้าคลัสเตอร์ MySQL เพื่อสร้างสมดุลการโหลดระหว่างแต่ละโหนดคลัสเตอร์ MySQL
โหลดบาลานเซอร์จะกำหนดค่าที่อยู่ IP เสมือนที่ใช้ร่วมกันระหว่างโหนดคลัสเตอร์ และแอปพลิเคชันทั้งหมดของคุณใช้ที่อยู่ IP เสมือนนี้เพื่อ
เข้าถึงคลัสเตอร์ หากโหนดใดโหนดหนึ่งล่ม แอปพลิเคชันของคุณจะยังคงทำงานอยู่เนื่องจากโหลดบาลานเซอร์จะถ่ายโอนคำขอ
ไปยังโหนดอื่นที่ทำงานอย่างถูกต้อง
ในตัวอย่างนี้ โหลดบาลานเซอร์จะกลายเป็นคอขวด จะเกิดอะไรขึ้นถ้าโหลดบาลานเซอร์นี้พัง? ดังนั้นเราจะ
กำหนดค่าโหลดบาลานเซอร์สองตัวในโหมดการติดตั้ง (แอคทีฟ/พาสซีฟ) แอคทีฟ/พาสซีฟ ซึ่งหมายความว่าเรามีโหลดบาลานเซอร์ตัวหนึ่งที่ทำงานอยู่และอีกตัวหนึ่งที่
สแตนด์บายอยู่ และเมื่อตัวที่ใช้งานอยู่หยุดทำงาน มันก็จะเปิดใช้งาน โหลดบาลานเซอร์แต่ละตัวใช้ฮาร์ทบีทเพื่อตรวจสอบ
กิจกรรมของโหลดบาลานเซอร์อื่น และโหลดบาลานเซอร์ยังใช้ ldirectord ซึ่งรับผิดชอบในการกระจายการรับส่งข้อมูลไปยังโหนดคลัสเตอร์
ทั้งฮาร์ทบีทและ ldirectord รวมอยู่ในแพ็คเกจการติดตั้ง Ultra Monkey ที่เราจะติดตั้ง
เป็นสิ่งสำคัญมากที่เคอร์เนลระบบของโหนด loadb1.test.com และ loadb2.test.com รองรับ IPVS (IP Virtual Server)
IPVS ดำเนินการโหลดบาลานซ์ที่เลเยอร์การขนส่งของเคอร์เนล Linux
6.1 ติดตั้ง Ultra Monkey
ตกลง มาเริ่มกันเลย: ขั้นแรกเราเปิดใช้งาน IPVS บนโหนด loadb1.test.com และ loadb2.test.com:
loadb1.example.com / loadb2.example.com:
modprobe ip_vs_dh
modprobe ip_vs_ftp
modprobe ip_vs
modprobe ip_vs_lblc
modprobe ip_vs_lblcr
modprobe ip_vs_lc
modprobe
ip_vs_nq
modprobe ip_vs_rr modprobe ip_vs_sed
modprobe ip_vs_sh
modprobe ip_vs_wlc
modprobe ip_vs_wrr
หากต้องการเปิดใช้งานโมดูล IPVS เมื่อเริ่มต้น เราจะแจกแจงโมดูลใน /etc/modules:
loadb1.test.com / loadb2.test.com :
vi /etc /
modulesip_vs_dh
ip_vs_ftp
ip_vs
ip_vs_lblc
ip_vs_lblcr
ip_vs_lc
ip_vs_nq
ip_vs_rr
ip_vs_sed
ip_vs_sh
ip_vs_wlc
ip_vs_wrr
ตอนนี้เราแก้ไข /etc/apt/sources.list เพิ่มจุดดาวน์โหลดของ Ultra Monkey จากนั้นเราติดตั้ง Ultra Monkey:
loadb1.test .com/loadb2.test.com:
vi / etc/apt/sources.list
deb http://www.ultramonkey.org/download/3/ sarge หลัก
deb-src http://www.ultramonkey.org/download/3 sarge หลัก
apt-get อัปเดต
apt-get ติดตั้ง ultramonkey libdbi-perl libdbd-mysql-perl libmysqlclient14-dev
ตอนนี้ Ultra Monkey ได้รับการติดตั้งแล้ว หากคุณเห็นคำเตือนต่อไปนี้:
| libsensors3 ไม่ทำงาน
|
ดูเหมือนว่าเคอร์เนลของคุณไม่ได้ถูกคอมไพล์ด้วยการสนับสนุน
เซ็นเซอร์ libsensors3 จะไม่ทำงานบนระบบของคุณ
|
หากคุณต้องการเปิดใช้งาน โปรดดูที่ “
การสนับสนุนชิปเซ็นเซอร์ I2C” ในการกำหนดค่าเคอร์เนลของ
คุณ
ตอบคำถามต่อไปนี้:
คุณต้องการโหลดกฎ IPVS โดยอัตโนมัติในการบูตหรือไม่
<-- ไม่
เลือกวิธี daemon
<-- ไม่มี
แพ็คเกจการติดตั้ง libdbd-mysql-perl ที่ฉันเพิ่งติดตั้งไม่ทำงานบน MySQL 5 (เราอยู่ใน คลัสเตอร์ MySQL โดยใช้ MySQL 5)
ดังนั้นเราจึงติดตั้งแพ็คเกจการติดตั้ง DBD::mysql Perl ล่าสุด:
loadb1.test.com / loadb2.test.com:
cd /tmp
wget
tar xvfz DBD-mysql-3.0002.tar.gz
cd DBD- mysql -3.0002
perl Makefile.PL
ทำการ
ติดตั้ง
เราต้องเปิดใช้งานการส่งต่อแพ็กเก็ตก่อน:
loadb1.example.com / loadb2.example.com:
vi /etc/sysctl.conf
# เปิดใช้งานการส่งต่อแพ็กเก็ตnet.ipv4.ip_forward = 1
6.2 กำหนดค่าการเต้นของหัวใจ ( heartbeat )
เรากำหนดค่า heartbeat โดยการสร้างไฟล์สามไฟล์ (ไฟล์ของ loadb1.test.com และ loadb2.test.com จะต้องเหมือนกันทุกประการ):
loadb1.test.com / loadb2.test.com:
vi /etc/ha.d /ha .cf
logfacility local0
bcast eth0
mcast eth0 225.0.0.1 694 1 0
auto_failback off
node loadb1
node loadb2
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
ข้อควรจำ: คุณต้องแสดงรายการชื่อโหนด (สิ่งนี้ ในตัวอย่าง loadb1 และ loadb2)
uname -n
นอกเหนือจากนี้ เราไม่ต้องทำการแก้ไขใดๆ กับไฟล์นี้
vi /etc/ha.d/haresources
loadb1
ldirectord::ldirectord.cf
LVSSyncDaemonSwap::master
IPaddr2::192.168.0.105/24/eth0/192.168.0.255
คุณต้องระบุหนึ่งในชื่อโหนดการปรับสมดุลโหลด (ที่นี่: loadb1) และแสดงรายการ
ที่อยู่ IP เสมือน (192.168.0.105) และที่อยู่การออกอากาศ (192.168.0.255)
vi /etc/ha.d/authkeys
auth 3
3 md5 somerandomstring
somerandomstring คือฮาร์ทบีทสองตัวที่ใช้โดย loadb1 และ loadb2 ในการตรวจสอบสิทธิ์แต่ละรายการ อื่นๆ รหัสผ่านสำหรับภูต
ตั้งรหัสผ่านของคุณเองที่นี่ คุณสามารถเลือกวิธีการเข้ารหัสได้ 3 วิธี โดยทั่วไปฉันใช้ md5 สำหรับการเข้ารหัส
/etc/ha.d/authkeys ควรเป็นแบบอ่านอย่างเดียวสำหรับบัญชีรูท เราทำสิ่งนี้:
loadb1.test.com / loadb2.test.com:
chmod 600 /etc/ha.d/authkeys
6.3 การกำหนดค่า ldirectord
ตอนนี้เรา สร้างสำหรับไฟล์การกำหนดค่า ldirectord, โหลดบาลานเซอร์:
loadb1.example.com / loadb2.example.com:
vi /etc/ha.d/ldirectord.cf
# Global Directives
checktimeout=10
checkinterval=2
autoreload=no
logfile="local0"
quiescent = ใช่
virtual = 192.168.0.105:3306
บริการ = mysql
real = 192.168.0.101:3306 gate
real = 192.168.0.102:3306 gate
checktype = เจรจา
เข้าสู่ระบบ = "ldirector"
passwd = ฐานข้อมูล "ldirectorpassword"
=คำขอ
"ldirectordb"
= "SELECT* FROM Connectioncheck"
scheduler = wrr
โปรดกรอกที่อยู่ IP เสมือนที่ถูกต้อง (192.168.0.105) และที่อยู่ IP ที่ถูกต้องของโหนดคลัสเตอร์ MySQL (192.168.0.101 และ 192.168.0.102)
3306 เป็นพอร์ตเริ่มต้นเมื่อ MySQL กำลังทำงาน นอกจากนี้เรายังระบุผู้ใช้ MySQL (ldirector) และรหัสผ่าน (ldirectorpassword) ฐานข้อมูล (ldirectordb) และ
แบบสอบถาม SQL ldirectord ใช้ข้อมูลนี้เพื่อทดสอบโหนดคลัสเตอร์ MySQL เพื่อตรวจสอบว่าโหนดเหล่านั้นพร้อมใช้งานอยู่เสมอ ต่อไปเราจะใช้ผู้ใช้ ldirector เพื่อ
สร้างฐานข้อมูล ldirectordb
ตอนนี้เราสร้างการเชื่อมต่อเริ่มต้นที่จำเป็นสำหรับฮาร์ทบีทและลบ ldirectord (เพราะ ldirectord จะเริ่มต้นด้วยฮาร์ทบีท):
loadb1.test.com / loadb2.test.com:
update-rc.d -f heartbeat ลบ
update-rc.d heartbeat start 75 2 3 4 5 . หยุด 05 0 1 6 .
update-rc.d -f ldirectord ลบ
6.4 สร้างฐานข้อมูล
ldirector ต่อไปเราจะสร้างฐานข้อมูล ldirector บนโหนดคลัสเตอร์ MySQL sql1.test.com และ sql2.test.com โหลดบาลานเซอร์ของเราจะใช้ฐานข้อมูลนี้เพื่อตรวจสอบ
ความพร้อมใช้งานของโหนดคลัสเตอร์ MySQL
sql1.test.com:
mysql -u root -p
ให้สิทธิ์ทั้งหมดบน ldirectordb.* เป็น 'ldirector'@'%' ระบุโดย 'ldirectorpassword';
FLUSH PRIVILEGES;
สร้าง
ฐานข้อมูล ldirectordb
;
= NDBCLUSTER;
INSERT INTO การตรวจสอบค่า (1);
exit;
sql2.test.com:
mysql -u root -p
GRANT ALL ON ldirectorb.* TO 'ldirector'@'%' IDENTIFIED BY 'ldirectorpassword'
;
สร้างฐานข้อมูล ldirectordb;
6.4
การเตรียมโหนดคลัสเตอร์ MySQL สำหรับ Load Balancing
สุดท้ายเราต้องกำหนดค่าโหนดคลัสเตอร์ MySQL sql1.test.com และ sql2.test.com เพื่อยอมรับที่อยู่ IP เสมือน 192.168.0.105
sql1.test.com / sql2.test.com:
apt-get install iproute
เพิ่มเนื้อหาต่อไปนี้ใน /etc/sysctl.conf:
vi /etc/sysctl.conf
# เปิดใช้งานการกำหนดค่าของตัวเลือก arp_ignore
net.ipv4.conf.all arp_ignore = 1
# เมื่อได้รับคำขอ arp บน eth0 ให้ตอบกลับเฉพาะในกรณีที่ที่อยู่นั้นเป็น
# กำหนดค่าไว้บน eth0 โดยเฉพาะอย่าตอบสนองหากที่อยู่คือ
# กำหนดค่าบน lo
net.ipv4.conf.eth0.arp_ignore = 1
# สำหรับ eth1 ให้เพิ่มอินเทอร์เฟซ ARPing ทั้งหมด
#net.ipv4.conf.eth1.arp_ignore = 1
# เปิดใช้งานการกำหนดค่าของตัวเลือก arp_announce
net.ipv4.conf.all.arp_announce = 2
# เมื่อทำการร้องขอ ARP ที่ส่งผ่าน eth0 ให้ใช้ ที่อยู่ที่
# ได้รับการกำหนดค่าบน eth0 เป็นที่อยู่ต้นทางของคำขอ ARP หาก
ไม่ได้ตั้งค่า # นี้ และแพ็กเก็ตกำลังถูกส่งออกไป eth0 สำหรับที่อยู่ที่
# lo และจำเป็นต้องมีคำขอ arp ดังนั้นที่อยู่ใน แท้จริงจะถูกใช้
# เนื่องจากที่อยู่ IP ต้นทางของคำขอ arp ถูกป้อนลงในแคช ARP บน
# ปลายทางจึงมีผลในการประกาศที่อยู่นี้
# ไม่เป็นที่ต้องการในกรณีนี้เนื่องจากที่อยู่ในแท้จริง - เซิร์ฟเวอร์ควร
# ได้รับการประกาศโดย linux-director เท่านั้น
net.ipv4.conf.eth0.arp_announce = 2
# เหมือนกันสำหรับ eth1 เพิ่มสำหรับอินเทอร์เฟซ ARPing ทั้งหมด
#net.ipv4.conf.eth1.arp_announce = 2
sysctl -p
จะเพิ่ม ย่อหน้าต่อไปนี้เป็น /etc/network/interfaces:
sql1.test.com / sql2.test.com:
vi /etc/network/interfaces
auto lo:0
iface lo:0 inet static
address 192.168.0.105
netmask 255.255.255.255
pre - up sysctl -p > /dev/null
ifup lo:0
7. เริ่มโหลดบาลานเซอร์และทดสอบ
ตอนนี้เราเริ่มตัวจัดการโหลดบาลานซ์สองตัว:
loadb1.test.com / loadb2.test.com:
/etc/init.d /ldirectord stop
/etc/init.d/heartbeat start
หากคุณไม่เห็นข้อผิดพลาด คุณต้องรีสตาร์ทโหลดบาลานเซอร์แต่ละตัวตอนนี้:
loadb1.test.com / loadb2.test.com:
ปิดเครื่อง -r ทันที
หลังจากรีสตาร์ทเราสามารถตรวจสอบว่าโหลดทั้งสองอย่างหรือไม่ บาลานเซอร์ทำงานตามที่คาดไว้:
loadb1.test.com / loadb2.test.com:
ip addr sh eth0
โหลดบาลานเซอร์ที่ใช้งานอยู่ควรแสดงรายการที่อยู่ IP เสมือน (192.168.0.105):
2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:16:3e:45:fc:f8 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.103/24 brd 192.168.0.255 ขอบเขต global eth0
inet 192.168.0.105/24 brd
ตัวโหลดบาลานซ์สำหรับ
192.168.0.255 ขอบเขต eth0 รองทั่วโลก แบบพาสซีฟ (hot standby) ควรปรากฏดังนี้:2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:16:3e:16:c1:4e brd ff:ff:ff :ff:ff:ff
inet 192.168.0.104/24 brd 192.168.0.255 ขอบเขต global eth0
loadb1.test.com / loadb2.test.com:
ldirectord สถานะ ldirectord.cf
เอาต์พุตบนตัวโหลดบาลานซ์ที่ใช้งานอยู่:
ldirectord สำหรับ /etc/ha .d/ldirectord.cf กำลังทำงานอยู่ ด้วย pid: 1603
เอาต์พุตบนตัวโหลดบาลานเซอร์แบบพาสซีฟ:
ldirectord ถูกหยุดสำหรับ /etc/ha.d/ldirectord.cf
loadb1.example.com / loadb2.example.com:
ipvsadm -L - nOutput
บนตัวโหลดบาลานเซอร์ที่ใช้งานอยู่:
เวอร์ชัน IP Virtual Server 1.2.1 (ขนาด = 4096)
Prot LocalAddress: Port Scheduler Flags
-> RemoteAddress: น้ำหนักการส่งต่อพอร์ต ActiveConn InActConn
TCP 192.168.0.105:3306 wrr
-> 192.168.0.101:3306 เส้นทาง 1 0 0
-> 192.168.0.102:3306
เอาต์พุตบน เส้นทาง 1 0 0 ตัวโหลดบาลานซ์แบบพาสซีฟ:
IP Virtual Server เวอร์ชัน 1.2.1 (ขนาด = 4096)
Prot LocalAddress: Port Scheduler Flags
-> RemoteAddress: Port Forward Weight ActiveConn InActConn
loadb1.test.com / loadb2.test.com:
/etc/ ha.d/resource.d/LVSSyncDaemonSwap สถานะหลัก
เอาต์พุตบนตัวโหลดบาลานเซอร์ที่ใช้งานอยู่:
การทำงานหลัก
(ipvs_syncmaster pid: 1766)
เอาต์พุตบนตัวโหลดบาลานเซอร์แบบพาสซีฟ:
หลักหยุดทำงาน
(ipvs_syncbackup pid: 1440)
หากการทดสอบของคุณเป็นเรื่องปกติ ตอนนี้คุณสามารถเข้าถึงได้ ฐานข้อมูล MySQL จากเซิร์ฟเวอร์อื่นบนเครือข่ายเดียวกัน (192.168.0.x) โดยใช้ที่อยู่ IP เสมือน 192.168.0.105:
mysql -h 192.168 .0.105 -u ldirector -p
(โปรดจำไว้ว่า: ไคลเอนต์ MySQL ของคุณต้องมีอย่างน้อยเวอร์ชัน 4.1 ; เวอร์ชันเก่าจะไม่รัน MySQL5 )
ตอนนี้คุณสามารถปิดโหนดคลัสเตอร์ MySQL ใดโหนดหนึ่งเพื่อทดสอบได้ แต่คุณยังคงสามารถเชื่อมต่อกับฐานข้อมูล MySQL ได้
8 หมายเหตุ
เมื่อใช้งานคลัสเตอร์ MySQL ต่อไปนี้เป็นสิ่งสำคัญบางประการที่ควรจำ:
– ข้อมูลทั้งหมดอยู่ในหน่วยความจำ! ดังนั้น คุณจึงจำเป็นต้องมีหน่วยความจำจำนวนมากบนโหนดคลัสเตอร์ของคุณ นี่คือ
สูตรการคำนวณสำหรับความจุหน่วยความจำที่จำเป็นสำหรับแต่ละโหนด:
(ขนาดฐานข้อมูล SizeofDatabase * จำนวนเรพลิกา NumberOfReplicas * 1.1 ) / จำนวนโหนดข้อมูล NumberOfDataNodes
ดังนั้นหากคุณมีขนาดฐานข้อมูล 1GB คุณควรติดตั้งแต่ละโหนดด้วย 1.1GB แห่งความทรงจำ!
–โหนดการจัดการคลัสเตอร์จะรับฟังการเชื่อมต่อใดๆ บนพอร์ต 1186 ซึ่งหมายความว่ามันไม่ปลอดภัย ดังนั้นคุณควรรัน MySQL Cluster บนเครือข่ายที่แยกจากกัน