ค้นหาเว็บไซต์

วิธีการตั้งค่าการจำลองแบบ MariaDB (Master-Slave) ใน CentOS/RHEL 7 และ Debian 8/9


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

ท่ามกลางประโยชน์อื่นๆ ของการจำลองฐานข้อมูลในการตั้งค่ามาสเตอร์-สเลฟ เราสามารถพูดถึง:

  1. การสำรองข้อมูลสามารถทำได้บนเซิร์ฟเวอร์ทาสโดยไม่ส่งผลกระทบ (และได้รับผลกระทบจาก) การดำเนินการเขียนในเซิร์ฟเวอร์หลัก
  2. การดำเนินการที่ต้องใช้ทรัพยากรมาก (เช่น การวิเคราะห์ข้อมูล) สามารถดำเนินการได้บนสเลฟ โดยไม่กระทบต่อประสิทธิภาพของมาสเตอร์

ในบทความนี้ เราจะอธิบายวิธีการตั้งค่าการจำลองแบบหลัก-รองใน MariaDB 10.1 ตรงข้ามกับการจำลองแบบคลาสสิก MariaDB นำเสนอแนวคิดของ รหัสธุรกรรมทั่วโลก (GTIDs) ใน v10.0 ซึ่งอนุญาตให้เปลี่ยนทาสเป็น เชื่อมต่อและทำซ้ำจากต้นแบบอื่นได้อย่างง่ายดาย ยิ่งไปกว่านั้น สถานะของทาสจะถูกบันทึกในลักษณะที่ปลอดภัย (การอัปเดตสถานะจะทำในธุรกรรมเดียวกันกับการอัปเดตข้อมูล)

หากคุณกำลังมองหาการจำลอง MySQL ภายใต้ CentOS/RHEL 6 ให้ทำตามคำแนะนำนี้ ตั้งค่าการจำลอง MySQL (Master-Slave) บน CentOS/RHEL 6

การติดตั้ง MariaDB 10.1 ใน CentOS/RHEL 7 และ Debian 8/9

สภาพแวดล้อมการทดสอบของเราประกอบด้วยเครื่องดังต่อไปนี้ (ทั้งสองเครื่องคือ CentOS 7):

Master: 192.168.0.18
Slave: 192.168.0.19

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

  1. อัปเกรด MariaDB 5.5 เป็น MariaDB 10.1

ใน CentOS/RHEL

สร้างไฟล์ชื่อ MariaDB.repo ภายใน /etc/yum.repos.d โดยมีเนื้อหาต่อไปนี้ทั้งบน Master และ Slave ระบบ:

MariaDB 10.1 CentOS repository list - created 2016-01-23 14:16 UTC
http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

บันทึกไฟล์และติดตั้ง MariaDB บนเซิร์ฟเวอร์ทั้งสองโดยใช้ yum:

yum update && yum install MariaDB-server MariaDB-client

ในเดเบียน/อูบุนตู

เพิ่มคีย์เพื่อตรวจสอบแพ็กเกจและที่เก็บ MariaDB:

apt-get install software-properties-common
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
add-apt-repository 'deb [arch=amd64,i386] http://mirror.edatel.net.co/mariadb/repo/10.1/debian jessie main'

หมายเหตุ: แทนที่การแจกจ่าย ชื่อ และ ชื่อรหัส ในบรรทัดที่ไฮไลต์ด้านบน

ติดตั้งโดยใช้คำสั่ง apt-get:

apt-get update
apt-get install mariadb-server

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

การตั้งค่าฐานข้อมูล MySQL ตัวอย่างบน Master

ตอนนี้เราจะตั้งค่าฐานข้อมูล พนักงาน ในเซิร์ฟเวอร์หลักจาก https://github.com/datacharmer/test_db (ซึ่งมีชุดข้อมูล 4 แข็งแกร่ง> ล้านบันทึกกระจายอยู่บนหกตาราง) ในสองขั้นตอนง่ายๆ:

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

git clone https://github.com/datacharmer/test_db
cd test_db
mysql < employees.sql

