Balanceamento de carga – SQL Server

O MS SQL Server até a versão atual (2014) não oferece o recurso de balanceamento de carga, NLB (Network Load Balance).

Com o balanceamento de carga, teríamos um cluster onde as aplicações se conectariam no servidor com a menor carga, com isso teríamos ganhos de performance.

Mesmo não tendo o recurso de balanceamento de carga, podemos criar um ambiente utilizando o recurso AlwaysOn, onde o servidor principal ficaria somente para escrita e os secundários para leituras, com isso tiramos a carga do servidor de escrita e fazemos o balanceamento de leitura nos demais nós do cluster. Como resultado temos um grande ganho de performance sem deixar servidores ociosos (stand by).

Não iremos abordar a criação do cluster utilizando o AlwaysOn, essas informações podem ser encontrado na documentação do MS SQL Server e na internet.

A solução é simples, em nosso exemplo vamos considerar um cluster com quatros nós utilizando o recurso AlwaysOn, teremos um servidor sendo o primário e três como secundários.

Iremos criar uma tabela, duas stored procedure (SP), um JOB e linked server para todos os servidores do cluster.

A Tabela conterá somente um campo (servidor) e terá somente um registro, nessa tabela terá o nome do servidor de leitura (secundário) em que as aplicações irão conectar.

SP de escrita, essa SP irá analisar as condições dos servidores secundários, levando em considerações bloqueios, utilização de CPU e quantidade de processos, conectará do servidor principal aos secundários utilizando os linked server, ao final atualiza a tabela com o nome do melhor servidor para atender as aplicações no momento.

O JOB será o responsável para executar a SP de escrita e manter a tabela atualizada com o nome do servidor, esse JOB será executado a cada 3 segundos.

SP de leitura, será utilizada pelas aplicações para saber qual servidor de leitura deve ser utilizado.

Existirão duas sequencias acontecendo simultaneamente, uma iniciada pelo JOB e outra pela aplicação.

Pelo JOB:

1. A cada 3 segundos o JOB executa a SP de escrita.

2. A SP de escrita consulta todos os servidores secundários para identificar o melhor servidor no momento.

3. A SP de escrita atualiza a tabela com o nome do servidor.

Pela Aplicação:

1. A aplicação conecta no servidor primário (escrita) e executa a SP de leitura.

2. A SP de leitura consulta a tabela e retorna o nome do servidor secundário (leitura).

3. A aplicação conecta no servidor secundário (leitura) e executa suas consultas.

Considerações finais:

No caso de configurações do AlwaysOn com failover, é necessário criar os linked server nos servidores secundários e o JOB, onde o JOB ficará desabilitado, sendo habilitado quando esse for o primário.

Os códigos para criação das tabelas, JOB, SP e linked server podem ser baixados em: http://gallery.technet.microsoft.com/Balanceamento-de-carga-SQL-f164bd82

Publicado em Alta Disponibilidade, Performance, TechNet, Transact SQL, Virtual PASS BR and tagged , . Bookmark permalink.

Uma resposta para "Balanceamento de carga – SQL Server"

Escreva um comentário...

*