• Модуль: cluster
  • Путь к файлу: ~/bitrix/modules/cluster/classes/mysql/dbnode_check.php
  • Класс: CClusterDBNodeCheck
  • Вызов: CClusterDBNodeCheck::MainNodeForSlave
function MainNodeForSlave()
{
	global $DB;

	$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;

	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)+1;
	$bIncIsOK = true;
	foreach($arMasters as $node_id => $arNode)
	{
		$inc = $this->GetServerVariable($arNode["DB"], "auto_increment_increment");
		if($inc != $auto_increment_increment)
		{
			$bIncIsOK = false;
			$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;
			$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 == '')
		{
			$bRelayIsOK = 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"),
			"WIZ_REC" => "",
		);
	}

	$bSlaveUpdatesIsOK = true;
	foreach($arMasters as $node_id => $arNode)
	{
		$log_slave_updates = $this->GetServerVariable($arNode["DB"], "log_slave_updates");
		if($log_slave_updates !== 'ON')
		{
			$bSlaveUpdatesIsOK = false;
			$result[$node_id."_log_slave_updates"] = array(
				"IS_OK" => CClusterDBNodeCheck::ERROR,
				"MESSAGE" => GetMessage("CLU_LOG_SLAVE_UPDATES_MSG", array("#node_id#" => $node_id, "#log-slave-updates#" => $log_slave_updates)),
				"WIZ_REC" => GetMessage("CLU_LOG_SLAVE_UPDATES_WIZREC", array("#value#" => 1)),
			);
		}
	}
	if($bSlaveUpdatesIsOK)
	{
		$result["_log_slave_updates"] = array(
			"IS_OK" => CClusterDBNodeCheck::OK,
			"MESSAGE" => GetMessage("CLU_LOG_SLAVE_UPDATES_OK_MSG"),
			"WIZ_REC" => "",
		);
	}

	return $result;
}