{"id":248,"date":"2012-07-13T10:34:30","date_gmt":"2012-07-13T13:34:30","guid":{"rendered":"http:\/\/linuxrs.com.br\/?p=248"},"modified":"2012-07-13T10:34:30","modified_gmt":"2012-07-13T13:34:30","slug":"alta-disponibilidade-e-alta-performance-com-postgresql-9-0-pgpool-ii","status":"publish","type":"post","link":"https:\/\/blog.clusterweb.com.br\/?p=248","title":{"rendered":"Alta disponibilidade e alta performance com PostgreSQL 9.0 + Pgpool-II"},"content":{"rendered":"<p>Com o novo modelo de replica\u00e7\u00e3o do PostgreSQL, torna-se vi\u00e1vel a utiliza\u00e7\u00e3o de balanceamento de carga nas opera\u00e7\u00f5es de leitura, uma vez que os servidores de conting\u00eancia permanecem em modo <em>read-only<\/em> (Hot Standby). At\u00e9 a vers\u00e3o 8.4, o balanceamento de carga s\u00f3 era poss\u00edvel se utilizado juntamente com ferramentas de replica\u00e7\u00e3o de terceiros, por exemplo Slony.<\/p>\n<p>Apesar de ser uma replica\u00e7\u00e3o Master\/Slave ass\u00edncrona, a funcionalidade Streaming Replication do PostgreSQL 9.0 garante uma replica\u00e7\u00e3o consistente e com atraso praticamente impercept\u00edvel para o usu\u00e1rio final. Este comportamento viabiliza a utiliza\u00e7\u00e3o dos servidores de conting\u00eancia, denominados slaves, como fonte de dados atualizada, reduzindo a carga de leitura sobre o servidor master.<\/p>\n<p>A ferramenta Pgpool-II possui a funcionalidade de balanceamento de carga, que visa distribuir opera\u00e7\u00f5es de leitura entre os servidores envolvidos. Pensando na popularidade da replica\u00e7\u00e3o do PostgreSQL 9.0, o grupo de desenvolvedores do Pgpool-II acrescentou algumas funcionalidades espec\u00edficas de integra\u00e7\u00e3o com a nova vers\u00e3o do PostgreSQL, lan\u00e7ando a vers\u00e3o 3.0 do Pgpool-II.<\/p>\n<p>A seguir um cen\u00e1rio poss\u00edvel envolvendo PostgreSQL 9.0 e Pgpool-II 3.0:<\/p>\n<p><a href=\"http:\/\/blogs.dextra.com.br\/wp-content\/uploads\/2011\/01\/1.gif\"><img loading=\"lazy\" decoding=\"async\" title=\"1\" src=\"http:\/\/blogs.dextra.com.br\/wp-content\/uploads\/2011\/01\/1.gif\" alt=\"\" width=\"536\" height=\"663\" \/><\/a><\/p>\n<p lang=\"en-US\">Pgpool-II \u00e9 um software intermedi\u00e1rio(<em>middleware<\/em>) entre a aplica\u00e7\u00e3o(<em>frontend<\/em>) e o servidor PostgreSQL(<em>backend<\/em>). Age de forma transparente e suporta at\u00e9 128 n\u00f3s de replica\u00e7\u00e3o. Pode-se considerar as seguintes funcionalidades principais:<strong> <\/strong><\/p>\n<p lang=\"en-US\">\n<p lang=\"en-US\"><strong>Pooling de conex\u00f5es (Aglomerador de conex\u00f5es)<\/strong><\/p>\n<ul>\n<li>Mant\u00e9m conex\u00f5es abertas com o servidor PostgreSQL, reutilizando-as para novas conex\u00f5es com as mesmas propriedades.<\/li>\n<li>Reduz o overhead causado pela abertura de novos processos (fork) no servidor PostgreSQL.<\/li>\n<\/ul>\n<p><a href=\"http:\/\/blogs.dextra.com.br\/wp-content\/uploads\/2011\/01\/2.gif\"><img loading=\"lazy\" decoding=\"async\" title=\"2\" src=\"http:\/\/blogs.dextra.com.br\/wp-content\/uploads\/2011\/01\/2.gif\" alt=\"\" width=\"527\" height=\"328\" \/><\/a><\/p>\n<p><strong><em>Fonte:<\/em><\/strong><em> Pgpool Global Development Group<\/em><\/p>\n<p>As conex\u00f5es s\u00e3o fechadas entre o usu\u00e1rio e o Pgpool-II. O usu\u00e1rio devolve a conex\u00e3o ao pool, mas as mesmas persistem no servidor de banco de dados para reutiliza\u00e7\u00e3o:<\/p>\n<p><a href=\"http:\/\/blogs.dextra.com.br\/wp-content\/uploads\/2011\/01\/3.gif\"><img loading=\"lazy\" decoding=\"async\" title=\"3\" src=\"http:\/\/blogs.dextra.com.br\/wp-content\/uploads\/2011\/01\/3.gif\" alt=\"\" width=\"515\" height=\"262\" \/><\/a><\/p>\n<p><strong><em>Fonte:<\/em><\/strong><em> Pgpool Global Development Group<\/em><\/p>\n<p><strong>Replica\u00e7\u00e3o<\/strong><\/p>\n<p>Permite o envio de todas as opera\u00e7\u00f5es para todos os servidores PostgreSQL envolvidos.<strong> <\/strong><\/p>\n<p><strong>Balanceamento de carga<\/strong><\/p>\n<p>Distribui consultas de forma aleat\u00f3ria entre os servidores PostgreSQL envolvidos.<\/p>\n<p><a href=\"http:\/\/blogs.dextra.com.br\/wp-content\/uploads\/2011\/01\/4.gif\"><img loading=\"lazy\" decoding=\"async\" title=\"4\" src=\"http:\/\/blogs.dextra.com.br\/wp-content\/uploads\/2011\/01\/4.gif\" alt=\"\" width=\"541\" height=\"252\" \/><\/a><\/p>\n<p><strong><em>Fonte:<\/em><\/strong><em> Pgpool Global Development Group<\/em><\/p>\n<p lang=\"en-US\"><strong>Consultas paralelas<\/strong><\/p>\n<p lang=\"en-US\">Particiona tabelas entre os servidores envolvidos, possibilitando a execu\u00e7\u00e3o de consultas ao mesmo tempo sobre conjuntos diferentes de dados.A funcionalidade de replica\u00e7\u00e3o do Pgpool-II n\u00e3o oferece a consist\u00eancia necess\u00e1ria para a maioria das aplica\u00e7\u00f5es. O modelo de replica\u00e7\u00e3o \u00e9 conhecido como Dual-master, sendo baseado em comandos. Desta forma os comandos s\u00e3o executados em cada servidor, tornando poss\u00edvel a exist\u00eancia de bases de dados com informa\u00e7\u00f5es diferentes quando utilizadas fun\u00e7\u00f5es que retiram informa\u00e7\u00f5es do servidor. Por exemplo: now() e random().<\/p>\n<p>A paraleliza\u00e7\u00e3o de consultas n\u00e3o \u00e9 o foco deste artigo, mais informa\u00e7\u00f5es sobre estas funcionalidades est\u00e3o dispon\u00edveis no site do projeto <a href=\"http:\/\/pgpool.projects.postgresql.org\/\">http:\/\/pgpool.projects.postgresql.org\/<\/a>.<\/p>\n<p>Para o ambiente em quest\u00e3o utiliza-se apenas as f\u00fcncionalidades de pool de conex\u00f5es e balanceamento de carga.<\/p>\n<p><strong>A vers\u00e3o 3.0 do Pgpool-II prov\u00ea a este ambiente, as seguintes caracter\u00edsticas:<\/strong><\/p>\n<ul>\n<li>Failover autom\u00e1tico atrav\u00e9s da detec\u00e7\u00e3o de falha no processo monitor do Pgpool-II e execu\u00e7\u00e3o de comando definido no par\u00e2metro <em><strong>failover_command<\/strong><\/em>;<\/li>\n<li>Modo de balanceamento Master\/Slave espec\u00edfico para Streaming Replication;<\/li>\n<li>Interpreta\u00e7\u00e3o de comandos (<em>parser<\/em>) para distinguir comandos de altera\u00e7\u00e3o e consultas;<\/li>\n<li>Verifica\u00e7\u00e3o do atraso do servidor slave em rela\u00e7\u00e3o ao master. Caso o atraso exceda o valor definido no par\u00e2metro <em><strong>delay_threshold<\/strong><\/em>, as consultas s\u00f3 ser\u00e3o enviadas ao servidor master;<\/li>\n<li>Possibilidade de adi\u00e7\u00e3o de servidores slaves sem reiniciar o servi\u00e7o do Pgpool.<\/li>\n<\/ul>\n<p><a href=\"http:\/\/blogs.dextra.com.br\/wp-content\/uploads\/2011\/01\/5.gif\"><img loading=\"lazy\" decoding=\"async\" title=\"5\" src=\"http:\/\/blogs.dextra.com.br\/wp-content\/uploads\/2011\/01\/5.gif\" alt=\"\" width=\"539\" height=\"265\" \/><\/a><\/p>\n<p>Para que o pr\u00f3prio servidor do Pgpool-II n\u00e3o seja um ponto \u00fanico de falha, pode-se configurar uma r\u00e9plica do servidor. O script <strong>pgpool-HA<\/strong> \u00e9 um recurso do software Heartbeat que pode garantir o servi\u00e7o do Pgpool-II sempre ativo independente do servidor.<\/p>\n<p>A ferramenta web <strong>Pgpooladmin<\/strong> pode auxiliar na administra\u00e7\u00e3o das funcionalidades do Pgpool-II. Instalada no pr\u00f3prio servidor do Pgpool-II ela facilita tarefas de monitoramento, administra\u00e7\u00e3o do processo e altera\u00e7\u00f5es na configura\u00e7\u00e3o. Estas ferramentas auxiliares est\u00e3o dispon\u00edveis no site do projeto <a href=\"http:\/\/pgfoundry.org\/projects\/pgpool\/\">http:\/\/pgfoundry.org\/projects\/pgpool\/<\/a>.<\/p>\n<p><em>A an\u00e1lise de ferramentas de alta disponilidade e desempenho para servidores PostgreSQL \u00e9 o foco do <\/em><a href=\"http:\/\/www.dextra.com.br\/servicos\/treinamento\/pg\/postgres-alta-disponibilidade.htm\"><em>Treinamento PostgreSQL Alta disponibilidade<\/em><\/a><em>, promovido pela Dextra Sistemas. Este e outros ambientes s\u00e3o configurados pelos pr\u00f3prios alunos durante treinamento, visando capacitar o aluno na escolha e implanta\u00e7\u00e3o da tecnologia adequada em ambientes corporativos. <\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Com o novo modelo de replica\u00e7\u00e3o do PostgreSQL, torna-se vi\u00e1vel a utiliza\u00e7\u00e3o de balanceamento de carga nas opera\u00e7\u00f5es de leitura, uma vez que os servidores de conting\u00eancia permanecem em modo read-only (Hot Standby). At\u00e9 a vers\u00e3o 8.4, o balanceamento de carga s\u00f3 era poss\u00edvel se utilizado juntamente com ferramentas de replica\u00e7\u00e3o de terceiros, por exemplo [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[91],"tags":[32,138,139],"class_list":["post-248","post","type-post","status-publish","format-standard","hentry","category-banco-de-dados","tag-disponibilidade","tag-postgres","tag-replica"],"_links":{"self":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/248","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=248"}],"version-history":[{"count":1,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/248\/revisions"}],"predecessor-version":[{"id":249,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/248\/revisions\/249"}],"wp:attachment":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=248"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=248"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=248"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}