SUP:ServidorJava
Índice
- 1 Diagrama da Arquitetura Atual
- 2 Endereços de Gereciamento dos balanceadores
- 3 Endereço de Gerenciamento do Tomcat WS
- 4 Passos para instalação de uma instância Tomcat (Ubuntu 16)
- 5 Passos para configuração do balanceador Apache
- 6 Inclusão de novo servidor no sistema Deployer e no Balanceador
- 7 Configuração para conexão com o AD usando SSL
- 8 Resolver problema de "Muitos arquivos abertos" (Too many open files)
- 9 Gerenciamento dos servidores Linux
- 10 Configuração de SSL no Apache
- 11 Adicionar certificado SSL no Java (Para servidor fazer requisições HTTPS)
- 12 Links úteis
- 13 Rotacionar logs do Tomcat
Diagrama da Arquitetura Atual
Arquitetura Atual em texto
IP ALIAS ENDEREÇO PORTA SERVIÇO VERS SO -------------------------------------------------------------------------- 171 java1 (server1.midas.unioeste.br) 8080 Tomcat 8.5.15 16 8081 Tomcat 8.5.15 -------------------------------------------------------------------------- 172 java2 (cdn.unioeste.br) 80 apache 12 -------------------------------------------------------------------------- 174 java4 8080 Tomcat 8.5.15 16 8081 Tomcat 8.5.15 -------------------------------------------------------------------------- 175 java5 8080 Tomcat 8.5.15 16 8081 Tomcat 8.5.15 -------------------------------------------------------------------------- 182 java6 (server2.midas.unioeste.br) 8080 Tomcat 8.5.15 16 master 8081 Tomcat 8.5.15 16 -------------------------------------------------------------------------- 183 java7 8080 Tomcat 8.5.15 16 8081 Tomcat 8.5.15 -------------------------------------------------------------------------- 184 java8 (ws.midas.unioeste.br) 8080 Tomcat 8.5.5 12 --------------------------------------------------------------------------
Endereços de Gereciamento dos balanceadores
https://server1.midas.unioeste.br/balancer-manager/
https://server2.midas.unioeste.br/balancer-manager/
Endereço de Gerenciamento do Tomcat WS
https://ws.midas.unioeste.br/manager (servidor físico 170 foi descontinuado)
Passos para instalação de uma instância Tomcat (Ubuntu 16)
- baixar a última versão do Tomcat disponível no site http://tomcat.apache.org/ (atualmente usamos a 8.5.15)
- extrair para a pasta /usr/local/tomcat (ou para tomcat2 se for a segunda instância)
- alterar o dono da pasta para ROOT (chown root /usr/local/tomcat)
- acessar a pasta /usr/local/tomcat/conf e editar o arquivo server.conf
- caso seja a primeira instância, deve-se apenas alterar a seguinte tag, incluindo o atribuido jvmRoute: <Engine name="Catalina" defaultHost="localhost" jvmRoute="netsr-java01:server1"> (alterar conforme o nome da máquina)
- caso seja a segunda instância, deve-se incrementar o número das portas 8005, 8080, 8009, 8443, ficando 8006, 8081, 8010, 8444 e também alterar o atributo jvmRoute, para que seja "netsr-java01:server2"
- configurar no Ubuntu para que a instância possa ser iniciada ou parada com o comando systemctl
- criar o arquivo /etc/systemd/system/tomcat.service com o seguinte conteúdo:
[Unit] Description=Apache Tomcat Web Application Container After=network.target [Service] Type=forking Environment=JAVA_HOME=/usr/lib/jvm/java-8-oracle/jre Environment=CATALINA_PID=/usr/local/tomcat/temp/tomcat.pid Environment=CATALINA_HOME=/usr/local/tomcat Environment=CATALINA_BASE=/usr/local/tomcat Environment="$JAVA_OPTS -Xms512m -Xmx2500m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+CMSIncrementalMode -XX:+CMSIncrementalPacing -XX:CMSInitiatingOccupancyFraction=60 -Djava.net.preferIPv4Stack=true -Duser.language=pt -Duser.region=BR" ExecStart=/usr/local/tomcat/bin/startup.sh ExecStop=/usr/local/tomcat/bin/shutdown.sh User=root Group=root UMask=0007 RestartSec=10 Restart=always [Install] WantedBy=multi-user.target
- execute o comando para atualizar a lista de serviços no Ubuntu: systemctl daemon-reload
- feito isso, o serviço do Tomcat poderá ser iniciado ou parado através dos comandos: systemctl start/stop/restart tomcat
- por último, deve-se executar o seguinte comando para que o Tomcat seja iniciado na inicialização da máquina: sytemctl enable tomcat
- para a segunda instância, deve-se seguir os mesmos passos, criando o arquivo /etc/systemd/system/tomcat2.service, não esquecendo de trocar os caminhos (trocar tomcat por tomcat2); o nome do serviço será tomcat2
Passos para configuração do balanceador Apache
- instale o Apache (versão 2.4)
- instale os módulos proxy_balancer e proxy_ajp (comando a2enmod nome_do_modulo)
- edite o arquivo /etc/apache2/mods-enabled/proxy_balancer.conf e altere conforme segue, lembrando de colocar somente os servidores que farão parte deste balanceador:
<IfModule mod_proxy_balancer.c> # Balancer manager enables dynamic update of balancer members # (needs mod_status). Uncomment to enable. # <IfModule mod_status.c> <Location /balancer-manager> SetHandler balancer-manager Order Deny,Allow Deny from all Allow from all AuthType basic AuthName "My_auth_name" AuthUserFile "/etc/apache2/passwd/passwords" # Anonymous * Require valid-user </Location> </IfModule> <ifmodule mod_proxy_balancer.c> ProxyPass /balancer-manager ! ProxyPass / balancer://server/ stickysession=JSESSIONID|jsessionid ProxyPassReverse / balancer://server/ <Proxy balancer://server> BalancerMember ajp://200.201.88.175:8009 loadfactor=1 route=netsr-java05:server1 BalancerMember ajp://200.201.88.175:8010 loadfactor=1 route=netsr-java05:server2 BalancerMember ajp://200.201.88.174:8009 loadfactor=1 route=netsr-java04:server1 BalancerMember ajp://200.201.88.174:8010 loadfactor=1 route=netsr-java04:server2 BalancerMember ajp://200.201.88.182:8009 loadfactor=1 route=netsr-java06:server1 BalancerMember ajp://200.201.88.182:8010 loadfactor=1 route=netsr-java06:server2 </proxy> </ifmodule> </IfModule>
- para que a url de status do balanceador funcione (/balancer-manager), deve-se criar um usuário, conforme segue:
mkdir /etc/apache2/passwd /etc/apache2/passwd/passwords htpasswd -c /etc/apache2/passwd/passwords admin --insira a senha para o usuário admin, a qual será utilizada para acessar a url de gerenciamento
- após estas configurações, reinicie o apache com o comando systemctl restart apache2
- acesse a url de gerenciamento e verifique se os servidores balanceados estão listados (ex. de url: https://server1.midas.unioeste.br/balancer-manager)
- altere o arquivo /etc/apache2/mods-enabled/mpm_worker.conf para permitir que o Apache receba um grande número de conexões simultâneas:
<IfModule mpm_worker_module> StartServers 8 MinSpareThreads 256 MaxSpareThreads 512 ThreadLimit 1024 ThreadsPerChild 256 MaxRequestWorkers 4096 MaxConnectionsPerChild 256 </IfModule>
Inclusão de novo servidor no sistema Deployer e no Balanceador
- 1. adicionar o servidor ao grupo de servidores REPORT no Deployer
- - logar no servidor netsr-java01 (ou qualquer outro servidor, pois os arquivos são compartilhados)
- - editar o arquivo /usr/local/sistemas/deployer/servers.txt
- - adicionar uma linha para o novo servidor, no formato NOMEDOSERVER:PORTA;GRUPO (p. ex. netsr-java20.unioeste.br:8080;report
- 2. logar no sistema Deployer
- - verificar se o novo servidor já está aparecendo no grupo de servidores correto
- - clicar no botão DIF para listar as diferenças de apps deployados no servidor novo
- - clicar no botão SYNC para sincronizar as diferenças e deixar fazer com que o server novo tenha os mesmos apps
- - clicar no botão DIF para ver se ainda tem diferenças
- 3. adicionar o servidor ao grupo de servidores que faz parte do balanceador
- - logar no servidor balanceador (p. ex., se for no balanceador de REPORT, logar no server1.midas.unioeste.br)
- - editar o arquivo /etc/apache2/mods-enabled/proxy_balancer.conf
- - adicionar uma linha para o novo servidor na seção <Proxy> (p. ex. BalancerMember ajp://netsr-java20.unioeste.br:8009 loadfactor=1)
- - reiniciar o apache
- - logar no manager do balanceador e verificar se o novo servidor está sendo listado (p. ex. https://server1.midas.unioeste.br/balancer-manager)
Administração dos Servidores
- Após ter iniciado os servidores, eles podem ser configurados pela interface de administração do WildFly (http://200.201.88.174:9990/)
- Configurações básicas que devem ser feitas
- deixar todos os hosts no mesmo grupo (main-server-group), com profile HA, através do menu
- acesse a guia Domain -> Server Groups
- no grid, selecione o grupo de servidores que deseja alterar
- logo abaixo, na guia Attributes, clique em Edit e altere o atributo Profile para ha, e o atributo Socket Binding para ha-sockets
- alterar as configurações padrão de JVM para o grupo main-server-group, através do menu
- Domain -> Server Groups, selecionando no grid o item "main-server-group", e então acessando a guia JVM Configuration
- modifique os atributos de quantidade de memória e coloque no atributo "JVM Options": -server -Duser.language=pt -Duser.region=BR
- alterar as configurações para liberar o acesso público aos hosts, através do menu
- Domain-> Host Configuration -> Host (master e depois os slaves) -> Interfaces
- selecione no grid a interface public, edite e então altere a configuração da propriedade "Inet Address" para ${jboss.bind.address:200.201.88.174} (trocar o IP 174 pelo correto para cada servidor)
- no profile HA, não é necessário habilitar o protocolo AJP, mas, caso seja necessário, para que o balanceamento de carga possa funcionar, habilite, através do menu
- Configuration -> selecione o profile HA -> expanda na esquerda o item WEB -> selecione HTTP -> no grid, selecione default-server e clique em VIEW
- logo acima, nas abas, selecione AJP Listener
- clique em ADD para adicionar um novo listener e configure da seguinte forma:
- campo Name, preencha com default.ajp
- campo Socket binding, preencha com ajp
- clique em Finish
- mais informações em http://www.mastertheboss.com/jboss-server/jboss-cluster/configuring-modjk-with-wildflyjboss-as-7
Parar o gerenciador de hosts (controller)
- acesse o host que deseja parar, vá na pasta /usr/local/wildfly/bin
- execute o comando para conectar no gerenciador: ./jboss-cli.sh
- vai mostrar uma mensagem dizendo para digitar "connect", então digite (sem aspas) "connect 200.201.88.174:9999"; caso queira conectar em outro servidor, troque o IP deste comando
- após conectar, digite "shutdown --host=slave1" ou, se quiser parar o master, troque "slave1" por "master"; todas as instâncias do host serão paradas, inclusive o master e host controller
- pode-se dar TAB para completar os comandos
Rodar Wildfly como um serviço (colocar no init.d)
- alterar o arquivo /usr/local/wildfly/docs/contrib/scripts/init.d/wildfly.conf, alterando as variáveis desejadas (conforme descrito acima)
- criar um link simbólico para o arquivo de configuração: ln -s /usr/local/wildfly/docs/contrib/scripts/init.d/wildfly.conf /etc/default/wildfly
- criar um link simbólico para o script de inicialização: ln -s /usr/local/wildfly/docs/contrib/scripts/init.d/wildfly-init-debian.sh wildfly
- fazer o comando para registrar como serviço, ainda estando na pasta /usr/local/wildfly/bin/init.d/: update-rc.d wildfly defaults
Instalação do Modcluster
No servidor que será o balancer (p. ex. o 200.201.88.171):
- 1. instale o apache2:
apt-get install apache2
- 2. baixe a extensão do mod_cluster no link http://mod-cluster.jboss.org/
- 3. dezipe o arquivo e coloque o conteúdo na pasta /usr/lib/apache2/modules
- 4. crie os arquivos mod_cluster.conf e mod_cluster.load dentro da pasta /etc/apache2/mods-available
altere o conteúdo do arquivo mod_cluster.load:
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so LoadModule proxy_ajp_module /usr/lib/apache2/modules/mod_proxy_ajp.so LoadModule slotmem_module /usr/lib/apache2/modules/mod_slotmem.so LoadModule manager_module /usr/lib/apache2/modules/mod_manager.so LoadModule proxy_cluster_module /usr/lib/apache2/modules/mod_proxy_cluster.so LoadModule advertise_module /usr/lib/apache2/modules/mod_advertise.so
altere o conteúdo do arquivo mod_cluster.conf (trocar os IPs pelos da máquina onde se está configurando o mod_cluster):
Maxcontext 100 Maxnode 100 Maxhost 100 Listen 200.201.88.175:6666 <VirtualHost 200.201.88.175:6666> ServerName localhost <Location /> Order deny,allow Deny from all Allow from all </Location> KeepAliveTimeout 300 MaxKeepAliveRequests 0 KeepAlive On ManagerBalancerName wildflycluster ServerAdvertise On EnableMCPMReceive </VirtualHost> <VirtualHost *:80> <Directory /> Order deny,allow Allow from all </Directory> <Location /mod_cluster_manager> SetHandler mod_cluster-manager #Order deny,allow #Deny from all #Allow from all AuthType Basic AuthName "MCM" AuthUserFile /etc/modclusterpassword Require user admin </Location> </VirtualHost>
- 5. crie um usuário, que será utilizado para acessar a página de administração do balancer
htpasswd -c /etc/modclusterpassword admin
- 6. crie uma pasta "logs" dentro do diretório /etc/apache2
mkdir /etc/apache2/logs
- 7. reinicie o Apache
/etc/init.d/apache2 restart
- 8. habilite o módulo mod_cluster no Apache
a2enmod mod_cluster
- 9. reinicie novamente o Apache e faça um teste, acessando a página de gerenciamento do mod_cluster, no link http://200.201.88.171/mod_cluster_manager (utilize o usuário e senha criados anteriormente);
Configurar um socket binding para utilização no mod_cluster
- este socket é um alias para o balanceador, ao qual as instâncias de um grupo irão se conectar
- acesse a guia Home
- acesse o item socket-binding-group que se quer alterar (ha-sockets, p. ex.)
- expanda o item remote-destination-outbound-socket-binding
- clique no botão ADD para adicionar um novo item
- preenche com um nome (p. ex., server1), host e porta
- este item (server1) será utilizado para configurar o item mod_cluster
Configurar o mod_cluster
- acesse a guia Home
- acesse o item profile e selecione o item que se quer alterar (ha, p. ex.)
- expanda o item subsystem -> modcluster -> mod-cluster-config -> configuration
- clique em Edit e altere os itens:
- Balancer para wildflycluster
- Adversite para false
- Sticky session para true
- Sticky Session Force para false
- Sticky Session Remove para false
- Proxy Url para /
- Proxies para server1 (nome do socket definido no passo anterior)
- Feitas estas configurações, todo o grupo de servidores deverá aparecer na página de gerenciamento do mod_cluster automaticamente (http://200.201.88.171/mod_cluster_manager)
- O endereço desta página de administração é definido no arquivo mod_cluster.conf, na tag <Location>
Compilar módulos do mod_cluster
Métricas de balanceamento disponíveis no mod_cluster
http://docs.jboss.org/mod_cluster/1.2.0/html_single/#LoadMetric
Configuração para conexão com o AD usando SSL
- Os passos abaixo podem ser feitos na máquina local e o arquivo resultante utilizado servidor
- gerar certificado do servidor que é a Autoridade Certificadora (CA), no caso o NETSR-DMC01, com tipo 64; pode-se usar o próprio certificado que existe no navegador; gravar em uma pasta qualquer (p. ex. D:\\cert\\keystore.jks)
- gerar a keystore, importando o certificado recém gerado
- keytool -importcert -file D:\\cert\\certificado.cer -keystore D:\\cert\\keystore.jks
- gerar path completo da cadeia de CAs existente no certificado
- openssl s_client -host netsr-dmc02.unioeste.br -port 636 -prexit -showcerts
- copiar e colar o resultado (a partir do ---) em D:\\cert\\unioeste.pem
- importar este path completo para a keystore
- keytool -import -alias gca -file D:\\cert\\unioeste.pem -keystore D:\\cert\\keystore.jks
- copiar o arquivo keystore.jks para o servidor e utilizá-lo na conexão com o LDAP
Resolver problema de "Muitos arquivos abertos" (Too many open files)
- http://makandracards.com/zeroglosa/16231-muitos-arquivos-abertos-too-many-open-files
- https://developer.jboss.org/wiki/EvitandoAExceptionTooManyOpenFiles
Gerenciamento dos servidores Linux
- descobrir os maiores arquivos do servidor: du -h /var | sort -n -r | head -n 10
- verificar as portas que estão escutando no servidor:
- netstat -atn # For tcp
- netstat -aun # For udp
- netstat -atun # For both
- nos servidores que utilizam autenticação pelo AD, os usuários permitidos estão em um grupo; para saber qual o grupo, deve-se executar o comando:
- root@netsr-linuxweb10:/etc/pam.d# vi login.group.allowed
Configuração de SSL no Apache
- Adicionar regra no /etc/apache2/sites-enabled/000-default, na seção do VirtualHost *.80, para redirecionar do http para https
- Redirecionar quando vier uma url específica:
RedirectMatch ^/pwmunioeste/(.*) https://midas.unioeste.br/pwmunioeste/$1
- Página para testar site https: https://www.ssllabs.com
Adicionar certificado SSL no Java (Para servidor fazer requisições HTTPS)
O exemplo abaixo foi feito no servidor midas (170), adicionando o certificado dos correios para utilizar o serviço WSDL deles.
Entre na pasta que contém o arquivo de certificados cacerts
cd /usr/lib/jvm/java-8-oracle/jre/lib/security
Gere o arquivo de certificado .cer referente ao domínio que deseja incluir
echo -n | openssl s_client -connect apps.correios.com.br:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > correios.crt
Adicione o certificado gerado ao cacerts
keytool -import -v -trustcacerts -alias apps.correios.com.br -file correios.crt -keystore cacerts -keypass changeit -storepass changeit -noprompt
Remova o arquivo temporário do certificado que já foi incluído
rm correios.crt
Links úteis
- Configurar monitoramento do Tomcat 7 com JMX [1]
- Configuração do haproxy para visualizar estatísticas [2] ou http://serverfault.com/questions/169181/how-to-set-up-stats-for-haproxy
- Configurar Tomcat para que use gzip para comprimir o conteúdo http://viralpatel.net/blogs/enable-gzip-compression-in-tomcat/
- Configurar Tomcat para inicializar no boot: http://blogasisco.wordpress.com/2012/10/08/tomcat-no-linuxdebian-com-inicializacao-no-boot-do-sistema/
- Rotacionar log do Tomcat: http://java.dzone.com/articles/how-rotate-tomcat-catalinaout
- Instalar o Java no Ubuntu manualmente: http://www.wikihow.com/Install-Oracle-Java-JDK-on-Ubuntu-Linux
- Inicializar Tomcat como serviço no Ubuntu 16:
https://www.digitalocean.com/community/tutorials/how-to-install-apache-tomcat-8-on-ubuntu-16-04 https://devops.profitbricks.com/tutorials/how-to-install-and-configure-tomcat-8-on-ubuntu-1604/
Rotacionar logs do Tomcat
- criar o arquivo /etc/logrotate.d/tomcat e inserir o seguinte conteúdo:
/usr/local/tomcat/logs/catalina.out { copytruncate daily rotate 7 compress missingok size 10M }
- observar o caminho do log, para ter certeza de que está correto
- para testar, execute o seguinte comando: /usr/sbin/logrotate /etc/logrotate.conf
- se o servidor tiver outra instância de Tomcat, crie um novo arquivo com o nome tomcat2 e altere o caminho do log