Load-balance dois MySQL dbs de uma página PHP?

1

Esta é uma pergunta muito idiota, mas aqui vai.

  1. Eu tenho um servidor web, executando um aplicativo PHP simples.
  2. Eu tenho dois servidores MySQL, com um banco de dados replicado, que alimenta o aplicativo PHP. Estou usando dois bancos de dados MySQL para lidar com a demanda.

Como posso (e de fato, posso) fazer com que o aplicativo PHP alterne qual servidor MySQL ele usa?

A linha PHP onde eu me conecto ao banco de dados é atualmente:

$con = mysql_connect('10.0.0.2:3306','name','password')
  or die('Could not connect to the server!');

Existe uma maneira de balancear a carga com o 10.0.0.2 e com o meu outro servidor? Obrigado.

    
por simon 12.05.2011 / 18:07

4 respostas

1

Uma maneira muito simples: você pode usar apenas um número aleatório para selecionar entre duas seqüências de conexão, algo como o seguinte (isso é pseudo-código, não falo PHP):

  $ran = gen_random();    // assuming range from 0..1
  if (ran < 0.5) then 
     $con = database1; 
  else 
     $con = database2; 

O balanceamento de carga real também seria possível, é claro, você teria que verificar o carregamento de seus servidores de banco de dados e selecionar aquele com a carga mais baixa.

    
por 12.05.2011 / 18:13
0

Você quer ser muito cuidadoso com o que está fazendo aqui. A replicação do MySQL é um processo mestre-escravo. Quaisquer atualizações escritas para o escravo não retornarão ao mestre, e você terminará com bancos de dados inconsistentes. Na verdade, mais cedo ou mais tarde você provavelmente terminará com uma replicação quebrada e a diversão começará de verdade. Você poderia tentar configurar algum tipo de replicação circular, mas por último eu li sobre isso ninguém conseguiu fazer isso funcionar em um ambiente de produção.

De qualquer forma, posso dizer que um único servidor de banco de dados MySQL, configurado e otimizado adequadamente, pode manipular facilmente o tráfego de vários servidores da Web (a menos que os servidores da Web sejam animais reais e o servidor db seja um anão).

Se você precisar de um cluster de banco de dados multimaster adequado, será necessário examinar outras soluções. AFAIK existe apenas uma solução de banco de dados multimaster adequada no mercado, e isso é oracle.

    
por 12.05.2011 / 18:22
0

O MySQL usa o grupo NBCLuster. Nem todos os bancos de dados suportam o tipo de banco de dados NBCluster. Você pode tentar migrar seus dados em um ambiente de teste para ver o que acontece? Você pode então usar um ambiente em cluster.

    
por 12.05.2011 / 18:26
0

Confira o novo driver mysql (mysqlnd) em 5.3.

Ou você poderia usar o MySQL Proxy em vez de fazê-lo em PHP.

Felicidades

    
por 12.05.2011 / 19:21