Computer >> คอมพิวเตอร์ >  >> ระบบ >> Linux

วิธีกำหนดค่าการจำลองแบบ MariaDB Master-Master/Slave

การจำลองแบบ ในฐานข้อมูล SQL เป็นกระบวนการคัดลอกข้อมูลจากฐานข้อมูลต้นทางไปยังฐานข้อมูลอื่น (หรือหลายฐานข้อมูล) และในทางกลับกัน ข้อมูลจากเซิร์ฟเวอร์ฐานข้อมูลหนึ่งจะถูกคัดลอกไปยังเซิร์ฟเวอร์อย่างน้อยหนึ่งเซิร์ฟเวอร์อย่างต่อเนื่อง คุณสามารถใช้การจำลองแบบเพื่อแจกจ่ายและสร้างสมดุลให้กับคำขอในกลุ่มเซิร์ฟเวอร์ที่จำลองแบบ ให้เฟลโอเวอร์ และความพร้อมใช้งานสูงของฐานข้อมูล MariaDB MariaDB (และ MySQL) อนุญาตให้ใช้การจำลองฐานข้อมูลสองประเภท:Master-Master และ ปรมาจารย์-ทาส . ในบทความนี้เราจะพิจารณาวิธีกำหนดค่าการจำลองแบบ MariaDB ทั้งสองประเภทบน Linux CentOS 7

กำลังติดตั้ง MariaDB

ก่อนหน้านี้ เราได้เผยแพร่บทความที่อธิบายขั้นตอนการติดตั้ง MariaDB บน ​​CentOS 7 คุณสามารถอ่านได้จากลิงก์:https://woshub.com/mariadb-install-configure-tunning-centos ดังนั้นเราจะไม่เน้นที่การติดตั้ง MariaDB แต่ไปที่วิธีกำหนดค่าการจำลองแบบ

การกำหนดค่า Simple Master-Master Replication บน MariaDB

ในรูปแบบการจำลองแบบ Master-Master เซิร์ฟเวอร์ฐานข้อมูล MariaDB/MySQL ใดๆ อาจใช้ทั้งในการเขียนหรืออ่านข้อมูล การจำลองแบบขึ้นอยู่กับไฟล์ binlog พิเศษ เซิร์ฟเวอร์หลักจะบันทึกการดำเนินการทั้งหมดที่มีฐานข้อมูลไว้ เซิร์ฟเวอร์ Slave จะเชื่อมต่อกับ Master และใช้คำสั่งกับฐานข้อมูล

1. MariaDB:การกำหนดค่าเซิร์ฟเวอร์หลักตัวแรก (Master-1)

เพิ่มบรรทัดต่อไปนี้ใน my.cnf ไฟล์บนเซิร์ฟเวอร์ MariaDB แรกของคุณ:

#replicationserver_id =1report_host =masterlog_bin =/var/lib/mysql/mariadb-binlog_bin_index =/var/lib/mysql/mariadb-bin.indexrelay_log =/var/lib/mysql/relay-binrelay_log_index =/var/lib/ mysql/relay-bin.index

วิธีกำหนดค่าการจำลองแบบ MariaDB Master-Master/Slave

service mariadb restart

สร้างผู้ใช้เพื่อกำหนดค่าการจำลองแบบ:

mysql
create user 'test_master'@'%' identified by 'test_master';
grant replication slave on *.* to 'test_master'@'%';

ในการเพิ่ม Slave เราต้องรับข้อมูล bin_log จากเซิร์ฟเวอร์ Master-1:

MariaDB [(none)]> show master status;

<ก่อน>+--------------------+----------+-------------- +-------------------+| ไฟล์ | ตำแหน่ง | Binlog_Do_DB | Binlog_Ignore_DB |+--------------------+----------+--------------+ -------------------+| mariadb-bin.000002 | 664 | | |+--------------------+----------+--------------+- -----------------+1 แถวในชุด (0.000 วินาที)

