การโฆษณา

บ้าน - คอมพิวเตอร์
พื้นฐานของการจำลองแบบใน MySQL การตั้งค่าการจำลองฐานข้อมูล mysql การติดตั้งและการกำหนดค่าของ Master

ขอให้เป็นวันที่ดีทุกคน! วันนี้ในบทความของเรา เราจะดูตัวอย่างการตั้งค่าการจำลองแบบ "master-slave"

ทฤษฎีเล็กน้อย

เหตุใดจึงต้องมีการจำลองแบบ? ก่อนอื่น นี่คือเครือข่ายความปลอดภัยในกรณีที่เซิร์ฟเวอร์ mysql หลักล้มเหลว จากนั้นคุณสามารถสลับไปยังเซิร์ฟเวอร์ทาสและทำงานต่อไปได้ ประการที่สอง นี่เป็นโอกาสในการลดภาระบนเซิร์ฟเวอร์ Mysql หลักโดยใช้เซิร์ฟเวอร์หลักสำหรับการเขียนเท่านั้น และดำเนินการอ่านบนเซิร์ฟเวอร์ทาส การจำลองแบบเกิดขึ้นได้อย่างไร? เซิร์ฟเวอร์หลักจะเขียน binlogs ซึ่งระบุการดำเนินการที่ดำเนินการบนฐานข้อมูล (ฐานข้อมูล) และจดจำออฟเซ็ตในบันทึกตั้งแต่เริ่มต้นจนถึงบันทึกปัจจุบัน (ตำแหน่ง) เซิร์ฟเวอร์ทาสเชื่อมต่อกับต้นแบบ เปรียบเทียบค่าตำแหน่ง และอ่านการเปลี่ยนแปลงในบันทึกโดยเริ่มจากค่าของตำแหน่งของตัวเองและลงท้ายด้วยค่าของตำแหน่งของต้นแบบ มันใช้การเปลี่ยนแปลง (คำสั่ง) กับฐานข้อมูลบนเซิร์ฟเวอร์ทาส

การติดตั้งและการกำหนดค่าของ Master

เราเปลี่ยน my.cnf บนเซิร์ฟเวอร์หลัก:

Server-id = 1 - ระบุรหัสเซิร์ฟเวอร์ log_bin = /var/log/mysql/mysql-bin.log - ชื่อบันทึกและเส้นทาง

คำอธิบายเล็กๆ น้อยๆ: ตามค่าเริ่มต้น ตัวช่วยสร้างจะเขียน binlogs สำหรับฐานข้อมูลทั้งหมด ซึ่งสามารถแก้ไขได้โดยใช้ "binlog-do-db" ค่าจะถูกบันทึกลงในบันทึกเมื่อใช้ฐานข้อมูลเฉพาะ การเปลี่ยนแปลงในฐานข้อมูลอื่นจะไม่ถูกบันทึกที่นี่คุณสามารถระบุจำนวนวันที่จะจัดเก็บบันทึก ขนาดสูงสุดคือเท่าใด (พารามิเตอร์ expir_logs_days และ max_binlog_size) เพิ่มผู้ใช้ใน MySQL ภายใต้การจำลองสิทธิ์ที่จะดำเนินการ:

GRANT ทาสการจำลองแบบบน *.* ถึง user_name@ip_slave_server ระบุโดย "รหัสผ่าน";

Replication Slave เป็นสิทธิ์ที่อนุญาตให้ผู้ใช้อ่าน Binlog ip_slave_server - ip ของเซิร์ฟเวอร์ที่ผู้ใช้จะเชื่อมต่อ รีบูตเซิร์ฟเวอร์ mysql:

/etc/init.d/mysql รีสตาร์ท

ตรวจสอบงานของอาจารย์:

แสดงสถานะหลัก

คุณควรเห็นชื่อของ binlog และตำแหน่งของมัน เมื่อดำเนินการคำสั่งบนฐานข้อมูลตำแหน่งจะเปลี่ยนไป

การตั้งค่าทาส

เราทำการเปลี่ยนแปลงไฟล์ my.cnf:

Server-id = 2 - ตัวระบุของเซิร์ฟเวอร์ทาสจะต้องแตกต่างจากตัวระบุหลัก Relay-log = /var/lib/mysql/mysql-relay-bin - เช่นเดียวกับบันทึกไบนารีประกอบด้วยชุดของไฟล์ที่มีหมายเลขซึ่งมีเหตุการณ์ที่อธิบายการเปลี่ยนแปลงในฐานข้อมูล Relay-log-index = /var/lib/mysql/mysql-relay-bin.index - ไฟล์ดัชนีที่มีชื่อของไฟล์บันทึกการถ่ายทอดทั้งหมดที่ใช้งานอยู่ Replicate-do-DB = ฐานข้อมูลที่จะถูกจำลองแบบ

หมายเหตุสำคัญ! เมื่อจัดระเบียบ cross db (เมื่อใช้ฐานข้อมูลหนึ่งและข้อมูลถูกอัพเดตในฐานข้อมูลอื่น) ไม่จำเป็นต้องระบุ binlog-do-db ในการตั้งค่าเซิร์ฟเวอร์หลัก binlog- และควรเขียนสำหรับฐานข้อมูลทั้งหมด และใน การตั้งค่าทาสจำเป็นต้องใช้การทำซ้ำ-do แทน -db ระบุการทำซ้ำ-wild-do-table=db_name.% โดยที่ db_name คือชื่อของฐานข้อมูลที่ถูกจำลองแบบรีบูตเซิร์ฟเวอร์ mysql:

/etc/init.d/mysql รีสตาร์ท

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

ตั้งค่า GLOBAL อ่านอย่างเดียว = เปิด;

ลองดูที่สถานะของเจ้านาย:

แสดงสถานะหลัก

เราจำค่าของไฟล์และตำแหน่งได้ (หรือดีกว่านั้นให้จดบันทึกไว้) ค่าตำแหน่งไม่ควรเปลี่ยนแปลงในขณะนี้ เราดัมพ์ต้นแบบโดยใช้คำสั่ง mysqldump:

Mysqldump -uname -ppassword db_master_name > dump_db,

