ศูนย์คู่มือ Ruk-Com PaaS

คู่มือการพัฒนา Deploy และดูแล Application บนแพลตฟอร์ม

RUK-COM PAAS / DATABASES

คู่มือ Multi-Primary Replication สำหรับ ฐานข้อมูล

คู่มือนี้เรียบเรียงสำหรับ Ruk-Com PaaS หน้าจอและตัวเลือกอาจแตกต่างตามเวอร์ชันและสิทธิ์ของบัญชี

ตรวจสอบ Environment, Region, สิทธิ์บัญชี และสำรองค่าปัจจุบันก่อนดำเนินการกับระบบจริง

คู่มือภาษาไทย

คำสั่ง ชื่อเมนู พารามิเตอร์ และค่าตัวอย่างในกรอบ Code คงรูปแบบตามระบบเพื่อให้คัดลอกและตรวจสอบได้ถูกต้อง

การทำ Replication แบบ Multi-Primary สำหรับ MySQL/MariaDB/Percona

แพลตฟอร์มนี้ช่วยให้คุณตั้งค่าการจำลองฐานข้อมูลสองประเภทที่แตกต่างกันได้อย่างง่ายดาย -primary-secondaryและprimary-primary- เพื่อแก้ไขปัญหาต่างๆหลายประการเกี่ยวกับประสิทธิภาพเพื่อรองรับการสำรองฐานข้อมูลบรรเทาความล้มเหลวของระบบและอื่นๆอีกมากมายข้อมูลเกี่ยวกับวิธีการกำหนดค่ากการจำลองแบบระดับ Primary-Secondaryสำหรับฐานข้อมูล MySQL/MariaDB/Percona ของคุณสามารถพบได้ในคำแนะนำที่เชื่อมโยง

ในบทช่วยสอนนี้เราจะอธิบายวิธีกำหนดค่าการจำลองแบบหลัก-หลัก (หลายหลัก)

Image 1: primary-primary replication schemeด้านล่างนี้เราจะครอบคลุมหัวข้อต่อไปนี้:

กรณีการใช้งานการจำลองแบบ

โดยทั่วไปการจำลองแบบหลายหลักเป็นโซลูชันที่ซับซ้อนกว่าการจำลองแบบหลัก-รองซึ่งเป็นสาเหตุว่าทำไมจึงมีการใช้งานไม่บ่อยอย่างไรก็ตามมีบางกรณีการใช้งานที่เหมาะกว่า:

การจำลองแบบ Primary-Secondary หลายประถมศึกษา
ประโยชน์ ความเรียบง่ายความง่ายในการติดตั้งและบำรุงรักษา ความพร้อมใช้งานที่สูงขึ้นการปรับสมดุลโหลดการกระจายทางภูมิศาสตร์
ข้อเสีย จุดเดียวของความล้มเหลวการดำเนินการเขียนจำกัดไว้ที่หลัก ความซับซ้อนโอกาสที่จะเกิดข้อขัดแย้งระหว่างการเขียนพร้อมกัน
ใช้กรณี ปริมาณงานที่ต้องอ่านข้อมูลจำนวนมากการสำรองข้อมูลและการกู้คืนระบบแอปพลิเคชันที่มีข้อกำหนดด้านความสอดคล้องที่เข้มงวด ปริมาณงานที่เขียนหนักความพร้อมใช้งานสูงและความสามารถในการปรับขนาดแอปพลิเคชันที่กระจายตามภูมิศาสตร์ (การเขียนในเครื่อง)

เราขอแนะนำให้เลือกประเภทการจำลองตามความต้องการแอปพลิเคชันเฉพาะและข้อกำหนดโครงสร้างพื้นฐานของคุณ:

  • Primary-Secondaryเพื่อความเรียบง่ายความสม่ำเสมอสูงและปริมาณงานที่มีการอ่านจำนวนมาก
  • Primary-Primaryสำหรับความพร้อมใช้งานสูงความสามารถในการปรับขนาดการเขียนและระบบแบบกระจายที่ต้องการการเขียนในเครื่อง

การติดตั้งอัตโนมัติ

