web-dev-qa-db-ja.com

Drupalマスター/スレーブレプリケーション

drupalデータベースのマスター/スレーブレプリケーションを備えた2つのMySQLサーバーをセットアップし、データベースが同期して複製していることを確認しました。

drupalは、基本的にフェイルオーバー/冗長性の目的で両方のデータベースを指すようにしています。つまり、プライマリデータベースサーバーを再起動する必要がある場合、サイトを停止させたくありません。(障害の発生時には読み取り専用で問題ありません)

次の記事 に基づいています。 settings.phpを次のように変更しました。

$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',
);

マスターをシャットダウンする(mysqldサービスを停止する)まで構成は問題ありません。そうすると、サイトが起動します。

PDOException:SQLSTATE [HY000] [2013]「初期通信パケットの読み取り」でMySQLサーバーへの接続が失われました。システムエラー:drupal_is_denied()で111(/www/includes/bootstrap.incの1895行目)。追加

PDOException:SQLSTATE [HY000] [2013]「初期通信パケットの読み取り」でMySQLサーバーへの接続が失われました。システムエラー:dblog_watchdog()で111(/www/modules/dblog/dblog.moduleの行141)。

これを機能させるコツは何ですか?

10
Brad

マスター/マスター(高可用性)に関しては、マスターが停止していないときに負荷分散を実行できます。

次の例では、すべての書き込みをmaster1に行い、すべての読み取りをmaster2に行います。 master1が失敗した場合、すべてのクエリはmaster2に送信されます。 master2が失敗した場合、すべてのクエリはmaster1に送られます。

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

以下は、すべてのクエリをmaster1に送信します。 master1が失敗すると、すべてのクエリがmaster2に送られます。

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

他の人の利益のために-私が見つけたのと同じくらい良い-箱から出してDrupal 7にはデータベースの高可用性機能が組み込まれていないようです。

マスター/スレーブ構成で2つのmysqlサーバーを設定できますが、最善の方法は、すべての書き込みをマスターに送信し、すべての読み取りをスレーブに送信することです。それは粗雑な負荷分散を提供しますが、フェイルオーバーではありません。

つまり、マスターmysqlサーバーがダウンした場合、すべてのベットがオフになります。サイトがダウンし、PHPがマスターデータベースに到達できないことを伝える醜いエラーメッセージが表示されます。

伝統的に、私が理解しているように、他のソフトウェアでこれに取り組む方法は、mysql ndbクラスターまたはmysqlプロキシーを使用することですが、少し読んだ後、これらのテクノロジーは明らかにDrupalでうまく機能しません。

しかし、私はDrupal auto-slave( http://drupal.org/project/autoslave と呼ばれるモジュール)を偶然見つけました。広く使われていません(12のサイトがあります)統計に従って積極的に使用していますが、私たちが望むことを実行できるようです。さまざまな方法で構成できます。

マスター/スレーブ

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.

マスター/マスター(高可用性)

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

マスター/マスター/スレーブ(高可用性/高パフォーマンス)

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

これまでのところ、最初の(マスター/スレーブ)を正常にセットアップしました。次にマスター/マスター/スレーブをセットアップしようとしています。

うまくいけば、これは他の誰かを助けます。

4
Brad