โดยที่ name คือชื่อผู้ใช้ รหัสผ่านคือรหัสผ่าน db_master_name คือชื่อฐานข้อมูล dump_db คือชื่อของดัมพ์ หลังจากการถ่ายโอนข้อมูลเสร็จสิ้น เราอนุญาตให้เขียนลงในฐานข้อมูลได้:

ตั้งค่า GLOBAL อ่านอย่างเดียว = ปิด;

เราถ่ายโอนดัมพ์ไปยังทาสและขยายมัน

Mysql -uname -ppassword db_slave_name< dump_db

กำลังตั้งค่าการจำลอง

เปลี่ยน MASTER เป็น MASTER_HOST = “master ip”, MASTER_USER = “user_name”, MASTER_PASSWORD = “รหัสผ่าน”, MASTER_LOG_FILE = “ชื่อบันทึก”, MASTER_LOG_POS = ตำแหน่ง;

master ip - IP ของเซิร์ฟเวอร์ที่ Master ตั้งอยู่, ชื่อผู้ใช้ - ชื่อของผู้ใช้ที่เราสร้างบน Master, ชื่อบันทึก - ค่าไฟล์บน Master เมื่อสร้างการถ่ายโอนข้อมูลฐานข้อมูล, ตำแหน่ง - ค่า Position บน ต้นแบบเมื่อมีการสร้างดัมพ์ฐานข้อมูล มาเริ่มทาสกันดีกว่า:

เริ่มทาส;

มาดูกันว่าการจำลองดำเนินไปอย่างไร: บนต้นแบบ: SHOW MASTER STATUS\G บนสเลฟ: SHOW SLAVE STATUS\G

การตั้งค่าความปลอดภัยบนเซิร์ฟเวอร์หลัก

พารามิเตอร์bind-addressใน /etc/mysql/my.cnf ระบุที่อยู่ IP ใดที่เซิร์ฟเวอร์ mysql จะฟังขณะรอการเชื่อมต่อ โดยทั่วไปจะมีค่า bind-address = 127.0.0.1 แต่หลังจากตั้งค่าเซิร์ฟเวอร์ทาสแล้ว เราจำเป็นต้องอนุญาตการเชื่อมต่อจากเซิร์ฟเวอร์ทาสและยังคงต้องทำงานอยู่ การเชื่อมต่อในท้องถิ่น- Bind-address สามารถอนุญาตการเชื่อมต่อจาก IP เดียวหรือจากทั้งหมด เพราะ เราจำเป็นต้องระบุมากกว่าหนึ่ง IP สำหรับการเชื่อมต่อ เราใส่เครื่องหมายความคิดเห็นในบรรทัดด้วย bind-address = 127.0.0.1 ตอนนี้เซิร์ฟเวอร์ mysql จะยอมรับการเชื่อมต่อจากที่อยู่ IP ทั้งหมดซึ่งเป็นอันตรายมาก iptables จะช่วยเราแก้ปัญหานี้:

Iptables -I INPUT -p tcp -s ip_slave_server-a --dport 3306 -j ACCEPT -ขั้นแรกให้อนุญาตการเชื่อมต่อจากที่อยู่ IP ของเซิร์ฟเวอร์ทาส iptables -I INPUT -p tcp --dport 3306 -j DROP -จากนั้นปฏิเสธการเชื่อมต่อจาก ที่อยู่ IP อื่นๆ ทั้งหมด

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

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

แนะนำสั้น ๆ

การจำลองแบบ (จากละติน replico - ฉันทำซ้ำ) คือการจำลองแบบของการเปลี่ยนแปลงข้อมูลจากเซิร์ฟเวอร์ฐานข้อมูลหลักไปยังเซิร์ฟเวอร์ที่ขึ้นต่อกันตั้งแต่หนึ่งเซิร์ฟเวอร์ขึ้นไป เราจะเรียกเซิร์ฟเวอร์หลัก ผู้เชี่ยวชาญและขึ้นอยู่กับ - แบบจำลอง.
การเปลี่ยนแปลงข้อมูลที่เกิดขึ้นบนต้นแบบจะถูกทำซ้ำบนเรพลิกา (แต่ไม่ใช่ในทางกลับกัน) ดังนั้น การสืบค้นเพื่อเปลี่ยนแปลงข้อมูล (INSERT, UPDATE, DELETE ฯลฯ) จะถูกดำเนินการบนต้นแบบเท่านั้น ในขณะที่การสืบค้นเพื่ออ่านข้อมูล (หรืออีกนัยหนึ่งคือ SELECT) สามารถดำเนินการได้ทั้งบนแบบจำลองและต้นแบบ กระบวนการเรพลิเคชันบนเรพลิกาตัวใดตัวหนึ่งไม่ส่งผลต่อการทำงานของเรพลิกาอื่น และในทางปฏิบัติแล้วจะไม่ส่งผลกระทบต่อการทำงานของต้นแบบ
การจำลองแบบจะดำเนินการโดยใช้บันทึกไบนารีที่เก็บรักษาไว้บนต้นแบบ โดยจะจัดเก็บการสืบค้นทั้งหมดที่นำไปสู่ ​​(หรืออาจนำไปสู่) การเปลี่ยนแปลงในฐานข้อมูล (การสืบค้นจะไม่ได้รับการบันทึกอย่างชัดเจน ดังนั้น หากคุณต้องการดู คุณจะต้องใช้ยูทิลิตี mysqlbinlog) binlogs จะถูกถ่ายโอนไปยังเรพลิกา (binlog ที่ดาวน์โหลดจากต้นแบบเรียกว่า "relay binlog") และการสืบค้นที่เก็บไว้จะถูกดำเนินการโดยเริ่มจากตำแหน่งที่แน่นอน สิ่งสำคัญคือต้องเข้าใจว่าในระหว่างการจำลองแบบ ไม่ใช่ข้อมูลที่เปลี่ยนแปลงเท่านั้นที่ถูกถ่ายโอน แต่เป็นเพียงแบบสอบถามที่ทำให้เกิดการเปลี่ยนแปลงเท่านั้น
ด้วยการจำลองแบบ เนื้อหาของฐานข้อมูลจะถูกทำซ้ำบนเซิร์ฟเวอร์หลายเครื่อง เหตุใดจึงต้องหันไปพึ่งการทำซ้ำ? มีสาเหตุหลายประการ:
  • ประสิทธิภาพและความสามารถในการขยายขนาด- เซิร์ฟเวอร์เครื่องหนึ่งอาจไม่สามารถจัดการโหลดที่เกิดจากการดำเนินการอ่านและเขียนพร้อมกันในฐานข้อมูลได้ ประโยชน์ของการสร้างเรพลิกาจะยิ่งมีมากขึ้นตามการอ่านต่อการเขียนที่คุณมีในระบบของคุณมากขึ้น
  • ความอดทนต่อความผิดพลาด- ในกรณีที่แบบจำลองล้มเหลว คำขออ่านทั้งหมดสามารถถ่ายโอนไปยังต้นแบบได้อย่างปลอดภัย หากต้นแบบล้มเหลว คำขอเขียนสามารถโอนไปยังเรพลิกาได้ (หลังจากที่ต้นแบบได้รับการกู้คืนแล้ว ก็สามารถเข้ามารับหน้าที่แทนเรพลิกาได้)
  • การสำรองข้อมูล- แบบจำลองสามารถ "ช้าลง" ได้ชั่วขณะหนึ่งเพื่อดำเนินการ mysqldump แต่ต้นแบบไม่สามารถทำได้
  • การคำนวณเลื่อนออกไป- การสืบค้น SQL ที่หนักและช้าสามารถดำเนินการบนแบบจำลองที่แยกจากกันโดยไม่ต้องกลัวว่าจะถูกรบกวน การทำงานปกติระบบทั้งหมด