Ruk-Com PaaS สามารถติดตั้งคลัสเตอร์ฐานข้อมูล MySQL/MariaDB/Percona ที่พร้อมใช้งานสูงได้โดยอัตโนมัติพร้อมด้วยประเภทการจำลองที่จำเป็น (รวมถึงprimary-primaryหนึ่ง) เพียงไม่กี่คลิกตัวเลือกนี้มีให้ใช้งานโดยตรงในตัวช่วยสร้างโทโพโลยีระหว่างการสร้าง Environment:

  • คลิกที่Environment ใหม่ปุ่มที่ด้านบนของแดชบอร์ด
  • เลือกMySQL,MariaDB, หรือPerconaฐานข้อมูลในตัวช่วยสร้างโทโพโลยี
  • เปิดใช้งานการจัดกลุ่มอัตโนมัติตัวเลือก.
  • เลือกPrimary-Primaryประเภทการจำลองแบบจากโครงการรายการแบบเลื่อนลง
  • ปรับพารามิเตอร์อื่นๆหากจำเป็นแล้วคลิกสร้าง.

Image 4: database auto-clusteringหรือคุณสามารถสร้าง Environment เฉพาะโดยอัตโนมัติด้วยคลัสเตอร์ฐานข้อมูล MySQL/MariaDB/Percona ที่กำหนดค่าไว้ล่วงหน้าโดยใช้แพ็คเกจสำเร็จรูปMySQL/MariaDB/คลัสเตอร์ Perconaแอปพลิเคชันที่มีอยู่ในแพลตฟอร์มตลาด.

  • คลิกที่ตลาดปุ่มที่ด้านบนของแดชบอร์ด
  • ค้นหาMySQL/MariaDB/คลัสเตอร์ Perconaแอปพลิเคชันโดยใช้แถบค้นหา
  • ในกล่องโต้ตอบที่ปรากฏขึ้นให้เลือกสแต็กฐานข้อมูลและประเภทการจำลองที่ต้องการ
  • ตั้งค่าพารามิเตอร์ Environment อื่นๆแล้วคลิกติดตั้ง.

Image 5: database cluster marketplaceนั่นคือทั้งหมด! ภายในไม่กี่นาทีคลัสเตอร์ฐานข้อมูลของคุณจะถูกสร้างขึ้นและกำหนดค่าโดยอัตโนมัติตามประเภทการจำลองที่เลือก

การติดตั้งด้วยตนเอง

หากคุณต้องการควบคุมกระบวนการจำลองแบบเต็มรูปแบบและต้องการตั้งค่าและกำหนดค่าการจำลองแบบหลัก-หลักด้วยตนเองคุณสามารถทำตามขั้นตอนด้านล่าง

สร้าง Environment

สิ่งแรกที่คุณต้องการเพื่อกำหนดค่าการจำลองฐานข้อมูลคือเซิร์ฟเวอร์ฐานข้อมูลอย่างน้อยสองเซิร์ฟเวอร์สำหรับตัวอย่างของเราเรามาสร้าง Environment สองรายการด้วยอินสแตนซ์ MySQL กัน

เคล็ดลับ:คำแนะนำด้านล่างนี้เหมาะสำหรับทั้งสองอย่างMariaDBและPerconaเซิร์ฟเวอร์ฐานข้อมูลที่มีการปรับเปลี่ยนเพียงเล็กน้อย

  1. เข้าสู่ระบบแดชบอร์ดแพลตฟอร์มแล้วคลิกEnvironment ใหม่ปุ่ม.

Image 8: create new environment button2. ในโทโพโลยี Environmentตัวช่วยเราจะเลือกMySQLเป็นฐานข้อมูลของเราตั้งค่าขีดจำกัด cloudlet และตั้งชื่อ Environment แรกเช่นfirst-primary.

Image 9: first-primary topology wizardคลิกสร้างและรอสักครู่เพื่อให้ Environment ของคุณถูกสร้างขึ้น

  1. ทำซ้ำขั้นตอนก่อนหน้าเพื่อสร้างsecond-primaryEnvironment ที่มีฐานข้อมูลเดียวกันหรือเพียงแค่โคลนที่first-primaryEnvironment.

