Balanceamento de carga para interface WebSocket/REST¶
Quando o limite de processamento de uma instância do servidor WebSocket/REST do CPqD Texto Fala é atingido e não é suficiente para atender a demanda das aplicações clientes, é necessário aumentar a capacidade do sistema, adicionando novas instâncias ao ambiente de execução. Com isso, é necessário utilizar um software para realizar a distribuição e balanceamento de carga das aplicações clientes entre as instâncias do servidor.
Este guia considera uma topologia bastante simples para criar um cluster de Síntese de Fala, utilizando o Apache HTTP Server como balanceador de carga. Ela pode ser alterada, utilizando esquemas mais complexos de balanceamento, a fim de prover alta disponibilidade, eliminando pontos de falha (single point of failure).
Nota
Este guia é apenas uma sugestão de configuração para uma arquitetura utilizando balanceamento de carga. O suporte ao produto do CPqD Texto Fala não contempla a configuração de balanceamento de carga, podendo ser contratada separadamente. Além disso, o CPqD não dá suporte para produtos de terceiros, como o Apache HTTP Server.
Requisitos¶
O Apache HTTP Server pode ser executado em uma máquina dedicada para fazer o balanceamento de carga com a seguinte configuração mínima:
- Hardware:
- 1 GB livres de RAM
- 100 MB livres de HD
- 2 vCPU’s @ 2.20 GHz
- Interface de rede 100 Mpbs
- Software:
- Linux Red Hat 7.2 ou CentOS 7.2
- Apache HTTP Server 2.4.5 (ou superior)
Configuração¶
Edite o arquivo de configuração
/usr/local/apache2/conf/httpd.conf
. Localize e descomente as linhas abaixo, para habilitar os respectivos módulos:LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule slotmem_shm_module modules/mod_slotmem_shm.so LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
Configure o cluster de balanceamento de carga, adicionando o trecho abaixo no final do arquivo
/usr/local/apache2/conf/httpd.conf
:<Proxy balancer://ttscluster> BalancerMember ws://<IP do host1>:9090 BalancerMember ws://<IP do host2>:9090 ProxySet lbmethod=byrequests </Proxy> ProxyPass /tts-server balancer://ttscluster <Location "/tts-balancer"> SetHandler balancer-manager </Location>
Criptografia SSL (opcional)¶
Caso seja necessário configurar uma conexão Websocket com criptografia SSL, descomente as seguintes linhas do arquivo /usr/local/apache2/conf/httpd.conf
:
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so LoadModule ssl_module modules/mod_ssl.so Include conf/extra/httpd-ssl.conf
Nota
A configuração padrão do SSL definida no arquivo httpd-ssl.conf
habilita a porta 443 para conexões seguras, utilizando os arquivos server.key
e server.crt
como certificados auto-assinados.
Para gerar um certificado auto-assinado, utilize a ferramenta OpenSSL e copie os arquivos gerados para o diretório do Apache HTTP Server:
$ openssl genrsa -des3 -out server.key 1024
$ openssl req -new -key server.key -out server.csr
$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
$ sudo cp server.key /usr/local/apache2/conf/
$ sudo cp server.crt /usr/local/apache2/conf/
Execução¶
Para iniciar o Apache HTTP Server:
$ sudo /usr/local/apache2/bin/apachectl -k start
Para parar o Apache HTTP Server:
$ sudo /usr/local/apache2/bin/apachectl -k stop
Endereçamento¶
O servidor balanceador de carga deve ser endereçado da seguinte forma:
- Endereço do servidor de balanceamento:
Para configuração sem criptografia (porta padrão é a 80):
http://<IP_Balanceador>/tts-server ws://<IP_Balanceador>/tts-serverPara configuração com criptografia (porta padrão é a 443):
https://<IP_Balanceador>/tts-server wss://<IP_Balanceador>/tts-server
Endereço da página web do monitor de balanceamento (porta padrão é a 80), que está mostrado na figura abaixo:
http://<IP_Balanceador>/tts-balancer