นอกจากนี้ยังมีฟีเจอร์อื่นๆ ที่น่าสนใจอีกด้วย เนื่องจากไม่ใช่ข้อมูลที่ถูกถ่ายโอนไปยังเรพลิกา แต่เป็นคิวรีที่ทำให้เกิดการเปลี่ยนแปลง เราจึงสามารถใช้โครงสร้างตารางที่แตกต่างกันบนต้นแบบและเรพลิกาได้ โดยเฉพาะประเภทของตาราง (เครื่องยนต์) หรือชุดดัชนีอาจแตกต่างกัน ตัวอย่างเช่น ในการค้นหาข้อความแบบเต็ม เราสามารถใช้ประเภทตาราง MyISAM บนแบบจำลองได้ แม้ว่าต้นแบบจะใช้ InnoDB ก็ตาม

กำลังตั้งค่าการจำลอง

สมมติว่าเรามีฐานข้อมูล MySQL ที่ใช้งานได้ ซึ่งเต็มไปด้วยข้อมูลและเปิดใช้งานแล้ว และด้วยเหตุผลประการหนึ่งที่อธิบายไว้ข้างต้น เราจะเปิดใช้งานการจำลองแบบเซิร์ฟเวอร์ของเรา ข้อมูลเริ่มต้นของเรา:
  • ที่อยู่ IP หลักคือ 192.168.1.101 ส่วนแบบจำลองคือ 192.168.1.102
  • ติดตั้งและกำหนดค่า MySQL แล้ว
  • คุณต้องกำหนดค่าการจำลองฐานข้อมูล testdb
  • เราสามารถหยุดวิซาร์ดชั่วคราวได้ชั่วขณะหนึ่ง
  • แน่นอนว่าเรารูทเครื่องทั้งสองเครื่องแล้ว
การตั้งค่าตัวช่วยสร้าง
อย่าลืมระบุ ID เซิร์ฟเวอร์ที่ไม่ซ้ำกัน เส้นทางสำหรับบันทึกไบนารี และชื่อของฐานข้อมูลสำหรับการจำลองในส่วน:
เซิร์ฟเวอร์-id = 1
log-bin = /var/lib/mysql/mysql-bin
ทำซ้ำ-do-db = testdb
ตรวจสอบให้แน่ใจว่าคุณมีพื้นที่ดิสก์เพียงพอสำหรับบันทึกไบนารี

มาเพิ่มผู้ใช้การจำลองแบบซึ่งจะดำเนินการจำลองแบบสิทธิ์ สิทธิ์ "การจำลองแบบทาส" จะเพียงพอแล้ว:
mysql@master> ให้สิทธิ์การจำลองแบบทาสบน "testdb". * ถึง "การจำลอง"@"192.168.1.102" ระบุโดย "รหัสผ่าน";

รีบูต MySQL เพื่อให้การเปลี่ยนแปลงในการกำหนดค่ามีผล:
root@master# บริการ mysqld รีสตาร์ท

หากทุกอย่างเป็นไปด้วยดี คำสั่ง "show master status" ควรแสดงดังนี้:
mysql@master>แสดงสถานะมาสเตอร์\G
ไฟล์: mysql-bin.000003
ตำแหน่ง: 98
Binlog_Do_DB:
Binlog_Ignore_DB:
ค่าตำแหน่งควรเพิ่มขึ้นเมื่อมีการเปลี่ยนแปลงฐานข้อมูลบนต้นแบบ

การตั้งค่าการจำลอง
มาระบุ ID เซิร์ฟเวอร์ ชื่อของฐานข้อมูลสำหรับการจำลอง และเส้นทางไปยังรีเลย์บินล็อกในส่วนการกำหนดค่า จากนั้นโหลด MySQL อีกครั้ง:
เซิร์ฟเวอร์-id = 2
รีเลย์-log = /var/lib/mysql/mysql-relay-bin
รีเลย์บันทึกดัชนี = /var/lib/mysql/mysql-relay-bin.index
ทำซ้ำ-do-db = testdb

Root@replica# บริการ mysqld รีสตาร์ท

กำลังถ่ายโอนข้อมูล
ที่นี่เราจะต้องล็อคฐานข้อมูลสำหรับการเขียน ในการดำเนินการนี้ คุณสามารถหยุดแอปพลิเคชันหรือใช้แฟล็ก read_only บนต้นแบบได้ (โปรดทราบ: แฟล็กนี้ไม่มีผลกับผู้ใช้ที่มีสิทธิ์ SUPER) หากเรามีตาราง MyISAM เรามา "ล้างตาราง" ด้วย:
mysql@master> ล้างตารางพร้อมล็อคการอ่าน;
mysql@master> SET GLOBAL read_only = เปิด;

