Mudanças entre as edições de "SUP:ServidorJava"
Linha 1: | Linha 1: | ||
+ | == Diagrama da Arquitetura Atual == | ||
+ | [[Arquivo:Servidores Wildfly300517.png]] | ||
+ | |||
+ | ===Arquitetura Atual em texto=== | ||
+ | <pre> | ||
+ | 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 | ||
+ | -------------------------------------------------------------------------- | ||
+ | </pre> | ||
+ | |||
+ | == Endereços de Gereciamento do mod_cluster == | ||
+ | http://server1.midas.unioeste.br:8081/mod_cluster_manager <br /> | ||
+ | http://server2.midas.unioeste.br/mod_cluster_manager | ||
+ | |||
+ | == Endereço de Gereciamento do Wildfly == | ||
+ | http://200.201.88.182:9990/console | ||
+ | |||
+ | == Endereço de Gerenciamento do Tomcat WS == | ||
+ | https://ws.midas.unioeste.br/manager | ||
+ | (servidor físico 170 foi 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 | ||
+ | # 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> | ||
+ | |||
+ | == 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: <pre>RedirectMatch ^/pwmunioeste/(.*) https://midas.unioeste.br/pwmunioeste/$1</pre> | ||
+ | : Página para testar site https: https://www.ssllabs.com | ||
+ | |||
+ | == 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 | ||
+ | |||
+ | |||
+ | == 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= | = Links úteis= | ||
* Configurar monitoramento do Tomcat 7 com JMX [http://www.i-net-design.com/2011/07/15/monitoring-tomcat-7-with-jmc/] | * Configurar monitoramento do Tomcat 7 com JMX [http://www.i-net-design.com/2011/07/15/monitoring-tomcat-7-with-jmc/] |
Edição das 11h35min de 30 de maio de 2017
Índice
- 1 Diagrama da Arquitetura Atual
- 2 Endereços de Gereciamento do mod_cluster
- 3 Endereço de Gereciamento do Wildfly
- 4 Endereço de Gerenciamento do Tomcat WS
- 5 Instalação Master
- 6 Criando usuário para que o SLAVE se conecte no MASTER
- 7 Instalação Slave
- 8 Administração dos Servidores
- 9 Instalação do Modcluster
- 10 Resolver problema de "Muitos arquivos abertos" (Too many open files)
- 11 Gerenciamento dos servidores Linux
- 12 Configuração de SSL no Apache
- 13 Compilar módulos do mod_cluster
- 14 Métricas de balanceamento disponíveis no mod_cluster
- 15 Configuração para conexão com o AD usando SSL
- 16 Adicionar certificado SSL no Java (Para servidor fazer requisições HTTPS)
- 17 Links úteis
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 do mod_cluster
http://server1.midas.unioeste.br:8081/mod_cluster_manager
http://server2.midas.unioeste.br/mod_cluster_manager
Endereço de Gereciamento do Wildfly
http://200.201.88.182:9990/console
Endereço de Gerenciamento do Tomcat WS
https://ws.midas.unioeste.br/manager (servidor físico 170 foi 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
- 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>
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
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
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/