MySQL master/master, remote API and server_id

Discussion in 'Developers' Forum' started by electronico_nc, Oct 14, 2014.

  1. So I'm trying to change DNS entries on a MySQL master/master cluster with 2 servers.
    Remote API on server1 is OK.
    I need to update DNS entries on server2 if server1 is unavailable.
    So I connect to server2 and try :
    Code:
    dns_zone_get( $session_id, array('active' => 'Y', 'server_id' => $server2_id) )
    outputs nothing.
    If I use $server1_id, it works as axpected.
    Is it a normal behaviour to use only $server1_id with Remote API in this master/master replication ?
    Thanks in advance for your time.
    Nicolas
     
  2. till

    till Super Moderator Staff Member ISPConfig Developer

    API Connections are made to the master DB only, so dont connect to the slave node unless you configured it by changing the interface config.inc.php as described in the cluster tutorial to use the master DB.

    Yes off course, its a mirror so you only use the ID of the master as everything else is handled and mirrored automatically.
     
  3. The MySQL SLAVE function on server1 was not running so I had only Master->Slave replication.
    It's now OK with Master<->Master replication.
     
    Last edited: Oct 17, 2014
  4. Well,

    So MySQL master<->master is now OK.

    Modifying a value on server1 (manually via ISPConfig panel) is well replicated on server2 ISPConfig Panel, in dbispconfig1 database on both servers BUT the zone is NOT updated in /etc/bind/pri.domain.tld on server2 ...

    /usr/local/ispconfig/interface/lib/config.inc.php (same on 2 servers)
    Code:
    <?php
    /*
    Copyright (c) 2007 - 2013, Till Brehm, projektfarm Gmbh
    All rights reserved.
    
    Redistribution and use in source and binary forms, with or without modification,
    are permitted provided that the following conditions are met:
    
        * Redistributions of source code must retain the above copyright notice,
          this list of conditions and the following disclaimer.
        * Redistributions in binary form must reproduce the above copyright notice,
          this list of conditions and the following disclaimer in the documentation
          and/or other materials provided with the distribution.
        * Neither the name of ISPConfig nor the names of its contributors
          may be used to endorse or promote products derived from this software without
          specific prior written permission.
    
    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
    INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
    OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
    EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    */
    
    //** Web-only
    if( !empty($_SERVER['DOCUMENT_ROOT']) ) {
    
    	Header("Pragma: no-cache");
    	Header("Cache-Control: no-store, no-cache, max-age=0, must-revalidate");
    	Header("Content-Type: text/html; charset=utf-8");
    	
    	//** Set a few php.ini values
    	ini_set('register_globals',0);
    	ini_set('magic_quotes_gpc', 0);
    	
    	if (isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS']) || isset($_REQUEST['s']) || isset($_REQUEST['s_old']) || isset($_REQUEST['conf'])) {
    		die('Internal Error: var override attempt detected');
    		exit;
    	}
    }
    
    //** Set a few php.ini values
    if(get_magic_quotes_runtime()) set_magic_quotes_runtime(false);
    if(isset($app)) unset($app);
    if(isset($conf)) unset($conf);
    
    
    //** SVN Revision
    $svn_revision = '$Revision$';
    $revision = str_replace(array('Revision:','$',' '), '', $svn_revision);
    
    //** Application
    define('ISPC_APP_TITLE', 'ISPConfig');
    define('ISPC_APP_VERSION', '3.0.5.4p3');
    define('DEVSYSTEM', 0);
    
    
    //** Database
    $conf['db_type'] = 'mysql';
    $conf['db_host'] = 'localhost';
    $conf['db_database'] = 'dbispconfig1';
    $conf['db_user'] = 'ispconfig';
    $conf['db_password'] = '6a51e6e006e361c5a5eb0af8f4395866';
    $conf['db_charset'] = 'utf8'; // same charset as html-charset - (HTML --> MYSQL: "utf-8" --> "utf8", "iso-8859-1" --> "latin1")
    $conf['db_new_link'] = false;
    $conf['db_client_flags'] = 0;
    
    define('DB_TYPE',$conf['db_type']);
    define('DB_HOST',$conf['db_host']);
    define('DB_DATABASE',$conf['db_database']);
    define('DB_USER',$conf['db_user']);
    define('DB_PASSWORD',$conf['db_password']);
    define('DB_CHARSET',$conf['db_charset']);
    
    
    //** Database settings for the master DB. This setting is only used in multiserver setups
    $conf['dbmaster_type']			= 'mysql';
    $conf['dbmaster_host']			= '';
    $conf['dbmaster_database']		= 'dbispconfig';
    $conf['dbmaster_user']			= '';
    $conf['dbmaster_password']		= '9fe133b8d900809d4d06035f57328840';
    $conf['dbmaster_new_link'] 		= false;
    $conf['dbmaster_client_flags'] 	= 0;
    
    
    //** Paths
    $conf['ispconfig_log_dir'] = '/var/log/ispconfig';
    define('ISPC_ROOT_PATH', realpath(dirname(__FILE__).'/../')); // Main ROOT is the parent directory to this file, ie interface/ or server/. NO trailing slashes.
    define('ISPC_LIB_PATH', ISPC_ROOT_PATH.'/lib');
    define('ISPC_CLASS_PATH', ISPC_ROOT_PATH.'/lib/classes');
    define('ISPC_WEB_PATH', ISPC_ROOT_PATH.'/web');
    define('ISPC_THEMES_PATH', ISPC_ROOT_PATH.'/web/themes');
    define('ISPC_WEB_TEMP_PATH', ISPC_WEB_PATH.'/temp'); // Path for downloads, accessible via browser
    define('ISPC_CACHE_PATH', ISPC_ROOT_PATH.'/cache');
    define('ISPC_LOG_PATH', $conf['ispconfig_log_dir']);
    
    //** Paths (Do not change!)
    $conf['rootpath'] = substr(dirname(__FILE__),0,-4);
    $conf['fs_div'] = '/'; // File system separator, "\\" on Windows and "/" on Linux and UNIX
    $conf['classpath'] = $conf['rootpath'].$conf['fs_div'].'lib'.$conf['fs_div'].'classes';
    $conf['temppath'] = $conf['rootpath'].$conf['fs_div'].'temp';
    $conf['logpath'] = ISPC_LOG_PATH; // Actually just a copy of $conf['ispconfig_log_dir'], might be removed in a later version
    
    define('FS_DIV',$conf['fs_div']);
    define('SERVER_ROOT',$conf['rootpath']);
    define('INCLUDE_ROOT',SERVER_ROOT.FS_DIV.'lib');
    define('CLASSES_ROOT',INCLUDE_ROOT.FS_DIV.'classes');
    
    
    //** Server
    $conf['app_title'] = ISPC_APP_TITLE;
    $conf['app_version'] = ISPC_APP_VERSION;
    $conf['app_link'] = 'http://www.ispconfig.org/';
    $conf['modules_available'] = 'dashboard,admin,mail,sites,monitor,client,dns,help';
    $conf['server_id'] = '1';
    $conf['init_scripts'] = '/etc/init.d';
    
    
    //** Interface
    $conf['interface_modules_enabled'] = 'dashboard,mail,sites,dns,tools,help';
    
    //** Demo mode
    /* The demo mode is an option to restrict certain actions in the interface like 
    *  changing the password of users with sys_userid < 3 etc. to be 
    *  able to run the ISPConfig interface as online demo. It does not
    *  affect the server part. The demo mode should be always set to false
    *  on every normal installation
    */
    $conf['demo_mode'] = false;
    
    
    //** Logging
    $conf['log_file'] = $conf['ispconfig_log_dir'].$conf['fs_div'].'ispconfig.log';
    $conf['log_priority'] = 2; // 0 = Debug, 1 = Warning, 2 = Error
    
    
    //** Allow software package installations
    $conf['software_updates_enabled'] = false;
    
    
    //** Themes
    $conf['theme'] = 'default';
    $conf['html_content_encoding'] = 'utf-8'; // example: utf-8, iso-8859-1, ...
    $conf['logo'] = 'themes/default/images/header_logo.png';
    
    
    //** Default Language and Timezone
    $conf['language'] = 'en';
    $conf['debug_language'] = false;
    $conf['language_file_import_enabled'] = true; // Bool value: true / false
    
    //* Complete timezone list: http://php.net/manual/en/timezones.php
    $conf['timezone'] = 'Pacific/Noumea';
    
    
    //** Misc.
    $conf['interface_logout_url'] = ''; // example: http://www.domain.tld/
    
    
    //** Auto Load Modules
    $conf['start_db'] = true;
    $conf['start_session'] = true;
    
    //** Constants
    define('LOGLEVEL_DEBUG',0);
    define('LOGLEVEL_WARN',1);
    define('LOGLEVEL_ERROR',2);
    
    //** include a local config-file if there is one
    //** IMPORTANT!!!
    //** DO NOT MAKE A COPY OF THIS FILE AS LOCAL CONFIG-FILE
    //** USE A EMPTY FILE AND ONLY COPY THE SETTINGS IN IT, YOU NEED TO OVERRIDE
    if (is_file(dirname(__FILE__) . '/config.inc.local.php')) include_once 'config.inc.local.php';
    ?>
    
    What could produce this problem ?
     
  5. After enabling DEBUG mode on server2, I get in logs:
    Code:
    dimanche 19 octobre 2014, 07:25:18 (UTC+1100) DB::__construct Access denied for user 'ispcsrv3'@'xxx.xxx.xxx.xxx' to database 'dbispconfig1' // xxx.xxx.xxx.xxx=server2 IP
    I have setup SELECT INSERT UPDATE DELETE privileges for user ispcsrv3 on dbispconfig1 database through phpmyadmin.
    Changes are now writing to disk on server2.
    Nicolas
     

Share This Page