Drupal Master / Bản sao nô lệ


10

Tôi đã thiết lập hai máy chủ MySQL với bản sao Master / Slave cho cơ sở dữ liệu drupal và tôi đã xác nhận các cơ sở dữ liệu được đồng bộ hóa và sao chép.

Bây giờ tôi đang cố gắng chỉ điểm drupal cho cả hai cơ sở dữ liệu cho mục đích chuyển đổi dự phòng / dự phòng. Đó là nếu tôi cần khởi động lại máy chủ cơ sở dữ liệu chính của chúng tôi, tôi không muốn trang web của chúng tôi bị sập. (Đi chỉ đọc là chấp nhận được trong các tình huống thất bại)

Dựa vào bài viết sau . Tôi đã sửa đổi settings.phpnhư sau:

$databases['default']['default'] = array(
  'driver' => 'mysql',
  'database' => 'sdrupal',
  'username' => 'drupal',
  'password' => 'topsecret',
  'host' => 'masterdb.ptp.local',
);
$databases['default']['slave'][] = array(
  'driver' => 'mysql',
  'database' => 'sdrupal',
  'username' => 'drupal',
  'password' => 'topsecret',
  'host' => 'slavedb.ptp.local',
);

Cấu hình vẫn ổn cho đến khi tôi tắt máy chủ (dừng dịch vụ mysqld) - khi tôi làm điều đó, trang web của tôi xuất hiện:

PDOException: SQLSTATE [HY000] [2013] Mất kết nối với máy chủ MySQL khi 'đọc gói giao tiếp ban đầu', lỗi hệ thống: 111 trong drupal_is_denied () (dòng 1895 của /www/includes/bootstrap.inc). Bổ sung

PDOException: SQLSTATE [HY000] [2013] Mất kết nối với máy chủ MySQL khi 'đọc gói giao tiếp ban đầu', lỗi hệ thống: 111 trong dblog_watchdog () (dòng 141 của /www/modules/dblog/dblog.module).

Bí quyết để làm cho công việc này là gì?

Câu trả lời:


6

Về Master / Master (Tính sẵn sàng cao) có thể thực hiện cân bằng tải khi không có chủ nào bị hỏng.

Sau đây sẽ làm cho tất cả các ghi vào master1 và tất cả các lần đọc chuyển đến master2. Nếu master1 thất bại, tất cả các truy vấn sẽ chuyển đến master2. Nếu master2 thất bại, tất cả các truy vấn sẽ chuyển đến master1.

'master' => array('master1', 'master2')
'slave' => array('master2', 'master1')

Sau đây sẽ làm cho tất cả các truy vấn đi đến master1. Nếu master1 thất bại, tất cả các truy vấn sẽ chuyển đến master2:

'master' => array('master1', 'master2')
'slave' => array('master1', 'master2')

Cảm ơn bạn cho câu trả lời này. Tôi hiểu điều này khá cũ và có thể đã lỗi thời. Bạn có bất cứ lời khuyên để thực hiện tương tự trong phiên bản mới nhất của Drupal không?
Gaurav Ojha

4

Vì lợi ích của người khác - tốt nhất như tôi đã có thể tìm thấy - ngoài hộp Drupal 7 dường như không có bất kỳ cơ sở dữ liệu nào có khả năng sẵn sàng cao được tích hợp sẵn.

Bạn có thể thiết lập hai máy chủ mysql trong cấu hình chính / phụ nhưng điều tốt nhất nó sẽ làm là gửi tất cả ghi cho chủ và tất cả các lần đọc cho nô lệ. Điều đó cung cấp phân phối tải thô nhưng không chuyển đổi dự phòng.

Điều đó có nghĩa là nếu máy chủ mysql bị hỏng tất cả các cược bị tắt - trang web gặp sự cố với một thông báo lỗi xấu xí phàn nàn rằng PHP không thể truy cập cơ sở dữ liệu chính.

Theo truyền thống, theo tôi hiểu, cách để giải quyết vấn đề này với các phần mềm khác là sử dụng cụm mysql ndb hoặc proxy mysql - nhưng sau khi đọc một chút - những công nghệ này dường như không chơi tốt với Drupal.

Tuy nhiên, tôi tình cờ phát hiện ra một mô-đun Drupal có tên là auto-Slave ( http://drupal.org/project/autoslave ). Nó không được sử dụng rộng rãi (có 12 trang web tích cực sử dụng nó theo số liệu thống kê) nhưng dường như nó có thể làm những gì chúng ta muốn. Nó có thể được cấu hình theo nhiều cách khác nhau:

Bậc thầy / nô lệ

Writes go to Master
Reads go to Slave

Drawbacks:
If master is down, the durpal site displays a prominent message that the site is in "read only" mode.

Master / Master (Tính sẵn sàng cao)

Read and Writes go to master1 (primary) unless its unavailable.
If master1 is unavailable, reads and writes go to master2 (secondary)

Drawbacks:
There is no load distribution. All load (reads and writes) go to either master1 or to master2

Master / Master / Slave (Tính khả dụng cao / Hiệu suất cao)

Writes go to Master1 (primary) unless its down then they go to Master2
Reads go to the slave unless its down
Drawbacks:
Requires a minimum of three database servers (master/master/slave)

Cho đến nay chúng tôi đã thiết lập thành công (Master / Slave) đầu tiên. Tôi sẽ cố gắng thiết lập Master / Master / Slave tiếp theo.

Hy vọng điều này sẽ giúp người khác ra ngoài.


Điều này đã giúp rất nhiều. :)
esafwan
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.