function SlaveNodeForMaster($nodeDB)
{
global $DB;
$result = array();
$arMasters = array();
$cData = new CClusterDBNode;
$rsData = $cData->GetList(
array(//Order
"ID" => "ASC",
)
,array(//Filter
"=ROLE_ID" => array("MAIN", "MASTER"),
)
);
while($arData = $rsData->Fetch())
$arMasters[$arData["ID"]] = $arData;
$arMasters["v99"] = array();//virtual connection must be alredy setup
foreach($arMasters as $node_id => $arNode)
{
if($node_id == 1)
$nodeDB = $DB;
else
$nodeDB = CDatabase::GetDBNodeConnection($node_id, true);
$arMasters[$node_id]["DB"] = $nodeDB;
}
$auto_increment_increment = count($arMasters);
$bIncIsOK = true;
foreach($arMasters as $node_id => $arNode)
{
$inc = $this->GetServerVariable($arNode["DB"], "auto_increment_increment");
if($inc != $auto_increment_increment)
{
$bIncIsOK = false;
if($node_id == "v99")
$result[$node_id."_auto_increment_increment"] = array(
"IS_OK" => CClusterDBNodeCheck::ERROR,
"MESSAGE" => GetMessage("CLU_AUTO_INCREMENT_INCREMENT_NODE_ERR_MSG", array("#value#" => $auto_increment_increment, "#current#" => $inc)),
"WIZ_REC" => GetMessage("CLU_AUTO_INCREMENT_INCREMENT_WIZREC", array("#value#" => $auto_increment_increment)),
);
else
$result[$node_id."_auto_increment_increment"] = array(
"IS_OK" => CClusterDBNodeCheck::ERROR,
"MESSAGE" => GetMessage("CLU_AUTO_INCREMENT_INCREMENT_ERR_MSG", array("#node_id#" => $node_id, "#value#" => $auto_increment_increment, "#current#" => $inc)),
"WIZ_REC" => GetMessage("CLU_AUTO_INCREMENT_INCREMENT_WIZREC", array("#value#" => $auto_increment_increment)),
);
}
}
if($bIncIsOK)
{
$result["_auto_increment_increment"] = array(
"IS_OK" => CClusterDBNodeCheck::OK,
"MESSAGE" => GetMessage("CLU_AUTO_INCREMENT_INCREMENT_OK_MSG", array("#value#" => $auto_increment_increment)),
"WIZ_REC" => "",
);
}
$auto_increment_offset = array();
$bIncIsOK = true;
foreach($arMasters as $node_id => $arNode)
{
$offset = $this->GetServerVariable($arNode["DB"], "auto_increment_offset");
$mod = $offset % $auto_increment_increment;
if(array_key_exists($mod, $auto_increment_offset))
{
$bIncIsOK = false;
if($node_id == "v99")
$result[$node_id."_auto_increment_offset"] = array(
"IS_OK" => CClusterDBNodeCheck::ERROR,
"MESSAGE" => GetMessage("CLU_AUTO_INCREMENT_OFFSET_NODE_ERR_MSG", array("#current#" => $offset)),
"WIZ_REC" => GetMessage("CLU_AUTO_INCREMENT_OFFSET_WIZREC", array("#current#" => $offset)),
);
else
$result[$node_id."_auto_increment_offset"] = array(
"IS_OK" => CClusterDBNodeCheck::ERROR,
"MESSAGE" => GetMessage("CLU_AUTO_INCREMENT_OFFSET_ERR_MSG", array("#node_id#" => $node_id, "#current#" => $offset)),
"WIZ_REC" => GetMessage("CLU_AUTO_INCREMENT_OFFSET_WIZREC", array("#current#" => $offset)),
);
}
else
{
$auto_increment_offset[$mod] = $node_id;
}
}
if($bIncIsOK)
{
$result["_auto_increment_offset"] = array(
"IS_OK" => CClusterDBNodeCheck::OK,
"MESSAGE" => GetMessage("CLU_AUTO_INCREMENT_OFFSET_OK_MSG", array("#value#" => $auto_increment_increment)),
"WIZ_REC" => "",
);
}
$bRelayIsOK = true;
foreach($arMasters as $node_id => $arNode)
{
$relay_log = $this->GetServerVariable($arNode["DB"], "relay_log");
if($relay_log == '')
{
$bIncIsOK = false;
$result[$node_id."_relay_log"] = array(
"IS_OK" => CClusterDBNodeCheck::ERROR,
"MESSAGE" => GetMessage("CLU_RELAY_LOG_ERR_MSG", array("#node_id#" => $node_id, "#relay-log#" => $relay_log)),
"WIZ_REC" => GetMessage("CLU_RELAY_LOG_WIZREC"),
);
}
}
if($bRelayIsOK)
{
$result["_relay_log"] = array(
"IS_OK" => CClusterDBNodeCheck::OK,
"MESSAGE" => GetMessage("CLU_RELAY_LOG_OK_MSG", array("#value#" => $auto_increment_increment)),
"WIZ_REC" => "",
);
}
$log_bin = $this->GetServerVariable($nodeDB, "log_bin");
$is_ok = $log_bin === "ON";
$result["log_bin"] = array(
"IS_OK" => $is_ok? CClusterDBNodeCheck::OK: CClusterDBNodeCheck::ERROR,
"MESSAGE" => GetMessage("CLU_LOG_BIN_NODE_MSG", array("#log-bin#" => $log_bin)),
"WIZ_REC" => GetMessage("CLU_LOG_BIN_WIZREC"),
);
$skip_networking = $this->GetServerVariable($nodeDB, "skip_networking");
$is_ok = $skip_networking === "OFF";
$result["skip_networking"] = array(
"IS_OK" => $is_ok? CClusterDBNodeCheck::OK: CClusterDBNodeCheck::ERROR,
"MESSAGE" => GetMessage("CLU_SKIP_NETWORKING_NODE_MSG", array("#skip-networking#" => $skip_networking)),
"WIZ_REC" => GetMessage("CLU_SKIP_NETWORKING_WIZREC"),
);
$innodb_flush_log_at_trx_commit = $this->GetServerVariable($nodeDB, "innodb_flush_log_at_trx_commit");
//if($innodb_flush_log_at_trx_commit !== '1')
{
$is_ok = $innodb_flush_log_at_trx_commit === '1';
$result["innodb_flush_log_at_trx_commit"] = array(
"IS_OK" => $is_ok? CClusterDBNodeCheck::OK: CClusterDBNodeCheck::WARNING,
"MESSAGE" => GetMessage("CLU_FLUSH_ON_COMMIT_MSG", array("#innodb_flush_log_at_trx_commit#" => $innodb_flush_log_at_trx_commit)),
"WIZ_REC" => "",
);
}
$sync_binlog = $this->GetServerVariable($nodeDB, "sync_binlog");
//if($sync_binlog !== '1')
{
$is_ok = $sync_binlog === '1';
$result["sync_binlog"] = array(
"IS_OK" => $is_ok? CClusterDBNodeCheck::OK: CClusterDBNodeCheck::WARNING,
"MESSAGE" => GetMessage("CLU_SYNC_BINLOG_MSG", array("#sync_binlog#" => $sync_binlog)),
"WIZ_REC" => "",
);
}
$DatabaseName = $DB->DBName;
$is_ok = false;
$rsBinLogs = $nodeDB->Query("show master status", true, '', array("fixed_connection"=>true));
if(!$rsBinLogs)
{
$result["master_status"] = array(
"IS_OK" => CClusterDBNodeCheck::ERROR,
"MESSAGE" => GetMessage("CLU_MASTER_STATUS_MSG"),
"WIZ_REC" => GetMessage("CLU_MASTER_STATUS_WIZREC", array("#sql#" => "GRANT REPLICATION CLIENT on *.* to 'user name'@'%';")),
);
}
else
{
if($ar = $rsBinLogs->Fetch())
{
if($ar["Binlog_Do_DB"] === $DatabaseName)
$is_ok = true;
}
while($ar = $rsBinLogs->Fetch())
$is_ok = false;
$result["binlog_do_db"] = array(
"IS_OK" => $is_ok? CClusterDBNodeCheck::OK: CClusterDBNodeCheck::ERROR,
"MESSAGE" => GetMessage("CLU_SYNC_BINLOGDODB_MSG"),
"WIZ_REC" => GetMessage("CLU_SYNC_BINLOGDODB_WIZREC", array("#database#" => $DatabaseName)),
);
}
return $result;
}