Balanceamento de carga¶
Quando o limite de processamento de uma instância do Servidor de Reconhecimento de 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 de reconhecimento.
Este manual considera uma topologia bastante simples para criar um cluster de Reconhecimento de Fala, utilizando o Apache HTTP Server como balanceador de carga. A figura abaixo ilustra essa topologia. Ela pode ser alterada, utilizando esquemas mais complexos de balanceamento, a fim de prover alta disponibilidade, eliminando pontos de falha (single point of failure).
Requisitos de instalação¶
A instalação do Apache HTTP Server em uma máquina dedicada para fazer o balanceamento de carga requer 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 Mbps
Software:
Linux Red Hat 7.2 ou CentOS 7.2
Pacotes do Linux:
- Group «Development Tools»
- OpenSSL-Devel
- PCRE-Devel (Perl-Compatible Regular Expressions Library)
- APR e APR-Util
- Apache HTTP Server 2.4.5 ou superior
Instalação¶
Abra o terminal e instale as dependências.
$ sudo yum groupinstall "Development Tools" $ sudo yum install openssl-devel $ sudo yum install pcre-devel
Baixe o Apache e descompacte o arquivo.
$ tar -zxvf httpd-2.4.<V>.tar.gz -C /tmp/
Baixe o Apache Portable Runtime – APR e APR-Util – e descompacte os arquivos junto aos arquivos fonte do Apache.
$ tar -zxvf apr-1.5.<V>.tar.gz -C /tmp/ $ tar -zxvf apr-util-1.5.<V>.tar.gz -C /tmp/ $ cd /tmp/ $ mv apr-1.5.<V> /tmp/httpd-2.4.<V>/srclib/apr $ mv apr-util-1.5.<V> /tmp/httpd-2.4.<V>/srclib/apr-util
Compile o código fonte com suporte a SSL.
$ cd /tmp/httpd-2.4.<V> $ ./configure --enable-so --enable-ssl --with-included-apr $ make $ sudo make install
Adicione o diretório bin à variável PATH.
$ echo 'export PATH=$PATH:/usr/local/apache2/bin' > /etc/profile.d/httpd.sh
Execute o arquivo recém criado, para que os binários do Apache estejam disponíveis sem necessidade de referência ao caminho absoluto.
$ chmod +x /etc/profile.d/httpd.sh $ . /etc/profile
Configuração¶
Acesso¶
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://asrcluster> BalancerMember ws://<IP do host1>:8025 BalancerMember ws://<IP do host2>:8025 ProxySet lbmethod=bybusyness </Proxy> ProxyPass /asr-server balancer://asrcluster/asr-server/asr <Location "/asr-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:
$ 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/
Certificado auto-assinado em clientes Java¶
Truststore, obrigatória para clientes Java:
$ keytool -import -trustcacerts -file /usr/local/apache2/conf/server.crt -alias CPqD_ASR -keystore /tmp/cpqd-asr.truststore
Keystore, opcional para clientes Java:
$ keytool -import -alias CPqD_ASR -file /tmp/server.crt -keystore /tmp/client.keystore
Depois, mova os arquivos keystore e truststore para um diretório mais adequado para seu cliente Java e indique-os ao cliente da forma adequada.
Autenticação com SSL (opcional)¶
Para habilitar a Autenticação Básica de usuário (conexão WSS), adicione o trecho abaixo ao final do arquivo /usr/local/apache2/conf/extra/httpd-ssl.conf dentro da tag <VirtualHost>:
<Location "/asr-server">
AuthType Basic
AuthName "CPqD ASR"
AuthUserFile "/usr/local/apache2/conf/htpasswd/.htpasswd"
Require valid-user
</Location>
Nota
A definição das credenciais de acesso é feita pelo arquivo /usr/local/apache2/conf/htpasswd/.htpasswd.
Para adicionar um novo usuário no arquivo de credenciais, utilize o comando:
$ sudo /usr/local/apache2/bin/htpasswd -b /usr/local/apache2/conf/htpasswd/.htpasswd <usuário> <senha>
Caso o arquivo não exista, ele pode ser criado com os comandos abaixo:
$ sudo mkdir -p /usr/local/apache2/conf/htpasswd
$ sudo touch /usr/local/apache2/conf/htpasswd/.htpasswd
Autenticação sem SSL (opcional)¶
Caso se deseje incluir autenticação de usuário sem o uso de SSL, no final do arquivo /usr/local/apache2/conf/httpd.conf, inclua o seguinte trecho:
<Location "/asr-server">
AuthType Basic
AuthName "CPqD ASR"
AuthUserFile "/usr/local/apache2/conf/htpasswd/.htpasswd"
Require valid-user
</Location>
A inclusão de novos usuários se dá por meio do procedimento descrito no passo 6.
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):
ws:<IP_Balanceador>/asr-server
Para configuração com criptografia (porta padrão é a 443):
wss:<IP_Balanceador>/asr-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>/asr-balancer