SUP:ServidorJava

De Wiki Unioeste NTI
Edição feita às 10h47min de 2 de agosto de 2018 por Marcio.veronez (disc | contribs)
Ir para: navegação, pesquisa

Tabela de conteúdo

Diagrama da Arquitetura Atual

Servidores Wildfly300517.png

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)

Wildfly (descontinuado)

Instalação Master

  • copiar a pasta dezipada do Wildfly para /usr/local/wildfly
  • alterar o arquivo /usr/local/wildfly/domain/configuration/host.xml:
    • trocar o 127.0.0.1 para o IP do servidor, senão não será possível acessar o console de gerenciamento a partir de outra máquina:
<interface name="management">
   <inet-address value="${jboss.bind.address.management:200.201.88.174}"/>
</interface>
  • alterar o arquivo de configuração de inicialização /usr/local/wildfly/docs/contrib/scripts/init.d/wildfly.conf, setando as variáveis no início do arquivo, conforme segue:
 JBOSS_HOME="/usr/local/wildfly"  
 JBOSS_USER=root
 JBOSS_MODE=domain
  • subir o serviço domain, utilizando o comando:
/usr/local/wildfly/docs/contrib/scripts/init.d/wildfly-init-debian.sh start
  • adicionar novo usuário de gerenciamento, executando:
/usr/local/wildfly/bin/./add-user.sh
  • adicionar novo usuário de aplicação, para que os slaves possam conectar no master

Criando usuário para que o SLAVE se conecte no MASTER

  • para que um servidor SLAVE consiga conectar no master, ele precisar se autenticar, utilizando um usuário e senha; esse usuário e senha deve ser previamente criado no servidor MASTER
  • utilize o comando add-user.sh
    • escolha a opção a) management user:
    • lembrar de responder YES quando perguntado se o usuário é para conexão de outro AS neste master, pois será gerada uma chave criptografada, que deverá ser anotada para ser usada posteriormente na configuração do SLAVE
    • para cada novo servidor SLAVE, deve ser gerada uma nova chave de conexão, sendo que o identificador do usuário deverá ser igual ao nome do servidor; por exemplo, se o novo servidor slave, no arquivo host-slave.xml, for configurado o atributo "name" com o valor "netsr-java08", deve-se criar um usuário cujo login é "netsr-java-8"
    • é importante notar que este usuário identifica a máquina e não as instâncias slaves que rodam na máquina
      • p. ex., uma máquina cujo nome é "netsr-java08", pode ter duas instâncias slaves rodando, cujos nomes são server-one e server-two
      • neste caso, precisamos criar um único usuário no master, para que a máquina possa se conectar e registrar as suas duas instâncias

Instalação Slave

  • copiar a pasta dezipada do Wildfly para /usr/local/wildfly
  • alterar o arquivo de configuração de inicialização /usr/local/wildfly/docs/contrib/scripts/init.d/wildfly.conf, setando as variáveis no início do arquivo, conforme segue:
 JBOSS_HOME="/usr/local/wildfly"
 JBOSS_USER=root
 JBOSS_MODE=domain
 JBOSS_HOST_CONFIG="host-slave.xml"
  • abrir o arquivo /usr/local/wildfly/domain/configuration/host-slave.xml
    • alterar ou inserir o atributo name (<host name="slave1" ...), trocando o "slave1" pelo nome da máquina (p. ex, netsr-java07)
    • também neste arquivo, procurar pela tag <secret> (deve estar logo no início do arquivo) e substituir o valor do atribuito "value" pela chave gerada na instalação do master
    • substituir, logo no final do arquivo, as tags:
1. Tag que indica o IP do servidor master:
   <domain-controller>
       <remote security-realm="ManagementRealm">
           <discovery-options>
               <static-discovery name="primary" protocol="${jboss.domain.master.protocol:remote}" host="200.201.88.182" port="${jboss.domain.master.port:9999}"/>
           </discovery-options>
       </remote>
   </domain-controller>
2. Tag que indica o IP do próprio servidor:
   <interface name="public">
       <inet-address value="200.201.88.175" (substituir aqui pelo IP do próprio servidor)
   </interface>
3. Tag que indica os parâmetros padrão da JVM (mudar limite máximo do Metaspace para 512m:
   <jvms>
       <jvm name="default">
           <heap size="64m" max-size="256m"/>
           <jvm-options>
               <option value="-server"/>
               <option value="-XX:MetaspaceSize=96m"/>
               <option value="-XX:MaxMetaspaceSize=512m"/>
           </jvm-options>
       </jvm>
   </jvms>
4. Editar o arquivo /usr/local/wildfly/bin/domain.conf, e alterar os parâmetros padrão da jvm para os processos de host controller e process controller:
   JAVA_OPTS="-Xms64m -Xmx512m -XX:MaxMetaspaceSize=512m -Djava.net.preferIPv4Stack=true"
  • subir o serviço domain, utilizando o comando /usr/local/wildfly/bin/init.d/wildfly-init-debian.sh start

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
  1. 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
  2. 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
  3. 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)
  4. 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:

Parar o gerenciador de hosts (controller)

  1. acesse o host que deseja parar, vá na pasta /usr/local/wildfly/bin
  2. execute o comando para conectar no gerenciador: ./jboss-cli.sh
  3. 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
  4. 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
  5. pode-se dar TAB para completar os comandos

Rodar Wildfly como um serviço (colocar no init.d)

  1. alterar o arquivo /usr/local/wildfly/docs/contrib/scripts/init.d/wildfly.conf, alterando as variáveis desejadas (conforme descrito acima)
  2. 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
  3. 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
  4. 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

  1. este socket é um alias para o balanceador, ao qual as instâncias de um grupo irão se conectar
  2. acesse a guia Home
  3. acesse o item socket-binding-group que se quer alterar (ha-sockets, p. ex.)
  4. expanda o item remote-destination-outbound-socket-binding
  5. clique no botão ADD para adicionar um novo item
  6. preenche com um nome (p. ex., server1), host e porta
  7. este item (server1) será utilizado para configurar o item mod_cluster

Configurar o mod_cluster

  1. acesse a guia Home
  2. acesse o item profile e selecione o item que se quer alterar (ha, p. ex.)
  3. expanda o item subsystem -> modcluster -> mod-cluster-config -> configuration
  4. 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

http://www.symbiotics.co.za/blog/knowledge-share-2/post/configure-apache-with-mod-cluster-load-balancer-on-ubuntu-2

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)

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

Fonte: http://stackoverflow.com/questions/9619030/resolving-javax-net-ssl-sslhandshakeexception-sun-security-validator-validatore


Links úteis

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
Ferramentas pessoais
Espaços nominais
Variantes
Ações
Navegação
Ferramentas