Image 10: two database environmentsตอนนี้คุณมีสอง Environment ที่เหมือนกันกับฐานข้อมูล MySQL มาดำเนินการกำหนดค่าการจำลองต่อ

กำหนดค่า Primary ตัวแรก

  1. เริ่มต้นด้วยfirst-primary. คลิกที่การกำหนดค่าปุ่มสำหรับ Environment แรกของคุณ

Image 12: config first primary2. ไปที่/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

Image 13: edit my.cnf fileมาพิจารณาในรายละเอียดว่าเรากำลังกำหนดค่าอะไรกับตัวเลือกเหล่านี้:

  • รหัสเซิร์ฟเวอร์- ตัวเลือกทั่วไปที่ใช้โดยเซิร์ฟเวอร์การจำลองเพื่อระบุตัวเองควรจะไม่ซ้ำกันสำหรับแต่ละเซิร์ฟเวอร์
  • 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ค่าตัวเลือกให้เหมือนกับรหัสเซิร์ฟเวอร์พารามิเตอร์ตัวหนึ่งเพื่อหลีกเลี่ยงข้อขัดแย้งในการจำลอง

  1. บันทึกการเปลี่ยนแปลงและรีสตาร์ทNode MySQL

Image 14: restart first MySQL

กำหนดค่า Primary ตัวที่สอง

เรามาต่อกันที่second-primaryEnvironment. ขั้นตอนจะคล้ายกับขั้นตอนที่เราเพิ่งดำเนินการกับเซิร์ฟเวอร์เครื่องแรก

  1. วางเมาส์เหนือแล้วคลิกการกำหนดค่าเพื่อเปิดตัวจัดการไฟล์สำหรับ Node MySQL

  2. เปิดเหมือนกันครับ/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ตัวเลือกต่างๆเนื่องจากควรจะไม่ซ้ำกันสำหรับแต่ละเซิร์ฟเวอร์

Image 16: second my.cnf file3. อีกครั้งหนึ่งบันทึกการเปลี่ยนแปลงและรีสตาร์ทNode MySQL

เปิดใช้งานการจำลองแบบหลัก-หลัก

  1. คลิกที่เปิดในเบราว์เซอร์ปุ่มสำหรับMySQLNode ในfirst-primaryEnvironment และเข้าสู่ระบบphpMyAdminแผงผู้ดูแลระบบที่ใช้ข้อมูลรับรองรูทฐานข้อมูลที่ส่งถึงคุณทางอีเมล

Image 18: open in browser2. นำทางไปยังบัญชีผู้ใช้แท็บแล้วคลิกเพิ่มบัญชีผู้ใช้.

Image 19: primary database add user3. ระบุชื่อและรหัสผ่านสำหรับผู้ใช้การจำลองข้อมูลของคุณ

Image 20: replication user credentialsถัดไปเลื่อนลงและทำเครื่องหมายที่ไคลเอ็นต์การจำลองแบบและทาสการจำลองแบบสิทธิ์การบริหาร

Image 21: replication user privilegesคลิกไปที่ด้านล่างของหน้าเพื่อสร้างผู้ใช้

  1. เปลี่ยนไปที่สถานะเพื่อให้แน่ใจว่ามีการกำหนดค่าการจำลองอย่างถูกต้อง

Image 22: first primary statusให้ความสนใจกับบันทึกไฟล์และตำแหน่งเนื่องจากจำเป็นสำหรับการตั้งค่าฐานข้อมูลหลักที่สอง

  1. ทำซ้ำขั้นตอนที่ 1-4 สำหรับเซิร์ฟเวอร์ MySQL ตัวที่สองโดยสร้างผู้ใช้ที่มีชื่อเดียวกันและจดบันทึกพารามิเตอร์ของไฟล์บันทึก