มาดูสถานะของมาสเตอร์ด้วยคำสั่ง “แสดงสถานะมาสเตอร์” และจดจำค่าไฟล์และตำแหน่ง (หลังจากบล็อคมาสเตอร์สำเร็จแล้ว ไม่ควรเปลี่ยนแปลง):
ไฟล์: mysql-bin.000003
ตำแหน่ง: 98

เราดัมพ์ฐานข้อมูล และหลังจากการดำเนินการเสร็จสิ้น เราจะลบการล็อกของต้นแบบออก:
mysql@master> SET GLOBAL read_only = ปิด;

เราถ่ายโอนดัมพ์ไปยังเรพลิกาและกู้คืนข้อมูลจากมัน
ในที่สุด เราเริ่มการจำลองด้วยคำสั่ง “เปลี่ยนต้นแบบเป็น” และ “เริ่มทาส” และดูว่าทุกอย่างเป็นไปด้วยดีหรือไม่:
mysql@replica> เปลี่ยน MASTER เป็น MASTER_HOST = "192.168.1.101", MASTER_USER = "การจำลอง", MASTER_PASSWORD = "รหัสผ่าน", MASTER_LOG_FILE = "mysql-bin.000003", MASTER_LOG_POS = 98;
mysql@replica> เริ่มทาส;
เราใช้ค่าของ MASTER_LOG_FILE และ MASTER_LOG_POS จากต้นแบบ

มาดูกันว่าการจำลองเกิดขึ้นอย่างไรด้วยคำสั่ง "แสดงสถานะทาส":
mysql@replica> แสดงสถานะทาส\G
Slave_IO_State: กำลังรอให้มาสเตอร์ส่งกิจกรรม
มาสเตอร์_โฮสต์: 192.168.1.101
Master_User: การจำลองแบบ
มาสเตอร์_พอร์ต: 3306
เชื่อมต่อ_ลองอีกครั้ง: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 98
Relay_Log_File: mysql-relay-bin.001152
Relay_Log_Pos: 235
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: ใช่
Slave_SQL_Running: ใช่
Replicate_Do_DB: testdb, testdb
ทำซ้ำ_Ignore_DB:
ทำซ้ำ_Do_Table:
Replicate_Ignore_Table:
ทำซ้ำ_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
ข้าม_เคาน์เตอร์: 0
Exec_Master_Log_Pos: 98
รีเลย์_ล็อก_สเปซ: 235
จนกระทั่ง_เงื่อนไข: ไม่มี
จนกระทั่ง_Log_ไฟล์:
จนถึง_Log_Pos: 0
Master_SSL_Allowed: ไม่
Master_SSL_CA_ไฟล์:
มาสเตอร์_SSL_CA_เส้นทาง:
มาสเตอร์_SSL_ใบรับรอง:
มาสเตอร์_SSL_Cipher:
มาสเตอร์_SSL_คีย์:
Seconds_Behind_Master: 5

ฉันได้เน้นถึงคุณค่าที่น่าสนใจที่สุดแล้ว หากการจำลองเริ่มต้นได้สำเร็จ ค่าควรใกล้เคียงกับในรายการ (ดูคำอธิบายของคำสั่ง "แสดงสถานะทาส" ในเอกสารประกอบ) ค่า Seconds_Behind_Master สามารถเป็นจำนวนเต็มใดก็ได้
หากการจำลองแบบเป็นเรื่องปกติ แบบจำลองจะตามต้นแบบ (หมายเลขบันทึกใน Master_Log_File และตำแหน่ง Exec_Master_Log_Pos จะเพิ่มขึ้น) เวลาล่าช้าของแบบจำลองจากต้นแบบ (Seconds_Behind_Master) ควรเท่ากับศูนย์ หากไม่ลดลงหรือเพิ่มขึ้น อาจเป็นไปได้ว่าโหลดบนเรพลิกาสูงเกินไป - ไม่มีเวลาทำซ้ำการเปลี่ยนแปลงที่เกิดขึ้นกับต้นแบบ
ถ้า Slave_IO_State ว่างเปล่า และ Seconds_Behind_Master เป็น NULL การจำลองแบบยังไม่เริ่มต้น ดูบันทึก MySQL เพื่อค้นหาสาเหตุ ลบออก และเริ่มการจำลองใหม่:
mysql@replica> เริ่มทาส;

ด้วยขั้นตอนง่ายๆ เหล่านี้ เราจะได้รับแบบจำลองที่มีข้อมูลเหมือนกับข้อมูลบนต้นแบบ
อย่างไรก็ตาม เวลาที่มาสเตอร์ถูกบล็อกคือเวลาที่สร้างดัมพ์ หากใช้เวลานานในการสร้าง คุณสามารถลองทำสิ่งนี้:

  • บล็อกการเขียนถึงต้นแบบด้วยแฟล็ก read_only จำตำแหน่งและหยุด MySQL
  • หลังจากนั้น ให้คัดลอกไฟล์ฐานข้อมูลไปยังเรพลิกาและเปิดใช้งานไฟล์ต้นแบบ
  • เริ่มการจำลองแบบตามปกติ
มีหลายวิธีในการสร้างเรพลิกาโดยไม่ต้องหยุดต้นแบบเลย แต่ก็ไม่ได้ผลเสมอไป

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

สมมติว่าเรามีต้นแบบและแบบจำลองที่ใช้งานได้อยู่แล้ว และเราจำเป็นต้องเพิ่มอีกอันหนึ่งให้กับพวกมัน ซึ่งทำได้ง่ายกว่าการเพิ่มเรพลิกาแรกให้กับต้นแบบ และสิ่งที่ดีกว่ามากคือไม่จำเป็นต้องหยุดอาจารย์ในเรื่องนี้
ขั้นแรก มากำหนดค่า MySQL บนเรพลิกาที่สอง และตรวจสอบให้แน่ใจว่าเราได้ป้อนพารามิเตอร์ที่จำเป็นลงในการกำหนดค่าแล้ว:
เซิร์ฟเวอร์-id = 3
ทำซ้ำ-do-db = testdb

ตอนนี้เรามาหยุดการจำลองแบบในการจำลองครั้งแรก:
mysql@replica-1> หยุดทาส;

