Назад | Перейти на главную страницу

Конфигурация HyperDB Master / Slave

Работает на сервере 2008 R2 IIS 7.5 с MySQL Master / Slave (также на сервере 2008 R2) и WordPress 3.7. Совместимо ли оно ТОЛЬКО с wordpress 3.5.2? Если это так, есть ли другие плагины, позволяющие настроить MySQL Master / Slave?

Вот что я сделал до сих пор: 1. Я скопировал db.php в папку / wp-content / 2. Отредактировал файл wp-config.php, чтобы (не реальные IP-адреса) определяли ('DB_HOST', '192.168 .1.198 '); определить ('DB_HOST_SLAVE', '192.168.1.198'); 3. отредактировал db-config.php и положил в корень сайта.

<?php
$wpdb->save_queries = false;
$wpdb->persistent = false;
$wpdb->max_connections = 10;
$wpdb->check_tcp_responsiveness = true;
$wpdb->add_database(array(
    'host'     => DB_HOST,
    'user'     => DB_USER,
    'password' => DB_PASSWORD,
    'name'     => DB_NAME,
    'write' => 1,
    'read' => 1,
    'dataset' => 'global',
    'timeout' => 0.2,
));
$wpdb->add_database(array(
    'host'     => DB_HOST_SLAVE,
    'user'     => DB_USER,
    'password' => DB_PASSWORD,
   'name'     => DB_NAME,
    'write' => 0,
    'read' => 1,
    'dataset' => 'global',
    'timeout' => 0.2,
));

Теперь, когда я отключаю мастер, сайт перестает загружаться, я ожидал, что подчиненный просто переведет сайт в режим только для чтения. Все, что я вижу в журналах php, это то, что он пытается подключиться к 192.168.1.198, когда я ожидал, что чтение перейдет к ведомому устройству, если он не сможет подключиться к 192.168.1.199. Это ошибка

WordPress database error 2013-12-26 19:25:40 Can't select global__w -
'referrer' => 'blah.com/wp-admin/',
'server' => ,
'host' => 192.168.1.198,
'error' => ,
'errno' => 0,
'tcp_responsive' => ,
'lagged_status' => 3 for query SELECT option_value FROM wp_options WHERE option_name = 'db_upgraded' LIMIT 1 made by get_option

Теперь, если я отредактирую db-config.php, чтобы он был таким

<?php
$wpdb->save_queries = false;
$wpdb->persistent = false;
$wpdb->max_connections = 10;
$wpdb->check_tcp_responsiveness = true;
$wpdb->add_database(array(
    'host'     => DB_HOST_SLAVE,
    'user'     => DB_USER,
    'password' => DB_PASSWORD,
    'name'     => DB_NAME,
    'write' => 0,
    'read' => 1,
    'dataset' => 'global',
    'timeout' => 0.2,
));

Я могу заставить сайт работать, когда главный сервер не работает, НО если подчиненный выходит из строя, весь сайт выходит из строя. Это означает, что если мастер включен, а ведомый не работает, сайт не работает.

Я использую Tungsten Replicator с 3 серверами MySQL по всему миру (конфигурация всех мастеров). Эта конфигурация у меня работает.

MySQL.Cluster разрешает виртуальный IP «главного» узла в кластере corosync - лучше писать только одному мастеру :)

$wpdb->add_database(array(
        'host'     => 'MySQL.Cluster',     // If port is other than 3306, use host:port.
        'user'     => DB_USER,
        'password' => DB_PASSWORD,
        'name'     => DB_NAME,
        'write'    => 1,
        'read'     => 2,
        'dataset'  => 'global',
        'timeout'  => 0.2,
));


$wpdb->add_database(array(
        'host'     => '127.0.0.1',     // If port is other than 3306, use host:port.
        'user'     => DB_USER,
        'password' => DB_PASSWORD,
        'name'     => DB_NAME,
        'write'    => 2,
        'read'     => 1,
        'dataset'  => 'global',
        'timeout'  => 0.1,
));