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)。
これを機能させるコツは何ですか?
マスター/マスター(高可用性)に関しては、マスターが停止していないときに負荷分散を実行できます。
次の例では、すべての書き込みを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')
他の人の利益のために-私が見つけたのと同じくらい良い-箱から出して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)
これまでのところ、最初の(マスター/スレーブ)を正常にセットアップしました。次にマスター/マスター/スレーブをセットアップしようとしています。
うまくいけば、これは他の誰かを助けます。