Drupal主/从复制


10

我已经为drupal数据库设置了两个具有主/从复制功能的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行)。

使这项工作有效的诀窍是什么?

Answers:


6

关于主站/主站(高可用性)可以在没有主站发生故障时进行负载平衡。

以下内容将使所有写入都进入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中,您有实现这些技巧的任何技巧吗?
Gaurav Ojha

4

为了他人的利益-尽我所能-开箱即用Drupal 7似乎没有内置任何数据库高可用性功能。

您可以在主/从配置中设置两个mysql服务器,但是最好的做法是将所有写入发送到主服务器,将所有读取发送到从服务器。这样可以提供粗略的负载分配,但不能提供故障转移。

这就是说,如果主mysql服务器宕机,所有的赌注都将关闭–该站点将关闭,并显示一条丑陋的错误消息,抱怨PHP无法访问主数据库。

据我了解,传统上,使用其他软件解决此问题的方法是使用mysql ndb集群或mysql代理-但经过一番阅读-这些技术显然不能与Drupal配合使用。

但是我偶然发现了一个名为auto-slave的Drupal模块(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 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)

到目前为止,我们已经成功设置了第一个(主/从)。接下来,我将尝试设置Master / Master / Slave。

希望这可以帮助其他人。


这确实有很大帮助。:)
esafwan 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.