คู่มือ Multi-Primary Replication สำหรับ ฐานข้อมูล
คู่มือนี้เรียบเรียงสำหรับ Ruk-Com PaaS หน้าจอและตัวเลือกอาจแตกต่างตามเวอร์ชันและสิทธิ์ของบัญชี
ตรวจสอบ Environment, Region, สิทธิ์บัญชี และสำรองค่าปัจจุบันก่อนดำเนินการกับระบบจริง
คำสั่ง ชื่อเมนู พารามิเตอร์ และค่าตัวอย่างในกรอบ Code คงรูปแบบตามระบบเพื่อให้คัดลอกและตรวจสอบได้ถูกต้อง
การทำ Replication แบบ Multi-Primary สำหรับ MySQL/MariaDB/Percona
แพลตฟอร์มนี้ช่วยให้คุณตั้งค่าการจำลองฐานข้อมูลสองประเภทที่แตกต่างกันได้อย่างง่ายดาย -primary-secondaryและprimary-primary- เพื่อแก้ไขปัญหาต่างๆหลายประการเกี่ยวกับประสิทธิภาพเพื่อรองรับการสำรองฐานข้อมูลบรรเทาความล้มเหลวของระบบและอื่นๆอีกมากมายข้อมูลเกี่ยวกับวิธีการกำหนดค่ากการจำลองแบบระดับ Primary-Secondaryสำหรับฐานข้อมูล MySQL/MariaDB/Percona ของคุณสามารถพบได้ในคำแนะนำที่เชื่อมโยง
ในบทช่วยสอนนี้เราจะอธิบายวิธีกำหนดค่าการจำลองแบบหลัก-หลัก (หลายหลัก)
ด้านล่างนี้เราจะครอบคลุมหัวข้อต่อไปนี้:
กรณีการใช้งานการจำลองแบบ
โดยทั่วไปการจำลองแบบหลายหลักเป็นโซลูชันที่ซับซ้อนกว่าการจำลองแบบหลัก-รองซึ่งเป็นสาเหตุว่าทำไมจึงมีการใช้งานไม่บ่อยอย่างไรก็ตามมีบางกรณีการใช้งานที่เหมาะกว่า:
| การจำลองแบบ | Primary-Secondary | หลายประถมศึกษา |
|---|---|---|
| ประโยชน์ | ความเรียบง่ายความง่ายในการติดตั้งและบำรุงรักษา | ความพร้อมใช้งานที่สูงขึ้นการปรับสมดุลโหลดการกระจายทางภูมิศาสตร์ |
| ข้อเสีย | จุดเดียวของความล้มเหลวการดำเนินการเขียนจำกัดไว้ที่หลัก | ความซับซ้อนโอกาสที่จะเกิดข้อขัดแย้งระหว่างการเขียนพร้อมกัน |
| ใช้กรณี | ปริมาณงานที่ต้องอ่านข้อมูลจำนวนมากการสำรองข้อมูลและการกู้คืนระบบแอปพลิเคชันที่มีข้อกำหนดด้านความสอดคล้องที่เข้มงวด | ปริมาณงานที่เขียนหนักความพร้อมใช้งานสูงและความสามารถในการปรับขนาดแอปพลิเคชันที่กระจายตามภูมิศาสตร์ (การเขียนในเครื่อง) |
เราขอแนะนำให้เลือกประเภทการจำลองตามความต้องการแอปพลิเคชันเฉพาะและข้อกำหนดโครงสร้างพื้นฐานของคุณ:
- Primary-Secondaryเพื่อความเรียบง่ายความสม่ำเสมอสูงและปริมาณงานที่มีการอ่านจำนวนมาก
- Primary-Primaryสำหรับความพร้อมใช้งานสูงความสามารถในการปรับขนาดการเขียนและระบบแบบกระจายที่ต้องการการเขียนในเครื่อง
การติดตั้งอัตโนมัติ
Ruk-Com PaaS สามารถติดตั้งคลัสเตอร์ฐานข้อมูล MySQL/MariaDB/Percona ที่พร้อมใช้งานสูงได้โดยอัตโนมัติพร้อมด้วยประเภทการจำลองที่จำเป็น (รวมถึงprimary-primaryหนึ่ง) เพียงไม่กี่คลิกตัวเลือกนี้มีให้ใช้งานโดยตรงในตัวช่วยสร้างโทโพโลยีระหว่างการสร้าง Environment:
- คลิกที่Environment ใหม่ปุ่มที่ด้านบนของแดชบอร์ด
- เลือกMySQL,MariaDB, หรือPerconaฐานข้อมูลในตัวช่วยสร้างโทโพโลยี
- เปิดใช้งานการจัดกลุ่มอัตโนมัติตัวเลือก.
- เลือกPrimary-Primaryประเภทการจำลองแบบจากโครงการรายการแบบเลื่อนลง
- ปรับพารามิเตอร์อื่นๆหากจำเป็นแล้วคลิกสร้าง.
หรือคุณสามารถสร้าง Environment เฉพาะโดยอัตโนมัติด้วยคลัสเตอร์ฐานข้อมูล MySQL/MariaDB/Percona ที่กำหนดค่าไว้ล่วงหน้าโดยใช้แพ็คเกจสำเร็จรูปMySQL/MariaDB/คลัสเตอร์ Perconaแอปพลิเคชันที่มีอยู่ในแพลตฟอร์มตลาด.
- คลิกที่ตลาดปุ่มที่ด้านบนของแดชบอร์ด
- ค้นหาMySQL/MariaDB/คลัสเตอร์ Perconaแอปพลิเคชันโดยใช้แถบค้นหา
- ในกล่องโต้ตอบที่ปรากฏขึ้นให้เลือกสแต็กฐานข้อมูลและประเภทการจำลองที่ต้องการ
- ตั้งค่าพารามิเตอร์ Environment อื่นๆแล้วคลิกติดตั้ง.
นั่นคือทั้งหมด! ภายในไม่กี่นาทีคลัสเตอร์ฐานข้อมูลของคุณจะถูกสร้างขึ้นและกำหนดค่าโดยอัตโนมัติตามประเภทการจำลองที่เลือก
การติดตั้งด้วยตนเอง
หากคุณต้องการควบคุมกระบวนการจำลองแบบเต็มรูปแบบและต้องการตั้งค่าและกำหนดค่าการจำลองแบบหลัก-หลักด้วยตนเองคุณสามารถทำตามขั้นตอนด้านล่าง
สร้าง Environment
สิ่งแรกที่คุณต้องการเพื่อกำหนดค่าการจำลองฐานข้อมูลคือเซิร์ฟเวอร์ฐานข้อมูลอย่างน้อยสองเซิร์ฟเวอร์สำหรับตัวอย่างของเราเรามาสร้าง Environment สองรายการด้วยอินสแตนซ์ MySQL กัน
เคล็ดลับ:คำแนะนำด้านล่างนี้เหมาะสำหรับทั้งสองอย่างMariaDBและPerconaเซิร์ฟเวอร์ฐานข้อมูลที่มีการปรับเปลี่ยนเพียงเล็กน้อย
- เข้าสู่ระบบแดชบอร์ดแพลตฟอร์มแล้วคลิกEnvironment ใหม่ปุ่ม.
2. ในโทโพโลยี Environmentตัวช่วยเราจะเลือกMySQLเป็นฐานข้อมูลของเราตั้งค่าขีดจำกัด cloudlet และตั้งชื่อ Environment แรกเช่นfirst-primary.
คลิกสร้างและรอสักครู่เพื่อให้ Environment ของคุณถูกสร้างขึ้น
- ทำซ้ำขั้นตอนก่อนหน้าเพื่อสร้างsecond-primaryEnvironment ที่มีฐานข้อมูลเดียวกันหรือเพียงแค่โคลนที่first-primaryEnvironment.
ตอนนี้คุณมีสอง Environment ที่เหมือนกันกับฐานข้อมูล MySQL มาดำเนินการกำหนดค่าการจำลองต่อ
กำหนดค่า Primary ตัวแรก
- เริ่มต้นด้วยfirst-primary. คลิกที่การกำหนดค่าปุ่มสำหรับ Environment แรกของคุณ
2. ไปที่/etc/my.cnfในตัวจัดการไฟล์ที่เปิดอยู่ค้นหาไฟล์รหัสเซิร์ฟเวอร์พารามิเตอร์และแทนที่ด้วยค่าต่อไปนี้:
อินี่
server-id = 1
binlog-do-db = example
binlog-do-db = teste
log-bin = /var/log/mysql/mysql-bin.log
auto_increment_increment = 1
auto_increment_offset = 1
มาพิจารณาในรายละเอียดว่าเรากำลังกำหนดค่าอะไรกับตัวเลือกเหล่านี้:
- รหัสเซิร์ฟเวอร์- ตัวเลือกทั่วไปที่ใช้โดยเซิร์ฟเวอร์การจำลองเพื่อระบุตัวเองควรจะไม่ซ้ำกันสำหรับแต่ละเซิร์ฟเวอร์
- bin-log-do-db = ตัวอย่างและbin-log-do-db = ทดสอบ- บอกให้เซิร์ฟเวอร์จำกัดการบันทึกไบนารีเพื่ออัพเดตฐานข้อมูลที่ระบุบันทึก:จะต้องไม่สร้างฐานข้อมูลเหล่านี้เมื่อคุณพอใจกับการจำลองแบบหลายหลักแล้วคุณสามารถรวมฐานข้อมูลของคุณเองได้
- log-bin = /var/log/mysql/mysql-bin.log- กำหนดว่าเปิดใช้งานบันทึกไบนารีหรือไม่ค่าตัวเลือกหากกำหนดไว้จะเป็นชื่อฐานสำหรับลำดับบันทึก
- การเพิ่มขึ้นอัตโนมัติ_การเพิ่มขึ้น = 1- ใช้เพื่อควบคุมช่วงเวลาระหว่างค่าคอลัมน์ที่ต่อเนื่องกัน
- auto_increation_offset = 1- ในบริบทของการจำลองแบบหลายหลักสามารถใช้เพื่อหลีกเลี่ยงข้อขัดแย้งในการจำลองในบทความนี้เราได้ตั้งค่า1มูลค่าสำหรับfirst-primaryเซิร์ฟเวอร์และ2สำหรับsecond-primary.
ทั้งคู่การเพิ่มขึ้นอัตโนมัติ_การเพิ่มขึ้นและauto_increation_offsetตัวเลือกต่างๆมีไว้สำหรับใช้กับการจำลองแบบหลายหลักและควรตั้งค่าตามความต้องการในการใช้งานของคุณเราขอแนะนำให้คุณตั้งค่าauto_increation_offsetค่าตัวเลือกให้เหมือนกับรหัสเซิร์ฟเวอร์พารามิเตอร์ตัวหนึ่งเพื่อหลีกเลี่ยงข้อขัดแย้งในการจำลอง
- บันทึกการเปลี่ยนแปลงและรีสตาร์ทNode MySQL
กำหนดค่า Primary ตัวที่สอง
เรามาต่อกันที่second-primaryEnvironment. ขั้นตอนจะคล้ายกับขั้นตอนที่เราเพิ่งดำเนินการกับเซิร์ฟเวอร์เครื่องแรก
-
วางเมาส์เหนือแล้วคลิกการกำหนดค่าเพื่อเปิดตัวจัดการไฟล์สำหรับ Node MySQL
-
เปิดเหมือนกันครับ/etc/my.cnfไฟล์และแทนที่ไฟล์รหัสเซิร์ฟเวอร์พารามิเตอร์เช่นเดียวกับที่คุณทำกับเซิร์ฟเวอร์แรก:
อินี่
server-id = 2
binlog-do-db = example
binlog-do-db = teste
log-bin = /var/log/mysql/mysql-bin.log
auto_increment_increment = 1
auto_increment_offset = 2
บันทึก:เราได้เปลี่ยนค่าของรหัสเซิร์ฟเวอร์และauto_increation_offsetตัวเลือกต่างๆเนื่องจากควรจะไม่ซ้ำกันสำหรับแต่ละเซิร์ฟเวอร์
3. อีกครั้งหนึ่งบันทึกการเปลี่ยนแปลงและรีสตาร์ทNode MySQL
เปิดใช้งานการจำลองแบบหลัก-หลัก
- คลิกที่เปิดในเบราว์เซอร์ปุ่มสำหรับMySQLNode ในfirst-primaryEnvironment และเข้าสู่ระบบphpMyAdminแผงผู้ดูแลระบบที่ใช้ข้อมูลรับรองรูทฐานข้อมูลที่ส่งถึงคุณทางอีเมล
2. นำทางไปยังบัญชีผู้ใช้แท็บแล้วคลิกเพิ่มบัญชีผู้ใช้.
3. ระบุชื่อและรหัสผ่านสำหรับผู้ใช้การจำลองข้อมูลของคุณ
ถัดไปเลื่อนลงและทำเครื่องหมายที่ไคลเอ็นต์การจำลองแบบและทาสการจำลองแบบสิทธิ์การบริหาร
คลิกไปที่ด้านล่างของหน้าเพื่อสร้างผู้ใช้
- เปลี่ยนไปที่สถานะเพื่อให้แน่ใจว่ามีการกำหนดค่าการจำลองอย่างถูกต้อง
ให้ความสนใจกับบันทึกไฟล์และตำแหน่งเนื่องจากจำเป็นสำหรับการตั้งค่าฐานข้อมูลหลักที่สอง
- ทำซ้ำขั้นตอนที่ 1-4 สำหรับเซิร์ฟเวอร์ MySQL ตัวที่สองโดยสร้างผู้ใช้ที่มีชื่อเดียวกันและจดบันทึกพารามิเตอร์ของไฟล์บันทึก
บันทึก:ในกรณีที่คุณใช้การโคลนสำหรับการสร้าง Environment ที่สอง:
- ข้อมูลประจำตัวสำหรับเซิร์ฟเวอร์ MySQL จะเหมือนกับ Node เริ่มต้น
- คุณต้องตั้งค่า UUID ที่ไม่ซ้ำกันสำหรับเซิร์ฟเวอร์ฐานข้อมูลที่ถูกโคลนตัวอย่างเช่นคุณสามารถเปลี่ยนได้จากตัวแปรแท็บในแผง phpMyAdmin (ค้นหาและแก้ไขไฟล์
server_uuidตัวแปร). หรือคุณสามารถลบ/var/lib/mysql/auto.cnfไฟล์และรีสตาร์ท Node MySQL - UUID ใหม่จะถูกสร้างขึ้นโดยอัตโนมัติ
- ตอนนี้เราสามารถเปิดใช้งานการจำลองแบบได้แล้วคุณมีหลายวิธีในการดำเนินการนี้:
- ใช้เฉพาะการจำลองแบบแท็บในแผง phpMyAdmin (มีตั้งแต่เวอร์ชัน MySQL 8.0.22 และ MariaDB 10.5.1)
- เรียกใช้คำสั่ง SQL ที่จำเป็นในไฟล์SQLแท็บของแผง phpMyAdmin
- เชื่อมต่อกับฐานข้อมูลผ่าน SSH (เช่นเว็บ SSH) และดำเนินการคำสั่ง SQL ในเชลล์ MySQL
สำหรับตัวอย่างของเราเราจะใช้ตัวเลือกที่สองและเริ่มต้นด้วยsecond-primaryEnvironment. เปิดSQLแท็บในแผง phpMyAdmin และเรียกใช้คำสั่งต่อไปนี้:
ฐานข้อมูล SQL
STOP REPLICA;
CHANGE REPLICATION SOURCE TO SOURCE_HOST = 'first-primary', SOURCE_USER = 'replicator', SOURCE_PASSWORD = 'passw0rd', SOURCE_LOG_FILE = 'binlog_file_name', SOURCE_LOG_POS = binlog_file_position;
START REPLICA;
บันทึก:สำหรับ MySQL เวอร์ชันเดิม (ก่อน 8.0.22) และสำหรับ MariaDB ให้ใช้คำสั่งต่อไปนี้แทน:
ฐานข้อมูล SQL
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST = 'first-primary', MASTER_USER = 'replicator', MASTER_PASSWORD = 'passw0rd', MASTER_LOG_FILE = 'binlog_file_name', MASTER_LOG_POS = binlog_file_position;
START SLAVE;
ที่นี่คุณจะต้องแทนที่ค่าสำหรับพารามิเตอร์ต่อไปนี้:
- แหล่งที่มา_HOST(มาสเตอร์_โฮสต์) - URL หรือ IP ของรายการหลักอื่น (รับจากแดชบอร์ด)
- SOURCE_USER(MASTER_USER) - ชื่อผู้ใช้การจำลอง (สร้างขึ้นที่จุดเริ่มต้นของส่วน)
- แหล่งที่มา_รหัสผ่าน(MASTER_รหัสผ่าน) - รหัสผ่านของผู้ใช้การจำลองแบบ (สร้างขึ้นที่จุดเริ่มต้นของส่วน)
- SOURCE_LOG_FILE(MASTER_LOG_FILE) - ไฟล์บันทึกของแหล่งที่มา (ดูในสถานะแท็บหลักอื่นๆ )
- SOURCE_LOG_POS(MASTER_LOG_POS) - ตำแหน่งบันทึกของแหล่งที่มา (ดูในสถานะแท็บหลักอื่นๆ )
คุณสามารถเพิกเฉยต่อ “ประเภทคำสั่งที่ไม่รู้จัก” คำเตือนในตัวแก้ไขคำสั่งของคุณจะถูกดำเนินการต่อไป
- คุณสามารถตรวจสอบสถานะการจำลองของคุณได้ในสถานะแท็บหรือใช้
SHOW REPLICA STATUS;(SHOW SLAVE STATUS;) สั่งการ.
7. ทำซ้ำ 6-7 ขั้นตอนสำหรับเซิร์ฟเวอร์ MySQL อื่นของคุณ (first-primaryในกรณีของเรา) อย่าลืมแทนที่ค่าพารามิเตอร์ด้วยข้อมูลที่ถูกต้องจากsecond-primaryเซิร์ฟเวอร์
ยินดีด้วย! การจำลองแบบได้รับการเปิดใช้งานบนเซิร์ฟเวอร์ทั้งสองเรียบร้อยแล้ว
ตรวจสอบการจำลองแบบ
สุดท้ายนี้เรามาดูกันว่าทุกอย่างทำงานได้อย่างมีเสน่ห์
- เข้าสู่ระบบเซิร์ฟเวอร์ฐานข้อมูลแรกและสร้างใหม่ตัวอย่างฐานข้อมูล:
อย่างที่คุณเห็นมันถูกทำเครื่องหมายว่าจำลองแบบแล้วในการจำลองแบบหลักคอลัมน์.
บันทึก:ชื่อของฐานข้อมูลใหม่นี้สอดคล้องกับชื่อที่เราระบุไว้ในไฟล์กำหนดค่าของเซิร์ฟเวอร์ (binlog-do-db = ตัวอย่าง). สำหรับการใช้งานเพิ่มเติมคุณสามารถสร้างฐานข้อมูลของคุณเองและทดแทนได้binlog-do-dbค่าของพารามิเตอร์พร้อมชื่อ
- ตอนนี้เปลี่ยนไปใช้เซิร์ฟเวอร์ตัวที่สองในคลัสเตอร์ MySQL ของคุณและตรวจสอบว่าฐานข้อมูลที่สร้างขึ้นใหม่ได้รับการจำลองแบบหรือไม่หากต้องการตรวจสอบว่าการจำลองแบบทำงานได้ทั้งสองวิธีให้เพิ่มตารางใหม่ลงในฐานข้อมูลนี้
3. สุดท้ายเปลี่ยนกลับไปที่แผงผู้ดูแลระบบของเซิร์ฟเวอร์ MySQL เครื่องแรกและตรวจสอบให้แน่ใจว่าฐานข้อมูลที่จำลองแบบนั้นมีตารางใหม่ทันที
คุณยังสามารถดำเนินการอื่นๆบางอย่างได้ (ดำเนินการกับบันทึกทริกเกอร์ดัชนีฯลฯ) เพื่อตรวจสอบว่าข้อมูลทั้งหมดได้รับการจำลองแบบทันทีภายในคลัสเตอร์ MySQL ของคุณ
นั่นง่ายมาก! เพลิดเพลินกับความปลอดภัยของข้อมูลอย่างสมบูรณ์ด้วยแพลตฟอร์มโฮสติ้ง