วิธีกำหนดค่าการจำลองแบบ MariaDB Master-Master/Slave

2. MariaDB:การกำหนดค่าของเซิร์ฟเวอร์หลักที่สอง (Master-2)

เชื่อมต่อกับเซิร์ฟเวอร์ MariaDB ที่สอง เปิดไฟล์ my.cnf และเพิ่มการกำหนดค่าต่อไปนี้:

#replicationserver_id =2report_host =master2log_bin =/var/lib/mysql/mariadb-binlog_bin_index =/var/lib/mysql/mariadb-bin.indexrelay_log =/var/lib/mysql/relay-binrelay_log_index =/var/lib/ mysql/relay-bin.index

วิธีกำหนดค่าการจำลองแบบ MariaDB Master-Master/Slave

สร้างผู้ใช้ใหม่บนเซิร์ฟเวอร์ที่สองด้วย:

create user 'test_master2'@'%' identified by 'test_master2';
grant replication slave on *.* to 'test_master2'@'%';

รับ bin_log บน Master-2:

MariaDB [(none)]> show master status;

<ก่อน>+--------------------+----------+-------------- +-------------------+| ไฟล์ | ตำแหน่ง | Binlog_Do_DB | Binlog_Ignore_DB |+--------------------+----------+--------------+ -------------------+| mariadb-bin.000001 | 667 | | |+--------------------+----------+--------------+- -----------------+1 แถวในชุด (0.000 วินาที)

มากำหนดค่าการเชื่อมต่อระหว่างเซิร์ฟเวอร์ MariaDB ในคลัสเตอร์การจำลองซอฟต์แวร์ของเรา:

หยุดทาส:

STOP SLAVE;

เพิ่ม Master-1 ไปยังเซิร์ฟเวอร์ที่สอง:

CHANGE MASTER TO MASTER_HOST='IP_master1', MASTER_USER='test_master', MASTER_PASSWORD='test_master', MASTER_LOG_FILE='mariadb-bin.000002', MASTER_LOG_POS=664;

เริ่มการจำลองแบบ:

START SLAVE;

วิธีกำหนดค่าการจำลองแบบ MariaDB Master-Master/Slave

เชื่อมต่อกับ Master-1 และทำตามขั้นตอนเดียวกัน แต่ระบุข้อมูลเกี่ยวกับเซิร์ฟเวอร์ที่สองแทน:

STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='10.2.10.36', MASTER_USER='test_master2', MASTER_PASSWORD='test_master2', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=667;
START SLAVE;

ตรวจสอบสถานะเซิร์ฟเวอร์ที่สอง:

show slave status \G

วิธีกำหนดค่าการจำลองแบบ MariaDB Master-Master/Slave

ดังที่คุณเห็นในภาพหน้าจอ มีการเชื่อมต่อระหว่างสองเซิร์ฟเวอร์และไม่มีข้อผิดพลาดเกิดขึ้น

3. จะตรวจสอบการจำลองระหว่างเซิร์ฟเวอร์ MariaDB ได้อย่างไร

จากนั้นเพื่อให้แน่ใจว่าการจำลองแบบระหว่างสองเซิร์ฟเวอร์ MariaDB ทำงานใน master+master เราจะสร้างฐานข้อมูลใหม่บน Master-1 และสร้างตารางในนั้น

MariaDB [(none)]> create database master1;
MariaDB [(none)]> use master1;
MariaDB [master1]> CREATE TABLE hello (
-> AuthorID INT NOT NULL AUTO_INCREMENT,
-> AuthorName VARCHAR(100),
-> PRIMARY KEY(AuthorID)
-> );

วิธีกำหนดค่าการจำลองแบบ MariaDB Master-Master/Slave

ตรวจสอบให้แน่ใจว่าฐานข้อมูลนี้ได้จำลองแบบอัตโนมัติบนต้นแบบที่สองและมีตารางเดียวกัน:

MariaDB [(none)]> show databases;

