Một nô lệ, nhiều bậc thầy MySql


9

Có thể thiết lập Bản sao MySql để có một nô lệ nghe hai chủ khác nhau không?

Câu trả lời:


3

Theo thiết kế, một quy trình mysqld không thể nghe đồng thời hai Master khác nhau.

Lệnh CHANGE MASTER TO chỉ cho phép bạn đặt một Master làm nguồn để đọc.

Để mô phỏng điều này, bạn sẽ phải xen kẽ giữa hai Master theo chương trình. Làm thế nào để bạn làm điều đó ?

Tôi đã mô tả trong StackOverflow cách kết nối một cách thủ công với các Master khác nhau trong đó mỗi Master là một máy tính xách tay và Slave là một máy tính trung tâm.

Đây là ý tưởng cơ bản

  • Thạc sĩ M1
  • Thạc sĩ M2
  • Nô lệ S1

Thiết lập Sao chép từ M1 sang S1 và sau đó M2 thành S1 như thế này

  • 1) Cho S1 chạy THAY ĐỔI MASTER ĐẾN với M1 làm Nguồn
  • 2) BẮT ĐẦU;
  • 3) Chạy bản sao trong một thời gian ngắn
  • 4) DỪNG SLAVE;
  • 5) Cho S1 chạy THAY ĐỔI MASTER ĐẾN với M2 làm Nguồn
  • 6) BẮT ĐẦU SÓNG;
  • 7) Chạy bản sao trong một thời gian ngắn
  • 8) DỪNG LẠI;
  • 9) Quay trở lại Bước 1

Mỗi lần bạn chuyển từ Master này sang Master khác, bạn phải ghi lại hai giá trị từ SHOW SLAVE STATUS\G

  1. Relay_Master_Log_file
  2. Exec_Master_Log_Pos

Hai giá trị này đại diện cho Câu lệnh SQL cuối cùng xuất phát từ Master và tiếp theo sẽ được thực thi trên Slave.

Có một lưu ý lớn: Miễn là M1 và M2 đang cập nhật cơ sở dữ liệu loại trừ lẫn nhau, thuật toán này sẽ ổn.

Dù bạn có tin hay không, tôi đã trả lời một câu hỏi như thế này trong ServerFault vào tháng 5 năm 2011. Tôi thực sự đã giải thích cách mô phỏng đa máy chủ / nô lệ thực sự bằng cách sử dụng Công cụ lưu trữ BLACKHOLE dựa trên cuốn sách "MySQL hiệu suất cao".


Mặc dù bản thân tôi chưa thực sự cần nó nhưng tôi đã suy nghĩ về vấn đề này sớm hơn. Về cơ bản, liệu có thể chuyển binlog của chủ thứ hai vào nô lệ mysql không? Tôi đoán điều tốt nhất sẽ là có một công cụ cũng theo dõi kết quả của từng truy vấn và dừng lại một lỗi giống như luồng xử lý nô lệ sao chép thông thường. Nhưng thực chất một đường ống đơn giản cũng nên làm. Tất nhiên cả hai bậc thầy viết vào cùng một cơ sở dữ liệu / bảng sẽ trở nên khó khăn một cách nhanh chóng. Một cái gì đó cho bạn gurus để suy nghĩ về?
Jannes

1
Tôi nghĩ rằng đáng để thêm vào câu trả lời của bạn rằng mặc dù MySQL 5.6 không làm điều này, nhưng 5.7 sẽ hỗ trợ nhiều thạc sĩ.
Phil Sumner

4

Giải pháp của Rolando có nhiều cảnh báo. Đầu tiên là một luồng bản sao nhất thiết không được sao chép trong khi các luồng khác hoạt động. Điều này sẽ cung cấp cho bạn những khoảng thời gian mà nô lệ của bạn không đồng bộ. Bây giờ bạn phải chơi một hành động cân bằng tinh tế để đảm bảo mỗi người có đủ thời gian để bắt kịp khi nó "đến lượt".

Theo mô tả, bạn cũng phải chơi người giữ sổ sách của các vị trí đăng nhập để chuyển về. Điều này thực sự có vẻ như có lỗi, mở cửa sổ cho dữ liệu bị thiếu hoặc không nhất quán hoặc thậm chí phá vỡ bản sao khi nó bị lỗi (có thể do một lỗi chỉ bị tắt bởi một lỗi trong vị trí nhật ký)

Tôi khuyên bạn chỉ nên chạy nhiều phiên bản mysql. Không có gì ngăn cản bạn chạy hai hoặc nhiều mysql trên cùng một máy. Tất nhiên họ không thể hoạt động trên cùng một cổng. Tôi thực sự không coi đây là một vấn đề mặc dù mọi khách hàng và thư viện đều cho phép bạn chỉ định một cái gì đó ngoài 3306.

Chỉ cần chỉ định port = 3307 (hoặc bất cứ điều gì trong một trong các tệp .cnf).

Bạn cũng sẽ muốn cẩn thận trong việc đảm bảo các nhóm bộ đệm được cấu hình riêng lẻ và các cấu hình bộ nhớ khác không xảy ra mâu thuẫn với nhau. Đây thực sự là một lợi ích vì bạn có thể tinh chỉnh các cài đặt đó theo các yêu cầu cụ thể của các cơ sở dữ liệu riêng lẻ đang được nhân rộng.

Bằng cách này, bạn chỉ có hai luồng sao chép chạy vào cùng một máy chủ; không bao giờ đứng sau, không cần giữ sách, không yêu cầu kịch bản "tráo đổi".


Tôi vui mừng vì ai đó hiểu được sự điên rồ của sổ sách kế toán. Câu trả lời tốt đẹp là tốt. +1 !!!
RolandoMySQLDBA


0

MariaDB có thể được sử dụng để thay thế tại chỗ cho MySql có thể được sử dụng. Nó hỗ trợ nó từ phiên bản 10.2

Vấn đề với hỗ trợ Mysql 5.7 là sự cần thiết của GTID, có nghĩa là chủ PHẢI cũng phải thay đổi, trong trường hợp MariaDb thì đây không phải là trường hợp.

Ví dụ / Liên kết HowTo: http://www.skysql.com/bloss/dean-ellis/multi-source-replication-mariadb-100

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.