แบบจำลองจะยังคงทำงานตามปกติ แต่ข้อมูลในแบบจำลองจะไม่เป็นปัจจุบันอีกต่อไป มาดูสถานะและจำตำแหน่งหลักที่เรพลิกาไปถึงก่อนที่จะหยุดการจำลอง:
mysql@replica-1> แสดงสถานะทาส\G

ค่าที่เราต้องการคือ Master_Log_File และ Exec_Master_Log_Pos:
Master_Log_File: mysql-bin.000004
Exec_Master_Log_Pos: 155

มาสร้างดัมพ์ฐานข้อมูลและจำลองแบบต่อในแบบจำลองแรก:
mysql@replica-1> เริ่มทาส;

มาคืนค่าข้อมูลจากดัมพ์บนเรพลิกาที่สองกัน จากนั้นเปิดใช้งานการจำลองแบบ:
mysql@replica-2> เปลี่ยน MASTER เป็น MASTER_HOST = "192.168.1.101", MASTER_USER = "การจำลอง", MASTER_PASSWORD = "รหัสผ่าน", MASTER_LOG_FILE = "mysql-bin.000004", MASTER_LOG_POS = 155;
mysql@replica-2> เริ่มทาส;

ค่า MASTER_LOG_FILE และ MASTER_LOG_POS คือค่า Master_Log_File และ Exec_Master_Log_Pos ตามลำดับ จากผลลัพธ์ของคำสั่ง “แสดงสถานะทาส” ในเรพลิกาแรก
การจำลองแบบต้องเริ่มต้นจากตำแหน่งที่แบบจำลองแรกถูกหยุด (และตามนั้น มีการสร้างดัมพ์) ดังนั้นเราจะมีแบบจำลองสองชุดที่มีข้อมูลที่เหมือนกัน

การรวมแบบจำลอง

บางครั้งสถานการณ์ต่อไปนี้เกิดขึ้น: มีสองฐานข้อมูลบนต้นแบบ ซึ่งหนึ่งในนั้นจะถูกจำลองแบบบนแบบจำลองหนึ่ง และฐานข้อมูลที่สองอยู่บนอีกแบบจำลอง วิธีการตั้งค่าการจำลองแบบของฐานข้อมูลทั้งสองบนแบบจำลองทั้งสองโดยไม่ต้องทิ้งลงบนต้นแบบหรือปิดระบบ ค่อนข้างง่ายโดยใช้คำสั่ง "startทาสจนกระทั่ง"
ดังนั้นเราจึงมีต้นแบบที่มีฐานข้อมูล testdb1 และ testdb2 ซึ่งจำลองแบบบนแบบจำลอง Replica-1 และ Replica-2 ตามลำดับ มากำหนดค่าการจำลองแบบของฐานข้อมูลทั้งสองเป็นแบบจำลอง 1 โดยไม่หยุดต้นแบบ
หยุดการจำลองบน Replica-2 ด้วยคำสั่งและจดจำตำแหน่งของต้นแบบ:
mysql@replica-2> หยุดทาส;
mysql@replica-2> แสดงสถานะทาส\G
Master_Log_File: mysql-bin.000015
Exec_Master_Log_Pos: 231

มาสร้างดัมพ์ของฐานข้อมูล testdb2 และดำเนินการจำลองต่อ (ซึ่งเสร็จสิ้นการจัดการด้วย Replica-2) เราจะคืนค่าดัมพ์เป็นแบบจำลอง-1

สถานการณ์บน Replica-1 เป็นเช่นนี้: ฐานข้อมูล testdb1 อยู่ที่ตำแหน่งหลักหนึ่งตำแหน่งและยังคงทำซ้ำต่อไป ฐานข้อมูล testdb2 ได้รับการกู้คืนจากดัมพ์จากตำแหน่งอื่น มาซิงโครไนซ์กัน

หยุดการจำลองแบบและจำตำแหน่งของต้นแบบ:
mysql@replica-1> หยุดทาส;
mysql@replica-1> แสดงสถานะทาส\G
Exec_Master_Log_Pos: 501

ตรวจสอบให้แน่ใจว่าในการกำหนดค่าสำหรับ Replica-1 ชื่อของฐานข้อมูลที่สองระบุไว้ในส่วน:
ทำซ้ำ-do-db = testdb2

มารีบูต MySQL เพื่อให้การเปลี่ยนแปลงในการกำหนดค่ามีผล อย่างไรก็ตาม เราสามารถรีสตาร์ท MySQL ได้โดยไม่ต้องหยุดการจำลอง - จากบันทึก เราจะรู้ว่าตำแหน่งใดในต้นแบบที่หยุดการจำลอง

ตอนนี้เรามาจำลองจากตำแหน่งที่ Replica-2 หยุดชั่วคราวไปยังตำแหน่งที่เราเพิ่งหยุดการจำลองชั่วคราว:
mysql@replica-1> เปลี่ยน MASTER เป็น MASTER_HOST = "192.168.1.101", MASTER_USER = "การจำลอง", MASTER_PASSWORD = "รหัสผ่าน", MASTER_LOG_FILE = "mysql-bin.000015", MASTER_LOG_POS = 231;
mysql@replica-1> เริ่มทาสจนกระทั่ง MASTER_LOG_FILE = "mysql-bin.000016 ", MASTER_LOG_POS = 501;

การจำลองจะสิ้นสุดทันทีที่แบบจำลองถึงตำแหน่งที่ระบุในส่วนจนถึง หลังจากนั้นฐานข้อมูลทั้งสองของเราจะสอดคล้องกับตำแหน่งหลักเดียวกัน (ซึ่งเราหยุดการจำลองบนแบบจำลอง-1) มาตรวจสอบให้แน่ใจกัน:
mysql@replica-1> แสดงสถานะทาส\G
mysql@replica-1> เริ่มทาส;
Master_Log_File: mysql-bin.000016
Exec_Master_Log_Pos: 501

มาเพิ่มชื่อของทั้งสองฐานข้อมูลในการกำหนดค่าสำหรับแบบจำลอง-1 ในส่วน:
ทำซ้ำ-do-db = testdb1
ทำซ้ำ-do-db = testdb2