<ก่อนหน้า>+--------------------+| ฐานข้อมูล |+--------------------+| information_schema || master1 || mysql || performance_schema |+--------------------+

MariaDB [(none)]> use master1;
MariaDB [master1]> show tables;

<ก่อนหน้า>+-------------------+| Tables_in_master1 |+-------------------+| สวัสดี |+-------------------+

ฐานข้อมูลถูกสร้างขึ้นบนต้นแบบที่สองเช่นกัน หากต้องการตรวจสอบวงจรทั้งหมด ให้สร้างตารางในฐานข้อมูล Master1 บนเซิร์ฟเวอร์หลักที่สองและตรวจสอบว่าปรากฏบนเซิร์ฟเวอร์เครื่องแรกหรือไม่

MariaDB [master1]> CREATE TABLE hello_master1 (
-> AuthorID INT NOT NULL AUTO_INCREMENT,
-> AuthorName VARCHAR(100),
-> PRIMARY KEY(AuthorID)
-> );

ตาราง hello_master1 ถูกจำลองไปยังเซิร์ฟเวอร์แรก:

MariaDB [master1]> show tables;

<ก่อนหน้า>+-------------------+| Tables_in_master1 |+-------------------+| สวัสดี || hello_master1 |+-------------------+

วิธีกำหนดค่าการจำลองแบบ MariaDB Master-Master/Slave

อย่างที่คุณเห็น ตารางใหม่ได้ปรากฏบน Master-1 แล้ว การจำลองแบบได้ผล

จะตั้งค่าการจำลอง Master-Slave ใน MariaDB ได้อย่างไร

ในโหมดการจำลองแบบ MariaDB มาสเตอร์-ทาส เซิร์ฟเวอร์หนึ่งทำหน้าที่เป็นทาส และข้อมูลจากเซิร์ฟเวอร์หลักจะถูกเขียนไปยังเซิร์ฟเวอร์นั้นอย่างต่อเนื่อง การเปลี่ยนแปลงทั้งหมดที่คุณทำบนเซิร์ฟเวอร์ Slave จะไม่ถูกโอนไปยังเซิร์ฟเวอร์หลัก ประเภทการจำลองแบบฐานข้อมูลนี้มีความยืดหยุ่นและใช้บ่อยขึ้น ในการกำหนดค่านี้ คุณจะมีเซิร์ฟเวอร์สำรองที่มีฐานข้อมูลที่ทันสมัยอยู่เสมอ และหากเซิร์ฟเวอร์รองล้มเหลว มาสเตอร์จะไม่สูญเสียข้อมูลใดๆ คุณยังสามารถกระจายโหลดฐานข้อมูลสำหรับโครงการของคุณเพื่อให้แอพอ่านข้อมูลจากเซิร์ฟเวอร์ Slave ของคุณและเขียนข้อมูลไปยังเซิร์ฟเวอร์หลักเท่านั้น ดังนั้น คุณจึงทำให้การตอบสนองของฐานข้อมูลเป็นไปอย่างรวดเร็วที่สุด

เมื่อกำหนดค่าการจำลองแบบ master+slave ของฐานข้อมูล MariaDB เซิร์ฟเวอร์หลัก (master1) จะได้รับการกำหนดค่าตามที่อธิบายไว้ข้างต้น

ย้ายไปที่เซิร์ฟเวอร์สเลฟ เพิ่มการกำหนดค่าต่อไปนี้ในไฟล์ทาส my.cnf:

#replicationserver_id =2report_host =slave2log_bin =/var/lib/mysql/mariadb-binlog_bin_index =/var/lib/mysql/mariadb-bin.indexrelay_log =/var/lib/mysql/relay-binrelay_log_index =/var/lib/ mysql/relay-bin.index

เริ่มบริการ MariaDB ใหม่ รับข้อมูล bin_log จากเซิร์ฟเวอร์แรก:

MariaDB [(none)]> show master status;

