Có phải là không khôn ngoan để chạy sao chép trên cùng một máy chủ vật lý?


13

Tôi đang dự tính thiết lập một bản sao Master-Slave cho cơ sở dữ liệu của mình. Máy chủ nô lệ sẽ được sử dụng để dự phòng và có thể là máy chủ báo cáo. Tuy nhiên, một trong những vấn đề lớn nhất mà tôi gặp phải là chúng tôi đã hết năng lượng tại trung tâm dữ liệu của mình. Vì vậy, thêm một máy chủ vật lý khác không phải là một lựa chọn.

Máy chủ cơ sở dữ liệu hiện tại của chúng tôi được sử dụng khá ít cho đến tận cpu (trung bình tải không bao giờ thực sự đạt được trên 1 trên lõi tứ). Vì vậy, ý tưởng hàng đầu là ném vào một số ổ đĩa mới và tăng gấp đôi bộ nhớ (từ 8GB lên 16) và chạy một phiên bản mysql thứ hai trên cùng một máy vật lý. Mỗi phiên bản sẽ có các đĩa riêng cho cơ sở dữ liệu.

Có điều gì sai với ý tưởng này?

Chỉnh sửa (thông tin thêm): Tôi (may mắn) chưa bao giờ có điều gì tồi tệ xảy ra để đánh sập máy chủ, nhưng tôi đang cố lên kế hoạch trước. Tất nhiên chúng tôi có các bản sao lưu hàng đêm mà chúng tôi có thể phục hồi. Nhưng tôi cho rằng việc có dữ liệu dư thừa trên các đĩa riêng biệt sẽ cung cấp giải pháp nhanh hơn nếu ổ đĩa của máy chủ chính bị hỏng (rõ ràng là không nếu toàn bộ máy bị hỏng).

Đối với khía cạnh báo cáo, bất kỳ bảng nào chúng tôi sẽ báo cáo là MyIsam. Vì vậy, việc đọc đắt tiền trên cùng một bảng đang được viết để có thể làm hỏng máy chủ. Giả định của tôi là có một máy chủ nô lệ để báo cáo sẽ không ảnh hưởng đến máy chủ chính miễn là chúng tôi đã ném đủ RAM vào nó (vì tải cpu chưa phải là vấn đề).

Câu trả lời:


11

Để dự phòng về độ tin cậy của hệ thống và an toàn dữ liệu chạy một nô lệ trên cùng một máy như chủ cung cấp cho bạn không có gì (hoặc gần với). Nếu một cái gì đó đủ tồi tệ để hạ bệ chủ nhân xảy ra, nó cũng có thể sẽ hạ bệ nô lệ.

Đối với người dùng hoàn toàn tách biệt vì lý do quyền truy cập, một RDBMS tốt sẽ cung cấp các cách hiệu quả hơn để làm điều đó.

Chạy hai cơ sở dữ liệu trên cùng một máy sẽ cần nhiều RAM hơn để chạy với cùng hiệu quả vì hai cơ sở dữ liệu sẽ cạnh tranh không gian để giữ cho chúng bộ đệm và bộ đệm khác nhau. Có thể có một lợi ích hiệu suất thông qua phân tách tải IO, nếu các tệp dữ liệu cho Slave nằm trên các ổ đĩa vật lý khác với chủ. Trong trường hợp này, bạn có thể chạy các báo cáo phức tạp yêu cầu nhiều lần đọc đĩa chống lại nô lệ mà không phải cạnh tranh với chủ băng thông IO.

Chỉnh sửa: như DTest đề cập trong nhận xét của mình bên dưới, một lợi ích có thể khác của DB nô lệ (ngay cả khi trên cùng các ổ đĩa với chủ) là các truy vấn chạy dài phức tạp trong nô lệ có thể gây ra sự cố khóa trong ngày truy vấn chạy ngày trên chủ là an toàn hơn. Mặc dù bạn vẫn tốt hơn khi có nô lệ trên các ổ đĩa khác nhau vì các truy vấn quan trọng như vậy có khả năng gây ra sự cố tranh chấp IO.


1
suy nghĩ của tôi là nô lệ sẽ không cạnh tranh với khóa bảng trên myIsam khi bản gốc được viết cho (đối với các báo cáo phức tạp).
Derek Downey

@DTest: đó chắc chắn sẽ là một phần thưởng có thể, có (+1). Đối với các loại bảng khác cũng vậy khi một khóa lớn (như khóa bảng) có thể được yêu cầu bởi một truy vấn báo cáo phức tạp. Tôi sẽ thêm một ghi chú vào câu trả lời của mình để ít có khả năng bị cắt hiển thị biểu mẫu hơn nếu có nhiều bình luận xuất hiện.
David Spillett