สิ่งสำคัญ: แต่ละฐานข้อมูลจะต้องอยู่ในรายการแยกบรรทัด
รีสตาร์ท MySQL และจำลองแบบต่อ:
mysql@replica-1> เปลี่ยน MASTER เป็น MASTER_HOST = "192.168.1.101", MASTER_USER = "การจำลอง", MASTER_PASSWORD = "รหัสผ่าน", MASTER_LOG_FILE = "mysql-bin.000016", MASTER_LOG_POS = 501;
หลังจากที่แบบจำลอง 1 ติดต่อกับต้นแบบแล้ว เนื้อหาของฐานข้อมูลจะเหมือนกัน คุณสามารถผสานฐานข้อมูลเข้ากับ Replica-2 ได้ด้วยวิธีที่คล้ายกัน หรือโดยการสร้างดัมพ์ของ Replica-1 โดยสมบูรณ์

ต้นแบบการหล่อและแบบจำลอง

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

มาเปิดใช้งานการบันทึกไบนารี (นอกเหนือจากการถ่ายทอด binlogs) ในการกำหนดค่าในส่วน:
log-bin = /var/lib/mysql/mysql-bin

และเพิ่มผู้ใช้สำหรับการจำลองแบบ:
mysql@master> ให้สิทธิ์การจำลองแบบทาสบน 'testdb'. * ถึง 'การจำลอง'@'192.168.1.101′ ระบุโดย "รหัสผ่าน";

ต้นแบบแบบพาสซีฟดำเนินการจำลองแบบเหมือนกับแบบจำลองทั่วไป แต่นอกเหนือจากนั้นยังสร้างบันทึกไบนารี - นั่นคือเราสามารถเริ่มการจำลองแบบจากแบบจำลองนั้นได้ มาตรวจสอบสิ่งนี้ด้วยคำสั่ง "show master status":
mysql@replica> แสดงสถานะหลัก\G
ไฟล์: mysql-bin.000001
ตำแหน่ง: 61
Binlog_Do_DB:
Binlog_Ignore_DB:

ตอนนี้ เพื่อที่จะเปลี่ยนพาสซีฟมาสเตอร์เป็นโหมดแอคทีฟ คุณต้องหยุดการจำลองบนมาสเตอร์นั้นและเปิดใช้งานการจำลองบนมาสเตอร์แอคทีฟเดิม เพื่อให้แน่ใจว่าข้อมูลจะไม่สูญหายในขณะที่เปลี่ยน ต้นแบบที่ใช้งานอยู่จะต้องล็อคการเขียน
mysql@master> ล้างตารางพร้อมล็อคการอ่าน
mysql@master> SET GLOBAL read_only = เปิด;
mysql@replica> หยุดทาส;
mysql@replica> แสดงสถานะหลัก;
ไฟล์: mysql-bin.000001
ตำแหน่ง: 61
mysql@master> เปลี่ยน MASTER เป็น MASTER_HOST = "192.168.1.102", MASTER_USER = "การจำลอง", MASTER_PASSWORD = "รหัสผ่าน", MASTER_LOG_FILE = "mysql-bin.000001", MASTER_LOG_POS = 61;
mysql@master> เริ่มทาส;
เพียงเท่านี้เราก็ได้เปลี่ยนต้นแบบที่ใช้งานอยู่ คุณสามารถลบบล็อกออกจากต้นแบบเดิมได้

บทสรุป

เราได้เรียนรู้มาบ้างเล็กน้อยเกี่ยวกับวิธีตั้งค่าการจำลองแบบใน MySQL และดำเนินการขั้นพื้นฐานบางอย่าง ขออภัย คำถามสำคัญต่อไปนี้อยู่นอกขอบเขตของบทความนี้:

  • กำจัดจุดล้มเหลวจุดเดียว (SPF, จุดล้มเหลวจุดเดียว) เมื่อใช้เพียงอย่างเดียว เซิร์ฟเวอร์ MySQLความล้มเหลวนำไปสู่ความล้มเหลวของทั้งระบบ เมื่อใช้เซิร์ฟเวอร์หลายเครื่อง ความล้มเหลวของเซิร์ฟเวอร์ใดเซิร์ฟเวอร์หนึ่งจะส่งผลให้ระบบล้มเหลว เว้นแต่เราจะดูแลเรื่องนี้โดยเฉพาะ เราจำเป็นต้องจัดเตรียมการจัดการสถานการณ์ด้วยความล้มเหลวของต้นแบบและแบบจำลอง หนึ่งใน กองทุนที่มีอยู่— อย่างไรก็ตาม MMM ต้องการการตกแต่งไฟล์บางส่วน
  • โหลดบาลานซ์ เมื่อใช้แบบจำลองหลายรายการ เราต้องการใช้กลไกการปรับสมดุลที่โปร่งใส โดยเฉพาะอย่างยิ่งหากประสิทธิภาพของแบบจำลองไม่สม่ำเสมอ สำหรับ Linux คุณสามารถใช้โซลูชันมาตรฐาน - LVS ได้
  • การเปลี่ยนตรรกะของแอปพลิเคชัน ในสถานการณ์ที่เหมาะสม ควรส่งคำขออ่านข้อมูลไปยังเรพลิกา และควรส่งคำขอเปลี่ยนแปลงข้อมูลไปยังต้นแบบ อย่างไรก็ตาม เนื่องจากความล่าช้าของเรพลิกาที่เป็นไปได้ รูปแบบดังกล่าวมักจะไม่ได้ผล และจำเป็นต้องระบุคำขออ่านดังกล่าวที่ยังคงต้องดำเนินการบนต้นแบบ
ฉันหวังว่าจะครอบคลุมประเด็นเหล่านี้ในบทความต่อๆ ไป
ขอบคุณสำหรับความสนใจของคุณ!

แท็ก: เพิ่มแท็ก

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

การกำหนด:

  • master - เซิร์ฟเวอร์หลักที่ต้องทำซ้ำข้อมูล
  • แบบจำลอง - เซิร์ฟเวอร์ที่ได้รับการซ่อมแซมซึ่งเก็บสำเนาของข้อมูลหลัก

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

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

