2015-10-10 14 views
5

Chúng ta có một cấu trúc liên kết hoạt động/thụ động trong đó có hai phức hợp x86 với bộ nhớ thô được chia sẻ, trong đó chỉ một trong các nút trong một thời điểm cụ thể có quyền truy cập lưu trữ (AKA nút hoạt động). Trong trường hợp chuyển đổi dự phòng trong nút đang hoạt động, nút thụ động bắt đầu một lần tiếp nhận và trở thành nút đang hoạt động có quyền truy cập vào bộ nhớ được chia sẻ. Mỗi nút có bộ nhớ thiết bị khởi động riêng của nó với một hệ thống tập tin, tuy nhiên bộ nhớ chia sẻ không thể có một hệ thống tập tin được gắn trên nó.Mysql InnoDb trên một thiết bị thô trong một cấu trúc liên kết hoạt động/thụ động

Chúng tôi quan tâm đến việc cài đặt máy chủ Mysql trên cả hai nút, nơi dữ liệu của nó nằm trong bộ nhớ dùng chung và chỉ nút hoạt động đang chạy máy chủ.

Mysql with InnoDb is capable of running on a raw device và cũng có hướng dẫn về cách chạy Mysql over a cluster similar to our topology. Tuy nhiên, trong ví dụ thứ hai, họ có một hệ thống tập tin được gắn trên bộ nhớ dùng chung. Sự cố hệ thống tệp gây ra mối lo ngại lớn:

ib_logfile * vẫn yêu cầu hệ thống tệp. Vì vậy, tính năng mysql thô không hoàn toàn chính xác. Vui lòng sửa tôi nếu tôi nhầm. Có cách giải quyết nào để lưu trữ các tệp đó trong bộ nhớ thô không? Tuy nhiên, chúng ta có thể lưu các tệp ib_logfiles trong thiết bị khởi động của nút và luôn xóa các tệp đó trước khi máy chủ khởi động, tuy nhiên, điều này có thể dẫn đến giao dịch không cam kết được cam kết một phần trong trường hợp thất bại ở giữa giao dịch. toàn bộ ý tưởng giao dịch.

Có thêm tệp/tính năng nào có thể ảnh hưởng đến hành vi của mysql trong cấu trúc liên kết này không?

+0

Bạn sẽ nhận được câu trả lời hay hơn về http://dba.stackexchange.com/ –

Trả lời

1

Mỗi lần cài đặt mysql soạn 2 thư mục. 1. Thư mục ứng dụng 2. Thư mục dữ liệu. Thư mục dữ liệu chứa tất cả dữ liệu của db. Nó chứa các tệp dữ liệu và tệp nhật ký. Thư mục dữ liệu có thể nằm trong thư mục lưu trữ và ứng dụng được chia sẻ trên máy chủ cục bộ và khi bạn muốn chuyển từ hoạt động sang thụ động, bạn tắt máy (nếu nó không làm hỏng) hoạt động và khởi động máy chủ bị động với quyền trên chia sẻ lưu trữ. Bởi vì các tệp nhật ký nằm trong bộ nhớ dùng chung, máy chủ hoạt động mới sẽ khôi phục giao dịch bị mất. Hãy nhớ rằng trong cấu trúc liên kết này, máy chủ thụ động bị hỏng và chỉ khi bạn chuyển đổi nó sẽ được bắt đầu.

+0

Thư mục ứng dụng yêu cầu hệ thống tệp, như tôi đã mô tả, không thể được gắn trên bộ nhớ dùng chung của chúng tôi. – Mattan

+0

Như tôi đã nói, thư mục Ứng dụng có thể nằm trên máy chủ cục bộ. Bạn cài đặt trên mỗi máy chủ mysql, và cập nhật các dữ liệu dir trong cấu hình để lưu trữ được chia sẻ. – RanP

+0

'inndodb_data_file' có thể được chia sẻ trên lưu trữ thô, vì mysql hỗ trợ tính năng đó. Tuy nhiên, tất cả các tệp khác, chẳng hạn như 'ib_logfile0/1',' .frm' (trên mỗi lược đồ) và nhiều tệp khác được lưu trữ thường trong '/ var/lib/mysql /', tất nhiên yêu cầu hệ thống tệp. Bạn không thể lưu trữ tệp nhật ký innodb trong bộ nhớ thô, dẫn đến lỗi nếu bạn chuyển đổi giữa các nút ở giữa giao dịch. – Mattan

1

Có thể bạn sẽ không thích câu trả lời này, nhưng ở đây ...

Đừng cố gắng làm những gì bạn mô tả.

Bạn đang bảo vệ chống lại chỉ một điều - lỗi máy chủ (ngoài đĩa). Trong khi đó, lỗi đĩa, lỗi mạng, động đất, lũ lụt, vv, có thể phá hủy hệ thống. Tại sao phải bảo vệ chống lại chỉ một kịch bản thất bại?

Quay lại kế hoạch dự kiến ​​... Nếu máy chủ hoạt động chết, bạn phải ngăn không cho nó viết bất kỳ thứ gì khác vào tệp của MySQL. Chỉ sau đó có thể mysqld thụ động được bật. Nó sẽ (giả sử bạn đang sử dụng InnoDB) phục hồi những gì nó có thể từ đĩa. Hãy ghi nhớ rằng mọi thứ đang hoạt động có lẽ đang chờ để được xóa khỏi RAM.

Hoặc mục tiêu của bạn là thiết bị "thô" bằng cách nào đó 'tốt hơn'?

"Sống" không còn hữu ích nữa. Nhiều thập kỷ trước, đó là một khái niệm hoạt động tốt. Hôm nay của ổ đĩa và bộ điều khiển đã hầu như loại bỏ sự hữu ích của "nguyên".

Chỉ cần "gắn kết" hệ thống tệp và có tệp của mysql ở những nơi mà mỗi máy chủ biết.

Dữ liệu và chỉ mục trong InnoDB nằm trong khối 16KB, được sắp xếp một phần thành 1MB "khoảng cách". Nhưng khi bạn sửa đổi các bảng, dữ liệu được phân tán, do đó loại bỏ bất kỳ lợi thế nào "thô" được sử dụng để cung cấp.

OK, đúng là tất cả các tệp nhật ký (iblog, binlog, slowlog, relaylog, generallog, v.v.) đều hưởng lợi một phần từ quyền truy cập 'nối tiếp' vào đĩa. Nhưng nếu hệ điều hành phân bổ các tệp như vậy một cách liên tục, thì bạn sẽ nhận được hiệu suất "thô" ngay cả trên "hệ thống tệp".

InnoDB không biết cách xử lý thiết bị thô.

InnoDB sử dụng RAM rất nhiều để tránh I/O.

Nếu bạn muốn HA (Tính khả dụng cao), tôi khuyên bạn nên sử dụng Galera, hoặc trong MariaDB hoặc PXC.

Các vấn đề liên quan