7

Tôi không rõ điều này giải quyết vấn đề của bạn như thế nào. Không có sự dư thừa vì nó trên cùng một phần cứng vật lý, cùng một nhân hệ điều hành, cùng một nhị phân MySQL, có thể các đĩa khác nhau nhưng trên cùng một bộ điều khiển lưu trữ, v.v. Và lý do cho một DB báo cáo là để giảm tải truy vấn từ OLTP DB và như tất cả nằm trên cùng một bộ, sức mạnh tăng thêm đến từ đâu? Hoặc có điều gì khác mà bạn đang cố gắng để có được từ thiết lập này?

Có thể sử dụng một cách có thể hiểu được cho việc này là cách ly người dùng bằng cách nào đó, nhưng một lần nữa, tôi đã nghĩ rằng điều đó có thể được thực hiện với GRANT .


thêm một số ghi chú cho câu hỏi của tôi Mặc dù vậy, việc tách biệt người dùng không phải là điều tôi đang cố gắng thực hiện
Derek Downey

2

Nó thực sự được coi là không khôn ngoan, bạn chỉ đang cố gắng tận dụng nhiều lõi hơn? Các mục tiêu của việc xem xét thiết kế mới là gì?

(được đăng dưới dạng câu trả lời không phải bình luận để tập trung chủ đề hội thoại)


cung cấp một chút bảo vệ chống lại lỗi ổ đĩa, đồng thời cung cấp một máy chủ cho các báo cáo phức tạp sẽ không làm chậm các trang web sản xuất truy cập vào Master.
Derek Downey

Họ sẽ sử dụng cùng một bộ điều khiển đĩa hay bạn sẽ có thể cài đặt bộ điều khiển đĩa mới ngoài các trục chính mới?
jcolebrand

1
Tôi chỉ đi qua cái này Tôi nhận thấy các câu hỏi tu từ của bạn đề cập đến việc tận dụng nhiều lõi. Tôi thực sự đã thảo luận rằng trong câu trả lời của tôi hai tháng sau khi bạn nói điều này. +1 cho cái nhìn sâu sắc của bạn trước mắt tôi. BTW Đây là một video hay về chạy MySQL nhiều lần: youtu.be/5uKBg9prA1A
RolandoMyQueryDBA

BTW Chủ nhân của tôi có một khách hàng mà tôi đã sắp xếp kiến ​​trúc này cho. Nó có ba nô lệ đọc trên một máy (tất cả trong MyISAM) trong khi chủ là tất cả InnoDB.
RolandoMySQLDBA

1

Đây có thể là con dao hai lưỡi

Bạn có thể chạy nhiều phiên bản mysql dưới dạng nô lệ chỉ đọc trên cùng một máy chủ với chủ, với điều kiện mỗi phiên bản của MySQL nằm trên một đĩa khác nhau. Điều này chỉ mong muốn nếu bạn đang chạy các phiên bản MySQL cũ hơn mà không tận dụng được nhiều lõi (CPU). Các phiên bản mới nhất của MySQL có thể được điều chỉnh để thực sự sử dụng Nhiều CPU khiến cho việc truy cập nhiều lõi không cần thiết bằng cách chạy nhiều phiên bản của MySQL.

Đồng thời, đó cũng là một ý tưởng rất tồi. Nhiều khách hàng của tôi đã làm điều này để tiết kiệm tiền mua máy chủ VM hoặc kim loại trần. Bất kỳ sự đột biến nào trong tải máy chủ đều có thể ảnh hưởng đến tất cả các phiên bản MySQL đang chạy do truy vấn xấu, truy vấn chậm, quá nhiều kết nối, sử dụng bộ nhớ bị thiếu, bộ nhớ máy chủ không đủ, đập bộ nhớ cache, v.v., trong bất kỳ trường hợp MySQL nào. Điều này cũng làm tăng thêm độ phức tạp của ứng dụng bằng cách truy cập các phiên bản MySQL khác nhau thông qua số cổng của chúng và bạn cũng sẽ phải chịu trách nhiệm về TCP / IP.


0

Tôi sẽ chuyển qua bản sao trên một máy chủ khác, tức là nô lệ của A trên B và B trên A. Chúng tôi chạy nhiều phiên bản trên máy chủ của mình và không gặp vấn đề gì vì máy chủ MySQL của chúng tôi không hoạt động. Thất bại đối với một máy chủ đang chạy nhanh hơn nhiều so với thực hiện khôi phục từ bản sao lưu.

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.