บันทึก:ในกรณีที่คุณใช้การโคลนสำหรับการสร้าง Environment ที่สอง:

  • ข้อมูลประจำตัวสำหรับเซิร์ฟเวอร์ MySQL จะเหมือนกับ Node เริ่มต้น
  • คุณต้องตั้งค่า UUID ที่ไม่ซ้ำกันสำหรับเซิร์ฟเวอร์ฐานข้อมูลที่ถูกโคลนตัวอย่างเช่นคุณสามารถเปลี่ยนได้จากตัวแปรแท็บในแผง phpMyAdmin (ค้นหาและแก้ไขไฟล์server_uuidตัวแปร). หรือคุณสามารถลบ/var/lib/mysql/auto.cnfไฟล์และรีสตาร์ท Node MySQL - UUID ใหม่จะถูกสร้างขึ้นโดยอัตโนมัติ
  1. ตอนนี้เราสามารถเปิดใช้งานการจำลองแบบได้แล้วคุณมีหลายวิธีในการดำเนินการนี้:
  • ใช้เฉพาะการจำลองแบบแท็บในแผง 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) - ตำแหน่งบันทึกของแหล่งที่มา (ดูในสถานะแท็บหลักอื่นๆ )

Image 23: start replication on second primaryคุณสามารถเพิกเฉยต่อ “ประเภทคำสั่งที่ไม่รู้จัก” คำเตือนในตัวแก้ไขคำสั่งของคุณจะถูกดำเนินการต่อไป

  1. คุณสามารถตรวจสอบสถานะการจำลองของคุณได้ในสถานะแท็บหรือใช้SHOW REPLICA STATUS;(SHOW SLAVE STATUS;) สั่งการ.

Image 24: second primary status7. ทำซ้ำ 6-7 ขั้นตอนสำหรับเซิร์ฟเวอร์ MySQL อื่นของคุณ (first-primaryในกรณีของเรา) อย่าลืมแทนที่ค่าพารามิเตอร์ด้วยข้อมูลที่ถูกต้องจากsecond-primaryเซิร์ฟเวอร์

Image 25: start replication on first primaryยินดีด้วย! การจำลองแบบได้รับการเปิดใช้งานบนเซิร์ฟเวอร์ทั้งสองเรียบร้อยแล้ว

ตรวจสอบการจำลองแบบ

สุดท้ายนี้เรามาดูกันว่าทุกอย่างทำงานได้อย่างมีเสน่ห์

  1. เข้าสู่ระบบเซิร์ฟเวอร์ฐานข้อมูลแรกและสร้างใหม่ตัวอย่างฐานข้อมูล:

Image 27: create example databaseอย่างที่คุณเห็นมันถูกทำเครื่องหมายว่าจำลองแบบแล้วในการจำลองแบบหลักคอลัมน์.

บันทึก:ชื่อของฐานข้อมูลใหม่นี้สอดคล้องกับชื่อที่เราระบุไว้ในไฟล์กำหนดค่าของเซิร์ฟเวอร์ (binlog-do-db = ตัวอย่าง). สำหรับการใช้งานเพิ่มเติมคุณสามารถสร้างฐานข้อมูลของคุณเองและทดแทนได้binlog-do-dbค่าของพารามิเตอร์พร้อมชื่อ

  1. ตอนนี้เปลี่ยนไปใช้เซิร์ฟเวอร์ตัวที่สองในคลัสเตอร์ MySQL ของคุณและตรวจสอบว่าฐานข้อมูลที่สร้างขึ้นใหม่ได้รับการจำลองแบบหรือไม่หากต้องการตรวจสอบว่าการจำลองแบบทำงานได้ทั้งสองวิธีให้เพิ่มตารางใหม่ลงในฐานข้อมูลนี้

Image 28: add table to database3. สุดท้ายเปลี่ยนกลับไปที่แผงผู้ดูแลระบบของเซิร์ฟเวอร์ MySQL เครื่องแรกและตรวจสอบให้แน่ใจว่าฐานข้อมูลที่จำลองแบบนั้นมีตารางใหม่ทันที

Image 29: table replicated in first primaryคุณยังสามารถดำเนินการอื่นๆบางอย่างได้ (ดำเนินการกับบันทึกทริกเกอร์ดัชนีฯลฯ) เพื่อตรวจสอบว่าข้อมูลทั้งหมดได้รับการจำลองแบบทันทีภายในคลัสเตอร์ MySQL ของคุณ

นั่นง่ายมาก! เพลิดเพลินกับความปลอดภัยของข้อมูลอย่างสมบูรณ์ด้วยแพลตฟอร์มโฮสติ้ง