<ก่อน>+--------------------+----------+-------------- +-------------------+| ไฟล์ | ตำแหน่ง | Binlog_Do_DB | Binlog_Ignore_DB |+--------------------+----------+--------------+ -------------------+| mariadb-bin.000001 | 664 | | |+--------------------+----------+--------------+- ------------------

รันคำสั่งเหล่านี้ในคอนโซล mariadb บนเซิร์ฟเวอร์สเลฟ:

MariaDB [(none)]> STOP SLAVE;

MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='IP_master', MASTER_USER='test_master', MASTER_PASSWORD='test_master', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=664;
MariaDB [(none)]> START SLAVE;

เมื่อคุณกำหนดค่าการจำลองแบบสำหรับฐานข้อมูล MariaDB ที่มีอยู่ คุณต้องทำให้ฐานข้อมูลอยู่ในโหมดอ่านอย่างเดียวก่อนที่จะเริ่มการจำลองเพื่อไม่ให้อัปเดตหมายเลข bin_log

SET GLOBAL read_only = ON;

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

วิธีตรวจสอบสถานะทาส:SHOW SLAVE STATUS\G;

ในการสร้างฐานข้อมูลบน Master:

MariaDB [(none)]> create database master_hello;

ตรวจสอบให้แน่ใจว่าฐานข้อมูลถูกสร้างขึ้นบนเซิร์ฟเวอร์ Slave ด้วย:

MariaDB [(none)]> show databases;

<ก่อนหน้า>+--------------------+| ฐานข้อมูล |+--------------------+| information_schema || master_hello || master_test || mysql || performance_schema || ทดสอบ |+--------------------+

วิธีกำหนดค่าการจำลองแบบ MariaDB Master-Master/Slave

สร้างฐานข้อมูลบนเซิร์ฟเวอร์ Slave และตรวจสอบว่าฐานข้อมูลถูกจำลองไปยัง Master หรือไม่

วิธีกำหนดค่าการจำลองแบบ MariaDB Master-Master/Slave

อย่างที่คุณเห็น เราได้สร้างฐานข้อมูลและมีอยู่ใน Slave มาดูกันว่ามันปรากฏบนอาจารย์หรือไม่ มันไม่มี ข้อมูลจะไม่ถูกจำลองแบบจากสเลฟเป็นมาสเตอร์

วิธีกำหนดค่าการจำลองแบบ MariaDB Master-Master/Slave

หมายความว่าการจำลองแบบ MariaDB ทำงานในทิศทางเดียวเท่านั้น มาตรวจสอบอีกครั้งและลบ master_hello ฐานข้อมูลจากเซิร์ฟเวอร์ Slave:

วิธีกำหนดค่าการจำลองแบบ MariaDB Master-Master/Slave

ตรวจสอบว่าได้ลบออกจากเซิร์ฟเวอร์หลักหรือไม่:

วิธีกำหนดค่าการจำลองแบบ MariaDB Master-Master/Slave

อย่างที่คุณเห็น ไม่เป็นไรและมีฐานข้อมูล

ป.ล.:เมื่อคุณตั้งค่าคอนฟิกการจำลองแบบ mariadb คุณอาจพบข้อผิดพลาดบางประการ โดยที่ไฟร์วอลล์เป็นช่องโหว่ที่พบบ่อยที่สุด ตามค่าเริ่มต้น ไฟร์วอลล์จะถูกติดตั้งใน CentOS ซึ่งจะบล็อกพอร์ตการจำลองแบบ MariaDB (TCP 3396) คุณสามารถเปิดพอร์ตโดยใช้ iptables หรือปิดใช้งานไฟร์วอลล์ของคุณ (ไม่ใช่ตัวเลือกที่ดีที่สุด)

