Project HA

1,532 views

Published on

HA to WWW with Poun/Keepalived/Liferay/MySQL/Apache and Heartbeat.

Published in: Self Improvement
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,532
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Project HA

  1. 1. WWW COM ALTA DISPONIBILIDADE
  2. 2. PROGRAMAS UTILIZADOS <ul><li>Keepalived
  3. 3. Pound
  4. 4. HeartBeat
  5. 5. Apache
  6. 6. MySQL
  7. 7. CentOS
  8. 8. Monit
  9. 9. Liferay </li></ul>
  10. 10. O que é o Keepalived? <ul><li>Keepalived implementa uma estrutura de checagem em três camadas da família OSI: Layer3, Layer4 & Layer5/7. Esse quadro dá ao daemon a capacidade de verificar um pool de servidores. Quando um servidor do pool de servidores LVS cai, keepalived informa o kernel do Linux através de uma chamada setsockopt para remover este servidor do pool. Além disso keepalived implementa uma pilha VRRPv2 independente para lidar com falhas no direcionador. </li></ul>
  11. 11. O que é o Pound? <ul><li>O programa Pound é um proxy reverso, balanceador de carga e HTTPS front-end para o servidor Web (s). Pound foi desenvolvido para permitir distribuir a carga entre diversos servidores Web. Pound é distribuído sob a Licença GPL - que é livre para usar, copiar e distribuir. </li></ul>
  12. 12. O que é o Heartbeat? <ul><li>Heartbeat é um daemon que fornece infra-estrutura de cluster (comunicação e participação) de serviços aos seus clientes. Isso permite aos clientes saber sobre a presença (ou desaparecimento!) dos processos de pares em outras máquinas e facilmente trocar mensagens com eles. </li></ul>
  13. 13. O que é o Apache? <ul><li>O Apache HTTP Server, comumente referido como o Apache, é um software de servidor web notável. Apache foi a primeira alternativa viável para o servidor web Netscape Communications Corporation, e desde então tem evoluído para rivalizar com outros servidores web baseados em Unix em termos de funcionalidade e desempenho.
  14. 14. O Apache é desenvolvido e mantido por uma comunidade aberta de programadores sob o controle da Apache Software Foundation. </li></ul>
  15. 15. O que é o MySQL? <ul><li>O MySQL é o software de banco de dados open source mais popular do mundo, com mais de 100 milhões de cópias de seu software baixado ou distribuídos em toda sua história. Com a sua superior velocidade, confiabilidade e facilidade de uso, o MySQL se tornou a opção preferencial para Web, Web 2.0, SaaS, ISV, empresas de telecomunicações e de futuro gerentes de TI, pois elimina os maiores problemas associados com a manutenção de inatividade e administração para as modernas aplicações online. </li></ul>
  16. 16. O que é o CentOS? <ul><li>CentOS é uma distribuição empresarial Linux derivada de fontes fornecidos gratuitamente ao público pela RedHat Linux. CentOS é plenamente compatível com a política de redistribuição de fornecedores e pretende ter 100% de compatibilidade binária. CentOS muda principalmente pacotes para remover o logo do fornecedor e arte. CentOS é gratuito. </li></ul>
  17. 17. O que é o Monit? <ul><li>Monit é um utilitário de código aberto para gerenciamento e monitoramento de processos, arquivos, diretórios e arquivos em um sistema UNIX. Monit conduz automáticamente à manutenção e reparação de serviços e pode executar ações significativas em casuais situações de erro. </li></ul>
  18. 18. O que é o Liferay? <ul><li>Liferay oferece soluções open source para portais corporativos, publicação de conteúdo e colaboração. </li></ul>
  19. 19. Cenário Proposto
  20. 20. Adicionando repositórios no CentOS <ul>~# wget http://download.fedora.redhat.com/pub/epel/RPM-GPG-KEY-EPEL ~# rpm --import RPM-GPG-KEY-EPEL ~# rm -f RPM-GPG-KEY-EPEL ~# nano /etc/yum.repos.d/epel.repo <li>Coloque o conteúdo abaixo, salve e saia.
  21. 21. [epel]
  22. 22. name=EPEL RPM Repository for Red Hat Enterprise Linux
  23. 23. baseurl=http://download.fedora.redhat.com/pub/epel/$releasever/$basearch/
  24. 24. gpgcheck=1
  25. 25. enabled=1 </li></ul>
  26. 26. Atualização do CentOS <ul>~# yum update ~# yum groupinstall &quot;Development Libraries&quot; ~# yum groupinstall &quot;Development Tools&quot; </ul>
  27. 27. Instalação e Configuração do pound <ul>~# yum install pound ~# mv /etc/pound.cfg /etc/pound.cfg_orig ~# nano /etc/pound.cfg <ul><li>Coloque o conteúdo abaixo, salve e saia. </li></ul></ul>
  28. 28. Instalação e Configuração do pound <ul><ul><ul><ul><ul><ul><ul><ul><li>ListenHTTP
  29. 29. Address 0.0.0.0
  30. 30. Port 80
  31. 31. End
  32. 32. Service
  33. 33. BackEnd
  34. 34. Address 10.1.1.1
  35. 35. Port 80
  36. 36. End
  37. 37. BackEnd
  38. 38. Address 10.1.1.2
  39. 39. Port 80
  40. 40. End
  41. 41. BackEnd
  42. 42. Address 10.1.1.3
  43. 43. Port 80
  44. 44. End
  45. 45. End </li></ul></ul></ul></ul></ul></ul></ul></ul>
  46. 46. IMPORTANTE - Pound <ul>Dica Linux : Algumas pessoas utilizam várias soluções Pound redundante que requerem instâncias Pound em máquinas separadas para utilizar o mesmo endereço. (Nosso caso) A configuração padrão do Linux não permite que um programa faça bind () para endereços não-locais e isso pode nos causar um problema. Solução : adicionar echo 1 > /proc/sys/net/ipv4/ip_nonlocal_bind no seu script de inicialização ou simplesmente colocar net.ipv4.ip_nonlocal_bind = 1 em /etc/sysctl.conf </ul>
  47. 47. Instalação e Configuração do pound <ul>~# chkconfig --level 235 pound on ~# service pound start Estas configurações foram feitas nas máquinas poundA e PoundB que respectivamente contêm os ips 200.1.1.2/24 e 200.1.1.3/24 o IP 200.1.1.1/24 aparecerá quando configurarmos o KeepAlived no próximo slide. </ul>
  48. 48. Instalação e Configuração do KeepAlived <ul>~# wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz ~# yum install kernel-headers kernel-devel -y ~# tar xzvf keepalived-1.2.2.tar.gz && cd keepalived-1.2.2 ~# ./configure --with-kernel-dir=/lib/modules/$(uname -r)/build ~# make && make install ~# cd /etc/sysconfig && ln -s /usr/local/etc/sysconfig/keepalived . ~# cd /etc/rc3.d/ && ln -s /usr/local/etc/rc.d/init.d/keepalived S100keepalived ~# cd /etc/init.d/ && ln -s /usr/local/etc/rc.d/init.d/keepalived . ~# cd /usr/local/etc/keepalived && mv keepalived.conf keepalived.conf_orig </ul>
  49. 49. Instalação e Configuração do KeepAlived <ul>~# nano /usr/local/etc/keepalived/keepalived.conf <li>Coloque o conteúdo abaixo em keepalived.conf </li><ul><ul><ul><ul><ul><li># Keepalived em PoundA :
  50. 50. vrrp_instance VI_1 {
  51. 51. interface eth0
  52. 52. state MASTER
  53. 53. virtual_router_id 51
  54. 54. priority 101
  55. 55. authentication {
  56. 56. auth_type PASS
  57. 57. auth_pass sua-senha-aqui
  58. 58. }
  59. 59. virtual_ipaddress {
  60. 60. 200.1.1.1/24 dev eth1
  61. 61. }
  62. 62. } </li></ul></ul></ul></ul></ul></ul>
  63. 63. Instalação e Configuração do KeepAlived <ul>~# nano /usr/local/etc/keepalived/keepalived.conf <li>Coloque o conteúdo abaixo em keepalived.conf </li><ul><ul><ul><ul><ul><li># Keepalived em PoundB :
  64. 64. vrrp_instance VI_1 {
  65. 65. interface eth0
  66. 66. state MASTER
  67. 67. virtual_router_id 51
  68. 68. priority 100
  69. 69. authentication {
  70. 70. auth_type PASS
  71. 71. auth_pass sua-senha-aqui
  72. 72. }
  73. 73. virtual_ipaddress {
  74. 74. 200.1.1.1/24 dev eth1
  75. 75. }
  76. 76. } </li></ul></ul></ul></ul></ul></ul>
  77. 77. Instalação e Configuração do KeepAlived <ul><li>Faça o seguinte nas duas Máquinas pounds:
  78. 78. ~# service keepalived start
  79. 79. ~# service pound restart
  80. 80. Na máquina master (poundA) verifique o IP:
  81. 81. ~# ip addr show eth1 </li></ul>
  82. 82. Instalação e Configuração do KeepAlived <ul><li>Depois disso você pode monitorar a mudança do IP 200.1.1.1/24 para o poundB e vice e versa caso um dos dois caia com:
  83. 83. ~# tail -f /var/log/messages
  84. 84. O pound reponde as requisições HTTP no IP virtual 200.1.1.1/24 e este repassa para os Apaches logo atrás dele. Vamos agora para os Backends =) </li></ul>
  85. 85. Instalação e configuração do Apache <ul>~# yum install httpd -y <li>Colocar em /etc/httpd/conf/httpd.conf
  86. 86. LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
  87. 87. E o seguinte conteúdo em /etc/httpd/conf.d/3.conf </li></ul>
  88. 88. Instalação e configuração do Apache <VirtualHost *:80> ServerAdmin webmaster@dominio.com DocumentRoot /var/www/ <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Location /balancer-manager> SetHandler balancer-manager Order Deny,Allow Deny from all Allow from 10.1.1 </Location> ProxyPass /balancer-manager !
  89. 89. Instalação e configuração do Apache <Location /server-status> SetHandler server-status Order Deny,Allow Deny from all Allow from 10.1.1 </Location> ProxyPass /server-status ! <Location /server-info> SetHandler server-info Order Deny,Allow Deny from all Allow from 10.1.1 </Location> ProxyPass /server-info !
  90. 90. Instalação e configuração do Apache <Location /ldirector.html> Order Deny,Allow Deny from all Allow from 10.1 </Location> ProxyPass /ldirector.html ! <Proxy balancer://liferay-cluster> # cluster member 1 BalancerMember ajp:// 10.1.1.4 :8009 route=liferay-inst1 # cluster member 2 BalancerMember ajp:// 10.1.1.5 :8009 route=liferay-inst2 # cluster member N BalancerMember ajp:// 10.1.1.N :8009 route=liferay-instN </Proxy> ProxyPass / balancer://liferay-cluster/ lbmethod=byrequests stickysession=JSESSIONID </VirtualHost>
  91. 91. Instalação e configuração do Apache <ul><li>Inicie o Apache
  92. 92. ~# service httpd start
  93. 93. ~# chkconfig –level 235 httpd on
  94. 94. Pronto, vamos configurar agora o Monit para cuidar do nosso Apache e reiniciá-lo sem nossa intervenção. </li></ul>
  95. 95. Instalação e configuração do Monit <ul>~# yum install monit -y ~# nano /etc/monit.d/monitrc <li>Coloque o seguinte conteúdo neste aquivo: </li></ul>
  96. 96. Instalação e configuração do Monit <ul><ul><ul><ul><ul><li>set daemon 60
  97. 97. set logfile /var/log/monit.log
  98. 98. set mailserver localhost
  99. 99. set mail-format { from: monit@localhost }
  100. 100. set alert root@localhost
  101. 101. set httpd port 2812 and
  102. 102. SSL DISABLE
  103. 103. allow admin: sua-senha
  104. 104. check process httpd with pidfile /var/run/httpd.pid
  105. 105. group www
  106. 106. start program = &quot;/etc/init.d/httpd start&quot;
  107. 107. stop program = &quot;/etc/init.d/httpd stop&quot;
  108. 108. if failed host 127.0.0.1 port 80 protocol http then restart
  109. 109. if cpu is greater than 60% for 2 cycles then alert
  110. 110. if cpu > 80% for 5 cycles then restart
  111. 111. if totalmem > 500 MB for 5 cycles then restart
  112. 112. if children > 250 then restart
  113. 113. if loadavg(5min) greater than 10 for 8 cycles then stop
  114. 114. if 3 restarts within 5 cycles then timeout </li></ul></ul></ul></ul></ul>
  115. 115. Instalação e configuração do Monit <ul>~# chmod 700 /etc/monit.d/monitrc ~# service monit start ~# monit -c /etc/monit.d/monitrc status ~# monit -c /etc/monit.d/monitrc summary ~# chkconfig --level 235 monit on <li>Vamos agora para o Liferay ;) </li></ul>
  116. 116. Instalação e configuração básica do Liferay <ul>~# wget liferay-portal-tomcat-6.0.5.zip ~# unzip liferay-portal-tomcat-6.0.5.zip ~# mv liferay-portal-tomcat-6.0.5 /opt/ <li>Instale o Java. Pode ser baixado aqui
  117. 117. ~# chmod +x jdk-6u23-linux-i586-rpm.bin
  118. 118. ~# ./jdk-6u23-linux-i586-rpm.bin
  119. 119. ~# ln -s /usr/java/latest /usr/java/jdk1.6.0_23
  120. 120. ~# echo JAVA_HOME=&quot;/usr/java/latest&quot; >> /etc/profile
  121. 121. ~# echo &quot;export JAVA_HOME&quot; >> /etc/profile && source /etc/profile </li></ul>
  122. 122. Instalação e configuração básica do Liferay <ul><li>Edite o arquivo ROOT.xml e adicione a configuração do Banco de Dados. Aqui é usado o MySQL: </li><ul><ul><ul><li><Context...>
  123. 123. <Resource
  124. 124. name=&quot;jdbc/LiferayPool&quot;
  125. 125. auth=&quot;Container&quot;
  126. 126. type=&quot;javax.sql.DataSource&quot;
  127. 127. driverClassName=&quot;com.mysql.jdbc.Driver
  128. 128. url=&quot;jdbc:mysql://10.1.1.9/lportal? useUnicode=true&characterEncoding=UTF-8&quot;
  129. 129. username=&quot;root&quot;
  130. 130. password=&quot; sua-senha &quot;
  131. 131. />
  132. 132. </Context> </li></ul></ul></ul></ul>
  133. 133. Instalação e configuração básica do Liferay <ul><li>Coloque o abaixo no arquivo portal-ext.properties :
  134. 134. ~# nano /opt/liferay-portal-6.0.5/tomcat-6.0.5/webapps/ROOT/WEB-INF/classes/ portal-ext.properties </li><ul><ul><li>web.server.http.port=80
  135. 135. web.server.https.port=-1
  136. 136. web.server.host=www.dominio.com.br # => 200.1.1.1/24 </li></ul></ul><li>Isso indica para o Liferay que existe um sistema de proxy </li></ul>
  137. 137. Instalação e configuração básica do Liferay <ul><li>Os dois arquivos mais importantes são o ROOT.xml e portal-ext.properties onde você pode colocar suas opções e assim customizar seu portal. Você pode utilizar o Painel de Controle para isso, fica a seu critério.
  138. 138. O Liferay pode ser inicializado assim: /opt/liferay-portal-6.0.5/tomcat-6.0.5/bin/ startup.sh
  139. 139. Ainda não vamos iniciar o Liferay porque precisamos configurar o banco. Vamos ao MySQL. =) </li></ul>
  140. 140. Instalação e configuração básica do MySQL <ul>~# yum install mysql ~# chkconfig --level 235 mysqld on ~# service mysqld start ~# mysqladmin -u root password sua-senha ~# mysql -u root -p sua-senha mysql> create database lportal character set utf8; mysql> flush privileges; mysql> quit; </ul>
  141. 141. Instalação e configuração básica do MySQL <ul><li>As configurações são as mesmas para a máquina 10.1.1.8/24 (Slave).
  142. 142. Lembrando que a máquina master fica com o IP 10.1.1.7/24 e a Slave com 10.1.1.8/24. O IP 10.1.1.9/24 não se configura! O Heartbeat que o cria e o gerencia daí em diante.
  143. 143. Vamos ao tópico sobre instalação e configuração do Heartbeat. </li></ul>
  144. 144. Instalação e configuração do Heartbeat <ul>~# yum install heartbeat ~# rpm -ql heartbeat ~# rpm -qd heartbeat ~# nano /etc/ha.d/ha.cf <li>Coloque o seguinte conteúdo no ha.cf </li></ul>
  145. 145. Instalação e configuração do Heartbeat <ul><ul><ul><ul><li>logfile /var/log/ha-log
  146. 146. logfacility local0
  147. 147. keepalive 2
  148. 148. deadtime 50
  149. 149. warntime 30 ha.cf
  150. 150. udpport 694
  151. 151. ucast eth0 10.1.1.7
  152. 152. ucast eth0 10.1.1.8
  153. 153. auto_failback off
  154. 154. node mysql-master
  155. 155. node mysql-slave
  156. 156. ping 10.1.1.7 10.1.1.8 </li></ul></ul></ul></ul>
  157. 157. Instalação e configuração do Heartbeat <ul><li>Coloque o seguinte no /etc/ha.d/haresources :
  158. 158. mysql-master 10.1.1.9 mysql
  159. 159. Obs.: O conteúdo do haresources , ha.cf e authkeys é igual nas duas máquinas. E acima indico que mysql-master - 10.1.1.7/24 é o node mestre e 10.1.1.9 é o IP virtual. </li></ul>
  160. 160. Instalação e configuração do Heartbeat <ul>~# chmod 600 /etc/ha.d/authkeys ~# cat /etc/ha.d/authkeys auth 1 1 md5 sua-senha <li>Depois disso, inicie o heartbeat nas duas máquinas e olhe o log em /var/log/ha-log </li></ul>
  161. 161. Instalação e configuração do Heartbeat <ul><li>Iniciando o heartbeat
  162. 162. ~# service heartbeat start
  163. 163. ~# chkconfig –level 235 heartbeat on </li></ul>
  164. 164. Considerações Finais <ul><li>Finalmente inicie o Liferay. O IP Virtual do MySQL está configurado n o ROOT.xml. O heartbeat gerencia este IP e desta forma se o 10.1.1.7 cair o 10.1.1.8 assume. Isto tudo pelo IP 10.1.1.9, ou seja, o Liferay tem a impressão do banco sempre no “AR” e logo, o usuário da aplicação também. =)
  165. 165. Claro, pode haver problema com o heartbeat devido a latência de sua rede (tempo de resposta de um pacote). É essencial ter conhecimento de como funcionam os parâmetros do heartbeat. </li></ul>
  166. 166. Considerações Finais <ul><li>Por exemplo: </li><ul><ul><ul><li>keepalive 2
  167. 167. warntime 30
  168. 168. deadtime 50
  169. 169. initdead 90 </li></ul></ul></ul></ul>
  170. 170. Considerações Finais <ul><li>keepalive 2 significa o tempo que o heartbeat espera antes de se comunicar com o outro node.
  171. 171. warntime 30 significa o tempo que o heartbeat começa a colocar WARN no log e se preparar para algo.
  172. 172. deadtime 50 significa o tempo que o heartbeat entende que o outro node caiu mas não faz nada.
  173. 173. initdead 90 ao atingir este tempo (em segundos) o heartbeat começa a agir. </li></ul>
  174. 174. Considerações Finais <ul><li>Estes devem ser configurados de acordo com o funcionamento da rede. Outro parâmetro de suma importancia: auto_failback off/on. Este, vou deixar que você pesquise e descubra. =P
  175. 175. Resumindo:
  176. 176. A requisição HTTP chega no Pound que balanceia para os Apaches que balanceia para os Liferays que por sua vez faz a requisição ao banco, se necessário.
  177. 177. Have Fun! </li></ul>
  178. 178. Informações sobre mim <ul><li>Formado em Redes de Computadores e possuidor das certificações Cisco CCNA e Linux LPI-I. Adoro assuntos referentes a Sistemas Operacionais, Segurança de Redes e Alta Disponibilidade.
  179. 179. Marcus Vinicius Morais
  180. 180. blog e Site
  181. 181. Dúvidas e Sugestões são bem vindas
  182. 182. marcovvinicius @ gmail.com </li></ul>
  183. 183. Referências <ul><li>http://www.liferay.com
  184. 184. http://mmonit.com/monit
  185. 185. http://www.centos.org
  186. 186. http://www.linux-ha.org/wiki/Heartbeat
  187. 187. http://www.apsis.ch/pound
  188. 188. http://www.apache.org
  189. 189. http://www.keepalived.org </li></ul>

×