Server-id = log-bin = mysql-bin log-bin-index = mysql-bin.index log-error = mysql-bin.err รีเลย์-log = รีเลย์-bin รีเลย์-log-info-file = รีเลย์-bin ข้อมูลรีเลย์-log-index = รีเลย์-bin.indexหมดอายุ_logs_days=7 binlog-do-db =

  • - ตัวระบุเซิร์ฟเวอร์ MySQL ที่ไม่ซ้ำกัน หมายเลขในช่วง 2 (0-31)
  • - ชื่อของฐานข้อมูลข้อมูลที่จะเขียนลงในบันทึกไบนารี่ หากมีหลายฐานข้อมูลแต่ละฐานข้อมูลจะต้องมีบรรทัดแยกกันด้วยพารามิเตอร์ binlog_do_db

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

Server-id = master-host = master master-user = การจำลองแบบ master-password = รหัสผ่าน master-port = 3306 รีเลย์-log = รีเลย์-bin รีเลย์-log-info-file = รีเลย์-log.info รีเลย์-log-index = รีเลย์-log.index ทำซ้ำ-do-db =

บนเซิร์ฟเวอร์หลัก ให้เพิ่มผู้ใช้การจำลองแบบที่มีสิทธิ์การจำลองข้อมูล:

ให้สิทธิ์การจำลองแบบ SLAVE บน *.* ถึง "replication"@"replica" ที่ระบุโดย "รหัสผ่าน"

มาบล็อกฐานข้อมูลที่จำลองแบบบนเซิร์ฟเวอร์หลักจากการเปลี่ยนแปลงข้อมูล โดยทางโปรแกรมหรือการใช้ฟังก์ชัน MySQL:

Mysql@master> ล้างตารางพร้อมล็อคการอ่าน; mysql@master> SET GLOBAL read_only = เปิด;

หากต้องการปลดล็อคให้ใช้คำสั่ง:

Mysql@master> SET GLOBAL read_only = ปิด;

มาสร้างสำเนาสำรองของฐานข้อมูลทั้งหมดบนเซิร์ฟเวอร์หลัก (หรือที่เราต้องการ):

รูต@มาสเตอร์# tar -czf mysqldir.tar.gz /var/lib/mysql/

หรือใช้ยูทิลิตี้ mysqldump:

Root@master# mysqldump -u root -p --lock-all-tables > dbdump.sql

มาหยุดเซิร์ฟเวอร์ทั้งสองกัน (ในบางกรณีคุณสามารถทำได้โดยไม่ต้องใช้มัน):

Root@master# mysqlamdin -u root -p ปิดระบบ root@replica# mysqlamdin -u root -p ปิดระบบ

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

Root@replica# cd /var/lib/mysql root@replica# tar -xzf mysqldir.tar.gz

หรือการทำงานของ mysql ก็ไม่จำเป็นต้องหยุด mysql บนเซิร์ฟเวอร์ทาส:

Root@replica# mysql -u root -p< dbdump.sql

มารัน mysql บนเซิร์ฟเวอร์หลัก (และบนเซิร์ฟเวอร์ทาสหากจำเป็น):

Root@master# /etc/init.d/mysql เริ่มต้น root@replica# /etc/init.d/mysql เริ่มต้น

มาตรวจสอบการทำงานของเซิร์ฟเวอร์หลักและเซิร์ฟเวอร์ทาส:

Mysql@replica> เริ่มทาส; mysql@replica> แสดงสถานะทาส\G mysql@master> แสดงสถานะหลัก\G

บนเซิร์ฟเวอร์ทาส ให้ตรวจสอบบันทึกในไฟล์ master.info ซึ่งควรมีคำขอให้เปลี่ยนแปลงข้อมูลในฐานข้อมูล ดังนั้นไฟล์ไบนารี่นี้จะต้องถูกแปลงเป็นรูปแบบข้อความก่อน:

Root@replica# mysqlbinlog master.info > master_info.sql

หากเกิดข้อผิดพลาด คุณสามารถใช้คำสั่ง:

Mysql@replica> หยุดทาส; mysql@replica> รีเซ็ตทาส; mysql@master> รีเซ็ตมาสเตอร์;

และทำซ้ำทุกขั้นตอนโดยเริ่มจากการบล็อกฐานข้อมูล

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

Mysql@replica> แสดงสถานะ SLAVE\G mysql@master> แสดงสถานะหลัก\G mysql@replica-2> เปลี่ยน MASTER เป็น MASTER_HOST = "master", MASTER_USER ="replication", MASTER_PASSWORD = "password", MASTER_LOG_FILE ="mysql- bin.000004 ", MASTER_LOG_POS = 155; mysql@replica-2> เริ่มทาส;

ข้อมูลจากสถานะจะแสดงตำแหน่งและชื่อ ไฟล์ปัจจุบันบันทึก.

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

