Sao chép nhanh như thế nào?


19

Tôi đang xem xét việc thiết lập sao chép db mysql của chúng tôi để có thể có nô lệ cục bộ trong mỗi văn phòng chi nhánh của chúng tôi, đồng thời có chủ trong văn phòng chính để cải thiện hiệu suất ứng dụng (đáng kể) tại các văn phòng chi nhánh của chúng tôi.

Bản thân db không lớn (<1gb) nhưng tôi đang tự hỏi; xem xét 200-300 bản cập nhật bản ghi / phút tối thiểu: sao chép nhanh như thế nào? (giả sử, đầu tiên, kết nối dsl chung 5mb, nhanh hơn nếu cần - cố gắng giữ chi phí càng thấp càng tốt nhưng tiền vẫn ở đó nhiều hơn)

Là toàn bộ bảng được nhân rộng trong lô? Việc sao chép được thực hiện, theo yêu cầu, khi mỗi bản ghi trong bảng được cập nhật (từ các tài liệu, tôi nghĩ rằng tôi đang thấy rằng nó có thể cấu hình được)?

Ghi chú:

  • Tôi đang nghĩ 1 chủ, 2 nô lệ (2 văn phòng chi nhánh hiện tại) thiết lập như trong các tài liệu ở đây ngoại trừ đó là một ứng dụng, không phải máy khách web
  • Bất kỳ cập nhật nào được thực hiện trên bản gốc cần phải sao chép sang các nô lệ khác trong <10 phút.
  • Tất cả những điều này giả định rằng tôi có thể khiến ORM (DevExpress XPO) của chúng tôi hài lòng với khái niệm đọc từ nô lệ và viết cho chủ.

Câu trả lời:


21

Sao chép MySQL xảy ra càng gần với thời gian thực càng tốt, bị giới hạn bởi I / O của đĩa và mạng. Các nô lệ mở một ổ cắm cho chủ, được giữ mở. Khi một giao dịch xảy ra trên bản gốc, nó sẽ được ghi lại trong binlog và được phát lại đơn giản trên (các) nô lệ. Nếu ổ cắm giữa chủ và nô lệ bị gián đoạn, binlog sẽ được phát lại cho nô lệ khi kết nối thành công tiếp theo.

Nhân rộng đa chủ làm điều tương tự, nhưng theo cả hai hướng.

Một số tính toán cơ bản sẽ giúp bạn xác định rõ hơn nhu cầu băng thông của mình.

Average transaction size * number of slaves * updates/minute = bandwidth needed

Hi vọng điêu nay co ich.


4

Bản sao ở phía nô lệ được xử lý bởi hai luồng độc lập.

  • Quá trình đọc nhật ký, kết nối với chủ, nhận từng câu lệnh sửa đổi dữ liệu, ghi nó vào nhật ký chuyển tiếp.
  • Quá trình nhà văn sql, lấy các mục mới từ nhật ký chuyển tiếp, cam kết các câu lệnh trên cơ sở dữ liệu nô lệ, sau đó di chuyển con trỏ nô lệ qua câu lệnh đó để cho biết nhận được truy vấn.

Độ trễ sao chép bị giới hạn bởi IO, trước hết là IO trên cơ sở dữ liệu nô lệ để áp dụng các giao dịch từ nhật ký chuyển tiếp (có thể liên quan đến các truy vấn SQL phức tạp) và thứ hai là IO trên bản gốc để đọc binlog và truyền nó tới từng nô lệ.

Bản sao MySQL tăng khả năng truy vấn đọc nhưng không tăng hiệu năng ghi truy vấn, được kiểm soát ở tốc độ IO có thể được chuyển sang binlog trên cả bản gốc và bản phụ


3

Sao chép trong MySQL khá nhanh để đưa dữ liệu đến nô lệ (nhanh hơn bạn sẽ có thể chạy UPDATEtrên máy chủ và chuyển sang cửa sổ khác để chạy SELECTtrên nô lệ, nếu(và chỉ khi) các kết nối mạng đều hoạt động và mọi thứ đều ổn. Bất kỳ kết nối lớp DSL nào cũng sẽ ổn đối với trường hợp chung của các truy vấn nhỏ thông thường của bạn, nhưng các truy vấn chèn / cập nhật lớn có thể mất một chút thời gian để sao chép và đồng bộ hóa lại trong trường hợp bị sao chép (và MySQL rất dễ bị những cái đó, thật không may) sẽ mất một lúc (sao chép lại toàn bộ cơ sở dữ liệu của bạn từ chủ). Có các thủ thuật để hạn chế tác động của việc đồng bộ hóa lại với chủ của bạn, như đưa MySQL của bạn lên LVM để bạn có thể thực hiện khóa / chụp nhanh và rsync nội dung ảnh chụp nhanh cho nô lệ, nhưng cuối cùng, một đồng bộ hóa sẽ bị hút.

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.