การกำหนดค่าเซิร์ฟเวอร์ MySQL บน Master

ในการกำหนดค่าหลัก ให้ทำตามขั้นตอนเหล่านี้:

ขั้นตอนที่ 1: แก้ไขไฟล์ /etc/my.cnf ใต้ส่วน [mysqld] ให้เพิ่มสี่บรรทัดต่อไปนี้:

log-bin
server_id=1
replicate-do-db=employees
bind-address=192.168.0.18

และรีสตาร์ท MariaDB:

systemctl restart mariadb

ขั้นตอนที่ 2: เข้าสู่ระบบเซิร์ฟเวอร์ MariaDB ในฐานะรูท สร้างทาสผู้ใช้ และกำหนดสิทธิ์ที่จำเป็น:

MariaDB [(none)]> CREATE USER 'slave'@'localhost' IDENTIFIED BY 'SlavePassword';
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO slave IDENTIFIED BY 'SlavePassword' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
MariaDB [(none)]> SHOW MASTER STATUS;

คำสั่ง สุดท้าย (SHOW MASTER STATUS) ส่งคืนตำแหน่งปัจจุบันในบันทึกไบนารี่ (พิกัดที่แน่นอนที่ระบุว่าจุดใดที่ทาสควรเริ่มจำลองจาก:

ขั้นตอนที่ 3: ออกจากพรอมต์ MariaDB (ด้วย exit;) และใช้คำสั่งต่อไปนี้เพื่อถ่ายภาพฐานข้อมูลพนักงาน เมื่อคุณกด Enter คุณจะได้รับแจ้งให้พิมพ์รหัสผ่านสำหรับรูทที่คุณตั้งค่าไว้ก่อนหน้านี้ผ่าน mysql_secure_installation:

mysqldump -u root -p employees > employees-dump.sql

หลังจากดัมพ์เสร็จสิ้น ให้เชื่อมต่อกับเซิร์ฟเวอร์ฐานข้อมูลอีกครั้งเพื่อปลดล็อกตาราง จากนั้นออกจากระบบ:

MariaDB [(none)]> UNLOCK TABLES;
MariaDB [(none)]> exit;

ขั้นตอนที่ 4: คัดลอกดัมพ์ไปยังทาส:

scp employees-dump.sql [email :/root/ 

ขั้นตอนที่ 5: เรียกใช้ขั้นตอน mysql_upgrade เพื่ออัปเกรดตารางระบบ (คุณจะได้รับแจ้งให้ป้อนรหัสผ่านรูท MariaDB):

mysql_upgrade -u root -p

ขั้นตอนที่ 6: อนุญาตบริการฐานข้อมูลผ่านไฟร์วอลล์:

firewall-cmd --add-service=mysql
firewall-cmd --add-service=mysql --permanent
firewall-cmd --reload

ตอนนี้มากำหนดค่าทาสกัน

การกำหนดค่าเซิร์ฟเวอร์ MySQL บนทาส

ในการกำหนดค่าทาส ให้ทำตามขั้นตอนเหล่านี้:

ขั้นตอนที่ 1: สร้างบัญชีเพื่อดำเนินการจำลองแบบ เชื่อมต่อกับเซิร์ฟเวอร์ MariaDB ในเครื่องด้วย:

mysql -u root –p

และป้อนรหัสผ่านที่คุณตั้งไว้ก่อนหน้านี้

ขั้นตอนที่ 2: เมื่อเชื่อมต่อกับเซิร์ฟเวอร์ฐานข้อมูลแล้ว ให้สร้างผู้ใช้และฐานข้อมูลว่าง และให้สิทธิ์:

MariaDB [(none)]> CREATE DATABASE employees;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON employees.* TO 'slave'@'localhost' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;

ขั้นตอนที่ 3: ออกจากพรอมต์ MariaDB และโหลดดัมพ์ที่สร้างในเซิร์ฟเวอร์หลัก:

mysql -u root -p employees < employees-dump.sql

ขั้นตอนที่ 4: แก้ไขไฟล์ /etc/my.cnf เพื่อกำหนดเซิร์ฟเวอร์ ID ให้กับทาสภายใต้ [mysqld] ส่วน โปรดทราบว่าจะต้องเป็นจำนวนเต็มที่แตกต่างจาก 1 ตามที่เราใช้ 1 ในต้นแบบ:

server_id=2
replicate-do-db=employees

รีสตาร์ทเซิร์ฟเวอร์ฐานข้อมูล:

systemctl restart mariadb

ขั้นตอนที่ 5: เรียกใช้ขั้นตอน mysql_upgrade เพื่ออัปเกรดตารางระบบ (คุณจะได้รับแจ้งให้ป้อนรหัสผ่านรูท MariaDB):

mysql_upgrade -u root -p

ขั้นตอนที่ 6: เมื่อนำเข้าดัมพ์ไปยังทาสแล้ว เหลือเพียงไม่กี่ขั้นตอนในการเริ่มต้นการจำลอง เข้าสู่ระบบฐานข้อมูลและรันคำสั่งต่อไปนี้ในพรอมต์ MariaDB ให้ความสนใจเป็นพิเศษกับตัวแปร MASTER_LOG_FILE และ MASTER_LOG_POS ซึ่งควรตรงกับค่าที่ส่งกลับโดย SHOW MASTER STATUS ในขั้นตอนที่ 2 ของ “การกำหนดค่าหลัก” ข้างบน.

MariaDB [(none)]> CHANGE MASTER TO
  MASTER_HOST='192.168.0.18',
  MASTER_USER='slave',
  MASTER_PASSWORD='SlavePassword',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='master-bin.000001',
  MASTER_LOG_POS=314,
  MASTER_CONNECT_RETRY=10,
  MASTER_USE_GTID=current_pos;

ขั้นตอนที่ 7: เริ่มต้นทาสและตรวจสอบสถานะโดยไม่ต้องออกจากพรอมต์ MariaDB:

MariaDB [(none)]> START SLAVE;
MariaDB [(none)]> SHOW SLAVE STATUS\G;

ไม่ใช่ว่าคุณต้องการสิ่งนี้ตอนนี้ แต่โปรดทราบว่าคุณสามารถหยุดทาสได้ด้วย:

MariaDB [(none)]> STOP SLAVE;

หากคำสั่ง SHOW SLAVE STATUS\G; ส่งกลับข้อผิดพลาดใดๆ ใช้ข้อผิดพลาดเหล่านั้นเพื่อแก้ไขปัญหาแล้วเรียกใช้ START SLAVE; เพื่อทดสอบอีกครั้ง

ทดสอบการจำลองฐานข้อมูล MySQL/MariaDB

มาเพิ่มบันทึกลงในตาราง พนักงาน ในเซิร์ฟเวอร์หลัก:

MariaDB [(none)]> INSERT INTO employees (emp_no, birth_date, first_name, last_name, gender, hire_date) VALUES (500000, '1983-07-12', 'Dave', 'Null', 'M', '2014-12-12');

จากนั้นตรวจสอบว่าการเปลี่ยนแปลงนี้ถูกจำลองแบบในทาส:

MariaDB [(none)]> USE employees;
MariaDB [(none)]> SELECT * FROM employees WHERE emp_no=500000;

อย่างที่คุณเห็น การจำลองแบบทำงานอย่างถูกต้องตั้งแต่ต้นแบบไปจนถึงทาส

สรุป

ในบทความนี้ เราได้อธิบายวิธีติดตั้ง MariaDB เวอร์ชันล่าสุดใน CentOS/RHEL 7 และ Debian 8/9 และได้กล่าวถึงวิธีตั้งค่าการจำลองแบบ Master-Slave ด้วย GTID สำหรับข้อมูลเพิ่มเติม คุณอาจต้องการดูคู่มือการจำลอง MariaDB และอย่าลังเลที่จะติดต่อเราโดยใช้แบบฟอร์มด้านล่างหากคุณมีคำถามหรือความคิดเห็น