รายชื่อแหล่งที่มาที่ใช้

  1. Habrahabr.ru - พื้นฐานของการจำลองแบบใน MySQL (http://habrahabr.ru/blogs/mysql/56702/)
  2. วิกิพีเดีย (http://ru.wikipedia.org/wiki/Replication_(computing_technology))

เมื่อใช้เนื้อหาใดๆ จากไซต์ทั้งหมดหรือบางส่วน คุณต้องระบุลิงก์ไปยังแหล่งที่มาอย่างชัดเจน

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

เพื่อรักษาสถานะซิงโครนัสของฐานข้อมูลบนเซิร์ฟเวอร์ทั้งหมดพร้อมกัน คุณต้องใช้การจำลอง ในบทความนี้เราจะดูวิธีกำหนดค่าการจำลองแบบ MySQL โดยใช้ MariaDB Galera Cluster

MARIADB GALERA คืออะไร?

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

คุณสมบัติที่สำคัญของ MariaDB Galera:

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

การกำหนดค่าการจำลอง MySQL

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

sudo apt-get อัปเดต -y
sudo apt-get อัปเกรด -y

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

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8

sudo add-apt-repository "deb http://ftp.utexas.edu/mariadb/repo/10.1/ubuntu xenial หลัก"

sudo apt-get อัปเดต -y

เมื่อการอัพเดตรายการแพ็คเกจเสร็จสมบูรณ์ ให้ติดตั้ง MariaDB ด้วยคำสั่ง:

sudo apt ติดตั้งเซิร์ฟเวอร์ mariadb rsync -y

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

sudo mysql_secure_installation

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

ป้อนรหัสผ่านปัจจุบันสำหรับรูท (ไม่ต้องป้อน):
เปลี่ยนรหัสผ่านรูท?
n
ลบผู้ใช้ที่ไม่ระบุชื่อออกใช่ไหม

ไม่อนุญาตให้ล็อกอินรูทจากระยะไกลใช่ไหม

ลบฐานข้อมูลทดสอบและเข้าถึงได้หรือไม่

โหลดตารางสิทธิพิเศษตอนนี้เลยไหม




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

- ก่อนอื่น มาดูการตั้งค่าโหนดแรกกันก่อน คุณสามารถใส่การตั้งค่าทั้งหมดไว้ใน my.cnf ได้ แต่จะดีกว่าถ้าสร้างไฟล์แยกต่างหากสำหรับวัตถุประสงค์เหล่านี้ในโฟลเดอร์ /etc/mysql/conf.d/





เพิ่มบรรทัดเหล่านี้:
binlog_format=ROW
innodb_autoinc_lock_mode=2
ผูกที่อยู่=0.0.0.0

wsrep_on=เปิด

wsrep_sst_method=rsync



# การกำหนดค่าโหนด Galera
เมื่อทุกอย่างพร้อม คุณสามารถดำเนินการตั้งค่าโหนดระหว่างการจำลองฐานข้อมูลที่จะดำเนินการได้
ข้อมูล mysql
wsrep_node_address="192.168.56.101"
- ก่อนอื่น มาดูการตั้งค่าโหนดแรกกันก่อน คุณสามารถใส่การตั้งค่าทั้งหมดไว้ใน my.cnf ได้ แต่จะดีกว่าถ้าสร้างไฟล์แยกต่างหากสำหรับวัตถุประสงค์เหล่านี้ในโฟลเดอร์ /etc/mysql/conf.d/
wsrep_node_name="โหนด1"
ที่อยู่ 192.168.56.101 คือที่อยู่ของโหนดปัจจุบัน จากนั้นไปที่เซิร์ฟเวอร์อื่นและสร้างไฟล์เดียวกันที่นั่น:
sudo vi /etc/mysql/conf.d/galera.cnf
default-storage-engine=innodb
# การกำหนดค่าผู้ให้บริการ Galera
เพิ่มบรรทัดเหล่านี้:
binlog_format=ROW
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# การกำหนดค่าคลัสเตอร์ Galera

wsrep_cluster_name="galera_cluster"

การตั้งค่าการจำลองแบบ MySQL เกือบเสร็จสมบูรณ์แล้ว ขั้นตอนสุดท้ายก่อนการเปิดตัวคือการตั้งค่าไฟร์วอลล์ ขั้นแรกให้เปิดใช้งานเครื่องมือการจัดการกฎ iptables ใน Ubuntu - UFW:

จากนั้นเปิดพอร์ตต่อไปนี้:

sudo ufw อนุญาต 3306/tcp
sudo ufw อนุญาต 4444/tcp
sudo ufw อนุญาต 4567/tcp
sudo ufw อนุญาต 4568/tcp
sudo ufw อนุญาต 4567/udp

เปิดตัว มาเรียดีบี กาเลรา

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

sudo galera_new_cluster

คุณสามารถตรวจสอบว่าคลัสเตอร์กำลังทำงานอยู่และมีกี่เครื่องที่เชื่อมต่อกับคลัสเตอร์ด้วยคำสั่ง:

ขณะนี้มีเพียงเครื่องเดียวเท่านั้น ตอนนี้ไปที่เซิร์ฟเวอร์อื่นและรันโหนดที่นั่น:

sudo systemctl เริ่ม mysql

คุณสามารถตรวจสอบว่าการเปิดตัวสำเร็จหรือไม่และมีข้อผิดพลาดใด ๆ ด้วยคำสั่ง:

sudo systemctl สถานะ mysql

จากนั้น ด้วยการรันคำสั่งเดียวกัน คุณจะตรวจสอบว่าโหนดใหม่ถูกเพิ่มลงในคลัสเตอร์โดยอัตโนมัติ:

mysql -u root -p -e "แสดงสถานะเช่น "wsrep_cluster_size""

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

mysql -u รูท -p

MariaDB [(ไม่มี)]> สร้างฐานข้อมูล test_db;
MariaDB [(none)]> แสดงฐานข้อมูล;

mysql -u รูท -p

MariaDB [(none)]> แสดงฐานข้อมูล;

อย่างที่คุณเห็น ฐานข้อมูลนั้นปรากฏขึ้นโดยอัตโนมัติบนเครื่องอื่น การจำลองข้อมูล Mysql กำลังทำงาน



 


อ่าน:


ใหม่

วิธีฟื้นฟูรอบประจำเดือนหลังคลอดบุตร:

สถานภาพทางสังคมของบุคคลในสังคม

สถานภาพทางสังคมของบุคคลในสังคม

เสนอแนะสิ่งที่กำหนดการเลือกสถานะหลักของบุคคล การใช้ข้อความและข้อเท็จจริงของชีวิตทางสังคม ตั้งสมมติฐานสองข้อ และ...

การตีความข้อผิดพลาดแบบเต็ม

การตีความข้อผิดพลาดแบบเต็ม

มีผู้ใช้จำนวนไม่น้อยที่ต้องเผชิญกับปรากฏการณ์หน้าจอสีน้ำเงินแห่งความตาย จะทำอย่างไร (Windows 7 มักเกิดปัญหานี้บ่อยที่สุด)...

วิธีโทรหาผู้ให้บริการ Beeline "สด" โดยตรง: หมายเลขโทรศัพท์โทรฟรี

วิธีโทรหาผู้ให้บริการ Beeline

บริษัทขนาดใหญ่ทุกแห่งมีศูนย์ติดต่อลูกค้า ซึ่งคุณสามารถขอความช่วยเหลือจากมืออาชีพและการสนับสนุนด้านเทคนิค...

Lineage II - Interlude: The Chaotic Throne จะไม่เริ่มต้นใช่ไหม

Lineage II - Interlude: The Chaotic Throne จะไม่เริ่มต้นใช่ไหม

แฟน ๆ ของ Lineage 2 ต้องเผชิญกับสถานการณ์ที่ไม่พึงประสงค์เมื่อเกมไม่เริ่มทำงานหลังการติดตั้ง หรือเกิดข้อผิดพลาดระหว่างขั้นตอนการติดตั้ง....

ฟีดรูปภาพ อาร์เอสเอส