ที่อยู่ IP ที่ฐานข้อมูลกำลังรอการเชื่อมต่อถูกระบุในพารามิเตอร์ bind-address ใน my.cnf.. หากต้องการอนุญาตการเชื่อมต่อภายในและภายนอก คุณต้องแสดงความคิดเห็นบรรทัดนี้และเพิ่มกฎ iptables ที่อนุญาตการเชื่อมต่อจากต้นแบบ /slave ที่อยู่ IP ไปยังพอร์ต 3306

iptables -I INPUT -p tcp -s ip_address_slave_server --dport 3306 -j ACCEPT
iptables -I INPUT -p tcp --dport 3306 -j DROP

ระหว่างการตั้งค่าเริ่มต้น ฉันพบปัญหานี้ แต่ตรวจพบได้ง่าย หากคุณเรียกใช้การตรวจสอบสถานะทาส SHOW SLAVE STATUS\G คุณจะเห็นข้อผิดพลาดนี้:

วิธีกำหนดค่าการจำลองแบบ MariaDB Master-Master/Slave

คุณสามารถเพิ่มพารามิเตอร์บางอย่างใน #replication บล็อกในไฟล์ my.cnf ด้านล่างนี้ฉันจะยกตัวอย่างและคำอธิบายสั้น ๆ เกี่ยวกับพารามิเตอร์ที่มีประโยชน์ ฉันจะยกตัวอย่างของฟังก์ชันอื่นๆ ที่อาจมีประโยชน์เมื่อคุณกำหนดค่าการจำลองฐานข้อมูล mariadb

server_id = 1 — ระบุ ID เซิร์ฟเวอร์ โดยปกติเราจะเริ่มต้นด้วย 1 แต่คุณสามารถใช้หมายเลขใดก็ได้ที่ไม่ตรงกับของเซิร์ฟเวอร์อื่นที่ใช้สำหรับการจำลองแบบ

report_host = master — โดยปกติคุณจะระบุชื่อโฮสต์ของเซิร์ฟเวอร์ แต่คุณสามารถป้อนที่อยู่ IP แทนได้

log_bin = /var/lib/mysql/mariadb-bin — คือเส้นทางไปยังบันทึกการอัพเดท (log_bin)

log_bin_index = /var/lib/mysql/mariadb-bin.index — ช่วยให้คุณทราบได้ว่าบันทึกใดใช้งานอยู่และบันทึกใดถูกใช้ก่อนหน้านี้

relay_log = /var/lib/mysql/relay-bin

relay_log_index = /var/lib/mysql/relay-bin.index — เป็นบันทึกการจำลองแบบ

หากคุณต้องการกำหนดค่าแบบจำลองของฐานข้อมูลเฉพาะหรือฐานข้อมูลที่เลือก ให้ใช้พารามิเตอร์ต่อไปนี้:

replicate-do-db = dbname — หากคุณต้องการหลายฐานข้อมูล ให้ระบุชื่อโดยคั่นด้วยเครื่องหมายจุลภาค

หากต้องการแยกฐานข้อมูลบางส่วนออกจากการจำลองแบบ (ตามปกติ ฐานข้อมูลบริการจะไม่รวมอยู่ในการจำลองแบบ:information_schema, mysql และ performance_schema):

binlog-ignore-db = dbname

ในการตั้งเวลาบันทึกประวัติสำหรับ bin_log ของคุณ:

expire_logs_days = 10 — โดยที่ 10 คือจำนวนวันที่บันทึกจะถูกจัดเก็บ

นอกจากนี้ หากข้อมูลจากเซิร์ฟเวอร์หลักของคุณถูกเขียนไปยังฐานข้อมูลด้วยชื่ออื่น คุณสามารถตั้งค่าในไฟล์ปรับแต่งได้:

replicate-rewrite-db=dbmastername->dbslavename

การกำหนดค่าการจำลองแบบเสร็จสมบูรณ์ ฉันคิดว่าเมื่อใช้บทความนี้ คุณจะสามารถกำหนดค่าการจำลองแบบ MariaDB ได้ทั้งในโหมด Master + Master และ Master + Slave โดยไม่มีปัญหาใดๆ